Kaynağa Gözat

Moved volume service to event system and added delete method to volume service

Nuwan Goonasekera 7 yıl önce
ebeveyn
işleme
0a95ce8e3b

+ 6 - 0
cloudbridge/cloud/base/resources.py

@@ -462,6 +462,12 @@ class BaseVolume(BaseCloudResource, BaseObjectLifeCycleMixin, Volume):
             timeout=timeout,
             interval=interval)
 
+    def delete(self):
+        """
+        Delete this volume.
+        """
+        return self._provider.storage.volumes.delete(self)
+
 
 class BaseSnapshot(BaseCloudResource, BaseObjectLifeCycleMixin, Snapshot):
 

+ 21 - 0
cloudbridge/cloud/base/services.py

@@ -178,6 +178,27 @@ class BaseVolumeService(
         super(BaseVolumeService, self).__init__(provider)
         self._service_event_pattern += ".storage.volumes"
 
+    def get(self, volume_id):
+        return self.dispatch(self, "provider.storage.volumes.get",
+                             volume_id)
+
+    def list(self, limit=None, marker=None):
+        return self.dispatch(self, "provider.storage.volumes.list",
+                             limit=limit, marker=marker)
+
+    def find(self, **kwargs):
+        return self.dispatch(self, "provider.storage.volumes.find",
+                             **kwargs)
+
+    def create(self, label, size, zone, snapshot=None, description=None):
+        return self.dispatch(self, "provider.storage.volumes.create",
+                             label, size, zone, snapshot=snapshot,
+                             description=description)
+
+    def delete(self, volume):
+        return self.dispatch(self, "provider.storage.volumes.delete",
+                             volume)
+
 
 class BaseSnapshotService(
         BasePageableObjectMixin, SnapshotService, BaseCloudService):

+ 9 - 0
cloudbridge/cloud/interfaces/services.py

@@ -362,6 +362,15 @@ class VolumeService(PageableObjectMixin, CloudService):
         """
         pass
 
+    def delete(self, volume):
+        """
+        Delete an existing volume.
+
+        :type volume: ``str`` or :class:`Volume`
+        :param volume: The object or ID of the volume to be deleted.
+        """
+        pass
+
 
 class SnapshotService(PageableObjectMixin, CloudService):
     """

+ 0 - 3
cloudbridge/cloud/providers/aws/resources.py

@@ -496,9 +496,6 @@ class AWSVolume(BaseVolume):
         snap.wait_till_ready()
         return snap
 
-    def delete(self):
-        self._volume.delete()
-
     @property
     def state(self):
         if self._unknown_state:

+ 19 - 4
cloudbridge/cloud/providers/aws/services.py

@@ -219,12 +219,16 @@ class AWSVolumeService(BaseVolumeService):
                                   cb_resource=AWSVolume,
                                   boto_collection_name='volumes')
 
-    def get(self, volume_id):
+    @implement(event_pattern="provider.storage.volumes.get",
+               priority=BaseVolumeService.STANDARD_EVENT_PRIORITY)
+    def _get(self, volume_id):
         log.debug("Getting AWS Volume Service with the id: %s",
                   volume_id)
         return self.svc.get(volume_id)
 
-    def find(self, **kwargs):
+    @implement(event_pattern="provider.storage.volumes.find",
+               priority=BaseVolumeService.STANDARD_EVENT_PRIORITY)
+    def _find(self, **kwargs):
         label = kwargs.pop('label', None)
 
         # All kwargs should have been popped at this time.
@@ -236,10 +240,14 @@ class AWSVolumeService(BaseVolumeService):
         log.debug("Searching for AWS Volume Service %s", label)
         return self.svc.find(filter_name='tag:Name', filter_value=label)
 
-    def list(self, limit=None, marker=None):
+    @implement(event_pattern="provider.storage.volumes.list",
+               priority=BaseVolumeService.STANDARD_EVENT_PRIORITY)
+    def _list(self, limit=None, marker=None):
         return self.svc.list(limit=limit, marker=marker)
 
