From a5c556141ec9123422a5f372545219b5bb0a59ee Mon Sep 17 00:00:00 2001 From: spisarski Date: Thu, 3 Aug 2017 10:57:49 -0600 Subject: Refactored port retrieval to include PortSettigs. Refactored neutron_utils#get_port_by_name to get_port while adding in a port_settings object for more robust query options. JIRA: SNAPS-162 Change-Id: I01222ad344224db94615859448ad05d8d5bc0c30 Signed-off-by: spisarski --- snaps/openstack/create_instance.py | 4 ++-- snaps/openstack/create_router.py | 4 ++-- snaps/openstack/tests/create_router_tests.py | 7 +++++++ snaps/openstack/utils/neutron_utils.py | 28 +++++++++++++++++++++------- snaps/openstack/utils/nova_utils.py | 4 ++-- 5 files changed, 34 insertions(+), 13 deletions(-) diff --git a/snaps/openstack/create_instance.py b/snaps/openstack/create_instance.py index 252f2fe..ef8b4f3 100644 --- a/snaps/openstack/create_instance.py +++ b/snaps/openstack/create_instance.py @@ -259,8 +259,8 @@ class OpenStackVmInstance: ports = list() for port_setting in port_settings: - port = neutron_utils.get_port_by_name(self.__neutron, - port_setting.name) + port = neutron_utils.get_port( + self.__neutron, port_settings=port_setting) if port: ports.append((port_setting.name, port)) elif not cleanup: diff --git a/snaps/openstack/create_router.py b/snaps/openstack/create_router.py index 3e0d904..6bbfcf9 100644 --- a/snaps/openstack/create_router.py +++ b/snaps/openstack/create_router.py @@ -89,8 +89,8 @@ class OpenStackRouter: 'Subnet not found with name ' + internal_subnet_name) for port_setting in self.router_settings.port_settings: - port = neutron_utils.get_port_by_name(self.__neutron, - port_setting.name) + port = neutron_utils.get_port( + self.__neutron, port_settings=port_setting) logger.info( 'Retrieved port %s for router - %s', port_setting.name, self.router_settings.name) diff --git a/snaps/openstack/tests/create_router_tests.py b/snaps/openstack/tests/create_router_tests.py index 6e10d66..6f37445 100644 --- a/snaps/openstack/tests/create_router_tests.py +++ b/snaps/openstack/tests/create_router_tests.py @@ -326,6 +326,13 @@ class CreateRouterSuccessTests(OSIntegrationTestCase): self.assertTrue(verify_router_attributes(router, self.router_creator)) + # Instantiate second identical creator to ensure a second router + # has not been created + router_creator2 = create_router.OpenStackRouter( + self.os_creds, router_settings) + router2 = router_creator2.create() + self.assertIsNotNone(self.router_creator.get_router(), router2) + def test_create_router_external_network(self): """ Test creation of a router connected to an external network and a diff --git a/snaps/openstack/utils/neutron_utils.py b/snaps/openstack/utils/neutron_utils.py index 061bc56..5789e17 100644 --- a/snaps/openstack/utils/neutron_utils.py +++ b/snaps/openstack/utils/neutron_utils.py @@ -307,18 +307,32 @@ def delete_port(neutron, port): neutron.delete_port(port.id) -def get_port_by_name(neutron, port_name): +def get_port(neutron, port_settings=None, port_name=None): """ - Returns the first port object (dictionary) found with a given name + Returns the first port object (dictionary) found for the given query :param neutron: the client - :param port_name: the name of the port to retrieve + :param port_settings: the PortSettings object used for generating the query + :param port_name: if port_settings is None, this name is the value to place + into the query :return: a SNAPS-OO Port domain object """ - ports = neutron.list_ports(**{'name': port_name}) + port_filter = dict() + + if port_settings: + port_filter['name'] = port_settings.name + if port_settings.admin_state_up: + port_filter['admin_state_up'] = port_settings.admin_state_up + if port_settings.device_id: + port_filter['device_id'] = port_settings.device_id + if port_settings.mac_address: + port_filter['mac_address'] = port_settings.mac_address + elif port_name: + port_filter['name'] = port_name + + ports = neutron.list_ports(**port_filter) for port in ports['ports']: - if port['name'] == port_name: - return Port(name=port['name'], id=port['id'], - ips=port['fixed_ips'], mac_address=port['mac_address']) + return Port(name=port['name'], id=port['id'], + ips=port['fixed_ips'], mac_address=port['mac_address']) return None diff --git a/snaps/openstack/utils/nova_utils.py b/snaps/openstack/utils/nova_utils.py index a0c028a..d6a8e02 100644 --- a/snaps/openstack/utils/nova_utils.py +++ b/snaps/openstack/utils/nova_utils.py @@ -65,8 +65,8 @@ def create_server(nova, neutron, glance, instance_settings, image_settings, ports = list() for port_setting in instance_settings.port_settings: - ports.append(neutron_utils.get_port_by_name( - neutron, port_setting.name)) + ports.append(neutron_utils.get_port( + neutron, port_settings=port_setting)) nics = [] for port in ports: kv = dict() -- cgit 1.2.3-korg