Skip to content

Commit 1c7fe3b

Browse files
Huihuihhstephenfin
authored andcommitted
Compute: Add tag support for server add volume
Change-Id: Id9f2e09426f6824e9ca672bf7808b5165c650a69 Story: 2002195 Task: 21675
1 parent 960004d commit 1c7fe3b

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
@@ -460,20 +460,32 @@ def get_parser(self, prog_name):
460460
metavar='<device>',
461461
help=_('Server internal device name for volume'),
462462
)
463+
parser.add_argument(
464+
'--tag',
465+
metavar='<tag>',
466+
help=_(
467+
"Tag for the attached volume. "
468+
"(Supported by API versions '2.49' - '2.latest')"
469+
),
470+
)
463471
termination_group = parser.add_mutually_exclusive_group()
464472
termination_group.add_argument(
465473
'--enable-delete-on-termination',
466474
action='store_true',
467-
help=_("Specify if the attached volume should be deleted when "
468-
"the server is destroyed. (Supported with "
469-
"``--os-compute-api-version`` 2.79 or greater.)"),
475+
help=_(
476+
"Specify if the attached volume should be deleted when the "
477+
"server is destroyed. "
478+
"(Supported by API versions '2.79' - '2.latest')"
479+
),
470480
)
471481
termination_group.add_argument(
472482
'--disable-delete-on-termination',
473483
action='store_true',
474-
help=_("Specify if the attached volume should not be deleted "
475-
"when the server is destroyed. (Supported with "
476-
"``--os-compute-api-version`` 2.79 or greater.)"),
484+
help=_(
485+
"Specify if the attached volume should not be deleted when "
486+
"the server is destroyed. "
487+
"(Supported by API versions '2.79' - '2.latest')"
488+
),
477489
)
478490
return parser
479491

@@ -490,28 +502,38 @@ def take_action(self, parsed_args):
490502
parsed_args.volume,
491503
)
492504

493-
support_set_delete_on_termination = (compute_client.api_version >=
494-
api_versions.APIVersion('2.79'))
495-
496-
if not support_set_delete_on_termination:
497-
if parsed_args.enable_delete_on_termination:
498-
msg = _('--os-compute-api-version 2.79 or greater '
499-
'is required to support the '
500-
'--enable-delete-on-termination option.')
501-
raise exceptions.CommandError(msg)
502-
if parsed_args.disable_delete_on_termination:
503-
msg = _('--os-compute-api-version 2.79 or greater '
504-
'is required to support the '
505-
'--disable-delete-on-termination option.')
506-
raise exceptions.CommandError(msg)
507-
508505
kwargs = {
509506
"device": parsed_args.device
510507
}
511508

509+
if parsed_args.tag:
510+
if compute_client.api_version < api_versions.APIVersion('2.49'):
511+
msg = _(
512+
'--os-compute-api-version 2.49 or greater is required to '
513+
'support the --tag option'
514+
)
515+
raise exceptions.CommandError(msg)
516+
517+
kwargs['tag'] = parsed_args.tag
518+
512519
if parsed_args.enable_delete_on_termination:
520+
if compute_client.api_version < api_versions.APIVersion('2.79'):
521+
msg = _(
522+
'--os-compute-api-version 2.79 or greater is required to '
523+
'support the --enable-delete-on-termination option.'
524+
)
525+
raise exceptions.CommandError(msg)
526+
513527
kwargs['delete_on_termination'] = True
528+
514529
if parsed_args.disable_delete_on_termination:
530+
if compute_client.api_version < api_versions.APIVersion('2.79'):
531+
msg = _(
532+
'--os-compute-api-version 2.79 or greater is required to '
533+
'support the --disable-delete-on-termination option.'
534+
)
535+
raise exceptions.CommandError(msg)
536+
515537
kwargs['delete_on_termination'] = False
516538

517539
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
@@ -503,8 +503,57 @@ def test_server_add_volume(self):
503503
servers[0].id, self.volume.id, device='/dev/sdb')
504504
self.assertIsNone(result)
505505

506+
def test_server_add_volume_with_tag(self):
507+
# requires API 2.49 or later
508+
self.app.client_manager.compute.api_version = api_versions.APIVersion(
509+
'2.49')
510+
511+
servers = self.setup_servers_mock(count=1)
512+
arglist = [
513+
'--device', '/dev/sdb',
514+
'--tag', 'foo',
515+
servers[0].id,
516+
self.volume.id,
517+
]
518+
verifylist = [
519+
('server', servers[0].id),
520+
('volume', self.volume.id),
521+
('device', '/dev/sdb'),
522+
('tag', 'foo'),
523+
]
506524

507-
class TestServerVolumeV279(TestServerVolume):
525+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
526+
527+
result = self.cmd.take_action(parsed_args)
528+
529+
self.servers_volumes_mock.create_server_volume.assert_called_once_with(
530+
servers[0].id, self.volume.id, device='/dev/sdb', tag='foo')
531+
self.assertIsNone(result)
532+
533+
def test_server_add_volume_with_tag_pre_v249(self):
534+
self.app.client_manager.compute.api_version = api_versions.APIVersion(
535+
'2.48')
536+
537+
servers = self.setup_servers_mock(count=1)
538+
arglist = [
539+
servers[0].id,
540+
self.volume.id,
541+
'--tag', 'foo',
542+
]
543+
verifylist = [
544+
('server', servers[0].id),
545+
('volume', self.volume.id),
546+
('tag', 'foo'),
547+
]
548+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
549+
550+
ex = self.assertRaises(
551+
exceptions.CommandError,
552+
self.cmd.take_action,
553+
parsed_args)
554+
self.assertIn(
555+
'--os-compute-api-version 2.49 or greater is required',
556+
str(ex))
508557

509558
def test_server_add_volume_with_enable_delete_on_termination(self):
510559
self.app.client_manager.compute.api_version = api_versions.APIVersion(
@@ -561,7 +610,8 @@ def test_server_add_volume_with_disable_delete_on_termination(self):
561610
self.assertIsNone(result)
562611

563612
def test_server_add_volume_with_enable_delete_on_termination_pre_v279(
564-
self):
613+
self,
614+
):
565615
self.app.client_manager.compute.api_version = api_versions.APIVersion(
566616
'2.78')
567617

@@ -585,7 +635,8 @@ def test_server_add_volume_with_enable_delete_on_termination_pre_v279(
585635
str(ex))
586636

587637
def test_server_add_volume_with_disable_delete_on_termination_pre_v279(
588-
self):
638+
self,
639+
):
589640
self.app.client_manager.compute.api_version = api_versions.APIVersion(
590641
'2.78')
591642

@@ -609,7 +660,8 @@ def test_server_add_volume_with_disable_delete_on_termination_pre_v279(
609660
str(ex))
610661

611662
def test_server_add_volume_with_disable_and_enable_delete_on_termination(
612-
self):
663+
self,
664+
):
613665
self.app.client_manager.compute.api_version = api_versions.APIVersion(
614666
'2.79')
615667

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)