def timer_callback(monitor): # delete vms without si vm_delete_list = [] for vm in VirtualMachineSM.values(): si = ServiceInstanceSM.get(vm.service_instance) if not si and vm.virtualization_type: vm_delete_list.append(vm) for vm in vm_delete_list: monitor._delete_service_instance(vm) # check status of service si_id_list = copy.deepcopy(ServiceInstanceSM) for si_id in si_id_list: si = ServiceInstanceSM.get(si_id) if not si: continue if not monitor._check_service_running(si): monitor._relaunch_service_instance(si) if si.max_instances != len(si.virtual_machines): monitor._relaunch_service_instance(si) # check vns to be deleted for project in ProjectSM.values(): if project.service_instances: continue for vn_id in project.virtual_networks: vn = VirtualNetworkSM.get(vn_id) if not vn or vn.virtual_machine_interfaces: 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 _create_snat_vn(self, si, vn_fq_str, index): vn_name = '%s_%s' % (svc_info.get_snat_left_vn_prefix(), si.name) vn_fq_name = si.fq_name[:-1] + [vn_name] try: vn_id = self._vnc_lib.fq_name_to_id( 'virtual-network', vn_fq_name) except NoIdError: snat_subnet = svc_info.get_snat_left_subnet() vn_id = self.create_service_vn(vn_name, snat_subnet, si.fq_name[:-1], user_visible=False) if vn_fq_str != ':'.join(vn_fq_name): si_obj = ServiceInstance() si_obj.uuid = si.uuid si_obj.fq_name = si.fq_name si_props = ServiceInstanceType(**si.params) left_if = ServiceInstanceInterfaceType( virtual_network=':'.join(vn_fq_name)) si_props.insert_interface_list(index, left_if) si_obj.set_service_instance_properties(si_props) self._vnc_lib.service_instance_update(si_obj) self.logger.log_info("SI %s updated with left vn %s" % (si_obj.get_fq_name_str(), vn_fq_str)) return vn_id
def timer_callback(monitor): # delete vms without si vm_delete_list = [] for vm in VirtualMachineSM.values(): si = ServiceInstanceSM.get(vm.service_instance) if not si and vm.virtualization_type: vm_delete_list.append(vm) for vm in vm_delete_list: monitor._delete_service_instance(vm) # check status of service si_id_list = list(ServiceInstanceSM._dict.keys()) for si_id in si_id_list: si = ServiceInstanceSM.get(si_id) if not si or not si.launch_count: continue if not monitor._check_service_running(si): monitor._relaunch_service_instance(si) if si.max_instances != len(si.virtual_machines): monitor._relaunch_service_instance(si) # check vns to be deleted for project in ProjectSM.values(): if project.service_instances: continue vn_id_list = list(project.virtual_networks) for vn_id in vn_id_list: vn = VirtualNetworkSM.get(vn_id) if not vn or vn.virtual_machine_interfaces: 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 _create_snat_vn(self, si, vn_fq_str, index): vn_name = '%s_%s' % (svc_info.get_snat_left_vn_prefix(), si.name) vn_fq_name = si.fq_name[:-1] + [vn_name] try: vn_id = self._vnc_lib.fq_name_to_id('virtual-network', vn_fq_name) except NoIdError: snat_subnet = svc_info.get_snat_left_subnet() vn_id = self.create_service_vn(vn_name, snat_subnet, si.fq_name[:-1], user_visible=False) if vn_fq_str != ':'.join(vn_fq_name): si_obj = ServiceInstance() si_obj.uuid = si.uuid si_obj.fq_name = si.fq_name si_props = ServiceInstanceType(**si.params) left_if = ServiceInstanceInterfaceType( virtual_network=':'.join(vn_fq_name)) si_props.insert_interface_list(index, left_if) si_obj.set_service_instance_properties(si_props) self._vnc_lib.service_instance_update(si_obj) self.logger.log_info("SI %s updated with left vn %s" % (si_obj.get_fq_name_str(), vn_fq_str)) return vn_id
def timer_callback(monitor): # delete vms without si vm_delete_list = [] for vm in VirtualMachineSM.values(): si = ServiceInstanceSM.get(vm.service_instance) if not si: vm_delete_list.append(vm) for vm in vm_delete_list: monitor._delete_service_instance(vm) # check status of service for si_id in ServiceInstanceSM: si = ServiceInstanceSM.get(si_id) if not monitor._check_service_running(si): monitor._relaunch_service_instance(si) if si.max_instances > len(si.virtual_machines): monitor._relaunch_service_instance(si) # check vns to be deleted for vn in VirtualNetworkSM.values(): if vn.virtual_machine_interfaces: continue elif 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 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 timer_callback(monitor): # delete orphan shared iips iip_delete_list = [] for iip in InstanceIpSM.values(): if not iip.instance_ip_secondary or not iip.service_instance_ip: continue if iip.service_instance: continue if len(iip.virtual_machine_interfaces): continue iip_delete_list.append(iip) for iip in iip_delete_list: monitor.port_tuple_agent.delete_shared_iip(iip.uuid) # delete vms without si vm_delete_list = [] for vm in VirtualMachineSM.values(): si = ServiceInstanceSM.get(vm.service_instance) if not si and vm.virtualization_type: vm_delete_list.append(vm) for vm in vm_delete_list: monitor.delete_service_instance(vm) # delete vmis with si but no vms vmi_delete_list = [] for vmi in VirtualMachineInterfaceSM.values(): si = ServiceInstanceSM.get(vmi.service_instance) if si and not vmi.virtual_machine: vmi_delete_list.append(vmi.uuid) if len(vmi_delete_list): monitor.vm_manager.cleanup_svc_vm_ports(vmi_delete_list) # check vrouter agent status monitor.vrouter_scheduler.vrouters_running() # check status of service si_list = list(ServiceInstanceSM.values()) for si in si_list: if skip_check_service(si): continue if not monitor._check_service_running(si): monitor._relaunch_service_instance(si) if si.max_instances != len(si.virtual_machines): monitor._relaunch_service_instance(si) # check vns to be deleted for project in ProjectSM.values(): if project.service_instances: continue vn_id_list = list(project.virtual_networks) for vn_id in vn_id_list: vn = VirtualNetworkSM.get(vn_id) if not vn or vn.virtual_machine_interfaces: 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 timer_callback(monitor): # delete orphan shared iips iip_delete_list = [] for iip in InstanceIpSM.values(): if not iip.instance_ip_secondary or not iip.service_instance_ip: continue if iip.service_instance: continue if len(iip.virtual_machine_interfaces): continue iip_delete_list.append(iip) for iip in iip_delete_list: monitor.port_tuple_agent.delete_shared_iip(iip.uuid) # delete vms without si vm_delete_list = [] for vm in VirtualMachineSM.values(): si = ServiceInstanceSM.get(vm.service_instance) if not si and vm.virtualization_type: vm_delete_list.append(vm) for vm in vm_delete_list: monitor.delete_service_instance(vm) # delete vmis with si but no vms vmi_delete_list = [] for vmi in VirtualMachineInterfaceSM.values(): si = ServiceInstanceSM.get(vmi.service_instance) if si and not vmi.virtual_machine: vmi_delete_list.append(vmi.uuid) if len(vmi_delete_list): monitor.vm_manager.cleanup_svc_vm_ports(vmi_delete_list) # check vrouter agent status monitor.vrouter_scheduler.vrouters_running() # check status of service si_list = list(ServiceInstanceSM.values()) for si in si_list: if skip_check_service(si): continue if not monitor._check_service_running(si): monitor._relaunch_service_instance(si) if si.max_instances != len(si.virtual_machines): monitor._relaunch_service_instance(si) # check vns to be deleted for project in ProjectSM.values(): if project.service_instances: continue vn_id_list = list(project.virtual_networks) for vn_id in vn_id_list: vn = VirtualNetworkSM.get(vn_id) if not vn or vn.virtual_machine_interfaces: 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 _get_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: self._cassandra.fq_name_to_uuid('virtual-network', vn_fq_name) except NoIdError: self._create_snat_vn(si_obj, vn_name) return ':'.join(vn_fq_name)
def _get_snat_vn(self, project_obj, 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: self._cassandra.fq_name_to_uuid('virtual-network', vn_fq_name) except NoIdError: self._create_snat_vn(si_obj, vn_name) return ':'.join(vn_fq_name)
def _get_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: self._object_db.fq_name_to_uuid('virtual-network', vn_fq_name) except vnc_exc.NoIdError: self.logger.debug("Virtual Network %s not found. Creating One." % \ (vn_name)) self._create_snat_vn(si_obj, vn_name) return ':'.join(vn_fq_name)
def _get_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: self._object_db.fq_name_to_uuid('virtual-network', vn_fq_name) except vnc_exc.NoIdError: self.logger.debug("Virtual Network %s not found. Creating One." % \ (vn_name)) self._create_snat_vn(si_obj, vn_name) return ':'.join(vn_fq_name)
def delete_snat_instance(self, router_obj): try: vnc_rtr_obj = self._vnc_lib.logical_router_read(id=router_obj.uuid) except vnc_exc.NoIdError: vnc_rtr_obj = None # Get the service instance if it exists si_obj = None si_uuid = router_obj.service_instance if si_uuid: try: si_obj = self._vnc_lib.service_instance_read(id=si_uuid) except NoIdError: pass # Get route table for default route it it exists rt_obj = self._get_route_table(router_obj) if vnc_rtr_obj: vnc_rtr_obj.set_service_instance_list([]) # Clear logical gateway route table if rt_obj: vnc_rtr_obj.del_route_table(rt_obj) try: self._vnc_lib.logical_router_update(vnc_rtr_obj) except vnc_exc.NoIdError: pass # Delete route table if rt_obj: self._vnc_lib.route_table_delete(id=rt_obj.uuid) # Delete service instance if not si_obj: return self._vnc_lib.service_instance_delete(id=si_uuid) # Delete left network 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: self._vnc_lib.virtual_network_delete(fq_name=vn_fq_name) except (RefsExistError, NoIdError): pass
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 vnc_exc.NoIdError: self.logger.debug("Unable to find virtual network %s. " \ "Delete of SNAT instance %s failed." % \ (vn_name, si_obj.name)) 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 vnc_exc.NoIdError: self.logger.debug( \ "Update of vnc lib for vmi %s virtual network %s failed" % \ (vmi_id, vn_name)) pass for iip_id in vn.instance_ips: try: self._vnc_lib.instance_ip_delete(id=iip_id) except vnc_exc.NoIdError: self.logger.debug( \ "Unable to find IIP %s in virtual network %s." % \ (iip_id, vn_name)) pass try: self._vnc_lib.virtual_network_delete(id=vn.uuid) except (vnc_exc.RefsExistError, vnc_exc.NoIdError): self.logger.debug("Delete of virtual network %s failed." % \ (vn_name)) pass
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 vnc_exc.NoIdError: self.logger.debug("Unable to find virtual network %s. " \ "Delete of SNAT instance %s failed." % \ (vn_name, si_obj.name)) 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 vnc_exc.NoIdError: self.logger.debug( \ "Update of vnc lib for vmi %s virtual network %s failed" % \ (vmi_id, vn_name)) pass for iip_id in vn.instance_ips: try: self._vnc_lib.instance_ip_delete(id=iip_id) except vnc_exc.NoIdError: self.logger.debug( \ "Unable to find IIP %s in virtual network %s." % \ (iip_id, vn_name)) pass try: self._vnc_lib.virtual_network_delete(id=vn.uuid) except (vnc_exc.RefsExistError, vnc_exc.NoIdError): self.logger.debug("Delete of virtual network %s failed." % \ (vn_name)) pass