Merge "Add --attached / --detached parameter to volume set"
This commit is contained in:
commit
303cb4735d
@ -262,6 +262,7 @@ Set volume properties
|
|||||||
[--property <key=value> [...] ]
|
[--property <key=value> [...] ]
|
||||||
[--image-property <key=value> [...] ]
|
[--image-property <key=value> [...] ]
|
||||||
[--state <state>]
|
[--state <state>]
|
||||||
|
[--attached | --detached ]
|
||||||
[--type <volume-type>]
|
[--type <volume-type>]
|
||||||
[--retype-policy <retype-policy>]
|
[--retype-policy <retype-policy>]
|
||||||
[--bootable | --non-bootable]
|
[--bootable | --non-bootable]
|
||||||
@ -341,6 +342,22 @@ Set volume properties
|
|||||||
|
|
||||||
*Volume version 2 only*
|
*Volume version 2 only*
|
||||||
|
|
||||||
|
.. option:: --attached
|
||||||
|
|
||||||
|
Set volume attachment status to "attached" (admin only)
|
||||||
|
(This option simply changes the state of the volume in the database with
|
||||||
|
no regard to actual status, exercise caution when using)
|
||||||
|
|
||||||
|
*Volume version 2 only*
|
||||||
|
|
||||||
|
.. option:: --deattach
|
||||||
|
|
||||||
|
Set volume attachment status to "detached" (admin only)
|
||||||
|
(This option simply changes the state of the volume in the database with
|
||||||
|
no regard to actual status, exercise caution when using)
|
||||||
|
|
||||||
|
*Volume version 2 only*
|
||||||
|
|
||||||
.. _volume_set-volume:
|
.. _volume_set-volume:
|
||||||
.. describe:: <volume>
|
.. describe:: <volume>
|
||||||
|
|
||||||
|
@ -1327,6 +1327,42 @@ class TestVolumeSet(TestVolume):
|
|||||||
self.volumes_mock.reset_state.assert_called_with(
|
self.volumes_mock.reset_state.assert_called_with(
|
||||||
self.new_volume.id, 'error')
|
self.new_volume.id, 'error')
|
||||||
|
|
||||||
|
def test_volume_set_attached(self):
|
||||||
|
arglist = [
|
||||||
|
'--attached',
|
||||||
|
self.new_volume.id
|
||||||
|
]
|
||||||
|
verifylist = [
|
||||||
|
('attached', True),
|
||||||
|
('detached', False),
|
||||||
|
('volume', self.new_volume.id)
|
||||||
|
]
|
||||||
|
|
||||||
|
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
||||||
|
|
||||||
|
result = self.cmd.take_action(parsed_args)
|
||||||
|
self.volumes_mock.reset_state.assert_called_with(
|
||||||
|
self.new_volume.id, attach_status='attached', state=None)
|
||||||
|
self.assertIsNone(result)
|
||||||
|
|
||||||
|
def test_volume_set_detached(self):
|
||||||
|
arglist = [
|
||||||
|
'--detached',
|
||||||
|
self.new_volume.id
|
||||||
|
]
|
||||||
|
verifylist = [
|
||||||
|
('attached', False),
|
||||||
|
('detached', True),
|
||||||
|
('volume', self.new_volume.id)
|
||||||
|
]
|
||||||
|
|
||||||
|
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
|
||||||
|
|
||||||
|
result = self.cmd.take_action(parsed_args)
|
||||||
|
self.volumes_mock.reset_state.assert_called_with(
|
||||||
|
self.new_volume.id, attach_status='detached', state=None)
|
||||||
|
self.assertIsNone(result)
|
||||||
|
|
||||||
def test_volume_set_bootable(self):
|
def test_volume_set_bootable(self):
|
||||||
arglist = [
|
arglist = [
|
||||||
['--bootable', self.new_volume.id],
|
['--bootable', self.new_volume.id],
|
||||||
|
@ -559,6 +559,25 @@ class SetVolume(command.Command):
|
|||||||
'in the database with no regard to actual status, '
|
'in the database with no regard to actual status, '
|
||||||
'exercise caution when using)'),
|
'exercise caution when using)'),
|
||||||
)
|
)
|
||||||
|
attached_group = parser.add_mutually_exclusive_group()
|
||||||
|
attached_group.add_argument(
|
||||||
|
"--attached",
|
||||||
|
action="store_true",
|
||||||
|
help=_('Set volume attachment status to "attached" '
|
||||||
|
'(admin only) '
|
||||||
|
'(This option simply changes the state of the volume '
|
||||||
|
'in the database with no regard to actual status, '
|
||||||
|
'exercise caution when using)'),
|
||||||
|
)
|
||||||
|
attached_group.add_argument(
|
||||||
|
"--detached",
|
||||||
|
action="store_true",
|
||||||
|
help=_('Set volume attachment status to "detached" '
|
||||||
|
'(admin only) '
|
||||||
|
'(This option simply changes the state of the volume '
|
||||||
|
'in the database with no regard to actual status, '
|
||||||
|
'exercise caution when using)'),
|
||||||
|
)
|
||||||
parser.add_argument(
|
parser.add_argument(
|
||||||
'--type',
|
'--type',
|
||||||
metavar='<volume-type>',
|
metavar='<volume-type>',
|
||||||
@ -645,6 +664,22 @@ class SetVolume(command.Command):
|
|||||||
except Exception as e:
|
except Exception as e:
|
||||||
LOG.error(_("Failed to set volume state: %s"), e)
|
LOG.error(_("Failed to set volume state: %s"), e)
|
||||||
result += 1
|
result += 1
|
||||||
|
if parsed_args.attached:
|
||||||
|
try:
|
||||||
|
volume_client.volumes.reset_state(
|
||||||
|
volume.id, state=None,
|
||||||
|
attach_status="attached")
|
||||||
|
except Exception as e:
|
||||||
|
LOG.error(_("Failed to set volume attach-status: %s"), e)
|
||||||
|
result += 1
|
||||||
|
if parsed_args.detached:
|
||||||
|
try:
|
||||||
|
volume_client.volumes.reset_state(
|
||||||
|
volume.id, state=None,
|
||||||
|
attach_status="detached")
|
||||||
|
except Exception as e:
|
||||||
|
LOG.error(_("Failed to set volume attach-status: %s"), e)
|
||||||
|
result += 1
|
||||||
if parsed_args.bootable or parsed_args.non_bootable:
|
if parsed_args.bootable or parsed_args.non_bootable:
|
||||||
try:
|
try:
|
||||||
volume_client.volumes.set_bootable(
|
volume_client.volumes.set_bootable(
|
||||||
|
7
releasenotes/notes/bug-1745699-afa7318b9dc96696.yaml
Normal file
7
releasenotes/notes/bug-1745699-afa7318b9dc96696.yaml
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
---
|
||||||
|
features:
|
||||||
|
- |
|
||||||
|
Add ``--attached`` and ``--detached`` options to ``volume set`` command to set the
|
||||||
|
volume status in the database. This is the functional equivalent to
|
||||||
|
``cinder reset-state --attach-status``.
|
||||||
|
[`bug 1745699 <https://bugs.launchpad.net/python-openstackclient/+bug/1745699>`_
|
Loading…
Reference in New Issue
Block a user