Skip to content

Commit 8b394e5

Browse files
Zuulopenstack-gerrit
authored andcommitted
Merge "Switch openstack server add port/network to using sdk."
2 parents 163cb01 + 2183a61 commit 8b394e5

File tree

4 files changed

+104
-29
lines changed

4 files changed

+104
-29
lines changed

openstackclient/compute/v2/server.py

Lines changed: 11 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@
2727
from novaclient import api_versions
2828
from novaclient.v2 import servers
2929
from openstack import exceptions as sdk_exceptions
30+
from openstack import utils as sdk_utils
3031
from osc_lib.cli import format_columns
3132
from osc_lib.cli import parseractions
3233
from osc_lib.command import command
@@ -378,10 +379,10 @@ def get_parser(self, prog_name):
378379
return parser
379380

380381
def take_action(self, parsed_args):
381-
compute_client = self.app.client_manager.compute
382+
compute_client = self.app.client_manager.sdk_connection.compute
382383

383-
server = utils.find_resource(
384-
compute_client.servers, parsed_args.server)
384+
server = compute_client.find_server(
385+
parsed_args.server, ignore_missing=False)
385386

386387
if self.app.client_manager.is_network_endpoint_enabled():
387388
network_client = self.app.client_manager.network
@@ -392,20 +393,19 @@ def take_action(self, parsed_args):
392393

393394
kwargs = {
394395
'port_id': port_id,
395-
'net_id': None,
396396
'fixed_ip': None,
397397
}
398398

399399
if parsed_args.tag:
400-
if compute_client.api_version < api_versions.APIVersion("2.49"):
400+
if not sdk_utils.supports_microversion(compute_client, '2.49'):
401401
msg = _(
402402
'--os-compute-api-version 2.49 or greater is required to '
403403
'support the --tag option'
404404
)
405405
raise exceptions.CommandError(msg)
406406
kwargs['tag'] = parsed_args.tag
407407

408-
server.interface_attach(**kwargs)
408+
compute_client.create_server_interface(server, **kwargs)
409409

410410

411411
class AddNetwork(command.Command):
@@ -434,10 +434,10 @@ def get_parser(self, prog_name):
434434
return parser
435435

436436
def take_action(self, parsed_args):
437-
compute_client = self.app.client_manager.compute
437+
compute_client = self.app.client_manager.sdk_connection.compute
438438

439-
server = utils.find_resource(
440-
compute_client.servers, parsed_args.server)
439+
server = compute_client.find_server(
440+
parsed_args.server, ignore_missing=False)
441441

442442
if self.app.client_manager.is_network_endpoint_enabled():
443443
network_client = self.app.client_manager.network
@@ -447,13 +447,12 @@ def take_action(self, parsed_args):
447447
net_id = parsed_args.network
448448

449449
kwargs = {
450-
'port_id': None,
451450
'net_id': net_id,
452451
'fixed_ip': None,
453452
}
454453

