Merge "Add --attached / --detached parameter to volume set"

This commit is contained in:
Zuul
2019-03-06 00:58:17 +00:00
committed by Gerrit Code Review
4 changed files with 95 additions and 0 deletions
doc/source/cli/command-objects
openstackclient
tests
unit
volume
releasenotes/notes

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

@ -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>`_