From def5da634260be373fd01241eb0a94778072ffb7 Mon Sep 17 00:00:00 2001 From: Tao Liu Date: Wed, 3 Jul 2019 11:54:18 -0400 Subject: [PATCH] Fix dcmanager add subcloud exception The sysinv API for retrieving the network interfaces has been changed. This update makes changes in dcmanager to adapt the sysinv changes. Story: 2004766 Task: 35672 Change-Id: Ifaa510726c5029738e6b02f468a3a38f0682a351 Signed-off-by: Tao Liu --- dcmanager/drivers/openstack/sysinv_v1.py | 8 +++++--- dcmanager/tests/unit/drivers/test_sysinv_v1.py | 15 ++++++++++++--- 2 files changed, 17 insertions(+), 6 deletions(-) diff --git a/dcmanager/drivers/openstack/sysinv_v1.py b/dcmanager/drivers/openstack/sysinv_v1.py index 27eb343b3..faddc5cb5 100644 --- a/dcmanager/drivers/openstack/sysinv_v1.py +++ b/dcmanager/drivers/openstack/sysinv_v1.py @@ -62,10 +62,12 @@ class SysinvClient(base.DriverBase): def get_management_interface(self, hostname): """Get the management interface for a host.""" interfaces = self.sysinv_client.iinterface.list(hostname) - for interface in interfaces: - if interface.networktype == sysinv_constants.NETWORK_TYPE_MGMT: - return interface + interface_networks = self.sysinv_client.interface_network.\ + list_by_interface(interface.uuid) + for if_net in interface_networks: + if if_net.network_type == sysinv_constants.NETWORK_TYPE_MGMT: + return interface # This can happen if the host is still being installed and has not # yet created its management interface. diff --git a/dcmanager/tests/unit/drivers/test_sysinv_v1.py b/dcmanager/tests/unit/drivers/test_sysinv_v1.py index 290e3f85a..b1bdd2da6 100644 --- a/dcmanager/tests/unit/drivers/test_sysinv_v1.py +++ b/dcmanager/tests/unit/drivers/test_sysinv_v1.py @@ -29,9 +29,15 @@ from ddt import file_data class FakeInterface(object): - def __init__(self, ifname, networktype): + def __init__(self, ifname, uuid): self.ifname = ifname - self.networktype = networktype + self.uuid = uuid + + +class FakeInterfaceNetwork(object): + def __init__(self, network_type, interface): + self.network_type = network_type + self.interface = interface class FakeNetwork(object): @@ -75,13 +81,16 @@ class TestSysinvClient(base.DCManagerTestCase): @mock.patch.object(sysinv_v1.SysinvClient, '__init__') def test_get_management_interface(self, mock_sysinvclient_init): - interface = FakeInterface('interface', 'mgmt') + interface = FakeInterface('interface', 'uuid') + interface_network = FakeInterfaceNetwork('mgmt', 'interface') mock_sysinvclient_init.return_value = None sysinv_client = sysinv_v1.SysinvClient(consts.DEFAULT_REGION_NAME, None) sysinv_client.sysinv_client = mock.MagicMock() sysinv_client.sysinv_client.iinterface.list = mock.MagicMock() sysinv_client.sysinv_client.iinterface.list.return_value = [interface] + sysinv_client.sysinv_client.interface_network.list_by_interface.\ + return_value = [interface_network] management_interface = sysinv_client.get_management_interface( 'hostname') self.assertEqual(interface, management_interface)