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

Refactor zone name handling and fix os zone default

Nuwan Goonasekera 6 лет назад
Родитель
Сommit
640eb02286

+ 2 - 3
cloudbridge/base/provider.py

@@ -99,9 +99,8 @@ class BaseCloudProvider(CloudProvider):
     @property
     def zone_name(self):
         if not self._zone_name:
-            region = self.compute.regions.get(self.region_name)
-            # TODO: Default zone
-            zone = next(iter(region.zones))
+            region = self.compute.regions.current
+            zone = region.default_zone
             self._zone_name = zone.name if zone else None
         return self._zone_name
 

+ 4 - 0
cloudbridge/base/resources.py

@@ -674,6 +674,10 @@ class BaseRegion(BaseCloudResource, Region):
         js['zones'] = [z.id for z in self.zones]
         return js
 
+    @property
+    def default_zone(self):
+        return next(iter(self.zones))
+
 
 class BaseBucketObject(BaseCloudResource, BucketObject):
 

+ 0 - 8
cloudbridge/providers/openstack/provider.py

@@ -321,14 +321,6 @@ class OpenStackCloudProvider(BaseCloudProvider):
                                      session=self._keystone_session,
                                      region_name=self.region_name)
 
-    @property
-    def zone_name(self):
-        if not self._zone_name:
-            region = self.compute.regions.get(self.region_name)
-            zone = next(iter(region.zones))
-            self._zone_name = zone.name if zone else None
-        return self._zone_name
-
     def service_zone_name(self, service):
         service_name = service._service_event_pattern
         if ("networking" in service_name and

+ 8 - 4
cloudbridge/providers/openstack/services.py

@@ -649,14 +649,18 @@ class OpenStackComputeService(BaseComputeService):
 
     def __init__(self, provider):
         super(OpenStackComputeService, self).__init__(provider)
-        # pylint:disable=protected-access
-        self.service_zone_name = self.provider._get_config_value(
-            'os_compute_zone_name', cb_helpers.get_env(
-                'OS_COMPUTE_ZONE_NAME', self.provider.zone_name))
         self._vm_type_svc = OpenStackVMTypeService(self.provider)
         self._instance_svc = OpenStackInstanceService(self.provider)
         self._region_svc = OpenStackRegionService(self.provider)
         self._images_svc = OpenStackImageService(self.provider)
+        # Region service must be defined before invoking the following
+        # pylint:disable=protected-access
+        self.service_zone_name = self.provider._get_config_value(
+            'os_compute_zone_name',
+            cb_helpers.get_env(
+                'OS_COMPUTE_ZONE_NAME',
+                self.provider._zone_name or
+                self.regions.current.default_zone.name))
 
     @property
     def images(self):