summaryrefslogtreecommitdiff
path: root/openstackclient
diff options
context:
space:
mode:
authorHuanxuan Ao <huanxuan.ao@easystack.cn>2016-07-04 10:18:45 +0800
committerHuanxuan Ao <huanxuan.ao@easystack.cn>2016-12-08 17:08:58 +0800
commitbbfd8cb46bc7493971173f1cbc774ef4697ddfe4 (patch)
tree64bf707774288750f81f19d48a16cf54d12e4b4e /openstackclient
parent158dbe124a11873129d2b3fbc6a9b5a6695e7bcc (diff)
downloadpython-openstackclient-bbfd8cb46bc7493971173f1cbc774ef4697ddfe4.tar.gz
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
Diffstat (limited to 'openstackclient')
-rw-r--r--openstackclient/tests/unit/volume/v2/test_snapshot.py23
-rw-r--r--openstackclient/volume/v2/volume_snapshot.py9
2 files changed, 28 insertions, 4 deletions
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 "