Skip to content

Commit

Permalink
Merge "Handle multiple instance ips for each vmi/port"
Browse files Browse the repository at this point in the history
  • Loading branch information
Zuul authored and opencontrail-ci-admin committed Dec 3, 2015
2 parents 3b34a90 + e54e996 commit 29d59ef
Show file tree
Hide file tree
Showing 7 changed files with 48 additions and 32 deletions.
12 changes: 6 additions & 6 deletions src/config/svc-monitor/svc_monitor/config_db.py
Expand Up @@ -342,8 +342,8 @@ def __init__(self, uuid, obj_dict=None):
self.virtual_machine = None
self.loadbalancer_pool = None
self.logical_interface = None
self.instance_ip = None
self.floating_ip = None
self.instance_ips = set()
self.floating_ips = set()
self.interface_route_table = None
self.security_group = None
self.service_instance = None
Expand All @@ -364,8 +364,8 @@ def update(self, obj=None):
self.if_type = self.params.get('service_interface_type', None)
self.update_single_ref('virtual_ip', obj)
self.update_single_ref('loadbalancer_pool', obj)
self.update_single_ref('instance_ip', obj)
self.update_single_ref('floating_ip', obj)
self.update_multiple_refs('instance_ip', obj)
self.update_multiple_refs('floating_ip', obj)
self.update_single_ref('virtual_network', obj)
self.update_single_ref('virtual_machine', obj)
self.update_single_ref('logical_interface', obj)
Expand All @@ -387,8 +387,8 @@ def delete(cls, uuid):
obj = cls._dict[uuid]
obj.update_single_ref('virtual_ip', {})
obj.update_single_ref('loadbalancer_pool', {})
obj.update_single_ref('instance_ip', {})
obj.update_single_ref('floating_ip', {})
obj.update_multiple_refs('instance_ip', {})
obj.update_multiple_refs('floating_ip', {})
obj.update_single_ref('virtual_network', {})
obj.update_single_ref('virtual_machine', {})
obj.update_single_ref('logical_interface', {})
Expand Down
6 changes: 5 additions & 1 deletion src/config/svc-monitor/svc_monitor/instance_manager.py
Expand Up @@ -699,7 +699,11 @@ def create_service(self, st, si):
st_name=(':').join(st.fq_name))

def add_fip_to_vip_vmi(self, vmi, fip):
iip = InstanceIpSM.get(vmi.instance_ip)
iip = None
for iip_id in vmi.instance_ips:
iip = InstanceIpSM.get(iip_id)
if iip:
break
if not iip:
return

Expand Down
14 changes: 9 additions & 5 deletions src/config/svc-monitor/svc_monitor/loadbalancer_agent.py
Expand Up @@ -37,8 +37,12 @@ def pre_create_service_vm(self, instance_index, si, st, vm):
for nic in si.vn_info:
if nic['type'] == svc_info.get_right_if_str():
vmi = self._get_vip_vmi(si)
nic['iip-id'] = vmi.instance_ip
nic['fip-id'] = vmi.floating_ip
for iip_id in vmi.instance_ips:
nic['iip-id'] = iip_id
break
for fip_id in vmi.floating_ips:
nic['fip-id'] = fip_id
break
nic['user-visible'] = False

def _get_vip_vmi(self, si):
Expand Down Expand Up @@ -266,10 +270,10 @@ def _get_interface_params(self, vip, props):

if not props['address']:
vmi = VirtualMachineInterfaceSM.get(port_id)
ip_refs = vmi.instance_ip
if ip_refs:
iip = InstanceIpSM.get(ip_refs)
for iip_id in vmi.instance_ips:
iip = InstanceIpSM.get(iip_id)
props['address'] = iip.address
break

return port_id
# end _get_interface_params
Expand Down
11 changes: 6 additions & 5 deletions src/config/svc-monitor/svc_monitor/port_tuple.py
Expand Up @@ -84,11 +84,12 @@ def set_port_service_chain_ip(self, si, port, vmi, vmi_obj):
self._allocate_shared_iip(si, port, vmi, vmi_obj)
return