455454
if parsed_args.tag:
456-
if compute_client.api_version < api_versions.APIVersion('2.49'):
455+
if not sdk_utils.supports_microversion(compute_client, '2.49'):
457456
msg = _(
458457
'--os-compute-api-version 2.49 or greater is required to '
459458
'support the --tag option'
@@ -462,7 +461,7 @@ def take_action(self, parsed_args):
462461

463462
kwargs['tag'] = parsed_args.tag
464463

465-
server.interface_attach(**kwargs)
464+
compute_client.create_server_interface(server, **kwargs)
466465

467466

468467
class AddServerSecurityGroup(command.Command):

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

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1071,3 +1071,51 @@ def test_server_create_with_empty_network_option_latest(self):
10711071
# networks and the test didn't specify a specific network.
10721072
self.assertNotIn('nics are required after microversion 2.36',
10731073
e.stderr)
1074+
1075+
def test_server_add_remove_network_port(self):
1076+
name = uuid.uuid4().hex
1077+
cmd_output = json.loads(self.openstack(
1078+
'server create -f json ' +
1079+
'--network private ' +
1080+
'--flavor ' + self.flavor_name + ' ' +
1081+
'--image ' + self.image_name + ' ' +
1082+
'--wait ' +
1083+
name
1084+
))
1085+
1086+
self.assertIsNotNone(cmd_output['id'])
1087+
self.assertEqual(name, cmd_output['name'])
1088+
1089+
self.openstack(
1090+
'server add network ' + name + ' public')
1091+
1092+
cmd_output = json.loads(self.openstack(
1093+
'server show -f json ' + name
1094+
))
1095+
1096+
addresses = cmd_output['addresses']
1097+
self.assertIn('public', addresses)
1098+
1099+
port_name = 'test-port'
1100+
1101+
cmd_output = json.loads(self.openstack(
1102+
'port list -f json'
1103+
))
1104+
self.assertNotIn(port_name, cmd_output)
1105+
1106+
cmd_output = json.loads(self.openstack(
1107+
'port create -f json ' +
1108+
'--network private ' + port_name
1109+
))
1110+
self.assertIsNotNone(cmd_output['id'])
1111+
1112+
self.openstack('server add port ' + name + ' ' + port_name)
1113+
1114+
cmd_output = json.loads(self.openstack(
1115+
'server show -f json ' + name
1116+
))
1117+
1118+
# TODO(diwei): test remove network/port after the commands are switched
1119+
1120+
self.openstack('server delete ' + name)
1121+
self.openstack('port delete ' + port_name)

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

Lines changed: 41 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@
2424
import iso8601
2525
from novaclient import api_versions
2626
from openstack import exceptions as sdk_exceptions
27+
from openstack import utils as sdk_utils
2728
from osc_lib.cli import format_columns
2829
from osc_lib import exceptions
2930
from osc_lib import utils as common_utils
@@ -69,6 +70,10 @@ def setUp(self):
6970
self.servers_mock = self.app.client_manager.compute.servers
7071
self.servers_mock.reset_mock()
7172

73+
self.app.client_manager.sdk_connection = mock.Mock()
74+
self.app.client_manager.sdk_connection.compute = mock.Mock()
75+
self.sdk_client = self.app.client_manager.sdk_connection.compute
76+
7277
# Get a shortcut to the compute client ServerMigrationsManager Mock
7378
self.server_migrations_mock = \
7479
self.app.client_manager.compute.server_migrations
@@ -133,6 +138,21 @@ def setup_servers_mock(self, count):
133138
0)
134139
return servers
135140

141+
def setup_sdk_servers_mock(self, count):
142+
servers = compute_fakes.FakeServer.create_sdk_servers(
143+
attrs=self.attrs,
144+
methods=self.methods,
145+
count=count,
146+
)
147+
148+
# This is the return value for compute_client.find_server()
149+
self.sdk_client.find_server = compute_fakes.FakeServer.get_servers(
150+
servers,
151+
0,
152+
)
153+
154+
return servers
155+
136156
def run_method_with_servers(self, method_name, server_count):
137157
servers = self.setup_servers_mock(server_count)
138158

@@ -570,7 +590,7 @@ def setUp(self):
570590
self.app.client_manager.network.find_port = self.find_port
571591

572592
def _test_server_add_port(self, port_id):
573-
servers = self.setup_servers_mock(count=1)
593+
servers = self.setup_sdk_servers_mock(count=1)
574594
port = 'fake-port'
575595

