Add "--force" option to "volume qos delete" command
Add ``--force`` option to ``volume qos delete`` command in volume v1 and v2 to allow users to delete in-use QoS specification(s). Change-Id: I46036e5f55ced8b8a1be54c521f2a5c242b89160 Closes-Bug: #1596821
This commit is contained in:
parent
9e47688e5e
commit
4e46c04f92
@ -58,8 +58,13 @@ Delete QoS specification
|
|||||||
.. code:: bash
|
.. code:: bash
|
||||||
|
|
||||||
os volume qos delete
|
os volume qos delete
|
||||||
|
[--force]
|
||||||
<qos-spec> [<qos-spec> ...]
|
<qos-spec> [<qos-spec> ...]
|
||||||
|
|
||||||
|
.. option:: --force
|
||||||
|
|
||||||
|
Allow to delete in-use QoS specification(s)
|
||||||
|
|
||||||
.. describe:: <qos-spec>
|
.. describe:: <qos-spec>
|
||||||
|
|
||||||
QoS specification(s) to delete (name or ID)
|
QoS specification(s) to delete (name or ID)
|
||||||
|
@ -211,7 +211,7 @@ class TestQosDelete(TestQos):
|
|||||||
|
|
||||||
result = self.cmd.take_action(parsed_args)
|
result = self.cmd.take_action(parsed_args)
|
||||||
|
|
||||||
self.qos_mock.delete.assert_called_with(volume_fakes.qos_id)
|
self.qos_mock.delete.assert_called_with(volume_fakes.qos_id, False)
|
||||||
self.assertIsNone(result)
|
self.assertIsNone(result)
|
||||||
|
|
||||||
def test_qos_delete_with_name(self):
|
def test_qos_delete_with_name(self):
|
||||||
@ -225,7 +225,23 @@ class TestQosDelete(TestQos):
|
|||||||
|
|
||||||
result = self.cmd.take_action(parsed_args)
|
result = self.cmd.take_action(parsed_args)
|
||||||
|
|
||||||
self.qos_mock.delete.assert_called_with(volume_fakes.qos_id)
|
self.qos_mock.delete.assert_called_with(volume_fakes.qos_id, False)
|
||||||
|
self.assertIsNone(result)
|
||||||
|
|
||||||
|
def test_qos_delete_with_force(self):
|
||||||
|
arglist = [
|
||||||
|
'--force',
|
||||||
|
volume_fakes.qos_id
|
||||||
|
]
|
||||||
|
verifylist = [
|
||||||
|
('force', True),
|
||||||
|
('qos_specs', [volume_fakes.qos_id])
|
||||||
|
]
|
||||||
|
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
||||||
|
|
||||||
|
result = self.cmd.take_action(parsed_args)
|
||||||
|
|
||||||
|
self.qos_mock.delete.assert_called_with(volume_fakes.qos_id, True)
|
||||||
self.assertIsNone(result)
|
self.assertIsNone(result)
|
||||||
|
|
||||||
|
|
||||||
|
@ -175,7 +175,23 @@ class TestQosDelete(TestQos):
|
|||||||
|
|
||||||
result = self.cmd.take_action(parsed_args)
|
result = self.cmd.take_action(parsed_args)
|
||||||
|
|
||||||
self.qos_mock.delete.assert_called_with(self.qos_spec.id)
|
self.qos_mock.delete.assert_called_with(self.qos_spec.id, False)
|
||||||
|
self.assertIsNone(result)
|
||||||
|
|
||||||
|
def test_qos_delete_with_force(self):
|
||||||
|
arglist = [
|
||||||
|
'--force',
|
||||||
|
self.qos_spec.id
|
||||||
|
]
|
||||||
|
verifylist = [
|
||||||
|
('force', True),
|
||||||
|
('qos_specs', [self.qos_spec.id])
|
||||||
|
]
|
||||||
|
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
||||||
|
|
||||||
|
result = self.cmd.take_action(parsed_args)
|
||||||
|
|
||||||
|
self.qos_mock.delete.assert_called_with(self.qos_spec.id, True)
|
||||||
self.assertIsNone(result)
|
self.assertIsNone(result)
|
||||||
|
|
||||||
|
|
||||||
|
@ -103,13 +103,19 @@ class DeleteQos(command.Command):
|
|||||||
nargs="+",
|
nargs="+",
|
||||||
help=_('QoS specification(s) to delete (name or ID)'),
|
help=_('QoS specification(s) to delete (name or ID)'),
|
||||||
)
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
'--force',
|
||||||
|
action='store_true',
|
||||||
|
default=False,
|
||||||
|
help=_("Allow to delete in-use QoS specification(s)")
|
||||||
|
)
|
||||||
return parser
|
return parser
|
||||||
|
|
||||||
def take_action(self, parsed_args):
|
def take_action(self, parsed_args):
|
||||||
volume_client = self.app.client_manager.volume
|
volume_client = self.app.client_manager.volume
|
||||||
for qos in parsed_args.qos_specs:
|
for qos in parsed_args.qos_specs:
|
||||||
qos_spec = utils.find_resource(volume_client.qos_specs, qos)
|
qos_spec = utils.find_resource(volume_client.qos_specs, qos)
|
||||||
volume_client.qos_specs.delete(qos_spec.id)
|
volume_client.qos_specs.delete(qos_spec.id, parsed_args.force)
|
||||||
|
|
||||||
|
|
||||||
class DisassociateQos(command.Command):
|
class DisassociateQos(command.Command):
|
||||||
|
@ -103,13 +103,19 @@ class DeleteQos(command.Command):
|
|||||||
nargs="+",
|
nargs="+",
|
||||||
help=_('QoS specification(s) to delete (name or ID)'),
|
help=_('QoS specification(s) to delete (name or ID)'),
|
||||||
)
|
)
|
||||||
|
parser.add_argument(
|
||||||
|
'--force',
|
||||||
|
action='store_true',
|
||||||
|
default=False,
|
||||||
|
help=_("Allow to delete in-use QoS specification(s)")
|
||||||
|
)
|
||||||
return parser
|
return parser
|
||||||
|
|
||||||
def take_action(self, parsed_args):
|
def take_action(self, parsed_args):
|
||||||
volume_client = self.app.client_manager.volume
|
volume_client = self.app.client_manager.volume
|
||||||
for qos in parsed_args.qos_specs:
|
for qos in parsed_args.qos_specs:
|
||||||
qos_spec = utils.find_resource(volume_client.qos_specs, qos)
|
qos_spec = utils.find_resource(volume_client.qos_specs, qos)
|
||||||
volume_client.qos_specs.delete(qos_spec.id)
|
volume_client.qos_specs.delete(qos_spec.id, parsed_args.force)
|
||||||
|
|
||||||
|
|
||||||
class DisassociateQos(command.Command):
|
class DisassociateQos(command.Command):
|
||||||
|
6
releasenotes/notes/bug-1596821-a07599eb4beb6342.yaml
Normal file
6
releasenotes/notes/bug-1596821-a07599eb4beb6342.yaml
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
---
|
||||||
|
features:
|
||||||
|
- |
|
||||||
|
Add ``--force`` option to ``volume qos delete`` command to allow users to
|
||||||
|
delete in-use QoS specification(s).
|
||||||
|
[Bug `1596821 <https://bugs.launchpad.net/bugs/1596821>`_]
|
Loading…
Reference in New Issue
Block a user