From bcc7ea694ab78e0903c3a2075102afe3bb47eda2 Mon Sep 17 00:00:00 2001 From: Rosario Di Somma Date: Mon, 1 May 2017 01:42:49 +0000 Subject: [PATCH] Use REST API for volume delete and detach calls Change-Id: I0267899b4fb1dbb277ef969663ff82eadf465879 Signed-off-by: Rosario Di Somma --- shade/_tasks.py | 10 ---------- shade/openstackcloud.py | 19 ++++++++++--------- shade/tests/unit/test_volume.py | 2 +- 3 files changed, 11 insertions(+), 20 deletions(-) diff --git a/shade/_tasks.py b/shade/_tasks.py index ba6510062..424c36dc8 100644 --- a/shade/_tasks.py +++ b/shade/_tasks.py @@ -212,16 +212,6 @@ class NovaImageList(task_manager.Task): return client.nova_client.images.list() -class VolumeDelete(task_manager.Task): - def main(self, client): - client.cinder_client.volumes.delete(**self.args) - - -class VolumeDetach(task_manager.Task): - def main(self, client): - client.nova_client.volumes.delete_server_volume(**self.args) - - class VolumeAttach(task_manager.Task): def main(self, client): return client.nova_client.volumes.create_server_volume(**self.args) diff --git a/shade/openstackcloud.py b/shade/openstackcloud.py index 8b3213b22..3f3f5e08b 100644 --- a/shade/openstackcloud.py +++ b/shade/openstackcloud.py @@ -3923,9 +3923,9 @@ class OpenStackCloud(_normalize.Normalizer): with _utils.shade_exceptions("Error in deleting volume"): try: - self.manager.submit_task( - _tasks.VolumeDelete(volume=volume['id'])) - except cinder_exceptions.NotFound: + self._volume_client.delete( + 'volumes/{id}'.format(id=volume['id'])) + except OpenStackCloudURINotFound: self.log.debug( "Volume {id} not found when deleting. Ignoring.".format( id=volume['id'])) @@ -3987,12 +3987,13 @@ class OpenStackCloud(_normalize.Normalizer): :raises: OpenStackCloudException on operation error. """ - with _utils.shade_exceptions( - "Error detaching volume {volume} from server {server}".format( - volume=volume['id'], server=server['id'])): - self.manager.submit_task( - _tasks.VolumeDetach(attachment_id=volume['id'], - server_id=server['id'])) + with _utils.shade_exceptions(): + self._compute_client.delete( + 'servers/{server_id}/os-volume_attachments/{volume_id}'.format( + server_id=server['id'], volume_id=volume['id']), + error_message="Error detaching volume {volume} " + "from server {server}".format( + volume=volume['id'], server=server['id'])) if wait: for count in _utils._iterate_timeout( diff --git a/shade/tests/unit/test_volume.py b/shade/tests/unit/test_volume.py index 909073896..a02cd413b 100644 --- a/shade/tests/unit/test_volume.py +++ b/shade/tests/unit/test_volume.py @@ -189,7 +189,7 @@ class TestVolume(base.RequestsMockTestCase): 'os-volume_attachments', volume['id']]), status_code=404)]) with testtools.ExpectedException( - shade.OpenStackCloudException, + shade.OpenStackCloudURINotFound, "Error detaching volume %s from server %s" % ( volume['id'], server['id']) ):