-    def create(self, label, size, zone, snapshot=None, description=None):
+    @implement(event_pattern="provider.storage.volumes.create",
+               priority=BaseVolumeService.STANDARD_EVENT_PRIORITY)
+    def _create(self, label, size, zone, snapshot=None, description=None):
         log.debug("Creating AWS Volume Service with the parameters "
                   "[label: %s size: %s zone: %s snapshot: %s "
                   "description: %s]", label, size, zone, snapshot,
@@ -260,6 +268,13 @@ class AWSVolumeService(BaseVolumeService):
             cb_vol.description = description
         return cb_vol
 
+    @implement(event_pattern="provider.storage.volumes.delete",
+               priority=BaseVolumeService.STANDARD_EVENT_PRIORITY)
+    def _delete(self, volume):
+        cb_vol = volume if isinstance(volume, AWSVolume) else self.get(volume)
+        # pylint:disable=protected-access
+        cb_vol._volume.delete()
+
 
 class AWSSnapshotService(BaseSnapshotService):
 

+ 0 - 6
cloudbridge/cloud/providers/azure/resources.py

@@ -521,12 +521,6 @@ class AzureVolume(BaseVolume):
         return self._provider.storage.snapshots.create(label, self,
                                                        description)
 
-    def delete(self):
-        """
-        Delete this volume.
-        """
-        self._provider.azure_client.delete_disk(self.id)
-
     @property
     def state(self):
         return AzureVolume.VOLUME_STATE_MAP.get(

+ 18 - 4
cloudbridge/cloud/providers/azure/services.py

@@ -249,7 +249,9 @@ class AzureVolumeService(BaseVolumeService):
     def __init__(self, provider):
         super(AzureVolumeService, self).__init__(provider)
 
-    def get(self, volume_id):
+    @implement(event_pattern="provider.storage.volumes.get",
+               priority=BaseVolumeService.STANDARD_EVENT_PRIORITY)
+    def _get(self, volume_id):
         """
         Returns a volume given its id.
         """
@@ -261,7 +263,9 @@ class AzureVolumeService(BaseVolumeService):
             log.exception(cloud_error)
             return None
 
-    def find(self, **kwargs):
+    @implement(event_pattern="provider.storage.volumes.find",
+               priority=BaseVolumeService.STANDARD_EVENT_PRIORITY)
+    def _find(self, **kwargs):
         obj_list = self
         filters = ['label']
         matches = cb_helpers.generic_find(filters, kwargs, obj_list)
@@ -275,7 +279,9 @@ class AzureVolumeService(BaseVolumeService):
         return ClientPagedResultList(self.provider,
                                      matches if matches else [])
 
-    def list(self, limit=None, marker=None):
+    @implement(event_pattern="provider.storage.volumes.list",
+               priority=BaseVolumeService.STANDARD_EVENT_PRIORITY)
+    def _list(self, limit=None, marker=None):
         """
         List all volumes.
         """
@@ -284,7 +290,9 @@ class AzureVolumeService(BaseVolumeService):
         return ClientPagedResultList(self.provider, cb_vols,
                                      limit=limit, marker=marker)
 
-    def create(self, label, size, zone, description=None, snapshot=None):
+    @implement(event_pattern="provider.storage.volumes.create",
+               priority=BaseVolumeService.STANDARD_EVENT_PRIORITY)
+    def _create(self, label, size, zone, description=None, snapshot=None):
         """
         Creates a new volume.
         """
@@ -332,6 +340,12 @@ class AzureVolumeService(BaseVolumeService):
 
         return cb_vol
 
+    @implement(event_pattern="provider.storage.volumes.delete",
+               priority=BaseVolumeService.STANDARD_EVENT_PRIORITY)
+    def _delete(self, volume):
+        vol_id = volume.id if isinstance(volume, AzureVolume) else volume
+        self.provider.azure_client.delete_disk(vol_id)
+
 
 class AzureSnapshotService(BaseSnapshotService):
     def __init__(self, provider):

+ 0 - 12
cloudbridge/cloud/providers/gce/resources.py

@@ -1943,18 +1943,6 @@ class GCEVolume(BaseVolume):
         return self._provider.storage.snapshots.create(
             label, self, description)
 
-    def delete(self):
-        """
-        Delete this volume.
-        """
-        (self._provider
-         .gce_compute
-         .disks()
-         .delete(project=self._provider.project_name,
-                 zone=self.zone_name,
-                 disk=self.name)
-         .execute())
-
     @property
     def state(self):
         if len(self._volume.get('users', [])) > 0:

+ 24 - 4
cloudbridge/cloud/providers/gce/services.py

@@ -975,14 +975,18 @@ class GCEVolumeService(BaseVolumeService):
     def __init__(self, provider):
         super(GCEVolumeService, self).__init__(provider)
 
-    def get(self, volume_id):
+    @implement(event_pattern="provider.storage.volumes.get",
+               priority=BaseVolumeService.STANDARD_EVENT_PRIORITY)
+    def _get(self, volume_id):
         """
         Returns a volume given its id.
         """
         vol = self.provider.get_resource('disks', volume_id)
         return GCEVolume(self.provider, vol) if vol else None
 
-    def find(self, limit=None, marker=None, **kwargs):
+    @implement(event_pattern="provider.storage.volumes.find",
+               priority=BaseVolumeService.STANDARD_EVENT_PRIORITY)
+    def _find(self, limit=None, marker=None, **kwargs):
         """
         Searches for a volume by a given list of attributes.
         """
@@ -1014,7 +1018,9 @@ class GCEVolumeService(BaseVolumeService):
                                      response.get('nextPageToken'),
                                      False, data=gce_vols)
 
-    def list(self, limit=None, marker=None):
+    @implement(event_pattern="provider.storage.volumes.list",
+               priority=BaseVolumeService.STANDARD_EVENT_PRIORITY)
+    def _list(self, limit=None, marker=None):
         """
         List all volumes.
 
@@ -1042,7 +1048,9 @@ class GCEVolumeService(BaseVolumeService):
                                      response.get('nextPageToken'),
                                      False, data=gce_vols)
 
-    def create(self, label, size, zone, snapshot=None, description=None):
+    @implement(event_pattern="provider.storage.volumes.create",
+               priority=BaseVolumeService.STANDARD_EVENT_PRIORITY)
+    def _create(self, label, size, zone, snapshot=None, description=None):
         """
         Creates a new volume.
 
@@ -1085,6 +1093,18 @@ class GCEVolumeService(BaseVolumeService):
         cb_vol = self.get(operation.get('targetLink'))
         return cb_vol
 
+    @implement(event_pattern="provider.storage.volumes.delete",
+               priority=BaseVolumeService.STANDARD_EVENT_PRIORITY)
+    def _delete(self, volume):
+        cb_vol = volume if isinstance(volume, GCEVolume) else self.get(volume)
+        (self._provider
+         .gce_compute
+         .disks()
+         .delete(project=self.provider.project_name,
+                 zone=cb_vol.zone_name,
+                 disk=cb_vol.name)
+         .execute())
+
 
 class GCESnapshotService(BaseSnapshotService):
 

+ 0 - 6
cloudbridge/cloud/providers/openstack/resources.py

@@ -665,12 +665,6 @@ class OpenStackVolume(BaseVolume):
         return self._provider.storage.snapshots.create(
             label, self, description=description)
 
-    def delete(self):
-        """
-        Delete this volume.
-        """
-        self._volume.delete()
-
     @property
     def state(self):
         return OpenStackVolume.VOLUME_STATE_MAP.get(

+ 20 - 4
cloudbridge/cloud/providers/openstack/services.py

@@ -288,7 +288,9 @@ class OpenStackVolumeService(BaseVolumeService):
     def __init__(self, provider):
         super(OpenStackVolumeService, self).__init__(provider)
 
-    def get(self, volume_id):
+    @implement(event_pattern="provider.storage.volumes.get",
+               priority=BaseVolumeService.STANDARD_EVENT_PRIORITY)
+    def _get(self, volume_id):
         """
         Returns a volume given its id.
         """
@@ -300,7 +302,9 @@ class OpenStackVolumeService(BaseVolumeService):
             log.debug("Volume %s was not found.", volume_id)
             return None
 
-    def find(self, **kwargs):
+    @implement(event_pattern="provider.storage.volumes.find",
+               priority=BaseVolumeService.STANDARD_EVENT_PRIORITY)
+    def _find(self, **kwargs):
         label = kwargs.pop('label', None)
 
         # All kwargs should have been popped at this time.
@@ -320,7 +324,9 @@ class OpenStackVolumeService(BaseVolumeService):
 
         return oshelpers.to_server_paged_list(self.provider, cb_vols)
 
-    def list(self, limit=None, marker=None):
+    @implement(event_pattern="provider.storage.volumes.list",
+               priority=BaseVolumeService.STANDARD_EVENT_PRIORITY)
+    def _list(self, limit=None, marker=None):
         """
         List all volumes.
         """
@@ -332,7 +338,9 @@ class OpenStackVolumeService(BaseVolumeService):
 
         return oshelpers.to_server_paged_list(self.provider, cb_vols, limit)
 
-    def create(self, label, size, zone, snapshot=None, description=None):
+    @implement(event_pattern="provider.storage.volumes.create",
+               priority=BaseVolumeService.STANDARD_EVENT_PRIORITY)
+    def _create(self, label, size, zone, snapshot=None, description=None):
         """
         Creates a new volume.
         """
@@ -350,6 +358,14 @@ class OpenStackVolumeService(BaseVolumeService):
             availability_zone=zone_id, snapshot_id=snapshot_id)
         return OpenStackVolume(self.provider, os_vol)
 
+    @implement(event_pattern="provider.storage.volumes.delete",
+               priority=BaseVolumeService.STANDARD_EVENT_PRIORITY)
+    def _delete(self, volume):
+        cb_vol = (volume if isinstance(volume, OpenStackVolume)
+                  else self.get(volume))
+        # pylint:disable=protected-access
+        cb_vol._volume.delete()
+
 
 class OpenStackSnapshotService(BaseSnapshotService):