Parcourir la source

Fixed authenticate() to work with boto3

Nuwan Goonasekera il y a 8 ans
Parent
commit
82c2a3a69c

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

@@ -9,7 +9,6 @@ try:
     from moto import mock_ec2
     from moto import mock_s3
 except ImportError:
-    # TODO: Once library logging is configured, change this
     log.debug('[aws provider] moto library not available!')
 
 from cloudbridge.cloud.base import BaseCloudProvider
@@ -44,13 +43,11 @@ class AWSCloudProvider(BaseCloudProvider):
                 'aws_session_token', None)
         }
         self.ec2_cfg = {
-            'service_name': 'ec2',
             'use_ssl': self._get_config_value('ec2_is_secure', True),
             'verify': self._get_config_value('ec2_validate_certs', True),
             'endpoint_url': self._get_config_value('ec2_endpoint_url', None)
         }
         self.s3_cfg = {
-            'service_name': 's3',
             'use_ssl': self._get_config_value('s3_is_secure', True),
             'verify': self._get_config_value('s3_validate_certs', True),
             'endpoint_url': self._get_config_value('s3_endpoint_url', None)
@@ -75,7 +72,8 @@ class AWSCloudProvider(BaseCloudProvider):
         if not self._session:
             if self.config.debug_mode:
                 boto3.set_stream_logger(level=log.DEBUG)
-            self._session = boto3.session.Session(**self.session_cfg)
+            self._session = boto3.session.Session(
+                region_name=self.region_name, **self.session_cfg)
         return self._session
 
     @property
@@ -118,12 +116,13 @@ class AWSCloudProvider(BaseCloudProvider):
 
     def _conect_ec2_region(self, region_name=None):
         '''Get an EC2 resource object'''
-        return self.session.resource(region_name=region_name,
-                                     **self.ec2_cfg)
+        return self.session.resource(
+            'ec2', region_name=region_name, **self.ec2_cfg)
 
     def _connect_s3(self):
         '''Get an S3 resource object'''
-        return self.session.resource(**self.s3_cfg)
+        return self.session.resource(
+            's3', region_name=self.region_name, **self.s3_cfg)
 
 
 class MockAWSCloudProvider(AWSCloudProvider, TestMockHelperMixin):

+ 2 - 5
cloudbridge/cloud/providers/aws/services.py

@@ -93,11 +93,8 @@ class GenericServiceFilter(object):
 
     def list(self, limit=None, marker=None):
         '''Returns a list of resources'''
-        try:
-            objs = [self.iface(self.provider, obj)
-                    for obj in self.service.limit(limit)]
-        except ClientError:
-            objs = list()
+        objs = [self.iface(self.provider, obj)
+                for obj in self.service.limit(limit)]
         return ClientPagedResultList(self.provider, objs,
                                      limit=limit, marker=marker)
 

+ 10 - 9
test/test_interface.py

@@ -51,15 +51,16 @@ class CloudInterfaceTestCase(ProviderTestBase):
                 "Mock providers are not expected to"
                 " authenticate correctly")
 
-        cloned_provider = CloudProviderFactory().create_provider(
-            self.provider.PROVIDER_ID, self.provider.config)
+        # Mock up test by clearing credentials on a per provider basis
+        cloned_config = self.provider.config.copy()
+        if self.provider.PROVIDER_ID == 'aws':
+            cloned_config['aws_access_key'] = "dummy_a_key"
+            cloned_config['aws_secret_key'] = "dummy_s_key"
+        elif self.provider.PROVIDER_ID == 'openstack':
+            cloned_config['os_username'] = "cb_dummy"
+            cloned_config['os_password'] = "cb_dummy"
 
         with self.assertRaises(ProviderConnectionException):
-            # Mock up test by clearing credentials on a per provider basis
-            if cloned_provider.PROVIDER_ID == 'aws':
-                cloned_provider.a_key = "dummy_a_key"
-                cloned_provider.s_key = "dummy_s_key"
-            elif cloned_provider.PROVIDER_ID == 'openstack':
-                cloned_provider.username = "cb_dummy"
-                cloned_provider.password = "cb_dummy"
+            cloned_provider = CloudProviderFactory().create_provider(
+                self.provider.PROVIDER_ID, cloned_config)
             cloned_provider.authenticate()