Skip to content

Commit f3fbb1b

Browse files
Huihuihhstephenfin
authored andcommitted
Compute: Add tag support for server add port
Change-Id: Ice6bf5fb57afeb10862c870b42732dcf166772d1 Story: 2002195 Task: 21676
1 parent a48c05b commit f3fbb1b

3 files changed

Lines changed: 82 additions & 1 deletion

File tree

openstackclient/compute/v2/server.py

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -354,6 +354,14 @@ def get_parser(self, prog_name):
354354
metavar="<port>",
355355
help=_("Port to add to the server (name or ID)"),
356356
)
357+
parser.add_argument(
358+
'--tag',
359+
metavar='<tag>',
360+
help=_(
361+
"Tag for the attached interface. "
362+
"(Supported by API versions '2.49' - '2.latest')"
363+
)
364+
)
357365
return parser
358366

359367
def take_action(self, parsed_args):
@@ -369,7 +377,22 @@ def take_action(self, parsed_args):
369377
else:
370378
port_id = parsed_args.port
371379

372-
server.interface_attach(port_id=port_id, net_id=None, fixed_ip=None)
380+
kwargs = {
381+
'port_id': port_id,
382+
'net_id': None,
383+
'fixed_ip': None,
384+
}
385+
386+
if parsed_args.tag:
387+
if compute_client.api_version < api_versions.APIVersion("2.49"):
388+
msg = _(
389+
'--os-compute-api-version 2.49 or greater is required to '
390+
'support the --tag option'
391+
)
392+
raise exceptions.CommandError(msg)
393+
kwargs['tag'] = parsed_args.tag
394+
395+
server.interface_attach(**kwargs)
373396

374397

375398
class AddNetwork(command.Command):

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

Lines changed: 53 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -465,6 +465,59 @@ def test_server_add_port_no_neutron(self):
465465
self._test_server_add_port('fake-port')
466466
self.find_port.assert_not_called()
467467

468+
def test_server_add_port_with_tag(self):
469+
self.app.client_manager.compute.api_version = api_versions.APIVersion(
470+
'2.49')
471+
472+
servers = self.setup_servers_mock(count=1)
473+
self.find_port.return_value.id = 'fake-port'
474+
arglist = [
475+
servers[0].id,
476+
'fake-port',
477+
'--tag', 'tag1',
478+
]
479+
verifylist = [
480+
('server', servers[0].id),
481+
('port', 'fake-port'),
482+
('tag', 'tag1'),
483+
]
484+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
485+
486+
result = self.cmd.take_action(parsed_args)
487+
self.assertIsNone(result)
488+
489+
servers[0].interface_attach.assert_called_once_with(
490+
port_id='fake-port',
491+
net_id=None,
492+
fixed_ip=None,
493+
tag='tag1')
494+
495+
def test_server_add_port_with_tag_pre_v249(self):
496+
self.app.client_manager.compute.api_version = api_versions.APIVersion(
497+
'2.48')
498+
499+
servers = self.setup_servers_mock(count=1)
500+
self.find_port.return_value.id = 'fake-port'
501+
arglist = [
502+
servers[0].id,
503+
'fake-port',
504+
'--tag', 'tag1',
505+
]
506+
verifylist = [
507+
('server', servers[0].id),
508+
('port', 'fake-port'),
509+
('tag', 'tag1'),
510+
]
511+
parsed_args = self.check_parser(self.cmd, arglist, verifylist)
512+
513+
ex = self.assertRaises(
514+
exceptions.CommandError,
515+
self.cmd.take_action,
516+
parsed_args)
517+
self.assertIn(
518+
'--os-compute-api-version 2.49 or greater is required',
519+
str(ex))
520+
468521

469522
class TestServerVolume(TestServer):
470523

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 port`` command when
4+
add a port to server. Only available starting with
5+
``--os-compute-api-version 2.49``.

0 commit comments

Comments
 (0)