From bbfd8cb46bc7493971173f1cbc774ef4697ddfe4 Mon Sep 17 00:00:00 2001 From: Huanxuan Ao Date: Mon, 4 Jul 2016 10:18:45 +0800 Subject: Add '--force' option to 'volume snapshot delete' command Add '--force' option to 'volume snapshot delete' command in volume v2 (v2 only) to allow delete in state other than error or available. Change-Id: Ie8991e9a630d7c7e9ac6c6870aed787bbcebacf2 Closes-Bug: #1597195 --- .../tests/unit/volume/v2/test_snapshot.py | 23 +++++++++++++++++++--- openstackclient/volume/v2/volume_snapshot.py | 9 ++++++++- 2 files changed, 28 insertions(+), 4 deletions(-) (limited to 'openstackclient') diff --git a/openstackclient/tests/unit/volume/v2/test_snapshot.py b/openstackclient/tests/unit/volume/v2/test_snapshot.py index b67dd6eb..1d1693ad 100644 --- a/openstackclient/tests/unit/volume/v2/test_snapshot.py +++ b/openstackclient/tests/unit/volume/v2/test_snapshot.py @@ -179,7 +179,24 @@ class TestSnapshotDelete(TestSnapshot): result = self.cmd.take_action(parsed_args) self.snapshots_mock.delete.assert_called_with( - self.snapshots[0].id) + self.snapshots[0].id, False) + self.assertIsNone(result) + + def test_snapshot_delete_with_force(self): + arglist = [ + '--force', + self.snapshots[0].id + ] + verifylist = [ + ('force', True), + ("snapshots", [self.snapshots[0].id]) + ] + parsed_args = self.check_parser(self.cmd, arglist, verifylist) + + result = self.cmd.take_action(parsed_args) + + self.snapshots_mock.delete.assert_called_with( + self.snapshots[0].id, True) self.assertIsNone(result) def test_delete_multiple_snapshots(self): @@ -195,7 +212,7 @@ class TestSnapshotDelete(TestSnapshot): calls = [] for s in self.snapshots: - calls.append(call(s.id)) + calls.append(call(s.id, False)) self.snapshots_mock.delete.assert_has_calls(calls) self.assertIsNone(result) @@ -226,7 +243,7 @@ class TestSnapshotDelete(TestSnapshot): self.assertEqual(2, find_mock.call_count) self.snapshots_mock.delete.assert_called_once_with( - self.snapshots[0].id + self.snapshots[0].id, False ) diff --git a/openstackclient/volume/v2/volume_snapshot.py b/openstackclient/volume/v2/volume_snapshot.py index 43f30326..5fdeca3a 100644 --- a/openstackclient/volume/v2/volume_snapshot.py +++ b/openstackclient/volume/v2/volume_snapshot.py @@ -98,6 +98,12 @@ class DeleteVolumeSnapshot(command.Command): nargs="+", help=_("Snapshot(s) to delete (name or ID)") ) + parser.add_argument( + '--force', + action='store_true', + help=_("Attempt forced removal of snapshot(s), " + "regardless of state (defaults to False)") + ) return parser def take_action(self, parsed_args): @@ -108,7 +114,8 @@ class DeleteVolumeSnapshot(command.Command): try: snapshot_id = utils.find_resource( volume_client.volume_snapshots, i).id - volume_client.volume_snapshots.delete(snapshot_id) + volume_client.volume_snapshots.delete( + snapshot_id, parsed_args.force) except Exception as e: result += 1 LOG.error(_("Failed to delete snapshot with " -- cgit v1.2.1