Change to new HostDomainMapping model
The HostDomainMapping model changed with commit 3635eba169997452c674fe53dab09afcb67cd236 in the aci-integration-module. This patch uses the new model, and leverages the change made to the EndpointGroup resource to support multiple VMM Domains, provided in commit 2eadd1d1850fc397d79823ba161b99c068036b8e. Change-Id: Ie705937b022d7cbc9ac0fc7458986e3723729983
This commit is contained in:
parent
6833c41445
commit
6bbbb6cb22
|
@ -88,6 +88,7 @@ NO_ADDR_SCOPE = object()
|
|||
|
||||
DVS_AGENT_KLASS = 'networking_vsphere.common.dvs_agent_rpc_api.DVSClientAPI'
|
||||
GBP_DEFAULT = 'gbp_default'
|
||||
DEFAULT_HOST_DOMAIN = '*'
|
||||
|
||||
|
||||
class KeystoneNotificationEndpoint(object):
|
||||
|
@ -2254,10 +2255,11 @@ class ApicMechanismDriver(api_plus.MechanismDriver,
|
|||
return mapping and self._get_network_vrf(mapping)
|
||||
|
||||
def get_aim_domains(self, aim_ctx):
|
||||
vmms = [x.name for x in self.aim.find(aim_ctx, aim_resource.VMMDomain)
|
||||
if x.type == utils.OPENSTACK_VMM_TYPE]
|
||||
phys = [x.name for x in
|
||||
self.aim.find(aim_ctx, aim_resource.PhysicalDomain)]
|
||||
vmms = [{'name': x.name, 'type': x.type}
|
||||
for x in self.aim.find(aim_ctx, aim_resource.VMMDomain)
|
||||
if x.type in utils.KNOWN_VMM_TYPES.values()]
|
||||
phys = [{'name': x.name}
|
||||
for x in self.aim.find(aim_ctx, aim_resource.PhysicalDomain)]
|
||||
return vmms, phys
|
||||
|
||||
def _is_external(self, network):
|
||||
|
@ -2744,34 +2746,50 @@ class ApicMechanismDriver(api_plus.MechanismDriver,
|
|||
epg = self._get_network_epg(mapping)
|
||||
aim_epg = self.aim.get(aim_ctx, epg)
|
||||
host_id = port[portbindings.HOST_ID]
|
||||
hd_mapping = aim_infra.HostDomainMapping(host_name=host_id)
|
||||
aim_hd_mapping = self.aim.get(aim_ctx, hd_mapping)
|
||||
domain = None
|
||||
aim_hd_mappings = (self.aim.find(aim_ctx,
|
||||
aim_infra.HostDomainMappingV2,
|
||||
host_name=host_id) or
|
||||
self.aim.find(aim_ctx,
|
||||
aim_infra.HostDomainMappingV2,
|
||||
host_name=DEFAULT_HOST_DOMAIN))
|
||||
domains = []
|
||||
try:
|
||||
if is_vmm:
|
||||
if aim_hd_mapping:
|
||||
domain = aim_hd_mapping.vmm_domain_name
|
||||
if not domain:
|
||||
if aim_hd_mappings:
|
||||
domains = [{'type': mapping.domain_type,
|
||||
'name': mapping.domain_name}
|
||||
for mapping in aim_hd_mappings
|
||||
if mapping.domain_type in ['OpenStack']]
|
||||
if not domains:
|
||||
vmms, phys = self.get_aim_domains(aim_ctx)
|
||||
self.aim.update(aim_ctx, epg,
|
||||
openstack_vmm_domain_names=vmms)
|
||||
elif domain not in aim_epg.openstack_vmm_domain_names:
|
||||
aim_epg.openstack_vmm_domain_names.append(domain)
|
||||
vmms = aim_epg.openstack_vmm_domain_names
|
||||
self.aim.update(aim_ctx, epg,
|
||||
openstack_vmm_domain_names=vmms)
|
||||
vmm_domains=vmms)
|
||||
else:
|
||||
vmms = aim_epg.vmm_domains[:]
|
||||
for domain in domains:
|
||||
if domain not in aim_epg.vmm_domains:
|
||||
aim_epg.vmm_domains.append(domain)
|
||||
if vmms != aim_epg.vmm_domains:
|
||||
vmms = aim_epg.vmm_domains
|
||||
self.aim.update(aim_ctx, epg, vmm_domains=vmms)
|
||||
else:
|
||||
if aim_hd_mapping:
|
||||
domain = aim_hd_mapping.physical_domain_name
|
||||
if not domain:
|
||||
if aim_hd_mappings:
|
||||
domains = [{'name': mapping.domain_name}
|
||||
for mapping in aim_hd_mappings
|
||||
if mapping.domain_type in ['PhysDom']]
|
||||
if not domains:
|
||||
vmms, phys = self.get_aim_domains(aim_ctx)
|
||||
self.aim.update(aim_ctx, epg,
|
||||
physical_domain_names=phys)
|
||||
elif domain not in aim_epg.physical_domain_names:
|
||||
aim_epg.physical_domain_names.append(domain)
|
||||
phys = aim_epg.physical_domain_names
|
||||
self.aim.update(aim_ctx, epg,
|
||||
physical_domain_names=phys)
|
||||
physical_domains=phys)
|
||||
else:
|
||||
phys = aim_epg.physical_domains[:]
|
||||
for domain in domains:
|
||||
if domain not in aim_epg.physical_domains:
|
||||
aim_epg.physical_domains.append(domain)
|
||||
if phys != aim_epg.physical_domains:
|
||||
phys = aim_epg.physical_domains
|
||||
self.aim.update(aim_ctx, epg,
|
||||
physical_domains=phys)
|
||||
# this could be caused by concurrent transactions
|
||||
except db_exc.DBDuplicateEntry as e:
|
||||
LOG.debug(e)
|
||||
|
@ -2789,25 +2807,35 @@ class ApicMechanismDriver(api_plus.MechanismDriver,
|
|||
else port_context.host)
|
||||
session = port_context._plugin_context.session
|
||||
aim_ctx = aim_context.AimContext(session)
|
||||
hd_mapping = aim_infra.HostDomainMapping(host_name=host_id)
|
||||
aim_hd_mapping = self.aim.get(aim_ctx, hd_mapping)
|
||||
if not aim_hd_mapping:
|
||||
aim_hd_mappings = (self.aim.find(aim_ctx,
|
||||
aim_infra.HostDomainMappingV2,
|
||||
host_name=host_id) or
|
||||
self.aim.find(aim_ctx,
|
||||
aim_infra.HostDomainMappingV2,
|
||||
host_name=DEFAULT_HOST_DOMAIN))
|
||||
if not aim_hd_mappings:
|
||||
return
|
||||
|
||||
if self._is_opflex_type(btm[api.NETWORK_TYPE]):
|
||||
domain = aim_hd_mapping.vmm_domain_name
|
||||
if domain:
|
||||
hd_mappings = self.aim.find(aim_ctx,
|
||||
aim_infra.HostDomainMapping,
|
||||
vmm_domain_name=domain)
|
||||
domain_type = 'OpenStack'
|
||||
else:
|
||||
domain = aim_hd_mapping.physical_domain_name
|
||||
if domain:
|
||||
hd_mappings = self.aim.find(aim_ctx,
|
||||
aim_infra.HostDomainMapping,
|
||||
physical_domain_name=domain)
|
||||
if not domain:
|
||||
domain_type = 'PhysDom'
|
||||
|
||||
domains = []
|
||||
hd_mappings = []
|
||||
for mapping in aim_hd_mappings:
|
||||
d_type = mapping.domain_type
|
||||
if d_type == domain_type and mapping.domain_name:
|
||||
domains.append(mapping.domain_name)
|
||||
hd_mappings.extend(self.aim.find(aim_ctx,
|
||||
aim_infra.HostDomainMappingV2,
|
||||
domain_name=mapping.domain_name,
|
||||
domain_type=d_type))
|
||||
if not domains:
|
||||
return
|
||||
hosts = [x.host_name for x in hd_mappings]
|
||||
hosts = [x.host_name
|
||||
for x in hd_mappings
|
||||
if x.host_name != DEFAULT_HOST_DOMAIN]
|
||||
ptg = None
|
||||
if self.gbp_driver:
|
||||
ptg, pt = self.gbp_driver._port_id_to_ptg(
|
||||
|
@ -2850,17 +2878,26 @@ class ApicMechanismDriver(api_plus.MechanismDriver,
|
|||
aim_epg = self.aim.get(aim_ctx, epg)
|
||||
try:
|
||||
if self._is_opflex_type(btm[api.NETWORK_TYPE]):
|
||||
if domain in aim_epg.openstack_vmm_domain_names:
|
||||
aim_epg.openstack_vmm_domain_names.remove(domain)
|
||||
vmms = aim_epg.openstack_vmm_domain_names
|
||||
vmms = aim_epg.vmm_domains[:]
|
||||
for domain in domains:
|
||||
mapping = {'type': domain_type,
|
||||
'name': domain}
|
||||
if mapping in aim_epg.vmm_domains:
|
||||
aim_epg.vmm_domains.remove(mapping)
|
||||
if vmms != aim_epg.vmm_domains:
|
||||
vmms = aim_epg.vmm_domains
|
||||
self.aim.update(aim_ctx, epg,
|
||||
openstack_vmm_domain_names=vmms)
|
||||
vmm_domains=vmms)
|
||||
else:
|
||||
if domain in aim_epg.physical_domain_names:
|
||||
aim_epg.physical_domain_names.remove(domain)
|
||||
phys = aim_epg.physical_domain_names
|
||||
phys = aim_epg.physical_domains[:]
|
||||
for domain in domains:
|
||||
mapping = {'name': domain}
|
||||
if mapping in aim_epg.physical_domains:
|
||||
aim_epg.physical_domains.remove(mapping)
|
||||
if phys != aim_epg.physical_domains:
|
||||
phys = aim_epg.physical_domains
|
||||
self.aim.update(aim_ctx, epg,
|
||||
physical_domain_names=phys)
|
||||
physical_domains=phys)
|
||||
# this could be caused by concurrent transactions
|
||||
except db_exc.DBDuplicateEntry as e:
|
||||
LOG.debug(e)
|
||||
|
|
|
@ -5426,6 +5426,13 @@ class TestPortOnPhysicalNode(TestPortVlanNetwork):
|
|||
self.expected_binding_info = [('apic_aim', 'opflex'),
|
||||
('openvswitch', 'vlan')]
|
||||
|
||||
def _doms(self, domains, with_type=True):
|
||||
if with_type:
|
||||
return [(str(dom['name']), str(dom['type']))
|
||||
for dom in domains]
|
||||
else:
|
||||
return [str(dom['name']) for dom in domains]
|
||||
|
||||
def test_mixed_ports_on_network(self):
|
||||
aim_ctx = aim_context.AimContext(self.db_session)
|
||||
|
||||
|
@ -5482,51 +5489,64 @@ class TestPortOnPhysicalNode(TestPortVlanNetwork):
|
|||
epg1 = self._net_2_epg(net1)
|
||||
|
||||
with self.subnet(network={'network': net1}) as sub1:
|
||||
|
||||
# "normal" port on opflex host
|
||||
with self.port(subnet=sub1) as p1:
|
||||
p1 = self._bind_port_to_host(p1['port']['id'], 'opflex-1')
|
||||
epg1 = self.aim_mgr.get(aim_ctx, epg1)
|
||||
self.assertEqual(set(['vm1', 'vm2']),
|
||||
set(epg1.openstack_vmm_domain_names))
|
||||
self.assertEqual(set([('vm1', 'OpenStack'),
|
||||
('vm2', 'OpenStack')]),
|
||||
set(self._doms(epg1.vmm_domains)))
|
||||
self.assertEqual(set([]),
|
||||
set(epg1.physical_domain_names))
|
||||
set(self._doms(epg1.physical_domains,
|
||||
with_type=False)))
|
||||
# move port to another host
|
||||
p1 = self._bind_port_to_host(p1['port']['id'], 'opflex-2')
|
||||
epg1 = self.aim_mgr.get(aim_ctx, epg1)
|
||||
self.assertEqual(set(['vm1', 'vm2']),
|
||||
set(epg1.openstack_vmm_domain_names))
|
||||
self.assertEqual(set([('vm1', 'OpenStack'),
|
||||
('vm2', 'OpenStack')]),
|
||||
set(self._doms(epg1.vmm_domains)))
|
||||
self.assertEqual(set([]),
|
||||
set(epg1.physical_domain_names))
|
||||
set(self._doms(epg1.physical_domains,
|
||||
with_type=False)))
|
||||
# delete port
|
||||
self._delete('ports', p1['port']['id'])
|
||||
epg1 = self.aim_mgr.get(aim_ctx, epg1)
|
||||
self.assertEqual(set(['vm1', 'vm2']),
|
||||
set(epg1.openstack_vmm_domain_names))
|
||||
self.assertEqual(set([('vm1', 'OpenStack'),
|
||||
('vm2', 'OpenStack')]),
|
||||
set(self._doms(epg1.vmm_domains)))
|
||||
self.assertEqual(set([]),
|
||||
set(epg1.physical_domain_names))
|
||||
set(self._doms(epg1.physical_domains,
|
||||
with_type=False)))
|
||||
|
||||
# port on non-opflex host
|
||||
with self.port(subnet=sub1) as p2:
|
||||
p2 = self._bind_port_to_host(p2['port']['id'], 'h1')
|
||||
epg1 = self.aim_mgr.get(aim_ctx, epg1)
|
||||
self.assertEqual(set(['vm1', 'vm2']),
|
||||
set(epg1.openstack_vmm_domain_names))
|
||||
self.assertEqual(set([('vm1', 'OpenStack'),
|
||||
('vm2', 'OpenStack')]),
|
||||
set(self._doms(epg1.vmm_domains)))
|
||||
self.assertEqual(set(['ph1', 'ph2']),
|
||||
set(epg1.physical_domain_names))
|
||||
set(self._doms(epg1.physical_domains,
|
||||
with_type=False)))
|
||||
# move port to another host
|
||||
p2 = self._bind_port_to_host(p2['port']['id'], 'h2')
|
||||
epg1 = self.aim_mgr.get(aim_ctx, epg1)
|
||||
self.assertEqual(set(['vm1', 'vm2']),
|
||||
set(epg1.openstack_vmm_domain_names))
|
||||
self.assertEqual(set([('vm1', 'OpenStack'),
|
||||
('vm2', 'OpenStack')]),
|
||||
set(self._doms(epg1.vmm_domains)))
|
||||
self.assertEqual(set(['ph1', 'ph2']),
|
||||
set(epg1.physical_domain_names))
|
||||
set(self._doms(epg1.physical_domains,
|
||||
with_type=False)))
|
||||
# delete port
|
||||
self._delete('ports', p2['port']['id'])
|
||||
epg1 = self.aim_mgr.get(aim_ctx, epg1)
|
||||
self.assertEqual(set(['vm1', 'vm2']),
|
||||
set(epg1.openstack_vmm_domain_names))
|
||||
self.assertEqual(set([('vm1', 'OpenStack'),
|
||||
('vm2', 'OpenStack')]),
|
||||
set(self._doms(epg1.vmm_domains)))
|
||||
self.assertEqual(set(['ph1', 'ph2']),
|
||||
set(epg1.physical_domain_names))
|
||||
set(self._doms(epg1.physical_domains,
|
||||
with_type=False)))
|
||||
|
||||
def test_update_sg_rule_with_remote_group_set(self):
|
||||
# Create network.
|
||||
|
@ -5594,27 +5614,42 @@ class TestPortOnPhysicalNode(TestPortVlanNetwork):
|
|||
|
||||
def test_mixed_ports_on_network_with_specific_domains(self):
|
||||
aim_ctx = aim_context.AimContext(self.db_session)
|
||||
hd_mapping = aim_infra.HostDomainMapping(host_name='opflex-1',
|
||||
vmm_domain_name='vm1')
|
||||
hd_mapping = aim_infra.HostDomainMappingV2(host_name='opflex-1',
|
||||
domain_name='vm1',
|
||||
domain_type='OpenStack')
|
||||
self.aim_mgr.create(aim_ctx, hd_mapping)
|
||||
hd_mapping = aim_infra.HostDomainMapping(host_name='opflex-2',
|
||||
vmm_domain_name='vm2')
|
||||
hd_mapping = aim_infra.HostDomainMappingV2(host_name='opflex-2',
|
||||
domain_name='vm2',
|
||||
domain_type='OpenStack')
|
||||
self.aim_mgr.create(aim_ctx, hd_mapping)
|
||||
hd_mapping = aim_infra.HostDomainMapping(host_name='opflex-2a',
|
||||
vmm_domain_name='vm2')
|
||||
hd_mapping = aim_infra.HostDomainMappingV2(host_name='opflex-2a',
|
||||
domain_name='vm2',
|
||||
domain_type='OpenStack')
|
||||
self.aim_mgr.create(aim_ctx, hd_mapping)
|
||||
hd_mapping = aim_infra.HostDomainMapping(host_name='h1',
|
||||
physical_domain_name='ph1')
|
||||
hd_mapping = aim_infra.HostDomainMappingV2(host_name='*',
|
||||
domain_name='vm3',
|
||||
domain_type='OpenStack')
|
||||
self.aim_mgr.create(aim_ctx, hd_mapping)
|
||||
hd_mapping = aim_infra.HostDomainMapping(host_name='h2',
|
||||
physical_domain_name='ph2')
|
||||
hd_mapping = aim_infra.HostDomainMappingV2(host_name='h1',
|
||||
domain_name='ph1',
|
||||
domain_type='PhysDom')
|
||||
self.aim_mgr.create(aim_ctx, hd_mapping)
|
||||
hd_mapping = aim_infra.HostDomainMapping(host_name='h2a',
|
||||
physical_domain_name='ph2')
|
||||
hd_mapping = aim_infra.HostDomainMappingV2(host_name='h2',
|
||||
domain_name='ph2',
|
||||
domain_type='PhysDom')
|
||||
self.aim_mgr.create(aim_ctx, hd_mapping)
|
||||
hd_mapping = aim_infra.HostDomainMappingV2(host_name='h2a',
|
||||
domain_name='ph2',
|
||||
domain_type='PhysDom')
|
||||
self.aim_mgr.create(aim_ctx, hd_mapping)
|
||||
hd_mapping = aim_infra.HostDomainMappingV2(host_name='*',
|
||||
domain_name='ph3',
|
||||
domain_type='PhysDom')
|
||||
self.aim_mgr.create(aim_ctx, hd_mapping)
|
||||
self._register_agent('opflex-1', AGENT_CONF_OPFLEX)
|
||||
self._register_agent('opflex-2', AGENT_CONF_OPFLEX)
|
||||
self._register_agent('opflex-2a', AGENT_CONF_OPFLEX)
|
||||
self._register_agent('opflex-3', AGENT_CONF_OPFLEX)
|
||||
net1 = self._make_network(
|
||||
self.fmt, 'net1', True,
|
||||
arg_list=('provider:physical_network', 'provider:network_type'),
|
||||
|
@ -5623,81 +5658,128 @@ class TestPortOnPhysicalNode(TestPortVlanNetwork):
|
|||
epg1 = self._net_2_epg(net1)
|
||||
|
||||
with self.subnet(network={'network': net1}) as sub1:
|
||||
|
||||
# "normal" port on opflex host
|
||||
with self.port(subnet=sub1) as p1:
|
||||
p1 = self._bind_port_to_host(p1['port']['id'], 'opflex-1')
|
||||
epg1 = self.aim_mgr.get(aim_ctx, epg1)
|
||||
self.assertEqual(set(['vm1']),
|
||||
set(epg1.openstack_vmm_domain_names))
|
||||
self.assertEqual(set([('vm1', 'OpenStack')]),
|
||||
set(self._doms(epg1.vmm_domains)))
|
||||
self.assertEqual(set([]),
|
||||
set(epg1.physical_domain_names))
|
||||
set(self._doms(epg1.physical_domains,
|
||||
with_type=False)))
|
||||
# move port to another host
|
||||
p1 = self._bind_port_to_host(p1['port']['id'], 'opflex-2')
|
||||
epg1 = self.aim_mgr.get(aim_ctx, epg1)
|
||||
self.assertEqual(set(['vm2']),
|
||||
set(epg1.openstack_vmm_domain_names))
|
||||
self.assertEqual(set([('vm2', 'OpenStack')]),
|
||||
set(self._doms(epg1.vmm_domains)))
|
||||
self.assertEqual(set([]),
|
||||
set(epg1.physical_domain_names))
|
||||
set(self._doms(epg1.physical_domains,
|
||||
with_type=False)))
|
||||
# create another port on a host that belongs to the same domain
|
||||
with self.port(subnet=sub1) as p1a:
|
||||
p1a = self._bind_port_to_host(p1a['port']['id'], 'opflex-2a')
|
||||
epg1 = self.aim_mgr.get(aim_ctx, epg1)
|
||||
self.assertEqual(set(['vm2']),
|
||||
set(epg1.openstack_vmm_domain_names))
|
||||
self.assertEqual(set([('vm2', 'OpenStack')]),
|
||||
set(self._doms(epg1.vmm_domains)))
|
||||
self.assertEqual(set([]),
|
||||
set(epg1.physical_domain_names))
|
||||
set(self._doms(epg1.physical_domains,
|
||||
with_type=False)))
|
||||
# delete 1st port
|
||||
self._delete('ports', p1['port']['id'])
|
||||
epg1 = self.aim_mgr.get(aim_ctx, epg1)
|
||||
self.assertEqual(set(['vm2']),
|
||||
set(epg1.openstack_vmm_domain_names))
|
||||
self.assertEqual(set([('vm2', 'OpenStack')]),
|
||||
set(self._doms(epg1.vmm_domains)))
|
||||
self.assertEqual(set([]),
|
||||
set(epg1.physical_domain_names))
|
||||
set(self._doms(epg1.physical_domains,
|
||||
with_type=False)))
|
||||
# delete the last port
|
||||
self._delete('ports', p1a['port']['id'])
|
||||
epg1 = self.aim_mgr.get(aim_ctx, epg1)
|
||||
self.assertEqual(set([]),
|
||||
set(epg1.openstack_vmm_domain_names))
|
||||
set(self._doms(epg1.vmm_domains)))
|
||||
self.assertEqual(set([]),
|
||||
set(epg1.physical_domain_names))
|
||||
set(self._doms(epg1.physical_domains,
|
||||
with_type=False)))
|
||||
# create another port on a host that belongs to the wildcard domain
|
||||
with self.port(subnet=sub1) as p3:
|
||||
p3 = self._bind_port_to_host(p3['port']['id'], 'opflex-3')
|
||||
epg1 = self.aim_mgr.get(aim_ctx, epg1)
|
||||
self.assertEqual(set([('vm3', 'OpenStack')]),
|
||||
set(self._doms(epg1.vmm_domains)))
|
||||
self.assertEqual(set([]),
|
||||
set(self._doms(epg1.physical_domains,
|
||||
with_type=False)))
|
||||
# delete the wildcard port
|
||||
self._delete('ports', p3['port']['id'])
|
||||
epg1 = self.aim_mgr.get(aim_ctx, epg1)
|
||||
self.assertEqual(set([]),
|
||||
set(self._doms(epg1.vmm_domains)))
|
||||
self.assertEqual(set([]),
|
||||
set(self._doms(epg1.physical_domains,
|
||||
with_type=False)))
|
||||
|
||||
# port on non-opflex host
|
||||
with self.port(subnet=sub1) as p2:
|
||||
p2 = self._bind_port_to_host(p2['port']['id'], 'h1')
|
||||
epg1 = self.aim_mgr.get(aim_ctx, epg1)
|
||||
self.assertEqual(set([]),
|
||||
set(epg1.openstack_vmm_domain_names))
|
||||
set(self._doms(epg1.vmm_domains)))
|
||||
self.assertEqual(set(['ph1']),
|
||||
set(epg1.physical_domain_names))
|
||||
set(self._doms(epg1.physical_domains,
|
||||
with_type=False)))
|
||||
# move port to another host
|
||||
p2 = self._bind_port_to_host(p2['port']['id'], 'h2')
|
||||
epg1 = self.aim_mgr.get(aim_ctx, epg1)
|
||||
self.assertEqual(set([]),
|
||||
set(epg1.openstack_vmm_domain_names))
|
||||
set(self._doms(epg1.vmm_domains)))
|
||||
self.assertEqual(set(['ph2']),
|
||||
set(epg1.physical_domain_names))
|
||||
set(self._doms(epg1.physical_domains,
|
||||
with_type=False)))
|
||||
# create another port on a host that belongs to the same domain
|
||||
with self.port(subnet=sub1) as p2a:
|
||||
p2a = self._bind_port_to_host(p2a['port']['id'], 'h2a')
|
||||
epg1 = self.aim_mgr.get(aim_ctx, epg1)
|
||||
self.assertEqual(set([]),
|
||||
set(epg1.openstack_vmm_domain_names))
|
||||
set(self._doms(epg1.vmm_domains)))
|
||||
self.assertEqual(set(['ph2']),
|
||||
set(epg1.physical_domain_names))
|
||||
set(self._doms(epg1.physical_domains,
|
||||
with_type=False)))
|
||||
|
||||
# delete 1st port
|
||||
self._delete('ports', p2['port']['id'])
|
||||
epg1 = self.aim_mgr.get(aim_ctx, epg1)
|
||||
self.assertEqual(set([]),
|
||||
set(epg1.openstack_vmm_domain_names))
|
||||
set(self._doms(epg1.vmm_domains)))
|
||||
self.assertEqual(set(['ph2']),
|
||||
set(epg1.physical_domain_names))
|
||||
set(self._doms(epg1.physical_domains,
|
||||
with_type=False)))
|
||||
# delete the last port
|
||||
self._delete('ports', p2a['port']['id'])
|
||||
epg1 = self.aim_mgr.get(aim_ctx, epg1)
|
||||
self.assertEqual(set([]),
|
||||
set(epg1.openstack_vmm_domain_names))
|
||||
set(self._doms(epg1.vmm_domains)))
|
||||
self.assertEqual(set([]),
|
||||
set(epg1.physical_domain_names))
|
||||
set(self._doms(epg1.physical_domains,
|
||||
with_type=False)))
|
||||
# create another port on a host that belongs
|
||||
# to the wildcard mapping
|
||||
with self.port(subnet=sub1) as p3:
|
||||
p3 = self._bind_port_to_host(p3['port']['id'], 'h3')
|
||||
epg1 = self.aim_mgr.get(aim_ctx, epg1)
|
||||
self.assertEqual(set([]),
|
||||
set(self._doms(epg1.vmm_domains)))
|
||||
self.assertEqual(set(['ph3']),
|
||||
set(self._doms(epg1.physical_domains,
|
||||
with_type=False)))
|
||||
# delete the wildcard port
|
||||
self._delete('ports', p3['port']['id'])
|
||||
epg1 = self.aim_mgr.get(aim_ctx, epg1)
|
||||
self.assertEqual(set([]),
|
||||
set(self._doms(epg1.vmm_domains)))
|
||||
self.assertEqual(set([]),
|
||||
set(self._doms(epg1.physical_domains,
|
||||
with_type=False)))
|
||||
|
||||
|
||||
class TestPortOnPhysicalNodeSingleDriver(TestPortOnPhysicalNode):
|
||||
|
|
|
@ -2183,9 +2183,10 @@ class TestPolicyTargetGroupVmmDomains(AIMBaseTestCase):
|
|||
tenant_name=aim_tenant_name,
|
||||
app_profile_name=aim_app_profile_name, name=aim_epg_name))
|
||||
self.assertEqual(set([]),
|
||||
set(aim_epg.openstack_vmm_domain_names))
|
||||
set([vmm['name'] for vmm in aim_epg.vmm_domains]))
|
||||
self.assertEqual(set([]),
|
||||
set(aim_epg.physical_domain_names))
|
||||
set([phys['name']
|
||||
for phys in aim_epg.physical_domains]))
|
||||
|
||||
|
||||
class TestPolicyTargetGroupIpv4(AIMBaseTestCase):
|
||||
|
@ -2601,6 +2602,13 @@ class TestPolicyTarget(AIMBaseTestCase):
|
|||
cfg.CONF.set_override('global_physnet_mtu', 1000, None)
|
||||
cfg.CONF.set_override('advertise_mtu', True, group='aim_mapping')
|
||||
|
||||
def _doms(self, domains, with_type=True):
|
||||
if with_type:
|
||||
return [(str(dom['name']), str(dom['type']))
|
||||
for dom in domains]
|
||||
else:
|
||||
return [str(dom['name']) for dom in domains]
|
||||
|
||||
def test_policy_target_lifecycle_implicit_port(self):
|
||||
ptg = self.create_policy_target_group(
|
||||
name="ptg1")['policy_target_group']
|
||||
|
@ -2675,18 +2683,30 @@ class TestPolicyTarget(AIMBaseTestCase):
|
|||
self._aim_context, aim_resource.EndpointGroup(
|
||||
tenant_name=aim_tenant_name,
|
||||
app_profile_name=aim_app_profile_name, name=aim_epg_name))
|
||||
self.assertEqual(set(['vm1', 'vm2']),
|
||||
set(aim_epg.openstack_vmm_domain_names))
|
||||
self.assertEqual(set([('vm1', 'OpenStack'),
|
||||
('vm2', 'OpenStack')]),
|
||||
set(self._doms(aim_epg.vmm_domains)))
|
||||
self.assertEqual(set([]),
|
||||
set(self._doms(aim_epg.physical_domains,
|
||||
with_type=False)))
|
||||
# move port to another host
|
||||
self._bind_port_to_host(pt['port_id'], 'h2')
|
||||
aim_epg = self.aim_mgr.get(aim_ctx, aim_epg)
|
||||
self.assertEqual(set(['vm1', 'vm2']),
|
||||
set(aim_epg.openstack_vmm_domain_names))
|
||||
self.assertEqual(set([('vm1', 'OpenStack'),
|
||||
('vm2', 'OpenStack')]),
|
||||
set(self._doms(aim_epg.vmm_domains)))
|
||||
self.assertEqual(set([]),
|
||||
set(self._doms(aim_epg.physical_domains,
|
||||
with_type=False)))
|
||||
# delete port
|
||||
self.delete_policy_target(pt['id'], expected_res_status=204)
|
||||
aim_epg = self.aim_mgr.get(aim_ctx, aim_epg)
|
||||
self.assertEqual(set(['vm1', 'vm2']),
|
||||
set(aim_epg.openstack_vmm_domain_names))
|
||||
self.assertEqual(set([('vm1', 'OpenStack'),
|
||||
('vm2', 'OpenStack')]),
|
||||
set(self._doms(aim_epg.vmm_domains)))
|
||||
self.assertEqual(set([]),
|
||||
set(self._doms(aim_epg.physical_domains,
|
||||
with_type=False)))
|
||||
|
||||
def test_policy_target_with_default_domains_explicit_port(self):
|
||||
aim_ctx = aim_context.AimContext(self.db_session)
|
||||
|
@ -2715,29 +2735,52 @@ class TestPolicyTarget(AIMBaseTestCase):
|
|||
self._aim_context, aim_resource.EndpointGroup(
|
||||
tenant_name=aim_tenant_name,
|
||||
app_profile_name=aim_app_profile_name, name=aim_epg_name))
|
||||
self.assertEqual(set(['vm1', 'vm2']),
|
||||
set(aim_epg.openstack_vmm_domain_names))
|
||||
self.assertEqual(set([('vm1', 'OpenStack'),
|
||||
('vm2', 'OpenStack')]),
|
||||
set(self._doms(aim_epg.vmm_domains)))
|
||||
self.assertEqual(set([]),
|
||||
set(self._doms(aim_epg.physical_domains,
|
||||
with_type=False)))
|
||||
# move port to another host
|
||||
self._bind_port_to_host(pt['port_id'], 'h2')
|
||||
aim_epg = self.aim_mgr.get(aim_ctx, aim_epg)
|
||||
self.assertEqual(set(['vm1', 'vm2']),
|
||||
set(aim_epg.openstack_vmm_domain_names))
|
||||
self.assertEqual(set([('vm1', 'OpenStack'),
|
||||
('vm2', 'OpenStack')]),
|
||||
set(self._doms(aim_epg.vmm_domains)))
|
||||
self.assertEqual(set([]),
|
||||
set(self._doms(aim_epg.physical_domains,
|
||||
with_type=False)))
|
||||
# delete port
|
||||
self.delete_policy_target(pt['id'], expected_res_status=204)
|
||||
aim_epg = self.aim_mgr.get(aim_ctx, aim_epg)
|
||||
self.assertEqual(set(['vm1', 'vm2']),
|
||||
set(aim_epg.openstack_vmm_domain_names))
|
||||
self.assertEqual(set([('vm1', 'OpenStack'),
|
||||
('vm2', 'OpenStack')]),
|
||||
set(self._doms(aim_epg.vmm_domains)))
|
||||
self.assertEqual(set([]),
|
||||
set(self._doms(aim_epg.physical_domains,
|
||||
with_type=False)))
|
||||
|
||||
def test_policy_target_with_specific_domains(self):
|
||||
aim_ctx = aim_context.AimContext(self.db_session)
|
||||
hd_mapping = aim_infra.HostDomainMapping(host_name='opflex-1',
|
||||
vmm_domain_name='vm1')
|
||||
hd_mapping = aim_infra.HostDomainMappingV2(host_name='opflex-1',
|
||||
domain_name='vm1',
|
||||
domain_type='OpenStack')
|
||||
self.aim_mgr.create(aim_ctx, hd_mapping)
|
||||
hd_mapping = aim_infra.HostDomainMapping(host_name='opflex-2',
|
||||
vmm_domain_name='vm2')
|
||||
hd_mapping = aim_infra.HostDomainMappingV2(host_name='opflex-2',
|
||||
domain_name='vm2',
|
||||
domain_type='OpenStack')
|
||||
self.aim_mgr.create(aim_ctx, hd_mapping)
|
||||
hd_mapping = aim_infra.HostDomainMapping(host_name='opflex-2a',
|
||||
vmm_domain_name='vm2')
|
||||
hd_mapping = aim_infra.HostDomainMappingV2(host_name='opflex-2a',
|
||||
domain_name='vm2',
|
||||
domain_type='OpenStack')
|
||||
self.aim_mgr.create(aim_ctx, hd_mapping)
|
||||
hd_mapping = aim_infra.HostDomainMappingV2(host_name='*',
|
||||
domain_name='phys1',
|
||||
domain_type='PhysDom')
|
||||
self.aim_mgr.create(aim_ctx, hd_mapping)
|
||||
hd_mapping = aim_infra.HostDomainMappingV2(host_name='opflex-1',
|
||||
domain_name='phys2',
|
||||
domain_type='PhysDom')
|
||||
self.aim_mgr.create(aim_ctx, hd_mapping)
|
||||
|
||||
ptg = self.create_policy_target_group(
|
||||
|
@ -2754,41 +2797,66 @@ class TestPolicyTarget(AIMBaseTestCase):
|
|||
self._aim_context, aim_resource.EndpointGroup(
|
||||
tenant_name=aim_tenant_name,
|
||||
app_profile_name=aim_app_profile_name, name=aim_epg_name))
|
||||
self.assertEqual(set(['vm1']),
|
||||
set(aim_epg.openstack_vmm_domain_names))
|
||||
self.assertEqual(set([('vm1', 'OpenStack')]),
|
||||
set(self._doms(aim_epg.vmm_domains)))
|
||||
self.assertEqual(set([]),
|
||||
set(self._doms(aim_epg.physical_domains,
|
||||
with_type=False)))
|
||||
# move port to another host
|
||||
self._bind_port_to_host(pt['port_id'], 'opflex-2')
|
||||
aim_epg = self.aim_mgr.get(aim_ctx, aim_epg)
|
||||
self.assertEqual(set(['vm2']),
|
||||
set(aim_epg.openstack_vmm_domain_names))
|
||||
self.assertEqual(set([('vm2', 'OpenStack')]),
|
||||
set(self._doms(aim_epg.vmm_domains)))
|
||||
self.assertEqual(set([]),
|
||||
set(self._doms(aim_epg.physical_domains,
|
||||
with_type=False)))
|
||||
# create another port on a host that belongs to the same domain
|
||||
pt1 = self.create_policy_target(
|
||||
policy_target_group_id=ptg['id'])['policy_target']
|
||||
self._bind_port_to_host(pt1['port_id'], 'opflex-2a')
|
||||
aim_epg = self.aim_mgr.get(aim_ctx, aim_epg)
|
||||
self.assertEqual(set(['vm2']),
|
||||
set(aim_epg.openstack_vmm_domain_names))
|
||||
self.assertEqual(set([('vm2', 'OpenStack')]),
|
||||
set(self._doms(aim_epg.vmm_domains)))
|
||||
self.assertEqual(set([]),
|
||||
set(self._doms(aim_epg.physical_domains,
|
||||
with_type=False)))
|
||||
# delete 1st port
|
||||
self.delete_policy_target(pt['id'], expected_res_status=204)
|
||||
aim_epg = self.aim_mgr.get(aim_ctx, aim_epg)
|
||||
self.assertEqual(set(['vm2']),
|
||||
set(aim_epg.openstack_vmm_domain_names))
|
||||
self.assertEqual(set([('vm2', 'OpenStack')]),
|
||||
set(self._doms(aim_epg.vmm_domains)))
|
||||
self.assertEqual(set([]),
|
||||
set(self._doms(aim_epg.physical_domains,
|
||||
with_type=False)))
|
||||
# delete the last port
|
||||
self.delete_policy_target(pt1['id'], expected_res_status=204)
|
||||
aim_epg = self.aim_mgr.get(aim_ctx, aim_epg)
|
||||
self.assertEqual(set([]),
|
||||
set(aim_epg.openstack_vmm_domain_names))
|
||||
set(self._doms(aim_epg.vmm_domains)))
|
||||
self.assertEqual(set([]),
|
||||
set(self._doms(aim_epg.physical_domains)))
|
||||
|
||||
def test_policy_target_with_specific_domains_explicit_port(self):
|
||||
aim_ctx = aim_context.AimContext(self.db_session)
|
||||
hd_mapping = aim_infra.HostDomainMapping(host_name='opflex-1',
|
||||
vmm_domain_name='vm1')
|
||||
hd_mapping = aim_infra.HostDomainMappingV2(host_name='opflex-1',
|
||||
domain_name='vm1',
|
||||
domain_type='OpenStack')
|
||||
self.aim_mgr.create(aim_ctx, hd_mapping)
|
||||
hd_mapping = aim_infra.HostDomainMapping(host_name='opflex-2',
|
||||
vmm_domain_name='vm2')
|
||||
hd_mapping = aim_infra.HostDomainMappingV2(host_name='opflex-2',
|
||||
domain_name='vm2',
|
||||
domain_type='OpenStack')
|
||||
self.aim_mgr.create(aim_ctx, hd_mapping)
|
||||
hd_mapping = aim_infra.HostDomainMapping(host_name='opflex-2a',
|
||||
vmm_domain_name='vm2')
|
||||
hd_mapping = aim_infra.HostDomainMappingV2(host_name='opflex-2a',
|
||||
domain_name='vm2',
|
||||
domain_type='OpenStack')
|
||||
self.aim_mgr.create(aim_ctx, hd_mapping)
|
||||
hd_mapping = aim_infra.HostDomainMappingV2(host_name='*',
|
||||
domain_name='phys1',
|
||||
domain_type='PhysDom')
|
||||
self.aim_mgr.create(aim_ctx, hd_mapping)
|
||||
hd_mapping = aim_infra.HostDomainMappingV2(host_name='opflex-1',
|
||||
domain_name='phys2',
|
||||
domain_type='PhysDom')
|
||||
self.aim_mgr.create(aim_ctx, hd_mapping)
|
||||
with self.port() as port:
|
||||
port_id = port['port']['id']
|
||||
|
@ -2807,13 +2875,19 @@ class TestPolicyTarget(AIMBaseTestCase):
|
|||
self._aim_context, aim_resource.EndpointGroup(
|
||||
tenant_name=aim_tenant_name,
|
||||
app_profile_name=aim_app_profile_name, name=aim_epg_name))
|
||||
self.assertEqual(set(['vm1']),
|
||||
set(aim_epg.openstack_vmm_domain_names))
|
||||
self.assertEqual(set([('vm1', 'OpenStack')]),
|
||||
set(self._doms(aim_epg.vmm_domains)))
|
||||
self.assertEqual(set([]),
|
||||
set(self._doms(aim_epg.physical_domains,
|
||||
with_type=False)))
|
||||
# move port to another host
|
||||
self._bind_port_to_host(port_id, 'opflex-2')
|
||||
aim_epg = self.aim_mgr.get(aim_ctx, aim_epg)
|
||||
self.assertEqual(set(['vm2']),
|
||||
set(aim_epg.openstack_vmm_domain_names))
|
||||
self.assertEqual(set([('vm2', 'OpenStack')]),
|
||||
set(self._doms(aim_epg.vmm_domains)))
|
||||
self.assertEqual(set([]),
|
||||
set(self._doms(aim_epg.physical_domains,
|
||||
with_type=False)))
|
||||
with self.port() as port1:
|
||||
# create another port on a host that belongs to the same domain
|
||||
port_id1 = port1['port']['id']
|
||||
|
@ -2823,18 +2897,26 @@ class TestPolicyTarget(AIMBaseTestCase):
|
|||
port_id=port_id1)['policy_target']
|
||||
|
||||
aim_epg = self.aim_mgr.get(aim_ctx, aim_epg)
|
||||
self.assertEqual(set(['vm2']),
|
||||
set(aim_epg.openstack_vmm_domain_names))
|
||||
self.assertEqual(set([('vm2', 'OpenStack')]),
|
||||
set(self._doms(aim_epg.vmm_domains)))
|
||||
self.assertEqual(set([]),
|
||||
set(self._doms(aim_epg.physical_domains,
|
||||
with_type=False)))
|
||||
# delete 1st pt
|
||||
self.delete_policy_target(pt['id'], expected_res_status=204)
|
||||
aim_epg = self.aim_mgr.get(aim_ctx, aim_epg)
|
||||
self.assertEqual(set(['vm2']),
|
||||
set(aim_epg.openstack_vmm_domain_names))
|
||||
self.assertEqual(set([('vm2', 'OpenStack')]),
|
||||
set(self._doms(aim_epg.vmm_domains)))
|
||||
self.assertEqual(set([]),
|
||||
set(self._doms(aim_epg.physical_domains,
|
||||
with_type=False)))
|
||||
# delete the last pt
|
||||
self.delete_policy_target(pt1['id'], expected_res_status=204)
|
||||
aim_epg = self.aim_mgr.get(aim_ctx, aim_epg)
|
||||
self.assertEqual(set([]),
|
||||
set(aim_epg.openstack_vmm_domain_names))
|
||||
set(self._doms(aim_epg.vmm_domains)))
|
||||
self.assertEqual(set([]),
|
||||
set(self._doms(aim_epg.physical_domains)))
|
||||
|
||||
def _verify_gbp_details_assertions(self, mapping, req_mapping, port_id,
|
||||
expected_epg_name, expected_epg_tenant,
|
||||
|
|
Loading…
Reference in New Issue