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

Merge branch 'master' of https://github.com/gvlproject/cloudbridge

# Conflicts:
#	setup.py
Nuwan Goonasekera 10 лет назад
Родитель
Сommit
56d3eb7871

+ 23 - 7
cloudbridge/cloud/providers/aws/provider.py

@@ -33,13 +33,23 @@ class AWSCloudProvider(BaseCloudProvider):
             'aws_access_key', os.environ.get('AWS_ACCESS_KEY', None))
         self.s_key = self._get_config_value(
             'aws_secret_key', os.environ.get('AWS_SECRET_KEY', None))
-        self.is_secure = self._get_config_value('is_secure', True)
+        # EC2 connection fields
+        self.ec2_is_secure = self._get_config_value('ec2_is_secure', True)
         self.region_name = self._get_config_value(
             'ec2_region_name', 'us-east-1')
         self.region_endpoint = self._get_config_value(
             'ec2_region_endpoint', 'ec2.us-east-1.amazonaws.com')
-        self.ec2_port = self._get_config_value('ec2_port', '')
+        self.ec2_port = self._get_config_value('ec2_port', None)
         self.ec2_conn_path = self._get_config_value('ec2_conn_path', '/')
+        self.ec2_validate_certs = self._get_config_value(
+            'ec2_validate_certs', False)
+        # S3 connection fields
+        self.s3_is_secure = self._get_config_value('s3_is_secure', True)
+        self.s3_host = self._get_config_value('s3_host', 's3.amazonaws.com')
+        self.s3_port = self._get_config_value('s3_port', None)
+        self.s3_conn_path = self._get_config_value('s3_conn_path', '/')
+        self.s3_validate_certs = self._get_config_value(
+            's3_validate_certs', False)
 
         # service connections, lazily initialized
         self._ec2_conn = None
@@ -102,11 +112,11 @@ class AWSCloudProvider(BaseCloudProvider):
             # api_version is needed for availability
             # zone support for EC2
             api_version='2012-06-01' if self.cloud_type == 'aws' else None,
-            is_secure=self.is_secure,
+            is_secure=self.ec2_is_secure,
             region=r,
             port=self.ec2_port,
             path=self.ec2_conn_path,
-            validate_certs=False,
+            validate_certs=self.ec2_validate_certs,
             debug=2 if self.config.debug_mode else 0)
         return ec2_conn
 
@@ -121,11 +131,11 @@ class AWSCloudProvider(BaseCloudProvider):
             # api_version is needed for availability
             # zone support for EC2
             api_version='2012-06-01' if self.cloud_type == 'aws' else None,
-            is_secure=self.is_secure,
+            is_secure=self.ec2_is_secure,
             region=r,
             port=self.ec2_port,
             path=self.ec2_conn_path,
-            validate_certs=False,
+            validate_certs=self.ec2_validate_certs,
             debug=2 if self.config.debug_mode else 0)
         return vpc_conn
 
@@ -134,7 +144,13 @@ class AWSCloudProvider(BaseCloudProvider):
         Get a boto S3 connection object.
         """
         s3_conn = boto.connect_s3(aws_access_key_id=self.a_key,
-                                  aws_secret_access_key=self.s_key)
+                                  aws_secret_access_key=self.s_key,
+                                  is_secure=self.s3_is_secure,
+                                  port=self.s3_port,
+                                  host=self.s3_host,
+                                  path=self.s3_conn_path,
+                                  validate_certs=self.s3_validate_certs,
+                                  debug=2 if self.config.debug_mode else 0)
         return s3_conn
 
 

+ 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):

+ 28 - 3
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:
 
@@ -73,11 +92,17 @@ default_result_limit  Number of results that a ``.list()`` method should return.
 ====================  ==================
 Variable		      Description
 ====================  ==================
-is_secure             True to use an SSL connection. Default is ``True``.
-ec2_region_name       Default region name.
-ec2_region_endpoint   Endpoint to use. Defaults to ``us-east-1``.
+ec2_is_secure         True to use an SSL connection. Default is ``True``.
+ec2_region_name       Default region name. Defaults to ``us-east-1``.
+ec2_region_endpoint   Endpoint to use. Default is ``ec2.us-east-1.amazonaws.com``.
 ec2_port              EC2 connection port. Does not need to be specified unless EC2 service is running on an alternative port.
 ec2_conn_path	      Connection path. Defaults to ``/``.
+ec2_validate_certs     Whether to use SSL certificate verification. Default is ``False``.
+s3_is_secure          True to use an SSL connection. Default is ``True``.
+s3_host               Host connection endpoint. Default is ``s3.amazonaws.com``.
+s3_port               Host connection port. Does not need to be specified unless S3 service is running on an alternative port.
+s3_conn_path          Connection path. Defaults to ``/``.
+s3_validate_certs     Whether to use SSL certificate verification. Default is ``False``.
 ====================  ==================
 
 

+ 10 - 6
setup.py

@@ -13,13 +13,17 @@ with open(os.path.join('cloudbridge', '__init__.py')) as f:
             version = ast.literal_eval(m.group(1))
             break
 
-base_reqs = ['bunch>=1.00', 'six>=1.9.0', 'retrying']
-openstack_reqs = ['python-novaclient', 'python-glanceclient',
-                  'python-cinderclient', 'python-swiftclient',
-                  'python-neutronclient', 'python-keystoneclient>=2.0.0']
-aws_reqs = ['boto']
+base_reqs = ['bunch==1.0.1', 'six==1.10.0', 'retrying==1.3.3']
+openstack_reqs = ['python-novaclient==2.33.0',
+                  'python-glanceclient',
+                  'python-cinderclient==1.4.0',
+                  'python-swiftclient==2.6.0',
+                  'python-neutronclient==3.1.0',
+                  'python-keystoneclient==2.0.0']
+aws_reqs = ['boto==2.38.0']
 full_reqs = base_reqs + aws_reqs + openstack_reqs
-dev_reqs = ['httpretty==0.8.10', 'tox', 'moto>=0.4.18', 'sphinx'] + full_reqs
+dev_reqs = (['httpretty==0.8.10', 'tox==2.1.1', 'moto==0.4.18',
+             'sphinx==1.3.1'] + full_reqs)
 
 setup(name='cloudbridge',
       version=version,