From 0dec95dc4e47e91117c035617bf57fc29ae545bc Mon Sep 17 00:00:00 2001 From: Kent Wu Date: Wed, 11 Apr 2018 16:19:30 -0700 Subject: [PATCH] Revert "Split the default ext epg 0/0 subnet into 0/1 and 128/1" This reverts commit e83f71dbe434751803186d4ae3f5e7b7db966f0a. Change-Id: I669156554bc5505d23ffcaaf6170808b2ac8106e --- .../plugins/ml2plus/drivers/apic_aim/db.py | 14 -- .../drivers/apic_aim/mechanism_driver.py | 139 ++---------------- .../neutron/services/sfc/aim/sfc_driver.py | 11 +- .../unit/plugins/ml2plus/test_apic_aim.py | 51 ------- .../unit/services/sfc/test_aim_sfc_driver.py | 44 ++---- 5 files changed, 31 insertions(+), 228 deletions(-) diff --git a/gbpservice/neutron/plugins/ml2plus/drivers/apic_aim/db.py b/gbpservice/neutron/plugins/ml2plus/drivers/apic_aim/db.py index f2034a7d7..a111baa57 100644 --- a/gbpservice/neutron/plugins/ml2plus/drivers/apic_aim/db.py +++ b/gbpservice/neutron/plugins/ml2plus/drivers/apic_aim/db.py @@ -145,20 +145,6 @@ class DbMixin(object): vrf_name=vrf.name). first() is not None) - def _is_vrf_used_by_l3outs(self, session, vrf): - return (session.query(NetworkMapping.network_id). - filter(NetworkMapping.vrf_tenant_name == vrf.tenant_name, - NetworkMapping.vrf_name == vrf.name, - NetworkMapping.l3out_name.isnot(None)). - first() is not None) - - def _get_l3outs_for_vrf(self, session, vrf): - return (session.query(NetworkMapping). - filter(NetworkMapping.vrf_tenant_name == vrf.tenant_name, - NetworkMapping.vrf_name == vrf.name, - NetworkMapping.l3out_name.isnot(None)). - all()) - def _get_network_bd(self, mapping): return aim_resource.BridgeDomain( tenant_name=mapping.bd_tenant_name, diff --git a/gbpservice/neutron/plugins/ml2plus/drivers/apic_aim/mechanism_driver.py b/gbpservice/neutron/plugins/ml2plus/drivers/apic_aim/mechanism_driver.py index c8b9cf744..59fcfa7a1 100644 --- a/gbpservice/neutron/plugins/ml2plus/drivers/apic_aim/mechanism_driver.py +++ b/gbpservice/neutron/plugins/ml2plus/drivers/apic_aim/mechanism_driver.py @@ -90,7 +90,6 @@ DEFAULT_SG_NAME = 'DefaultSecurityGroup' L3OUT_NODE_PROFILE_NAME = 'NodeProfile' L3OUT_IF_PROFILE_NAME = 'IfProfile' L3OUT_EXT_EPG = 'ExtEpg' -DEFAULT_SVI_L3OUT_NAME = 'DefaultSVIL3Out' SUPPORTED_VNIC_TYPES = [portbindings.VNIC_NORMAL, portbindings.VNIC_DIRECT] @@ -480,66 +479,6 @@ class ApicMechanismDriver(api_plus.MechanismDriver, 'name': mapping.domain_name}) return domains - def _scope_default_svi_l3out_name_by_vrf(self, vrf_name): - return DEFAULT_SVI_L3OUT_NAME + '_' + vrf_name - - def _create_default_svi_l3out(self, aim_ctx, vrf): - default_l3out_name = self._scope_default_svi_l3out_name_by_vrf( - vrf.name) - default_svi_l3out = aim_resource.L3Outside( - tenant_name=vrf.tenant_name, - name=default_l3out_name, - display_name=DEFAULT_SVI_L3OUT_NAME, vrf_name=vrf.name, - l3_domain_dn=self.l3_domain_dn) - self.aim.create(aim_ctx, default_svi_l3out, - overwrite=True) - default_svi_ext_net = aim_resource.ExternalNetwork( - tenant_name=vrf.tenant_name, - l3out_name=default_l3out_name, name=L3OUT_EXT_EPG) - # Can't overwrite this as it will wipe out the existing contracts - if not self.aim.get(aim_ctx, default_svi_ext_net): - self.aim.create(aim_ctx, default_svi_ext_net) - ext_subnet_ipv4_1 = aim_resource.ExternalSubnet( - tenant_name=vrf.tenant_name, - l3out_name=default_l3out_name, - external_network_name=L3OUT_EXT_EPG, cidr='0.0.0.0/1') - self.aim.create(aim_ctx, ext_subnet_ipv4_1, - overwrite=True) - ext_subnet_ipv4_2 = aim_resource.ExternalSubnet( - tenant_name=vrf.tenant_name, - l3out_name=default_l3out_name, - external_network_name=L3OUT_EXT_EPG, cidr='128.0.0.0/1') - self.aim.create(aim_ctx, ext_subnet_ipv4_2, - overwrite=True) - ext_subnet_ipv6_1 = aim_resource.ExternalSubnet( - tenant_name=vrf.tenant_name, - l3out_name=default_l3out_name, - external_network_name=L3OUT_EXT_EPG, cidr='::/1') - self.aim.create(aim_ctx, ext_subnet_ipv6_1, - overwrite=True) - ext_subnet_ipv6_2 = aim_resource.ExternalSubnet( - tenant_name=vrf.tenant_name, - l3out_name=default_l3out_name, - external_network_name=L3OUT_EXT_EPG, cidr='8000::/1') - self.aim.create(aim_ctx, ext_subnet_ipv6_2, - overwrite=True) - - def _delete_default_svi_l3out(self, aim_ctx, vrf): - if not self._is_vrf_used_by_l3outs(aim_ctx.db_session, - vrf): - LOG.debug("Deleting default SVI for %(vrf)s from tenant " - "%(tenant)s", - {'vrf': vrf.name, - 'tenant': vrf.tenant_name}) - default_l3out_name = self._scope_default_svi_l3out_name_by_vrf( - vrf.name) - aim_l3outs = self.aim.find( - aim_ctx, aim_resource.L3Outside, tenant_name=vrf.tenant_name, - name=default_l3out_name, vrf_name=vrf.name, - monitored=False) - if aim_l3outs: - self.aim.delete(aim_ctx, aim_l3outs[0], cascade=True) - def create_network_precommit(self, context): current = context.current LOG.debug("APIC AIM MD creating network: %s", current) @@ -643,9 +582,6 @@ class ApicMechanismDriver(api_plus.MechanismDriver, self._add_network_mapping(session, current['id'], None, None, vrf, aim_ext_net) - - # Create the SVI default l3out also - self._create_default_svi_l3out(aim_ctx, vrf) return else: bd, epg = self._map_network(session, current) @@ -861,18 +797,12 @@ class ApicMechanismDriver(api_plus.MechanismDriver, self.aim.delete(aim_ctx, aim_l3out_np, cascade=True) else: self.aim.delete(aim_ctx, l3out, cascade=True) - # Before we can clean up the default vrf, we have to # remove the association in the network_mapping first. mapping = self._get_network_mapping(session, current['id']) - l3out_vrf = self._get_network_vrf(mapping) self._set_network_vrf(mapping, self._map_unrouted_vrf()) vrf = self._map_default_vrf(session, current) self._cleanup_default_vrf(aim_ctx, vrf) - - # Also delete the default SVI if this is the last - # SVI l3out in this vrf - self._delete_default_svi_l3out(aim_ctx, l3out_vrf) else: mapping = self._get_network_mapping(session, current['id']) bd = self._get_network_bd(mapping) @@ -1578,7 +1508,8 @@ class ApicMechanismDriver(api_plus.MechanismDriver, bd = self._get_network_bd(network_db.aim_mapping) epg = self._get_network_epg(network_db.aim_mapping) elif network_db.aim_mapping.l3out_name: - epg = self._get_default_svi_ext_epg(network_db) + epg = self._get_network_l3out_ext_net( + network_db.aim_mapping) if network_db.aim_mapping.epg_name: # Create AIM Subnet(s) for each added Neutron subnet. @@ -1667,9 +1598,9 @@ class ApicMechanismDriver(api_plus.MechanismDriver, filter_by(id=router_id). one()) contract = self._map_router(session, router_db, True) - old_vrf = self._get_network_vrf(network_db.aim_mapping) epg = None + old_vrf = self._get_network_vrf(network_db.aim_mapping) if network_db.aim_mapping.epg_name: bd = self._get_network_bd(network_db.aim_mapping) epg = self._get_network_epg(network_db.aim_mapping) @@ -1680,20 +1611,7 @@ class ApicMechanismDriver(api_plus.MechanismDriver, self.aim.delete(aim_ctx, sn) # SVI network with auto l3out. elif network_db.aim_mapping.l3out_name: - # Need to make sure this is the last SVI network in this vrf - # that connects to this router - l3out_net_ids = self._get_l3out_ids_for_vrf(session, old_vrf) - rtr_ports = (session.query(l3_db.RouterPort.port_id). - join(models_v2.Port, - models_v2.Port.id == l3_db.RouterPort.port_id). - filter(l3_db.RouterPort.router_id == router_id, - l3_db.RouterPort.port_type == - n_constants.DEVICE_OWNER_ROUTER_INTF, - models_v2.Port.network_id.in_(l3out_net_ids) - ). - first()) - if not rtr_ports: - epg = self._get_default_svi_ext_epg(network_db) + epg = self._get_network_l3out_ext_net(network_db.aim_mapping) # Find remaining routers with interfaces to this network. router_ids = [r[0] for r in @@ -2456,10 +2374,6 @@ class ApicMechanismDriver(api_plus.MechanismDriver, mappings = self._get_network_mappings_for_vrf(session, vrf) return [mapping.network_id for mapping in mappings] - def _get_l3out_ids_for_vrf(self, session, vrf): - mappings = self._get_l3outs_for_vrf(session, vrf) - return [mapping.network_id for mapping in mappings] - def _get_routers_for_vrf(self, session, vrf): # REVISIT: Persist router/VRF relationship? @@ -2505,7 +2419,6 @@ class ApicMechanismDriver(api_plus.MechanismDriver, # NOTE: Must only be called for networks that are not yet # attached to any router. - old_vrf = self._get_network_vrf(network_db.aim_mapping) if not self._is_svi_db(network_db): bd = self._get_network_bd(network_db.aim_mapping) epg = self._get_network_epg(network_db.aim_mapping) @@ -2547,7 +2460,6 @@ class ApicMechanismDriver(api_plus.MechanismDriver, l3out = self.aim.create(aim_ctx, l3out) self._set_network_l3out(network_db.aim_mapping, l3out) - self._create_default_svi_l3out(aim_ctx, new_vrf) for old_child in self.aim.get_subtree(aim_ctx, old_l3out): new_child = copy.copy(old_child) new_child.tenant_name = new_vrf.tenant_name @@ -2562,11 +2474,8 @@ class ApicMechanismDriver(api_plus.MechanismDriver, else: l3out = self.aim.update(aim_ctx, l3out, vrf_name=new_vrf.name) - self._create_default_svi_l3out(aim_ctx, new_vrf) self._set_network_vrf_and_notify(ctx, network_db.aim_mapping, new_vrf) - if self._is_svi_db(network_db): - self._delete_default_svi_l3out(aim_ctx, old_vrf) # All non-router ports on this network need to be notified # since their BD's VRF and possibly their BD's and EPG's @@ -2576,8 +2485,8 @@ class ApicMechanismDriver(api_plus.MechanismDriver, if not self._is_svi_db(network_db): return bd, epg else: - default_ext_net = self._get_default_svi_ext_epg(network_db) - return l3out, default_ext_net + ext_net = self._get_network_l3out_ext_net(network_db.aim_mapping) + return l3out, ext_net def _dissassociate_network_from_vrf(self, ctx, aim_ctx, network_db, old_vrf, nets_to_notify): @@ -2628,7 +2537,6 @@ class ApicMechanismDriver(api_plus.MechanismDriver, l3out = self.aim.create(aim_ctx, l3out) self._set_network_l3out(network_db.aim_mapping, l3out) - self._create_default_svi_l3out(aim_ctx, new_vrf) for old_child in self.aim.get_subtree(aim_ctx, old_l3out): new_child = copy.copy(old_child) new_child.tenant_name = new_tenant_name @@ -2645,11 +2553,8 @@ class ApicMechanismDriver(api_plus.MechanismDriver, l3out = self._get_network_l3out(network_db.aim_mapping) l3out = self.aim.update(aim_ctx, l3out, vrf_name=new_vrf.name) - self._create_default_svi_l3out(aim_ctx, new_vrf) self._set_network_vrf_and_notify(ctx, network_db.aim_mapping, new_vrf) - if self._is_svi_db(network_db): - self._delete_default_svi_l3out(aim_ctx, old_vrf) # All non-router ports on this network need to be notified # since their BD's VRF and possibly their BD's and EPG's @@ -2711,7 +2616,6 @@ class ApicMechanismDriver(api_plus.MechanismDriver, l3out = self.aim.create(aim_ctx, l3out) self._set_network_l3out(network_db.aim_mapping, l3out) - self._create_default_svi_l3out(aim_ctx, new_vrf) for old_child in self.aim.get_subtree(aim_ctx, old_l3out): new_child = copy.copy(old_child) new_child.tenant_name = new_vrf.tenant_name @@ -2728,12 +2632,9 @@ class ApicMechanismDriver(api_plus.MechanismDriver, l3out = self._get_network_l3out(network_db.aim_mapping) l3out = self.aim.update(aim_ctx, l3out, vrf_name=new_vrf.name) - self._create_default_svi_l3out(aim_ctx, new_vrf) self._set_network_vrf_and_notify(ctx, network_db.aim_mapping, new_vrf) - if network_db.aim_mapping.l3out_name: - self._delete_default_svi_l3out(aim_ctx, old_vrf) # All non-router ports on all networks in topology need to be # notified since their BDs' VRFs and possibly their BDs' and @@ -3911,28 +3812,20 @@ class ApicMechanismDriver(api_plus.MechanismDriver, port = self.plugin.get_port(plugin_context, port_id) return port['network_id'] - def _get_default_svi_l3out(self, network_db): - aim_ext_net = self._get_default_svi_ext_epg(network_db) + def _get_svi_default_external_epg(self, network): + if not network.get(cisco_apic.SVI): + return None + ext_net_dn = network.get(cisco_apic.DIST_NAMES, {}).get( + cisco_apic.EXTERNAL_NETWORK) + return aim_resource.ExternalNetwork.from_dn(ext_net_dn) + + def _get_svi_net_l3out(self, network): + aim_ext_net = self._get_svi_default_external_epg(network) if not aim_ext_net: return None return aim_resource.L3Outside( tenant_name=aim_ext_net.tenant_name, name=aim_ext_net.l3out_name) - def _get_default_svi_ext_epg(self, network_db): - if self._is_svi_db(network_db): - # SVI network with pre-existing l3out - if network_db.aim_extension_mapping.external_network_dn: - return aim_resource.ExternalNetwork.from_dn( - network_db.aim_extension_mapping.external_network_dn) - # SVI auto-l3out - l3out_vrf = self._get_network_vrf(network_db.aim_mapping) - l3out_name = self._scope_default_svi_l3out_name_by_vrf( - l3out_vrf.name) - return aim_resource.ExternalNetwork( - tenant_name=l3out_vrf.tenant_name, l3out_name=l3out_name, - name=L3OUT_EXT_EPG) - return None - def _get_bd_by_network_id(self, session, network_id): net_mapping = self._get_network_mapping(session, network_id) return self._get_network_bd(net_mapping) @@ -3946,7 +3839,7 @@ class ApicMechanismDriver(api_plus.MechanismDriver, if vrf_dn: return aim_resource.VRF.from_dn(vrf_dn) # Pre-existing EXT NET. - l3out = self._get_default_svi_l3out(network) + l3out = self._get_svi_net_l3out(network) if l3out: aim_ctx = aim_context.AimContext(db_session=session) l3out = self.aim.get(aim_ctx, l3out) diff --git a/gbpservice/neutron/services/sfc/aim/sfc_driver.py b/gbpservice/neutron/services/sfc/aim/sfc_driver.py index 2a22b5fe4..61cd65a63 100644 --- a/gbpservice/neutron/services/sfc/aim/sfc_driver.py +++ b/gbpservice/neutron/services/sfc/aim/sfc_driver.py @@ -595,12 +595,11 @@ class SfcAIMDriver(SfcAIMDriverBase): prefix) aim_ctx = aim_context.AimContext(plugin_context.session) cidr = netaddr.IPNetwork(cidr) - network_db = self.plugin._get_network(plugin_context, net['id']) - l3out = self.aim_mech._get_default_svi_l3out(network_db) + l3out = self.aim_mech._get_svi_net_l3out(net) if l3out: if cidr.prefixlen == 0: # Use default External Network - ext_net = self.aim_mech._get_default_svi_ext_epg(network_db) + ext_net = self.aim_mech._get_svi_default_external_epg(net) ext_net_db = self.aim.get(aim_ctx, ext_net) if not ext_net_db: raise exceptions.DefaultExternalNetworkNotFound( @@ -641,8 +640,7 @@ class SfcAIMDriver(SfcAIMDriverBase): flc_aid = self._get_external_group_aim_name(plugin_context, flowc, prefix) aim_ctx = aim_context.AimContext(plugin_context.session) - network_db = self.plugin._get_network(plugin_context, net['id']) - l3out = self.aim_mech._get_default_svi_l3out(network_db) + l3out = self.aim_mech._get_svi_net_l3out(net) cidr = netaddr.IPNetwork(cidr) ext_net = None if l3out: @@ -653,8 +651,7 @@ class SfcAIMDriver(SfcAIMDriverBase): epg = self.aim.get(aim_ctx, ext_net) else: epg = self.aim.get( - aim_ctx, - self.aim_mech._get_default_svi_ext_epg(network_db)) + aim_ctx, self.aim_mech._get_svi_default_external_epg(net)) else: epg = self.aim.get(aim_ctx, self.aim_mech._get_epg_by_network_id( plugin_context.session, net['id'])) diff --git a/gbpservice/neutron/tests/unit/plugins/ml2plus/test_apic_aim.py b/gbpservice/neutron/tests/unit/plugins/ml2plus/test_apic_aim.py index c547df311..cd47342a8 100644 --- a/gbpservice/neutron/tests/unit/plugins/ml2plus/test_apic_aim.py +++ b/gbpservice/neutron/tests/unit/plugins/ml2plus/test_apic_aim.py @@ -593,9 +593,6 @@ class TestAimMapping(ApicAimTestCase): self.assertIsNotNone(aim_ext_net) return aim_ext_net - def _scope_default_svi_l3out_name_by_vrf(self, vrf_name): - return md.DEFAULT_SVI_L3OUT_NAME + '_' + vrf_name - def _check_network(self, net, routers=None, scope=None, project=None, vrf=None): dns = copy.copy(net.get(DN)) @@ -653,16 +650,6 @@ class TestAimMapping(ApicAimTestCase): self.assertEqual(net['name'], l3out.display_name) self.assertEqual(vrf_aname, l3out.vrf_name) self._check_dn_is_resource(dns, 'ExternalNetwork', ext_net) - - default_l3out_name = self._scope_default_svi_l3out_name_by_vrf( - vrf_aname) - svi_default_l3out = self._get_l3out(default_l3out_name, - vrf_tenant_aname) - self.assertEqual(tenant_aname, svi_default_l3out.tenant_name) - self.assertEqual(default_l3out_name, svi_default_l3out.name) - self.assertEqual(md.DEFAULT_SVI_L3OUT_NAME, - svi_default_l3out.display_name) - self.assertEqual(vrf_aname, svi_default_l3out.vrf_name) else: aim_bd = self._get_bd(aname, tenant_aname) self.assertEqual(tenant_aname, aim_bd.tenant_name) @@ -1111,9 +1098,6 @@ class TestAimMapping(ApicAimTestCase): self._delete('networks', net['id']) self.assertFalse(extn.get_network_extn_db(session, net['id'])) self._check_network_deleted(net) - default_l3out_name = self._scope_default_svi_l3out_name_by_vrf( - 'DefaultVRF') - self._l3out_should_not_exist(default_l3out_name) def test_security_group_lifecycle(self): # Test create @@ -1281,14 +1265,6 @@ class TestAimMapping(ApicAimTestCase): # Verify ports were notified. mock_notif.assert_has_calls(port_calls, any_order=True) - if is_svi: - default_l3out_name = self._scope_default_svi_l3out_name_by_vrf( - 'DefaultVRF') - contract = self.name_mapper.router(None, router['id']) - tenant_aname = self.name_mapper.project(None, net['tenant_id']) - self._confirm_default_ext_epg_contract( - tenant_aname, default_l3out_name, [contract]) - # Check router. router = self._show('routers', router_id)['router'] self._check_router(router, [gw1_ip], unscoped_project=self._tenant_id, @@ -1370,8 +1346,6 @@ class TestAimMapping(ApicAimTestCase): mock_notif.assert_has_calls(port_calls, any_order=True) self._check_router(router, [], unscoped_project=self._tenant_id, is_svi_net=is_svi) - self._confirm_default_ext_epg_contract( - tenant_aname, default_l3out_name, []) # Check network. net = self._show('networks', net_id)['network'] @@ -1479,15 +1453,6 @@ class TestAimMapping(ApicAimTestCase): self.assertRaises(webob.exc.HTTPClientError, self._make_subnet, self.fmt, net_resp, gw2_ip, '10.0.2.0/24') - def _confirm_default_ext_epg_contract(self, tenant_name, l3out_name, - contract): - default_ext_epg = aim_resource.ExternalNetwork( - tenant_name=tenant_name, - l3out_name=l3out_name, name=md.L3OUT_EXT_EPG) - aim_ext_epg = self._get_l3out_ext_net(default_ext_epg) - self.assertEqual(contract, aim_ext_epg.provided_contract_names) - self.assertEqual(contract, aim_ext_epg.consumed_contract_names) - def _test_router_interface_with_address_scope(self, is_svi=False): # REVISIT(rkukura): Currently follows same workflow as above, # but might be sufficient to test with a single subnet with @@ -1568,19 +1533,6 @@ class TestAimMapping(ApicAimTestCase): {'subnet_id': subnet1_id}) self.assertIn(subnet1_id, info['subnet_ids']) - if is_svi: - default_l3out_name = self._scope_default_svi_l3out_name_by_vrf( - 'DefaultVRF') - self._l3out_should_not_exist(default_l3out_name) - - tenant_aname = self.name_mapper.project(None, scope['tenant_id']) - vrf_aname = self.name_mapper.address_scope(None, scope['id']) - new_default_l3out_name = self._scope_default_svi_l3out_name_by_vrf( - vrf_aname) - contract = self.name_mapper.router(None, router['id']) - self._confirm_default_ext_epg_contract( - tenant_aname, new_default_l3out_name, [contract]) - # Verify ports were notified. mock_notif.assert_has_calls(port_calls, any_order=True) @@ -1667,9 +1619,6 @@ class TestAimMapping(ApicAimTestCase): self._check_network(net, [router], scope) else: self._check_network(net, [], scope) - self._l3out_should_not_exist(new_default_l3out_name) - self._confirm_default_ext_epg_contract( - tenant_aname, default_l3out_name, []) # Check subnet1. subnet = self._show('subnets', subnet1_id)['subnet'] diff --git a/gbpservice/neutron/tests/unit/services/sfc/test_aim_sfc_driver.py b/gbpservice/neutron/tests/unit/services/sfc/test_aim_sfc_driver.py index 8c4def6d0..caf0b8ab8 100644 --- a/gbpservice/neutron/tests/unit/services/sfc/test_aim_sfc_driver.py +++ b/gbpservice/neutron/tests/unit/services/sfc/test_aim_sfc_driver.py @@ -245,15 +245,13 @@ class TestAIMServiceFunctionChainingBase(test_aim_base.AIMBaseTestCase): ppg_args=None): flowc_ids = [] ppg_args = ppg_args or [] - flowcs_args = flowcs_args or [{'src_svi': self.src_svi, - 'dst_svi': self.dst_svi}] * flowcs + flowcs_args = flowcs_args or [] for i in range(flowcs): try: flowc_ids.append( self._create_simple_flowc(**flowcs_args[i])['id']) except IndexError: - flowc_ids.append(self._create_simple_flowc( - src_svi=self.src_svi, dst_svi=self.dst_svi)['id']) + flowc_ids.append(self._create_simple_flowc()['id']) ppg_ids = [] for i in range(ppgs): try: @@ -413,8 +411,7 @@ class TestAIMServiceFunctionChainingBase(test_aim_base.AIMBaseTestCase): flowc['l7_parameters']['logical_source_network']) dst_net = self._show_network( flowc['l7_parameters']['logical_destination_network']) - apic_tn = 'prj_' + dst_net['tenant_id'] if not self.dst_svi else ( - 'common') + apic_tn = 'prj_' + dst_net['tenant_id'] device_clusters = [] sg = self.aim_mgr.get(ctx, aim_sg.ServiceGraph( tenant_name=apic_tn, name='ptc_' + pc['id'])) @@ -435,12 +432,10 @@ class TestAIMServiceFunctionChainingBase(test_aim_base.AIMBaseTestCase): for net, pref, cidr in [(src_net, 'src_', src_cidr), (dst_net, 'dst_', dst_cird)]: if net['apic:svi']: - vrf = aim_res.VRF.from_dn( - net['apic:distinguished_names']['VRF']) - ext = aim_res.ExternalNetwork( - tenant_name=vrf.tenant_name, - l3out_name='DefaultSVIL3Out' + '_' + vrf.name, - name='ExtEpg') + # TODO(ivar): this will not work, there's no L3Outside + # DN extension for external networks. + ext = aim_res.ExternalNetwork.from_dn( + net['apic:distinguished_names']['ExternalNetwork']) if cidr in ['0.0.0.0/0', '::/0']: # use default external EPG ext_net = self.aim_mgr.get(ctx, ext) @@ -451,23 +446,11 @@ class TestAIMServiceFunctionChainingBase(test_aim_base.AIMBaseTestCase): l3out_name=ext.l3out_name, name=cidr.replace( '/', '_') + '_' + 'net_' + net['id'])) + ext_sub = self.aim_mgr.get(ctx, aim_res.ExternalSubnet( + tenant_name=ext.tenant_name, l3out_name=ext.l3out_name, + external_network_name=ext_net.name, cidr=cidr)) self.assertIsNotNone(ext_net) - if cidr in ['0.0.0.0/0', '::/0']: - for c in ['128.0.0.0/1', '0.0.0.0/1']: - ext_sub = self.aim_mgr.get( - ctx, aim_res.ExternalSubnet( - tenant_name=ext.tenant_name, - l3out_name=ext.l3out_name, - external_network_name=ext_net.name, - cidr=c)) - self.assertIsNotNone(ext_sub) - else: - ext_sub = self.aim_mgr.get( - ctx, aim_res.ExternalSubnet( - tenant_name=ext.tenant_name, - l3out_name=ext.l3out_name, - external_network_name=ext_net.name, cidr=cidr)) - self.assertIsNotNone(ext_sub) + self.assertIsNotNone(ext_sub) self.assertTrue( contract.name in (ext_net.consumed_contract_names if pref == 'src_' else @@ -1278,7 +1261,6 @@ class TestPortChain(TestAIMServiceFunctionChainingBase): name=fc['destination_ip_prefix'].replace( '/', '_') + '_' + 'net_' + dst_net_id)[0] self.assertEqual(2, len(ext_net.provided_contract_names)) - self.assertTrue('DefaultSVIL3Out' in ext_net.l3out_name) self.delete_port_chain(pc2['id']) self.assertIsNone(self.aim_mgr.get(self._aim_context, ext_net)) @@ -1417,7 +1399,3 @@ class TestPortChainSVI(TestPortChain): expected_res_status=201)['port_chain'] self._verify_pc_mapping(pc) self._verify_pc_delete(pc) - - def test_pc_mapping_two_flowcs(self): - # TODO(ivar): re enable after fixing the conflicting address scope - pass