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
This commit is contained in:
Huanxuan Ao 2016-07-04 10:18:45 +08:00
parent 158dbe124a
commit bbfd8cb46b
4 changed files with 39 additions and 4 deletions

View File

@ -51,8 +51,13 @@ Delete volume snapshot(s)
.. code:: bash
os volume snapshot delete
[--force]
<snapshot> [<snapshot> ...]
.. option:: --force
Attempt forced removal of snapshot(s), regardless of state (defaults to False)
.. _volume_snapshot_delete-snapshot:
.. describe:: <snapshot>

View File

@ -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
)

View File

@ -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 "

View File

@ -0,0 +1,6 @@
---
features:
- |
Add ``--force`` option to ``volume snapshot delete`` command to allow delete
in state other than error or available.
[Bug `1597195 <https://bugs.launchpad.net/bugs/1597195>`_]