Explorar o código

Fixed remaining errors in block store tests for boto3

Nuwan Goonasekera %!s(int64=8) %!d(string=hai) anos
pai
achega
66aea3ab8a

+ 2 - 2
cloudbridge/cloud/providers/aws/provider.py

@@ -46,13 +46,13 @@ class AWSCloudProvider(BaseCloudProvider):
         self.ec2_cfg = {
             'service_name': 'ec2',
             'use_ssl': self._get_config_value('ec2_is_secure', True),
-            'verify': self._get_config_value('ec2_validate_certs', False),
+            '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', False),
+            'verify': self._get_config_value('s3_validate_certs', True),
             'endpoint_url': self._get_config_value('s3_endpoint_url', None)
         }
 

+ 33 - 17
cloudbridge/cloud/providers/aws/resources.py

@@ -425,8 +425,11 @@ class AWSInstance(BaseInstance):
 
     @property
     def state(self):
-        return AWSInstance.INSTANCE_STATE_MAP.get(
-            self._ec2_instance.state['Name'], InstanceState.UNKNOWN)
+        try:
+            return AWSInstance.INSTANCE_STATE_MAP.get(
+                self._ec2_instance.state['Name'], InstanceState.UNKNOWN)
+        except AttributeError:
+            return InstanceState.UNKNOWN
 
     def refresh(self):
         """
@@ -476,7 +479,7 @@ class AWSVolume(BaseVolume):
 
         .. note:: an instance must have a (case sensitive) tag ``Name``
         """
-        for tag in self._volume.tags or list():
+        for tag in self._volume.tags or []:
             if tag.get('Key') == 'Name':
                 return tag.get('Value')
         return None
@@ -492,7 +495,7 @@ class AWSVolume(BaseVolume):
 
     @property
     def description(self):
-        for tag in self._volume.tags or list():
+        for tag in self._volume.tags or []:
             if tag.get('Key') == 'Description':
                 return tag.get('Value')
         return None
@@ -524,10 +527,10 @@ class AWSVolume(BaseVolume):
     def attachments(self):
         return [
             BaseAttachmentInfo(self,
-                               a.InstanceId,
-                               a.Device)
+                               a.get('InstanceId'),
+                               a.get('Device'))
             for a in self._volume.attachments
-        ] if self._volume.attachments else None
+        ][0] if self._volume.attachments else None
 
     def attach(self, instance, device):
         """
@@ -543,7 +546,8 @@ class AWSVolume(BaseVolume):
         """
         Detach this volume from an instance.
         """
-        for a in self.attachments:
+        a = self.attachments
+        if a:
             self._volume.detach_from_instance(
                 InstanceId=a.instance_id,
                 Device=a.device,
@@ -568,8 +572,11 @@ class AWSVolume(BaseVolume):
 
     @property
     def state(self):
-        return AWSVolume.VOLUME_STATE_MAP.get(
-            self._volume.state, VolumeState.UNKNOWN)
+        try:
+            return AWSVolume.VOLUME_STATE_MAP.get(
+                self._volume.state, VolumeState.UNKNOWN)
+        except AttributeError:
+            return VolumeState.UNKNOWN
 
     def refresh(self):
         """
@@ -650,8 +657,11 @@ class AWSSnapshot(BaseSnapshot):
 
     @property
     def state(self):
