summaryrefslogtreecommitdiff
path: root/openstackclient
diff options
context:
space:
mode:
authorDavid Rabel <rabel@b1-systems.de>2019-02-22 15:21:17 +0100
committerDean Troyer <dtroyer@gmail.com>2019-02-28 15:48:34 +0000
commite776a4f0260af1d2ae66439e647794395d470578 (patch)
tree8a3cff53849fcec9ee9e517f9bd29fd92e4004d5 /openstackclient
parent55cbbbe4692002e58120b0c129eb2add4f0bc18a (diff)
downloadpython-openstackclient-e776a4f0260af1d2ae66439e647794395d470578.tar.gz
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
Diffstat (limited to 'openstackclient')
-rw-r--r--openstackclient/tests/unit/volume/v2/test_volume.py36
-rw-r--r--openstackclient/volume/v2/volume.py35
2 files changed, 71 insertions, 0 deletions
diff --git a/openstackclient/tests/unit/volume/v2/test_volume.py b/openstackclient/tests/unit/volume/v2/test_volume.py
index 1f53ce94..dbe69ea0 100644
--- a/openstackclient/tests/unit/volume/v2/test_volume.py
+++ b/openstackclient/tests/unit/volume/v2/test_volume.py
@@ -1327,6 +1327,42 @@ class TestVolumeSet(TestVolume):
self.volumes_mock.reset_state.assert_called_with(
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):
arglist = [
['--bootable', self.new_volume.id],
diff --git a/openstackclient/volume/v2/volume.py b/openstackclient/volume/v2/volume.py
index 14a454c2..fa587b5f 100644
--- a/openstackclient/volume/v2/volume.py
+++ b/openstackclient/volume/v2/volume.py
@@ -559,6 +559,25 @@ class SetVolume(command.Command):
'in the database with no regard to actual status, '
'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(
'--type',
metavar='<volume-type>',
@@ -645,6 +664,22 @@ class SetVolume(command.Command):
except Exception as e:
LOG.error(_("Failed to set volume state: %s"), e)
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:
try:
volume_client.volumes.set_bootable(