Przeglądaj źródła

Fixed method for obtaining current region in openstack.

Nuwan Goonasekera 10 lat temu
rodzic
commit
cd4adcd512

+ 3 - 1
cloudbridge/cloud/providers/openstack/provider.py

@@ -147,11 +147,13 @@ class OpenStackCloudProvider(BaseCloudProvider):
         if self.config.debug_mode:
             nova_shell.OpenStackComputeShell().setup_debugging(True)
 
-        return nova_client.Client(
+        nova = nova_client.Client(
             api_version, username=self.username, api_key=self.password,
             project_id=self.tenant_name, auth_url=self.auth_url,
             region_name=region_name, service_name=service_name,
             http_log_debug=True if self.config.debug_mode else False)
+        nova.authenticate()
+        return nova
 
     def _connect_keystone(self):
         """

+ 1 - 1
cloudbridge/cloud/providers/openstack/resources.py

@@ -393,7 +393,7 @@ class OpenStackRegion(BaseRegion):
                 zones = []
 
         return [OpenStackPlacementZone(self._provider, z.zoneName,
-                                       self._provider.region_name)
+                                       self._os_region)
                 for z in zones]
 
 

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

@@ -470,7 +470,13 @@ class OpenStackRegionService(BaseRegionService):
 
     @property
     def current(self):
-        return self.get(self._provider.region_name)
+        nova_region = [
+            endpoint.get('region') or endpoint.get('region_id')
+            for svc in self.provider.keystone.service_catalog.get_data()
+            for endpoint in svc.get('endpoints', [])
+            if endpoint.get('publicURL', None) ==
+            self.provider.nova.client.management_url]
+        return self.get(nova_region[0])
 
 
 class OpenStackComputeService(BaseComputeService):