-        return AWSSnapshot.SNAPSHOT_STATE_MAP.get(
-            self._snapshot.state, SnapshotState.UNKNOWN)
+        try:
+            return AWSSnapshot.SNAPSHOT_STATE_MAP.get(
+                self._snapshot.state, SnapshotState.UNKNOWN)
+        except AttributeError:
+            return SnapshotState.UNKNOWN
 
     def refresh(self):
         """
@@ -679,7 +689,7 @@ class AWSSnapshot(BaseSnapshot):
             name=self.name,
             size=size,
             zone=placement,
-            snapshot=self._snapshot)
+            snapshot=self.id)
         cb_vol.wait_till_ready()
         cb_vol.name = "from_snap_{0}".format(self.name or self.id)
         return cb_vol
@@ -1069,8 +1079,11 @@ class AWSNetwork(BaseNetwork):
 
     @property
     def state(self):
-        return AWSNetwork._NETWORK_STATE_MAP.get(
-            self._vpc.state, NetworkState.UNKNOWN)
+        try:
+            return AWSNetwork._NETWORK_STATE_MAP.get(
+                self._vpc.state, NetworkState.UNKNOWN)
+        except AttributeError:
+            return NetworkState.UNKNOWN
 
     @property
     def cidr_block(self):
@@ -1156,8 +1169,11 @@ class AWSSubnet(BaseSubnet):
 
     @property
     def state(self):
-        return self._SUBNET_STATE_MAP.get(
-            self._subnet.state, SubnetState.UNKNOWN)
+        try:
+            return self._SUBNET_STATE_MAP.get(
+                self._subnet.state, SubnetState.UNKNOWN)
+        except AttributeError:
+            return SubnetState.UNKNOWN
 
     def refresh(self):
         subnet = self._provider.networking.subnets.get(self.id)

+ 11 - 24
cloudbridge/cloud/providers/aws/services.py

@@ -58,7 +58,7 @@ from .resources import AWSVolume
 
 class EC2ServiceFilter(object):
     '''
-        Generic AWS EC2 service filter interface
+    Generic AWS EC2 service filter interface
 
     :param AWSCloudProvider provider: AWS EC2 provider interface
     :param str service: Name of the EC2 service to use
@@ -71,7 +71,7 @@ class EC2ServiceFilter(object):
 
     def get(self, val, filter_name, wrapper=True):
         '''
-            Returns a single resource by filter
+        Returns a single resource by filter
 
         :param str val: Value to filter with
         :param str filter_name: Name of the filter to use
@@ -103,7 +103,7 @@ class EC2ServiceFilter(object):
 
     def find(self, val, filter_name, limit=None, marker=None):
         '''
-            Returns a list of resources by filter
+        Returns a list of resources by filter
 
         :param str val: Value to filter with
         :param str filter_name: Name of the filter to use
@@ -123,7 +123,7 @@ class EC2ServiceFilter(object):
 
     def create(self, method, **kwargs):
         '''
-            Creates a resource
+        Creates a resource
 
         :param str method: Service method to invoke
         :param object kwargs: Arguments to be passed as-is to
@@ -136,7 +136,7 @@ class EC2ServiceFilter(object):
 
     def delete(self, val, filter_name):
         '''
-            Deletes a resource by filter
+        Deletes a resource by filter
 
         :param str val: Value to filter with
         :param str filter_name: Name of the filter to use
@@ -163,22 +163,10 @@ class AWSSecurityService(BaseSecurityService):
 
     @property
     def key_pairs(self):
-        """
-        Provides access to key pairs for this provider.
-
-        :rtype: ``object`` of :class:`.KeyPairService`
-        :return: a KeyPairService object
-        """
         return self._key_pairs
 
     @property
     def security_groups(self):
-        """
-        Provides access to security groups for this provider.
-
-        :rtype: ``object`` of :class:`.SecurityGroupService`
-        :return: a SecurityGroupService object
-        """
         return self._security_groups
 
 
@@ -268,9 +256,6 @@ class AWSVolumeService(BaseVolumeService):
         return self.iface.list(limit=limit, marker=marker)
 
     def create(self, name, size, zone, snapshot=None, description=None):
-        """
-        Creates a new volume.
-        """
         AWSVolume.assert_valid_resource_name(name)
 
         zone_id = zone.id if isinstance(zone, PlacementZone) else zone
@@ -278,15 +263,17 @@ class AWSVolumeService(BaseVolumeService):
             snapshot, AWSSnapshot) and snapshot else snapshot
         params = {
             'Size': size,
-            'AvailabilityZone': zone_id
+            'AvailabilityZone': zone_id,
+            'SnapshotId': snapshot_id
         }
-        if snapshot_id:
-            params['SnapshotId'] = snapshot_id
+        # Filter out empty values to please Boto
+        params = {k: v for k, v in params.items()
+                  if v is not None}
         cb_vol = self.iface.create('create_volume', **params)
         # Wait until ready to tag instance
         cb_vol.wait_till_ready()
         cb_vol.name = name
-        if cb_vol.description:
+        if description:
             cb_vol.description = description
         return cb_vol