Skip to content

Commit

Permalink
Active-standby and active-active for port tuple
Browse files Browse the repository at this point in the history
Default service chain ip ha mode as active-active.
If allowed address pair is configured then copy the address mode
from AAP to service chain ip.

Change-Id: I8627f146a10342aa9a75bc529b5810b8cdaa50bd
Closes-bug: #1548920
  • Loading branch information
rrugge committed May 5, 2016
1 parent 14c34dc commit 45ea31b
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 10 deletions.
1 change: 1 addition & 0 deletions src/config/svc-monitor/svc_monitor/config_db.py
Expand Up @@ -755,6 +755,7 @@ def update(self, obj=None):
obj = self.read_obj(self.uuid)
self.name = obj['fq_name'][-1]
self.fq_name = obj['fq_name']
self.instance_ip_mode = obj.get('instance_ip_mode', None)
self.service_instance_ip = obj.get('service_instance_ip', False)
self.instance_ip_secondary = obj.get('instance_ip_secondary', False)
self.secondary_tracking_ip = obj.get('secondary_ip_tracking_ip', None)
Expand Down
32 changes: 22 additions & 10 deletions src/config/svc-monitor/svc_monitor/port_tuple.py
Expand Up @@ -50,7 +50,7 @@ def _allocate_iip_for_family(self, iip_family, si, port, vmi):
iip_obj.add_virtual_network(vn_obj)
iip_obj.set_service_instance_ip(True)
iip_obj.set_instance_ip_secondary(True)
iip_obj.set_instance_ip_mode(si.ha_mode)
iip_obj.set_instance_ip_mode('active-active')
try:
self._vnc_lib.instance_ip_create(iip_obj)
self._vnc_lib.ref_relax_for_delete(iip_obj.uuid, vn_obj.uuid)
Expand Down Expand Up @@ -111,23 +111,35 @@ def set_port_static_routes(self, port, vmi):
'interface-route-table', irt_id, None, 'DELETE')
vmi.update()

def set_secondary_ip_tracking_ip(self, vmi):
def update_secondary_iip(self, vmi):
for iip_id in vmi.instance_ips:
iip = InstanceIpSM.get(iip_id)
if not iip or not iip.instance_ip_secondary:
continue

update = False
iip_obj = InstanceIp()
iip_obj.name = iip.name
iip_obj.uuid = iip.uuid

if vmi.aaps and len(vmi.aaps):
if iip.secondary_tracking_ip != vmi.aaps[0]['ip']:
iip_obj = self._vnc_lib.instance_ip_read(id=iip.uuid)
iip_obj.set_secondary_ip_tracking_ip(vmi.aaps[0]['ip'])
self._vnc_lib.instance_ip_update(iip_obj)
iip.update(iip_obj.serialize_to_json())
update = True
if iip.instance_ip_mode != vmi.aaps[0].get('address_mode', 'active-standby'):
iip_obj.set_instance_ip_mode(vmi.aaps[0].get('address_mode', 'active-standby'))
update = True
else:
if iip.secondary_tracking_ip:
iip_obj = self._vnc_lib.instance_ip_read(id=iip.uuid)
iip_obj.set_secondary_ip_tracking_ip(None)
self._vnc_lib.instance_ip_update(iip_obj)
iip.update(iip_obj.serialize_to_json())
update = True
if iip.instance_ip_mode != 'active-active':
iip_obj.set_instance_ip_mode('active-active')
update = True

if update:
self._vnc_lib.instance_ip_update(iip_obj)
iip.update(iip_obj.serialize_to_json())

def set_port_allowed_address_pairs(self, port, vmi, vmi_obj):
if not port['allowed-address-pairs'] or \
Expand All @@ -136,7 +148,7 @@ def set_port_allowed_address_pairs(self, port, vmi, vmi_obj):
vmi_obj.set_virtual_machine_interface_allowed_address_pairs(AllowedAddressPairs())
self._vnc_lib.virtual_machine_interface_update(vmi_obj)
vmi.update()
self.set_secondary_ip_tracking_ip(vmi)
self.update_secondary_iip(vmi)
return

aaps = port['allowed-address-pairs'].get('allowed_address_pair', None)
Expand All @@ -153,7 +165,7 @@ def set_port_allowed_address_pairs(self, port, vmi, vmi_obj):
port['allowed-address-pairs'])
self._vnc_lib.virtual_machine_interface_update(vmi_obj)
vmi.update()
self.set_secondary_ip_tracking_ip(vmi)
self.update_secondary_iip(vmi)

def delete_shared_iip(self, iip):
if not iip.service_instance_ip or not iip.instance_ip_secondary:
Expand Down

0 comments on commit 45ea31b

Please sign in to comment.