Skip to content

Commit

Permalink
Delete SNAT left vn
Browse files Browse the repository at this point in the history
Handle delete of SNAT left vn from timer to event based.
Dereference the ports and instance ips before deleting the
snat left vn.

Also change api-server to ignore if iip does not have vn ref.

Change-Id: I88261271efe28db7c777c207c047bcd857e09f42
Closes-Bug: #1367097
  • Loading branch information
rudrarugge committed Aug 10, 2016
1 parent a85be0d commit c0c2f49
Show file tree
Hide file tree
Showing 4 changed files with 46 additions and 4 deletions.
2 changes: 2 additions & 0 deletions src/config/api-server/vnc_cfg_types.py
Expand Up @@ -389,6 +389,8 @@ def pre_dbe_update(cls, id, fq_name, obj_dict, db_conn,
return ok, result
db_iip_dict = result

if 'virtual_network_refs' not in db_iip_dict:
return True, ''
vn_uuid = db_iip_dict['virtual_network_refs'][0]['uuid']
vn_fq_name = db_iip_dict['virtual_network_refs'][0]['to']
if ((vn_fq_name == cfgm_common.IP_FABRIC_VN_FQ_NAME) or
Expand Down
6 changes: 6 additions & 0 deletions src/config/svc-monitor/svc_monitor/config_db.py
Expand Up @@ -662,6 +662,7 @@ class VirtualNetworkSM(DBBaseSM):
def __init__(self, uuid, obj_dict=None):
self.uuid = uuid
self.virtual_machine_interfaces = set()
self.instance_ips = set()
obj_dict = self.update(obj_dict)
self.add_to_parent(obj_dict)
# end __init__
Expand All @@ -672,6 +673,7 @@ def update(self, obj=None):
self.name = obj['fq_name'][-1]
self.fq_name = obj['fq_name']
self.update_multiple_refs('virtual_machine_interface', obj)
self.update_multiple_refs('instance_ip', obj)
return obj
# end update

Expand All @@ -681,6 +683,7 @@ def delete(cls, uuid):
return
obj = cls._dict[uuid]
obj.update_multiple_refs('virtual_machine_interface', {})
obj.update_multiple_refs('instance_ip', {})
obj.remove_from_parent()
del cls._dict[uuid]
# end delete
Expand Down Expand Up @@ -747,6 +750,7 @@ def __init__(self, uuid, obj_dict=None):
self.instance_ip_secondary = None
self.secondary_tracking_ip = None
self.virtual_machine_interfaces = set()
self.virtual_networks = set()
self.update(obj_dict)
# end __init__

Expand All @@ -762,6 +766,7 @@ def update(self, obj=None):
self.family = obj.get('instance_ip_family', 'v4')
self.address = obj.get('instance_ip_address', None)
self.update_multiple_refs('virtual_machine_interface', obj)
self.update_multiple_refs('virtual_network', obj)
self.update_single_ref('service_instance', obj)
# end update

Expand All @@ -772,6 +777,7 @@ def delete(cls, uuid):
obj = cls._dict[uuid]
obj.update_single_ref('service_instance', {})
obj.update_multiple_refs('virtual_machine_interface', {})
obj.update_multiple_refs('virtual_network', {})
del cls._dict[uuid]
# end delete

Expand Down
40 changes: 38 additions & 2 deletions src/config/svc-monitor/svc_monitor/snat_agent.py
Expand Up @@ -223,6 +223,37 @@ def _add_snat_instance(self, router_obj):
self._vnc_lib.logical_router_update(vnc_rtr_obj)
# end add_snat_instance

def delete_snat_vn(self, si_obj):
vn_name = '%s_%s' % (svc_info.get_snat_left_vn_prefix(),
si_obj.name)
vn_fq_name = si_obj.fq_name[:-1] + [vn_name]
try:
vn_obj = self._vnc_lib.virtual_network_read(fq_name=vn_fq_name)
except NoIdError:
return

vn = VirtualNetworkSM.get(vn_obj.uuid)
if not vn:
return

for vmi_id in vn.virtual_machine_interfaces:
try:
self._vnc_lib.ref_update('virtual-machine-interface',
vmi_id, 'virtual-network', vn.uuid, None, 'DELETE')
except NoIdError:
pass

for iip_id in vn.instance_ips:
try:
self._vnc_lib.instance_ip_delete(id=iip_id)
except NoIdError:
pass

try:
self._vnc_lib.virtual_network_delete(id=vn.uuid)
except (RefsExistError, NoIdError):
pass

def delete_snat_instance(self, router_obj):
try:
vnc_rtr_obj = self._vnc_lib.logical_router_read(id=router_obj.uuid)
Expand Down Expand Up @@ -266,9 +297,14 @@ def delete_snat_instance(self, router_obj):
except vnc_exc.NoIdError:
pass

if not si_obj:
return

# Delete left network
self.delete_snat_vn(si_obj)

# Delete service instance
if si_obj:
self._vnc_lib.service_instance_delete(id=si_uuid)
self._vnc_lib.service_instance_delete(id=si_uuid)
# end delete_snat_instance

def cleanup_snat_instance(self, lr_id, si_id):
Expand Down
2 changes: 0 additions & 2 deletions src/config/svc-monitor/svc_monitor/svc_monitor.py
Expand Up @@ -582,8 +582,6 @@ def timer_callback(monitor):
continue
if vn.name in svc_info.get_shared_vn_list():
monitor._delete_shared_vn(vn.uuid)
elif vn.name.startswith(svc_info.get_snat_left_vn_prefix()):
monitor._delete_shared_vn(vn.uuid)


def launch_timer(monitor):
Expand Down

0 comments on commit c0c2f49

Please sign in to comment.