Jelajahi Sumber

Merge pull request #231 from almahmoud/fix_cl_jan_20

Accepting dict for zone_name (for CL
Nuwan Goonasekera 6 tahun lalu
induk
melakukan
ce00885d80
2 mengubah file dengan 35 tambahan dan 10 penghapusan
  1. 10 1
      cloudbridge/base/provider.py
  2. 25 9
      cloudbridge/providers/openstack/provider.py

+ 10 - 1
cloudbridge/base/provider.py

@@ -1,4 +1,5 @@
 """Base implementation of a provider interface."""
+import ast
 import functools
 import logging
 import os
@@ -102,7 +103,15 @@ class BaseCloudProvider(CloudProvider):
             region = self.compute.regions.current
             zone = region.default_zone
             self._zone_name = zone.name if zone else None
-        return self._zone_name
+            return self._zone_name
+        else:
+            try:
+                zone_dict = ast.literal_eval(self._zone_name)
+                if isinstance(zone_dict, dict):
+                    return zone_dict
+            except (ValueError, SyntaxError):
+                pass
+            return self._zone_name
 
     @property
     def config(self):

+ 25 - 9
cloudbridge/providers/openstack/provider.py

@@ -290,13 +290,29 @@ class OpenStackCloudProvider(BaseCloudProvider):
 
     def service_zone_name(self, service):
         service_name = service._service_event_pattern
-        if "networking" in service_name and self.networking.service_zone_name:
-            return self.networking.service_zone_name
-        elif "security" in service_name and self.security.service_zone_name:
-            return self.security.service_zone_name
-        elif "compute" in service_name and self.compute.service_zone_name:
-            return self.compute.service_zone_name
-        elif "storage" in service_name and self.storage.service_zone_name:
-            return self.storage.service_zone_name
-        else:
+        if "networking" in service_name:
+            if self.networking.service_zone_name:
+                return self.networking.service_zone_name
+            elif isinstance(self.zone_name, dict) and self.zone_name.get("networking_zone"):
+                return self.zone_name.get("networking_zone")
+        elif "security" in service_name:
+            if self.security.service_zone_name:
+                return self.security.service_zone_name
+            elif isinstance(self.zone_name, dict) and self.zone_name.get("security_zone"):
+                return self.zone_name.get("security_zone")
+        elif "compute" in service_name:
+            if self.compute.service_zone_name:
+                return self.compute.service_zone_name
+            elif isinstance(self.zone_name, dict) and self.zone_name.get("compute_zone"):
+                return self.zone_name.get("compute_zone")
+        elif "storage" in service_name:
+            if self.storage.service_zone_name:
+                return self.storage.service_zone_name
+            elif isinstance(self.zone_name, dict) and self.zone_name.get("storage_zone"):
+                return self.zone_name.get("storage_zone")
+        elif isinstance(self.zone_name, dict) and self.zone_name.get("default_zone"):
+                return self.zone_name.get("default_zone")
+        elif isinstance(self.zone_name, str):
             return self.zone_name
+        else:
+            return None