From 1069d44810c57aaa3191ec77dc766001c7bd6327 Mon Sep 17 00:00:00 2001 From: Monty Taylor Date: Wed, 21 Jun 2017 04:20:35 +0100 Subject: [PATCH] Fix mismatch between port and port-id for REST call The old novaclient parameter is port-id, but the rest wants port. We should really stop having so much logic in os_server. Story: 2001075 Task: 4700 Change-Id: Ia16f8effca705e04b01fee5c2e899d90d084acb4 --- shade/openstackcloud.py | 2 ++ shade/tests/unit/test_create_server.py | 36 ++++++++++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/shade/openstackcloud.py b/shade/openstackcloud.py index ef818235c..3a487da97 100644 --- a/shade/openstackcloud.py +++ b/shade/openstackcloud.py @@ -5624,6 +5624,8 @@ class OpenStackCloud( for key in ('port', 'fixed_ip'): if key in nic: net[key] = nic.pop(key) + if 'port-id' in nic: + net['port'] = nic.pop('port-id') if nic: raise OpenStackCloudException( "Additional unsupported keys given for server network" diff --git a/shade/tests/unit/test_create_server.py b/shade/tests/unit/test_create_server.py index 308c20cfc..0e2855e7c 100644 --- a/shade/tests/unit/test_create_server.py +++ b/shade/tests/unit/test_create_server.py @@ -676,6 +676,42 @@ class TestCreateServer(base.RequestsMockTestCase): self.assert_calls() + def test_create_server_nics_port_id(self): + '''Verify port-id in nics input turns into port in REST.''' + build_server = fakes.make_fake_server('1234', '', 'BUILD') + active_server = fakes.make_fake_server('1234', '', 'BUILD') + image_id = uuid.uuid4().hex + port_id = uuid.uuid4().hex + + self.register_uris([ + dict(method='POST', + uri=self.get_mock_url( + 'compute', 'public', append=['servers']), + json={'server': build_server}, + validate=dict( + json={'server': { + u'flavorRef': fakes.FLAVOR_ID, + u'imageRef': image_id, + u'max_count': 1, + u'min_count': 1, + u'networks': [{u'port': port_id}], + u'name': u'server-name'}})), + dict(method='GET', + uri=self.get_mock_url( + 'compute', 'public', append=['servers', '1234']), + json={'server': active_server}), + dict(method='GET', + uri=self.get_mock_url( + 'network', 'public', append=['v2.0', 'networks.json']), + json={'networks': []}), + ]) + + self.cloud.create_server( + 'server-name', dict(id=image_id), dict(id=fakes.FLAVOR_ID), + nics=[{'port-id': port_id}], wait=False) + + self.assert_calls() + def test_create_boot_attach_volume(self): build_server = fakes.make_fake_server('1234', '', 'BUILD') active_server = fakes.make_fake_server('1234', '', 'BUILD')