[APIC-mapping] Copy over provider physical network

For non-opflex network types, the shadow network
created for each PTG should use the same provider
physical network as the L2Policy network.

Closes-Bug: 1637660

Change-Id: Ib17e2f43cc3cdf65e287b59f47826252cdc88081
Signed-off-by: Amit Bose <amitbose@gmail.com>
This commit is contained in:
Amit Bose
2016-10-28 15:21:35 -07:00
parent 1a8cdc4abf
commit 0e49fa3e83
2 changed files with 29 additions and 2 deletions

View File

@@ -3561,7 +3561,9 @@ class ApicMappingDriver(api.ResourceMappingDriver,
return networks[0] if networks else None
def _create_ptg_shadow_network(self, context, ptg):
if not self._ptg_needs_shadow_network(context, ptg):
l2p_network = self._l2p_id_to_network(context._plugin_context,
ptg['l2_policy_id'])
if not self._is_supported_non_opflex_network(l2p_network):
return
shadow_net = self._get_ptg_shadow_network(context, ptg)
if not shadow_net:
@@ -3569,6 +3571,11 @@ class ApicMappingDriver(api.ResourceMappingDriver,
'name': self._get_ptg_shadow_network_name(ptg),
'admin_state_up': True,
'shared': ptg.get('shared', False)}
if l2p_network.get(providernet.PHYSICAL_NETWORK):
attrs[providernet.PHYSICAL_NETWORK] = (
l2p_network[providernet.PHYSICAL_NETWORK])
attrs[providernet.NETWORK_TYPE] = (
l2p_network[providernet.NETWORK_TYPE])
shadow_net = self._create_network(context._plugin_context, attrs)
l2p = self._get_l2_policy(context._plugin_context,
ptg['l2_policy_id'])

View File

@@ -320,7 +320,8 @@ class ApicMappingVlanTestCase(ApicMappingTestCase):
def setUp(self, **kwargs):
config.cfg.CONF.set_override(
'network_vlan_ranges', ['physnet1:100:200'], group='ml2_type_vlan')
'network_vlan_ranges',
['physnet1:100:200', 'physnet2:20:30'], group='ml2_type_vlan')
kwargs['ml2_options'] = {
'mechanism_drivers': ['apic_gbp', 'openvswitch'],
'type_drivers': ['vlan'],
@@ -2134,6 +2135,25 @@ class TestPolicyTargetGroupVlanNetwork(ApicMappingVlanTestCase,
port = self._get_object('ports', port['port']['id'], self.api)
self.assertFalse(port['port']['admin_state_up'])
def test_explicit_l2p_network_phys_net(self):
attr = {'arg_list': ('provider:physical_network',
'provider:network_type'),
'provider:physical_network': 'physnet2',
'provider:network_type': 'vlan'}
with self.network(**attr) as net:
net = net['network']
l2p = self.create_l2_policy(
network_id=net['id'])['l2_policy']
ptg = self.create_policy_target_group(
name='ptg1', l2_policy_id=l2p['id']
)['policy_target_group']
shadow_net = self._get_ptg_shadow_net(ptg)
self.assertIsNone(shadow_net.get('segments'))
self.assertEqual('physnet2',
shadow_net['provider:physical_network'])
self.assertEqual('vlan',
shadow_net['provider:network_type'])
class TestL2PolicyBase(ApicMappingTestCase):