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

Initialize connections lazily for faster startup.

nuwan_ag 10 лет назад
Родитель
Сommit
b1a220d3bf

+ 15 - 3
cloudbridge/cloud/providers/aws/impl.py

@@ -37,9 +37,9 @@ class AWSCloudProvider(BaseCloudProvider):
         self.ec2_port = self._get_config_value('ec2_port', '')
         self.ec2_conn_path = self._get_config_value('ec2_port', '/')
 
-        # Create a connection object
-        self.ec2_conn = self._connect_ec2()
-        self.s3_conn = self._connect_s3()
+        # service connections, lazily initialized
+        self._ec2_conn = None
+        self._s3_conn = None
 
         # Initialize provider services
         self._compute = AWSComputeService(self)
@@ -47,6 +47,18 @@ class AWSCloudProvider(BaseCloudProvider):
         self._block_store = AWSBlockStoreService(self)
         self._object_store = AWSObjectStoreService(self)
 
+    @property
+    def ec2_conn(self):
+        if not self._ec2_conn:
+            self._ec2_conn = self._connect_ec2()
+        return self._ec2_conn
+
+    @property
+    def s3_conn(self):
+        if not self._s3_conn:
+            self._s3_conn = self._connect_s3()
+        return self._s3_conn
+
     @property
     def account(self):
         raise NotImplementedError(

+ 38 - 5
cloudbridge/cloud/providers/openstack/impl.py

@@ -26,6 +26,7 @@ class OpenStackCloudProvider(BaseCloudProvider):
     def __init__(self, config):
         super(OpenStackCloudProvider, self).__init__(config)
 
+        # Initialize cloud connection fields
         self.username = self._get_config_value(
             'username', os.environ.get('OS_USERNAME', None))
         self.password = self._get_config_value(
@@ -37,17 +38,49 @@ class OpenStackCloudProvider(BaseCloudProvider):
         self.region_name = self._get_config_value(
             'region_name', os.environ.get('OS_REGION_NAME', None))
 
-        self.nova = self._connect_nova()
-        self.keystone = self._connect_keystone()
-        self.cinder = self._connect_cinder()
-        self.swift = self._connect_swift()
-        self.neutron = self._connect_neutron()
+        # service connections, lazily initialized
+        self._nova = None
+        self._keystone = None
+        self._cinder = None
+        self._swift = None
+        self._neutron = None
 
+        # Initialize provider services
         self._compute = OpenStackComputeService(self)
         self._security = OpenStackSecurityService(self)
         self._block_store = OpenStackBlockStoreService(self)
         self._object_store = OpenStackObjectStoreService(self)
 
+    @property
+    def nova(self):
+        if not self._nova:
+            self._nova = self._connect_nova()
+        return self._nova
+
+    @property
+    def keystone(self):
+        if not self._keystone:
+            self._keystone = self._connect_keystone()
+        return self._keystone
+
+    @property
+    def cinder(self):
+        if not self._cinder:
+            self._cinder = self._connect_cinder()
+        return self._cinder
+
+    @property
+    def swift(self):
+        if not self._swift:
+            self._swift = self._connect_swift()
+        return self._swift
+
+    @property
+    def neutron(self):
+        if not self._neutron:
+            self._neutron = self._connect_neutron()
+        return self._neutron
+
     @property
     def account(self):
         raise NotImplementedError(