From 0f2f768578900a7ca74091ab400bd9facce9eaf9 Mon Sep 17 00:00:00 2001 From: armando-migliaccio Date: Thu, 24 Apr 2014 12:11:41 -0700 Subject: [PATCH] NSX: add nsx switch lookup to dhcp and metadata operations The operations in questions were still using the neutron network uuid as the nsx switch uuid, but this is no longer valid. Close-bug: #1312439 Change-Id: I0f4bf02bb176c5c3914c7dd7e8249121af1b5a79 --- .../plugins/vmware/dhcp_meta/lsnmanager.py | 9 ++++++-- neutron/tests/unit/vmware/test_dhcpmeta.py | 23 ++++++++++++++----- 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/neutron/plugins/vmware/dhcp_meta/lsnmanager.py b/neutron/plugins/vmware/dhcp_meta/lsnmanager.py index 03a2af61e..cc69641e0 100644 --- a/neutron/plugins/vmware/dhcp_meta/lsnmanager.py +++ b/neutron/plugins/vmware/dhcp_meta/lsnmanager.py @@ -23,6 +23,7 @@ from neutron.openstack.common import excutils from neutron.openstack.common import log as logging from neutron.plugins.vmware.api_client import exception as api_exc from neutron.plugins.vmware.common import exceptions as p_exc +from neutron.plugins.vmware.common import nsx_utils from neutron.plugins.vmware.dbexts import lsn_db from neutron.plugins.vmware.dhcp_meta import constants as const from neutron.plugins.vmware.nsxlib import lsn as lsn_api @@ -181,8 +182,10 @@ class LsnManager(object): """Connect network to LSN via specified port and port_data.""" try: lsn_id = None + switch_id = nsx_utils.get_nsx_switch_ids( + context.session, self.cluster, network_id)[0] lswitch_port_id = switch_api.get_port_by_neutron_tag( - self.cluster, network_id, port_id)['uuid'] + self.cluster, switch_id, port_id)['uuid'] lsn_id = self.lsn_get(context, network_id) lsn_port_id = self.lsn_port_create(context, lsn_id, port_data) except (n_exc.NotFound, p_exc.NsxPluginException): @@ -213,8 +216,10 @@ class LsnManager(object): tenant_id = subnet['tenant_id'] lswitch_port_id = None try: + switch_id = nsx_utils.get_nsx_switch_ids( + context.session, self.cluster, network_id)[0] lswitch_port_id = switch_api.create_lport( - self.cluster, network_id, tenant_id, + self.cluster, switch_id, tenant_id, const.METADATA_PORT_ID, const.METADATA_PORT_NAME, const.METADATA_DEVICE_ID, True)['uuid'] lsn_port_id = self.lsn_port_create(self.cluster, lsn_id, data) diff --git a/neutron/tests/unit/vmware/test_dhcpmeta.py b/neutron/tests/unit/vmware/test_dhcpmeta.py index 40bf06fbc..c83a326e6 100644 --- a/neutron/tests/unit/vmware/test_dhcpmeta.py +++ b/neutron/tests/unit/vmware/test_dhcpmeta.py @@ -260,11 +260,14 @@ class LsnManagerTestCase(base.BaseTestCase): self.port_id = 'foo_port_id' self.lsn_id = 'foo_lsn_id' self.mac = 'aa:bb:cc:dd:ee:ff' + self.switch_id = 'foo_switch_id' self.lsn_port_id = 'foo_lsn_port_id' self.tenant_id = 'foo_tenant_id' self.manager = lsn_man.LsnManager(mock.Mock()) self.mock_lsn_api_p = mock.patch.object(lsn_man, 'lsn_api') self.mock_lsn_api = self.mock_lsn_api_p.start() + self.mock_nsx_utils_p = mock.patch.object(lsn_man, 'nsx_utils') + self.mock_nsx_utils = self.mock_nsx_utils_p.start() nsx.register_dhcp_opts(cfg) nsx.register_metadata_opts(cfg) @@ -430,13 +433,15 @@ class LsnManagerTestCase(base.BaseTestCase): self._test_lsn_port_delete_with_exc(NsxApiException) def _test_lsn_port_dhcp_setup(self, ret_val, sub): + self.mock_nsx_utils.get_nsx_switch_ids.return_value = [self.switch_id] self.mock_lsn_api.lsn_port_create.return_value = self.lsn_port_id with mock.patch.object( self.manager, 'lsn_get', return_value=self.lsn_id): with mock.patch.object(lsn_man.switch_api, 'get_port_by_neutron_tag'): expected = self.manager.lsn_port_dhcp_setup( - mock.ANY, mock.ANY, mock.ANY, mock.ANY, subnet_config=sub) + mock.Mock(), mock.ANY, mock.ANY, + mock.ANY, subnet_config=sub) self.assertEqual( 1, self.mock_lsn_api.lsn_port_create.call_count) self.assertEqual( @@ -452,21 +457,23 @@ class LsnManagerTestCase(base.BaseTestCase): self.assertEqual(1, f.call_count) def test_lsn_port_dhcp_setup_with_not_found(self): + self.mock_nsx_utils.get_nsx_switch_ids.return_value = [self.switch_id] with mock.patch.object(lsn_man.switch_api, 'get_port_by_neutron_tag') as f: f.side_effect = n_exc.NotFound self.assertRaises(p_exc.PortConfigurationError, self.manager.lsn_port_dhcp_setup, - mock.ANY, mock.ANY, mock.ANY, mock.ANY) + mock.Mock(), mock.ANY, mock.ANY, mock.ANY) def test_lsn_port_dhcp_setup_with_conflict(self): self.mock_lsn_api.lsn_port_plug_network.side_effect = ( p_exc.LsnConfigurationConflict(lsn_id=self.lsn_id)) + self.mock_nsx_utils.get_nsx_switch_ids.return_value = [self.switch_id] with mock.patch.object(lsn_man.switch_api, 'get_port_by_neutron_tag'): with mock.patch.object(self.manager, 'lsn_port_delete') as g: self.assertRaises(p_exc.PortConfigurationError, self.manager.lsn_port_dhcp_setup, - mock.ANY, mock.ANY, mock.ANY, mock.ANY) + mock.Mock(), mock.ANY, mock.ANY, mock.ANY) self.assertEqual(1, g.call_count) def _test_lsn_port_dhcp_configure_with_subnet( @@ -558,9 +565,11 @@ class LsnManagerTestCase(base.BaseTestCase): 'network_id': self.net_id, 'tenant_id': self.tenant_id } + self.mock_nsx_utils.get_nsx_switch_ids.return_value = [self.switch_id] with mock.patch.object(lsn_man.switch_api, 'create_lport') as f: f.return_value = {'uuid': self.port_id} - self.manager.lsn_port_metadata_setup(mock.ANY, self.lsn_id, subnet) + self.manager.lsn_port_metadata_setup( + mock.Mock(), self.lsn_id, subnet) self.assertEqual(1, self.mock_lsn_api.lsn_port_create.call_count) self.mock_lsn_api.lsn_port_plug_network.assert_called_once_with( mock.ANY, self.lsn_id, mock.ANY, self.port_id) @@ -572,11 +581,12 @@ class LsnManagerTestCase(base.BaseTestCase): 'network_id': self.net_id, 'tenant_id': self.tenant_id } + self.mock_nsx_utils.get_nsx_switch_ids.return_value = [self.switch_id] with mock.patch.object(lsn_man.switch_api, 'create_lport') as f: f.side_effect = n_exc.NotFound self.assertRaises(p_exc.PortConfigurationError, self.manager.lsn_port_metadata_setup, - mock.ANY, self.lsn_id, subnet) + mock.Mock(), self.lsn_id, subnet) def test_lsn_port_metadata_setup_raise_conflict(self): subnet = { @@ -585,6 +595,7 @@ class LsnManagerTestCase(base.BaseTestCase): 'network_id': self.net_id, 'tenant_id': self.tenant_id } + self.mock_nsx_utils.get_nsx_switch_ids.return_value = [self.switch_id] with mock.patch.object(lsn_man.switch_api, 'create_lport') as f: with mock.patch.object(lsn_man.switch_api, 'delete_port') as g: f.return_value = {'uuid': self.port_id} @@ -592,7 +603,7 @@ class LsnManagerTestCase(base.BaseTestCase): p_exc.LsnConfigurationConflict(lsn_id=self.lsn_id)) self.assertRaises(p_exc.PortConfigurationError, self.manager.lsn_port_metadata_setup, - mock.ANY, self.lsn_id, subnet) + mock.Mock(), self.lsn_id, subnet) self.assertEqual(1, self.mock_lsn_api.lsn_port_delete.call_count) self.assertEqual(1, g.call_count) -- 2.45.2