Jelajahi Sumber

Add additional connection options for OpenStack Swift service

Enis Afgan 10 tahun lalu
induk
melakukan
a2b3c9bded
2 mengubah file dengan 40 tambahan dan 3 penghapusan
  1. 21 3
      cloudbridge/cloud/providers/openstack/provider.py
  2. 19 0
      docs/topics/setup.rst

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

@@ -41,6 +41,23 @@ class OpenStackCloudProvider(BaseCloudProvider):
             'os_auth_url', os.environ.get('OS_AUTH_URL', None))
         self.region_name = self._get_config_value(
             'os_region_name', os.environ.get('OS_REGION_NAME', None))
+        # Allow individual service connections to have their own values but
+        # default to a the ones defined above.
+        self.swift_username = self._get_config_value(
+            'os_swift_username',
+            os.environ.get('OS_SWIFT_USERNAME', self.username))
+        self.swift_password = self._get_config_value(
+            'os_swift_password',
+            os.environ.get('OS_SWIFT_PASSWORD', self.password))
+        self.swift_tenant_name = self._get_config_value(
+            'os_swift_tenant_name',
+            os.environ.get('OS_SWIFT_TENANT_NAME', self.tenant_name))
+        self.swift_auth_url = self._get_config_value(
+            'os_swift_auth_url',
+            os.environ.get('OS_SWIFT_AUTH_URL', self.auth_url))
+        self.swift_region_name = self._get_config_value(
+            'os_swift_region_name',
+            os.environ.get('OS_SWIFT_REGION_NAME', self.region_name))
 
         # service connections, lazily initialized
         self._nova = None
@@ -180,10 +197,11 @@ class OpenStackCloudProvider(BaseCloudProvider):
         """
         Get an openstack swift client object for the given cloud.
         """
-        os_options = {'region_name': self.region_name}
+        os_options = {'region_name': self.swift_region_name}
         return swift_client.Connection(
-            authurl=self.auth_url, auth_version='2', user=self.username,
-            key=self.password, tenant_name=self.tenant_name,
+            authurl=self.swift_auth_url, auth_version='2',
+            user=self.swift_username, key=self.swift_password,
+            tenant_name=self.swift_tenant_name,
             os_options=os_options)
 
     def _connect_neutron(self):

+ 19 - 0
docs/topics/setup.rst

@@ -32,6 +32,25 @@ OS_TENANT_NAME
 OS_REGION_NAME
 ===================  ==================
 
+If you'd like, you can specify service-specific variables for OpenStack.
+This can be used to create a multi-cloud provider object for example where
+the compute service is using one cloud while the object store service uses
+another. This can be useful is a given cloud does not supply all the desired
+services. If these variables are not supplied, the default ones from above
+are used across all OpenStack services.
+
+=================================== ==============
+Optional service-specific variables Example values
+----------------------------------- --------------
+Swift service
+==================================================
+OS_SWIFT_AUTH_URL                   https://keystone.rc.nectar.org.au:5000/v2.0/
+OS_SWIFT_USERNAME                   your.name@example.com
+OS_SWIFT_PASSWORD                   GcsGgcbsdilcbUIYGcsdc
+OS_SWIFT_REGION_NAME                RegionOne
+OS_SWIFT_TENANT_NAME                GalaxyProject
+=================================== ==============
+
 
 Once the environment variables are set, you can create a connection as follows: