ソースを参照

Update floating IP refresh procedures

Enis Afgan 8 年 前
コミット
dab7b6da92

+ 1 - 6
cloudbridge/cloud/providers/aws/resources.py

@@ -1051,12 +1051,7 @@ class AWSFloatingIP(BaseFloatingIP):
         self._ip.release()
         self._ip.release()
 
 
     def refresh(self):
     def refresh(self):
-        net = self._provider.networking.networks.list()[0] # Any net will work
-        gw = self._provider.networking.gateways.get_or_create_inet_gateway(
-            net)
-        fip = gw.floating_ips.get(self.id)
-        # pylint:disable=protected-access
-        self._ip = fip._ip
+        self._ip.reload()
 
 
 
 
 class AWSRouter(BaseRouter):
 class AWSRouter(BaseRouter):

+ 1 - 1
cloudbridge/cloud/providers/azure/provider.py

@@ -41,7 +41,7 @@ class AzureCloudProvider(BaseCloudProvider):
         self.storage_account = self._get_config_value(
         self.storage_account = self._get_config_value(
             'azure_storage_account',
             'azure_storage_account',
             os.environ.get('AZURE_STORAGE_ACCOUNT',
             os.environ.get('AZURE_STORAGE_ACCOUNT',
-                           'storageacc' + self.resource_group[-12:]))
+                           'storageacc' + self.client_id[-12:]))
 
 
         self.vm_default_user_name = self._get_config_value(
         self.vm_default_user_name = self._get_config_value(
             'azure_vm_default_user_name', os.environ.get
             'azure_vm_default_user_name', os.environ.get

+ 21 - 16
cloudbridge/cloud/providers/azure/resources.py

@@ -968,8 +968,9 @@ class AzureNetwork(BaseNetwork):
 
 
 class AzureFloatingIPContainer(BaseFloatingIPContainer):
 class AzureFloatingIPContainer(BaseFloatingIPContainer):
 
 
-    def __init__(self, provider, gateway):
+    def __init__(self, provider, gateway, network_id):
         super(AzureFloatingIPContainer, self).__init__(provider, gateway)
         super(AzureFloatingIPContainer, self).__init__(provider, gateway)
+        self._network_id = network_id
 
 
     def get(self, fip_id):
     def get(self, fip_id):
         log.debug("Getting Azure Floating IP container with the id: %s",
         log.debug("Getting Azure Floating IP container with the id: %s",
@@ -978,7 +979,8 @@ class AzureFloatingIPContainer(BaseFloatingIPContainer):
         return fip[0] if fip else None
         return fip[0] if fip else None
 
 
     def list(self, limit=None, marker=None):
     def list(self, limit=None, marker=None):
-        floating_ips = [AzureFloatingIP(self._provider, floating_ip)
+        floating_ips = [AzureFloatingIP(self._provider, floating_ip,
+                                        self._network_id)
                         for floating_ip in self._provider.azure_client.
                         for floating_ip in self._provider.azure_client.
                         list_floating_ips()]
                         list_floating_ips()]
         return ClientPagedResultList(self._provider, floating_ips,
         return ClientPagedResultList(self._provider, floating_ips,
@@ -993,14 +995,15 @@ class AzureFloatingIPContainer(BaseFloatingIPContainer):
         }
         }
         floating_ip = self._provider.azure_client.\
         floating_ip = self._provider.azure_client.\
             create_floating_ip(public_ip_address_name, public_ip_parameters)
             create_floating_ip(public_ip_address_name, public_ip_parameters)
-        return AzureFloatingIP(self._provider, floating_ip)
+        return AzureFloatingIP(self._provider, floating_ip, self._network_id)
 
 
 
 
 class AzureFloatingIP(BaseFloatingIP):
 class AzureFloatingIP(BaseFloatingIP):
 
 
-    def __init__(self, provider, floating_ip):
+    def __init__(self, provider, floating_ip, network_id):
         super(AzureFloatingIP, self).__init__(provider)
         super(AzureFloatingIP, self).__init__(provider)
         self._ip = floating_ip
         self._ip = floating_ip
+        self._network_id = network_id
 
 
     @property
     @property
     def id(self):
     def id(self):
@@ -1030,16 +1033,15 @@ class AzureFloatingIP(BaseFloatingIP):
         try:
         try:
             self._provider.azure_client.delete_floating_ip(self.id)
             self._provider.azure_client.delete_floating_ip(self.id)
             return True
             return True
-        except CloudError as cloudError:
-            log.exception(cloudError.message)
+        except CloudError as cloud_error:
+            log.exception(cloud_error.message)
             return False
             return False
 
 
     def refresh(self):
     def refresh(self):
-        # TODO: Update to reflect FIP layout changes under a gateway
-        # fip = self._provider.networking.floating_ips.get(self.id)
-        # pylint:disable=protected-access
-        # self._ip = fip._ip
-        pass
+        net = self._provider.networking.networks.get(self._network_id)
+        gw = self._provider.networking.gateways.get_or_create_inet_gateway(net)
+        fip = gw.floating_ips.get(self.id)
+        self._ip = fip._ip
 
 
 
 
 class AzureRegion(BaseRegion):
 class AzureRegion(BaseRegion):
@@ -1478,7 +1480,7 @@ class AzureInstance(BaseInstance):
         if not associated any security group to NIC
         if not associated any security group to NIC
         else replacing the existing security group.
         else replacing the existing security group.
         '''
         '''
-        fw = (self._provicer.security.vm_firewalls.get(fw)
+        fw = (self._provider.security.vm_firewalls.get(fw)
               if isinstance(fw, str) else fw)
               if isinstance(fw, str) else fw)
         nic = self._provider.azure_client.get_nic(self._nic_ids[0])
         nic = self._provider.azure_client.get_nic(self._nic_ids[0])
         if not nic.network_security_group:
         if not nic.network_security_group:
@@ -1516,7 +1518,7 @@ class AzureInstance(BaseInstance):
         '''
         '''
 
 
         nic = self._provider.azure_client.get_nic(self._nic_ids[0])
         nic = self._provider.azure_client.get_nic(self._nic_ids[0])
-        fw = (self._provicer.security.vm_firewalls.get(fw)
+        fw = (self._provider.security.vm_firewalls.get(fw)
               if isinstance(fw, str) else fw)
               if isinstance(fw, str) else fw)
         if nic.network_security_group and \
         if nic.network_security_group and \
                 nic.network_security_group.id == fw.resource_id:
                 nic.network_security_group.id == fw.resource_id:
@@ -1730,13 +1732,16 @@ class AzureRouter(BaseRouter):
 
 
 
 
 class AzureInternetGateway(BaseInternetGateway):
 class AzureInternetGateway(BaseInternetGateway):
-    def __init__(self, provider, gateway):
+    def __init__(self, provider, gateway, gateway_net):
         super(AzureInternetGateway, self).__init__(provider)
         super(AzureInternetGateway, self).__init__(provider)
         self._gateway = gateway
         self._gateway = gateway
         self._name = None
         self._name = None
         self._network_id = None
         self._network_id = None
+        self._network_id = gateway_net.id if isinstance(
+            gateway_net, AzureNetwork) else gateway_net
         self._state = ''
         self._state = ''
-        self._fips_container = AzureFloatingIPContainer(provider, self)
+        self._fips_container = AzureFloatingIPContainer(
+            provider, self, self._network_id)
 
 
     @property
     @property
     def id(self):
     def id(self):
@@ -1769,7 +1774,7 @@ class AzureInternetGateway(BaseInternetGateway):
 
 
     @property
     @property
     def network_id(self):
     def network_id(self):
-        return None
+        return self._network_id
 
 
     def delete(self):
     def delete(self):
         pass
         pass

+ 6 - 3
cloudbridge/cloud/providers/azure/services.py

@@ -1054,18 +1054,21 @@ class AzureGatewayService(BaseGatewayService):
     def __init__(self, provider):
     def __init__(self, provider):
         super(AzureGatewayService, self).__init__(provider)
         super(AzureGatewayService, self).__init__(provider)
         # Singleton returned by the list method
         # Singleton returned by the list method
-        self.gateway_singleton = AzureInternetGateway(self.provider, None)
+        # TODO: Is there no notion of a an inet gateway on Azure?
+        #       This won't work with gtw association with a network
+        # self.gateway_singleton = AzureInternetGateway(self.provider, None)
 
 
     def get_or_create_inet_gateway(self, network, name=None):
     def get_or_create_inet_gateway(self, network, name=None):
         if name:
         if name:
             AzureInternetGateway.assert_valid_resource_name(name)
             AzureInternetGateway.assert_valid_resource_name(name)
-        gateway = AzureInternetGateway(self.provider, None)
+        gateway = AzureInternetGateway(self.provider, None, network)
         if name:
         if name:
             gateway.name = name
             gateway.name = name
         return gateway
         return gateway
 
 
     def list(self, limit=None, marker=None):
     def list(self, limit=None, marker=None):
-        return [self.gateway_singleton]
+        # return [self.gateway_singleton]
+        return []
 
 
     def delete(self, gateway):
     def delete(self, gateway):
         pass
         pass