فهرست منبع

Fixed azure floating ip deletion

Nuwan Goonasekera 8 سال پیش
والد
کامیت
bd9a3ae7dd
3فایلهای تغییر یافته به همراه26 افزوده شده و 33 حذف شده
  1. 18 13
      cloudbridge/cloud/providers/azure/azure_client.py
  2. 6 18
      cloudbridge/cloud/providers/azure/resources.py
  3. 2 2
      test/test_network_service.py

+ 18 - 13
cloudbridge/cloud/providers/azure/azure_client.py

@@ -12,8 +12,15 @@ from azure.storage.blob import BlobPermissions
 from azure.storage.blob import BlockBlobService
 from azure.storage.table import TableService
 
+from . import helpers as azure_helpers
+
 log = logging.getLogger(__name__)
 
+PUBLIC_IP_RESOURCE_ID = '/subscriptions/{subscriptionId}/resourceGroups' \
+                        '/{resourceGroupName}/providers/Microsoft.Network' \
+                        '/publicIPAddresses/{publicIpAddressName}'
+PUBLIC_IP_NAME = 'publicIpAddressName'
+
 
 class AzureClient(object):
     """
@@ -275,10 +282,17 @@ class AzureClient(object):
                              public_ip_name,
                              public_ip_parameters).result()
 
-    def delete_floating_ip(self, public_ip_address_name):
-        return self.network_management_client.public_ip_addresses. \
-            delete(self.resource_group,
-                   public_ip_address_name).result()
+    def get_floating_ip(self, name):
+        return self.network_management_client. \
+            public_ip_addresses.get(self.resource_group, name)
+
+    def delete_floating_ip(self, public_ip_id):
+        url_params = azure_helpers.parse_url(PUBLIC_IP_RESOURCE_ID,
+                                             public_ip_id)
+        public_ip_name = url_params.get(PUBLIC_IP_NAME)
+        self.network_management_client. \
+            public_ip_addresses.delete(self.resource_group,
+                                       public_ip_name).wait()
 
     def list_floating_ips(self):
         return self.network_management_client.public_ip_addresses.list(
@@ -457,15 +471,6 @@ class AzureClient(object):
     def create_nic(self, nic_name, params):
         return self.update_nic(nic_name, params)
 
-    def get_public_ip(self, name):
-        return self.network_management_client. \
-            public_ip_addresses.get(self.resource_group, name)
-
-    def delete_public_ip(self, public_ip_name):
-        self.network_management_client. \
-            public_ip_addresses.delete(self.resource_group,
-                                       public_ip_name).wait()
-
     def create_public_key(self, entity):
         return self.table_service. \
             insert_or_replace_entity(self.public_key_storage_table_name,

+ 6 - 18
cloudbridge/cloud/providers/azure/resources.py

@@ -34,9 +34,6 @@ NETWORK_INTERFACE_RESOURCE_ID = '/subscriptions/{subscriptionId}/' \
                                 'resourceGroups/{resourceGroupName}' \
                                 '/providers/Microsoft.Network/' \
                                 'networkInterfaces/{networkInterfaceName}'
-PUBLIC_IP_RESOURCE_ID = '/subscriptions/{subscriptionId}/resourceGroups' \
-                        '/{resourceGroupName}/providers/Microsoft.Network' \
-                        '/publicIPAddresses/{publicIpAddressName}'
 SUBNET_RESOURCE_ID = '/subscriptions/{subscriptionId}/resourceGroups/' \
                      '{resourceGroupName}/providers/Microsoft.Network' \
                      '/virtualNetworks/{virtualNetworkName}/subnets' \
@@ -61,7 +58,6 @@ INSTANCE_RESOURCE_ID = '/subscriptions/{subscriptionId}/resourceGroups/' \
 
 NETWORK_NAME = 'virtualNetworkName'
 NETWORK_INTERFACE_NAME = 'networkInterfaceName'
-PUBLIC_IP_NAME = 'publicIpAddressName'
 IMAGE_NAME = 'imageName'
 VM_NAME = 'vmName'
 VOLUME_NAME = 'diskName'
@@ -1008,7 +1004,7 @@ class AzureFloatingIPContainer(BaseFloatingIPContainer):
     def get(self, fip_id):
         log.debug("Getting Azure Floating IP container with the id: %s",
                   fip_id)
-        fip = [fip for fip in self.list() if fip.id == fip_id]
+        fip = [fip for fip in self if fip.id == fip_id]
         return fip[0] if fip else None
 
     def list(self, limit=None, marker=None):
@@ -1063,12 +1059,7 @@ class AzureFloatingIP(BaseFloatingIP):
         """
         Delete an existing floating ip.
         """
-        try:
-            self._provider.azure_client.delete_floating_ip(self.id)
-            return True
-        except CloudError as cloud_error:
-            log.exception(cloud_error.message)
-            return False
+        self._provider.azure_client.delete_floating_ip(self.id)
 
     def refresh(self):
         net = self._provider.networking.networks.get(self._network_id)
@@ -1277,13 +1268,10 @@ class AzureInstance(BaseInstance):
                 for ip_config in nic.ip_configurations:
                     self._private_ips.append(ip_config.private_ip_address)
                     if ip_config.public_ip_address:
-                        url_params = azure_helpers.\
-                            parse_url(PUBLIC_IP_RESOURCE_ID,
-                                      ip_config.public_ip_address.id)
-                        public_ip_name = url_params.get(PUBLIC_IP_NAME)
                         public_ip = self._provider.azure_client.\
-                            get_public_ip(public_ip_name)
-                        self._public_ip_ids.append(public_ip_name)
+                            get_floating_ip(ip_config.public_ip_address.id)
+                        self._public_ip_ids.append(
+                            ip_config.public_ip_address.id)
                         self._public_ips.append(public_ip.ip_address)
 
     @property
@@ -1365,7 +1353,7 @@ class AzureInstance(BaseInstance):
         for nic_id in self._nic_ids:
             self._provider.azure_client.delete_nic(nic_id)
         for public_ip_id in self._public_ip_ids:
-            self._provider.azure_client.delete_public_ip(public_ip_id)
+            self._provider.azure_client.delete_floating_ip(public_ip_id)
         for data_disk in self._vm.storage_profile.data_disks:
             if data_disk.managed_disk:
                 disk_params = azure_helpers.\

+ 2 - 2
test/test_network_service.py

@@ -98,6 +98,8 @@ class CloudNetworkServiceTestCase(ProviderTestBase):
                            "cb_crudsubnet", create_subnet, cleanup_subnet)
 
     def test_crud_floating_ip(self):
+        net, gw = helpers.get_test_gateway(
+            self.provider, 'cb_crudfipgw-{0}'.format(helpers.get_uuid()))
 
         def create_fip(name):
             fip = gw.floating_ips.create()
@@ -106,8 +108,6 @@ class CloudNetworkServiceTestCase(ProviderTestBase):
         def cleanup_fip(fip):
             gw.floating_ips.delete(fip.id)
 
-        net, gw = helpers.get_test_gateway(
-            self.provider, 'cb_crudfipgw-{0}'.format(helpers.get_uuid()))
         with helpers.cleanup_action(
                 lambda: helpers.delete_test_gateway(net, gw)):
             sit.check_crud(self, gw.floating_ips, FloatingIP,