576596
arglist = [
@@ -585,8 +605,8 @@ def _test_server_add_port(self, port_id):
585605

586606
result = self.cmd.take_action(parsed_args)
587607

588-
servers[0].interface_attach.assert_called_once_with(
589-
port_id=port_id, net_id=None, fixed_ip=None)
608+
self.sdk_client.create_server_interface.assert_called_once_with(
609+
servers[0], port_id=port_id, fixed_ip=None)
590610
self.assertIsNone(result)
591611

592612
def test_server_add_port(self):
@@ -599,11 +619,12 @@ def test_server_add_port_no_neutron(self):
599619
self._test_server_add_port('fake-port')
600620
self.find_port.assert_not_called()
601621

602-
def test_server_add_port_with_tag(self):
622+
@mock.patch.object(sdk_utils, 'supports_microversion', return_value=True)
623+
def test_server_add_port_with_tag(self, sm_mock):
603624
self.app.client_manager.compute.api_version = api_versions.APIVersion(
604625
'2.49')
605626

606-
servers = self.setup_servers_mock(count=1)
627+
servers = self.setup_sdk_servers_mock(count=1)
607628
self.find_port.return_value.id = 'fake-port'
608629
arglist = [
609630
servers[0].id,
@@ -620,13 +641,14 @@ def test_server_add_port_with_tag(self):
620641
result = self.cmd.take_action(parsed_args)
621642
self.assertIsNone(result)
622643

623-
servers[0].interface_attach.assert_called_once_with(
644+
self.sdk_client.create_server_interface.assert_called_once_with(
645+
servers[0],
624646
port_id='fake-port',
625-
net_id=None,
626647
fixed_ip=None,
627648
tag='tag1')
628649

629-
def test_server_add_port_with_tag_pre_v249(self):
650+
@mock.patch.object(sdk_utils, 'supports_microversion', return_value=False)
651+
def test_server_add_port_with_tag_pre_v249(self, sm_mock):
630652
self.app.client_manager.compute.api_version = api_versions.APIVersion(
631653
'2.48')
632654

@@ -966,7 +988,7 @@ def setUp(self):
966988
self.app.client_manager.network.find_network = self.find_network
967989

968990
def _test_server_add_network(self, net_id):
969-
servers = self.setup_servers_mock(count=1)
991+
servers = self.setup_sdk_servers_mock(count=1)
970992
network = 'fake-network'
971993

972994
arglist = [
@@ -981,8 +1003,8 @@ def _test_server_add_network(self, net_id):
9811003

9821004
result = self.cmd.take_action(parsed_args)
9831005

984-
servers[0].interface_attach.assert_called_once_with(
985-
port_id=None, net_id=net_id, fixed_ip=None)
1006+
self.sdk_client.create_server_interface.assert_called_once_with(
1007+
servers[0], net_id=net_id, fixed_ip=None)
9861008
self.assertIsNone(result)
9871009

9881010
def test_server_add_network(self):
@@ -995,11 +1017,12 @@ def test_server_add_network_no_neutron(self):
9951017
self._test_server_add_network('fake-network')
9961018
self.find_network.assert_not_called()
9971019

998-
def test_server_add_network_with_tag(self):
1020+
@mock.patch.object(sdk_utils, 'supports_microversion', return_value=True)
1021+
def test_server_add_network_with_tag(self, sm_mock):
9991022
self.app.client_manager.compute.api_version = api_versions.APIVersion(
10001023
'2.49')
10011024

1002-
servers = self.setup_servers_mock(count=1)
1025+
servers = self.setup_sdk_servers_mock(count=1)
10031026
self.find_network.return_value.id = 'fake-network'
10041027

10051028
arglist = [
@@ -1017,18 +1040,19 @@ def test_server_add_network_with_tag(self):
10171040
result = self.cmd.take_action(parsed_args)
10181041
self.assertIsNone(result)
10191042

1020-
servers[0].interface_attach.assert_called_once_with(
1021-
port_id=None,
1043+
self.sdk_client.create_server_interface.assert_called_once_with(
1044+
servers[0],
10221045
net_id='fake-network',
10231046
fixed_ip=None,
10241047
tag='tag1'
10251048
)
10261049

1027-
def test_server_add_network_with_tag_pre_v249(self):
1050+
@mock.patch.object(sdk_utils, 'supports_microversion', return_value=False)
1051+
def test_server_add_network_with_tag_pre_v249(self, sm_mock):
10281052
self.app.client_manager.compute.api_version = api_versions.APIVersion(
10291053
'2.48')
10301054

1031-
servers = self.setup_servers_mock(count=1)
1055+
servers = self.setup_sdk_servers_mock(count=1)
10321056
self.find_network.return_value.id = 'fake-network'
10331057

10341058
arglist = [
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
---
2+
features:
3+
- |
4+
Migrate server add network/port from novaclient to openstacksdk.

0 commit comments

Comments
 (0)