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

As to reflect cinder reset-state --attach-status functionality,
this patch adds --attached / --detached parameter to OSC's volume set
command.

Change-Id: Ic8ee928c9ab0e579512cfb7608f63bfcc2993c7b
Closes-Bug: #1745699
This commit is contained in:
David Rabel 2019-02-22 15:21:17 +01:00 committed by Dean Troyer
parent 55cbbbe469
commit e776a4f026
4 changed files with 95 additions and 0 deletions

View File

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

View File

@ -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],

View File

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

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