Skip to content

Commit 6216025

Browse files
Zuulopenstack-gerrit
authored andcommitted
Merge "Compute: Add tag support for server add volume"
2 parents f083d42 + 1c7fe3b commit 6216025

3 files changed

Lines changed: 104 additions & 25 deletions

File tree

openstackclient/compute/v2/server.py

Lines changed: 43 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -510,20 +510,32 @@ def get_parser(self, prog_name):
510510
metavar='<device>',
511511
help=_('Server internal device name for volume'),
512512
)
513+
parser.add_argument(
514+
'--tag',
515+
metavar='<tag>',
516+
help=_(
517+
"Tag for the attached volume. "
518+
"(Supported by API versions '2.49' - '2.latest')"
519+
),
520+
)
513521
termination_group = parser.add_mutually_exclusive_group()
514522
termination_group.add_argument(
515523
'--enable-delete-on-termination',
516524
action='store_true',
517-
help=_("Specify if the attached volume should be deleted when "
518-
"the server is destroyed. (Supported with "
519-
"``--os-compute-api-version`` 2.79 or greater.)"),
525+
help=_(
526+
"Specify if the attached volume should be deleted when the "
527+
"server is destroyed. "
528+
"(Supported by API versions '2.79' - '2.latest')"
529+
),
520530
)
521531
termination_group.add_argument(
522532
'--disable-delete-on-termination',
523533
action='store_true',
524-
help=_("Specify if the attached volume should not be deleted "
525-
"when the server is destroyed. (Supported with "
526-
"``--os-compute-api-version`` 2.79 or greater.)"),
534+
help=_(
535+
"Specify if the attached volume should not be deleted when "
536+
"the server is destroyed. "
537+
"(Supported by API versions '2.79' - '2.latest')"
538+
),
527539
)
528540
return parser
529541

@@ -540,28 +552,38 @@ def take_action(self, parsed_args):
540552
parsed_args.volume,
541553
)
542554

543-
support_set_delete_on_termination = (compute_client.api_version >=
544-
api_versions.APIVersion('2.79'))
545-
546-
if not support_set_delete_on_termination:
547-
if parsed_args.enable_delete_on_termination:
548-
msg = _('--os-compute-api-version 2.79 or greater '
549-
'is required to support the '
550-
'--enable-delete-on-termination option.')
551-
raise exceptions.CommandError(msg)
552-
if parsed_args.disable_delete_on_termination:
553-
msg = _('--os-compute-api-version 2.79 or greater '
554-
'is required to support the '
555-
'--disable-delete-on-termination option.')
556-
raise exceptions.CommandError(msg)
557-
558555
kwargs = {
559556
"device": parsed_args.device
560557
}
561558

559+
if parsed_args.tag:
560+
if compute_client.api_version < api_versions.APIVersion('2.49'):
561+
msg = _(
562+
'--os-compute-api-version 2.49 or greater is required to '
563+
'support the --tag option'
564+
)
565+
raise exceptions.CommandError(msg)
566+
567+
kwargs['tag'] = parsed_args.tag
568+
562569
if parsed_args.enable_delete_on_termination:
570+
if compute_client.api_version < api_versions.APIVersion('2.79'):
571+
msg = _(
572+
'--os-compute-api-version 2.79 or greater is required to '
573+
'support the --enable-delete-on-termination option.'
574+
)
575+
raise exceptions.CommandError(msg)
576+
563577
kwargs['delete_on_termination'] = True
578+
564579
if parsed_args.disable_delete_on_termination:
580+
if compute_client.api_version < api_versions.APIVersion('2.79'):
581+
msg = _(
582+
'--os-compute-api-version 2.79 or greater is required to '
583+
'support the --disable-delete-on-termination option.'
584+
)
585+
raise exceptions.CommandError(msg)
586+
565587
kwargs['delete_on_termination'] = False
566588

567589
compute_client.volumes.create_server_volume(

openstackclient/tests/unit/compute/v2/test_server.py

Lines changed: 56 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -592,8 +592,57 @@ def test_server_add_volume(self):
592592
servers[0].id, self.volume.id, device='/dev/sdb')
593593
self.assertIsNone(result)
594594

595+
def test_server_add_volume_with_tag(self):
596+
# requires API 2.49 or later
597+
self.app.client_manager.compute.api_version = api_versions.APIVersion(
598+
'2.49')
599+
600+
servers = self.setup_servers_mock(count=1)
601+
arglist = [
602+
'--device', '/dev/sdb',
603+
'--tag', 'foo',
604+
servers[0].id,
605+
self.volume.id,
606+
]
607+
verifylist = [
608+
('server', servers[0].id),
609+
('volume', self.volume.id),
610+
('device', '/dev/sdb'),
611+
('tag', 'foo'),
612+
]
613+
614+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
615+
616+
result = self.cmd.take_action(parsed_args)
617+
618+
self.servers_volumes_mock.create_server_volume.assert_called_once_with(
619+
servers[0].id, self.volume.id, device='/dev/sdb', tag='foo')
620+
self.assertIsNone(result)
595621

596-
class TestServerVolumeV279(TestServerVolume):
622+
def test_server_add_volume_with_tag_pre_v249(self):
623+
self.app.client_manager.compute.api_version = api_versions.APIVersion(
624+
'2.48')
625+
626+
servers = self.setup_servers_mock(count=1)
627+
arglist = [
628+
servers[0].id,
629+
self.volume.id,
630+
'--tag', 'foo',
631+
]
632+
verifylist = [
633+
('server', servers[0].id),
634+
('volume', self.volume.id),
635+
('tag', 'foo'),
636+
]
637+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
638+
639+
ex = self.assertRaises(
640+
exceptions.CommandError,
641+
self.cmd.take_action,
642+
parsed_args)
643+
self.assertIn(
644+
'--os-compute-api-version 2.49 or greater is required',
645+
str(ex))
597646

598647
def test_server_add_volume_with_enable_delete_on_termination(self):
599648
self.app.client_manager.compute.api_version = api_versions.APIVersion(
@@ -650,7 +699,8 @@ def test_server_add_volume_with_disable_delete_on_termination(self):
650699
self.assertIsNone(result)
651700

652701
def test_server_add_volume_with_enable_delete_on_termination_pre_v279(
653-
self):
702+
self,
703+
):
654704
self.app.client_manager.compute.api_version = api_versions.APIVersion(
655705
'2.78')
656706

@@ -674,7 +724,8 @@ def test_server_add_volume_with_enable_delete_on_termination_pre_v279(
674724
str(ex))
675725

676726
def test_server_add_volume_with_disable_delete_on_termination_pre_v279(
677-
self):
727+
self,
728+
):
678729
self.app.client_manager.compute.api_version = api_versions.APIVersion(
679730
'2.78')
680731

@@ -698,7 +749,8 @@ def test_server_add_volume_with_disable_delete_on_termination_pre_v279(
698749
str(ex))
699750

700751
def test_server_add_volume_with_disable_and_enable_delete_on_termination(
701-
self):
752+
self,
753+
):
702754
self.app.client_manager.compute.api_version = api_versions.APIVersion(
703755
'2.79')
704756

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
---
2+
features:
3+
- Add ``--tag`` option to ``server add volume`` command when
4+
add a volume to server. Only available starting with
5+
``--os-compute-api-version 2.49``.

0 commit comments

Comments
 (0)