iip = InstanceIpSM.get(vmi.instance_ip)
if iip and not iip.service_instance_ip:
iip_obj = self._vnc_lib.instance_ip_read(id=iip.uuid)
iip_obj.set_service_instance_ip(True)
self._vnc_lib.instance_ip_update(iip_obj)
for iip_id in vmi.instance_ips:
iip = InstanceIpSM.get(iip_id)
if iip and not iip.service_instance_ip:
iip_obj = self._vnc_lib.instance_ip_read(id=iip.uuid)
iip_obj.set_service_instance_ip(True)
self._vnc_lib.instance_ip_update(iip_obj)

def get_port_config(self, st, si):
st_if_list = st.params.get('interface_type', [])
Expand Down
Expand Up @@ -898,7 +898,8 @@ def release_pool_resource(self, pool_info):
self._api.logical_interface_delete(id=pool_info[u'mx_ifl'])

vmi = VirtualMachineInterfaceSM.get(pool_info[u'self_ip'][2])
self._api.instance_ip_delete(id=vmi.instance_ip)
for iip_id in vmi.instance_ips:
self._api.instance_ip_delete(id=iip_id)
self._api.virtual_machine_interface_delete(id=pool_info[u'self_ip'][2])
del(self.ifl_list[ifl_uuid])

Expand All @@ -910,7 +911,8 @@ def release_pool_resource(self, pool_info):
del(self.subnet_snat_list[subnet_id])
for snat_ip in pool_info['snat_vmi'].keys() or []:
vmi = VirtualMachineInterfaceSM.get(pool_info['snat_vmi'][snat_ip][1])
self._api.instance_ip_delete(id=vmi.instance_ip)
for iip_id in vmi.instance_ips:
self._api.instance_ip_delete(id=iip_id)
self._api.virtual_machine_interface_delete(id=pool_info['snat_vmi'][snat_ip][1])
bigips = self.__bigips.values()
for set_bigip in bigips:
Expand Down Expand Up @@ -941,7 +943,8 @@ def release_vip_resource(self, pool_info):

# delete the VMI
vmi = VirtualMachineInterfaceSM.get(pool_info['vip'][u'self_ip'][2])
self._api.instance_ip_delete(id=vmi.instance_ip)
for iip_id in vmi.instance_ips:
self._api.instance_ip_delete(id=iip_id)
self._api.virtual_machine_interface_delete(id=pool_info['vip'][u'self_ip'][2])
del(self.ifl_list[ifl_uuid])

