Просмотр исходного кода

OpenStack Firewall find & network association fixed

almahmoud 7 лет назад
Родитель
Сommit
5328b65db9

+ 14 - 0
cloudbridge/cloud/base/services.py

@@ -80,6 +80,20 @@ class BaseVMFirewallService(
     def __init__(self, provider):
         super(BaseVMFirewallService, self).__init__(provider)
 
+    def find(self, **kwargs):
+        obj_list = self
+        filters = ['label']
+        matches = cb_helpers.generic_find(filters, kwargs, obj_list)
+
+        # All kwargs should have been popped at this time.
+        if len(kwargs) > 0:
+            raise TypeError("Unrecognised parameters for search: %s."
+                            " Supported attributes: %s" % (kwargs,
+                                                           ", ".join(filters)))
+
+        return ClientPagedResultList(self.provider,
+                                     matches if matches else [])
+
 
 class BaseStorageService(StorageService, BaseCloudService):
 

+ 0 - 14
cloudbridge/cloud/providers/azure/services.py

@@ -109,20 +109,6 @@ class AzureVMFirewallService(BaseVMFirewallService):
         cb_fw = AzureVMFirewall(self.provider, fw)
         return cb_fw
 
-    def find(self, **kwargs):
-        obj_list = self
-        filters = ['label']
-        matches = cb_helpers.generic_find(filters, kwargs, obj_list)
-
-        # All kwargs should have been popped at this time.
-        if len(kwargs) > 0:
-            raise TypeError("Unrecognised parameters for search: %s."
-                            " Supported attributes: %s" % (kwargs,
-                                                           ", ".join(filters)))
-
-        return ClientPagedResultList(self.provider,
-                                     matches if matches else [])
-
     def delete(self, group_id):
         self.provider.azure_client.delete_vm_firewall(group_id)
 

+ 5 - 0
cloudbridge/cloud/providers/openstack/resources.py

@@ -1221,6 +1221,11 @@ class OpenStackVMFirewall(BaseVMFirewall):
         net_id = self._description\
                      .split(" [{}".format(self._network_id_tag))[-1]\
                      .split(']')[0]
+        # We generally mandate a network to be associated with a firewall,
+        # however because of some networking specificity in Nectar, we must
+        # allow None value as well, which will parse here as an empty string
+        if not net_id:
+            return None
         return net_id
 
     @property

+ 7 - 16
cloudbridge/cloud/providers/openstack/services.py

@@ -218,30 +218,21 @@ class OpenStackVMFirewallService(BaseVMFirewallService):
                   "[label: %s network id: %s description: %s]", label,
                   network, description)
         net = network.id if isinstance(network, Network) else network
+        # We generally mandate a network to be associated with a firewall,
+        # however because of some networking specificity in Nectar, we must
+        # allow None value as well
+        if not net:
+            net = ""
         if not description:
             description = ""
-        description += "[{}{}]".format(OpenStackVMFirewall._network_id_tag,
-                                       net)
+        description += " [{}{}]".format(OpenStackVMFirewall._network_id_tag,
+                                        net)
         sg = self.provider.os_conn.network.create_security_group(
             name=label, description=description or label)
         if sg:
             return OpenStackVMFirewall(self.provider, sg)
         return None
 
-    def find(self, **kwargs):
-        label = kwargs.pop('label', None)
-
-        # All kwargs should have been popped at this time.
-        if len(kwargs) > 0:
-            raise TypeError("Unrecognised parameters for search: %s."
-                            " Supported attributes: %s" % (kwargs, 'label'))
-
-        log.debug("Searching for %s", label)
-        sgs = [self.provider.os_conn.network.find_security_group(label)]
-        results = [OpenStackVMFirewall(self.provider, sg)
-                   for sg in sgs if sg]
-        return ClientPagedResultList(self.provider, results)
-
     def delete(self, group_id):
         log.debug("Deleting OpenStack Firewall with the id: %s", group_id)
         firewall = self.get(group_id)