Expand All @@ -953,7 +956,8 @@ def release_vip_resource(self, pool_info):
del(self.subnet_snat_list[subnet_id])
for snat_ip in pool_info['vip']['snat_vmi'].keys() or []:
vmi = VirtualMachineInterfaceSM.get(pool_info['vip']['snat_vmi'][snat_ip][1])
self._api.instance_ip_delete(id=vmi.instance_ip)
for iip_id in vmi.instance_ips:
self._api.instance_ip_delete(id=iip_id)
self._api.virtual_machine_interface_delete(id=pool_info['vip']['snat_vmi'][snat_ip][1])
bigips = self.__bigips.values()
for set_bigip in bigips:
Expand Down Expand Up @@ -1063,7 +1067,8 @@ def locate_resources(self, pool, add_change=True):
self._api.logical_interface_update(ifl)
else:
vmi = VirtualMachineInterfaceSM.get(ifl.virtual_machine_interface)
ports_created[InstanceIpSM.get(vmi.instance_ip).address] = vmi
for iip_id in vmi.instance_ips:
ports_created[InstanceIpSM.get(iip_id).address] = vmi
new_pool_info[u'mx_ifl'] = ifl.uuid
new_pool_info[u'vlan_tag'] = ifl.logical_interface_vlan_tag
new_pool_info[u'self_ip'] = (vmi.name, ports_created.keys()[0], ports_created.values()[0].uuid)
Expand All @@ -1081,7 +1086,8 @@ def locate_resources(self, pool, add_change=True):
pool_snat_list = {}
for port in self.subnet_snat_list[pool_subnet_id]['vmi_list'] or []:
vmi = VirtualMachineInterfaceSM.get(port)
pool_snat_list[InstanceIpSM.get(vmi.instance_ip).address] = (vmi.name, port)
for iip_id in vmi.instance_ips:
pool_snat_list[InstanceIpSM.get(iip_id).address] = (vmi.name, port)
new_pool_info[u'snat_vmi'] = pool_snat_list
else:
new_pool_info[u'mx_ifl'] = pool_in_db[u'mx_ifl']
Expand Down Expand Up @@ -1118,7 +1124,8 @@ def locate_resources(self, pool, add_change=True):
self._api.logical_interface_update(ifl)
else:
vmi = VirtualMachineInterfaceSM.get(ifl.virtual_machine_interface)
ports_created[InstanceIpSM.get(vmi.instance_ip).address] = vmi
for iip_id in vmi.instance_ips:
ports_created[InstanceIpSM.get(iip_id).address] = vmi
ifl_uuid = ifl.uuid
vip_info[u'mx_ifl'] = ifl_uuid
vip_info[u'vlan_tag'] = ifl.logical_interface_vlan_tag
Expand All @@ -1135,7 +1142,8 @@ def locate_resources(self, pool, add_change=True):
vip_snat_list = {}
for port in self.subnet_snat_list[vip_subnet_id]['vmi_list'] or []:
vmi = VirtualMachineInterfaceSM.get(port)
vip_snat_list[InstanceIpSM.get(vmi.instance_ip).address] = (vmi.name, port)
for iip_id in vmi.instance_ips:
vip_snat_list[InstanceIpSM.get(iip_id).address] = (vmi.name, port)
vip_info[u'snat_vmi'] = vip_snat_list
else:
vip_info[u'mx_ifl'] = pool_in_db[u'vip'][u'mx_ifl']
Expand Down
Expand Up @@ -45,11 +45,10 @@ def _get_template(self):
return

def _get_interface_address(self, vmi):
iip = vmi.instance_ip
instance_ip = InstanceIpSM.get(iip)
if instance_ip is None:
return None
return instance_ip.address
for iip_id in vmi.instance_ips:
instance_ip = InstanceIpSM.get(iip_id)
return instance_ip.address
return None

def _calculate_instance_properties(self, pool, vip):
""" ServiceInstance settings
Expand Down
4 changes: 2 additions & 2 deletions src/config/svc-monitor/svc_monitor/tests/test_config_db.py
Expand Up @@ -205,7 +205,7 @@ def test_add_delete_iip(self):
self.assertIsNotNone(iip)
self.assertEqual(len(iip.virtual_machine_interfaces), 1)
self.assertTrue('vmi' in iip.virtual_machine_interfaces)
self.assertEqual(vmi.instance_ip, 'iip')
self.assertEqual(list(vmi.instance_ips)[0], 'iip')

config_db.InstanceIpSM.delete('iip')
config_db.VirtualMachineInterfaceSM.delete('vmi')
Expand Down Expand Up @@ -382,7 +382,7 @@ def test_add_delete_floating_ip(self):
self.assertEqual(len(fip.virtual_machine_interfaces), 1)
self.assertTrue('vmi' in fip.virtual_machine_interfaces)
self.assertEqual(fip.address, "1.2.3.33")
self.assertEqual(vmi.floating_ip, 'fip')
self.assertEqual(list(vmi.floating_ips)[0], 'fip')

config_db.FloatingIpSM.delete('fip')
config_db.VirtualMachineInterfaceSM.delete('vmi')
Expand Down

0 comments on commit 29d59ef

Please sign in to comment.