예제 #1
0
    def _cleanup_si(self, si_fq_str):
        si_info = self.db.service_instance_get(si_fq_str)
        if not si_info:
            return
        cleaned_up = True
        state = {}
        state['state'] = 'deleting'
        self.db.service_instance_insert(si_fq_str, state)
        proj_name = self._get_proj_name_from_si_fq_str(si_fq_str)

        for idx in range(0, int(si_info.get('max-instances', '0'))):
            prefix = self.db.get_vm_db_prefix(idx)
            vm_key = prefix + 'uuid'
            if vm_key in si_info.keys():
                if not self._delete_svc_instance(
                        si_info[vm_key], proj_name, si_fq_str=si_fq_str,
                        virt_type=si_info['instance_type']):
                    cleaned_up = False

        if cleaned_up:
            vn_name = 'snat-si-left_%s' % si_fq_str.split(':')[-1]
            if vn_name in si_info.keys():
                if not self._delete_shared_vn(si_info[vn_name], proj_name):
                    cleaned_up = False

        if cleaned_up:
            for vn_name in svc_info.get_shared_vn_list():
                if vn_name in si_info.keys():
                    self._delete_shared_vn(si_info[vn_name], proj_name)
            self.db.service_instance_remove(si_fq_str)
예제 #2
0
    def _cleanup_si(self, si_fq_str):
        si_info = self.db.service_instance_get(si_fq_str)
        if not si_info:
            return
        cleaned_up = True
        state = {}
        state['state'] = 'deleting'
        self.db.service_instance_insert(si_fq_str, state)
        proj_name = self._get_proj_name_from_si_fq_str(si_fq_str)

        for idx in range(0, int(si_info.get('max-instances', '0'))):
            prefix = self.db.get_vm_db_prefix(idx)
            vm_key = prefix + 'uuid'
            if vm_key in si_info.keys():
                if not self._delete_svc_instance(
                        si_info[vm_key],
                        proj_name,
                        si_fq_str=si_fq_str,
                        virt_type=si_info['instance_type']):
                    cleaned_up = False

        if cleaned_up:
            vn_name = 'snat-si-left_%s' % si_fq_str.split(':')[-1]
            if vn_name in si_info.keys():
                if not self._delete_shared_vn(si_info[vn_name], proj_name):
                    cleaned_up = False

        if cleaned_up:
            for vn_name in svc_info.get_shared_vn_list():
                if vn_name in si_info.keys():
                    self._delete_shared_vn(si_info[vn_name], proj_name)
            self.db.service_instance_remove(si_fq_str)
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)
예제 #4
0
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)
예제 #5
0
    def _delmsg_project_service_instance(self, idents):
        proj_fq_str = idents['project']
        si_fq_str = idents['service-instance']
        proj_obj = self._vnc_lib.project_read(fq_name_str=proj_fq_str)

        # Service instance SNAT NetNS have a dedicated left network (non
        # shared vn)
        vn_name = 'svc_snat_%s' % si_fq_str.split(':')[2]
        vn_fq_name = proj_obj.get_fq_name() + [vn_name]
        try:
            vn_uuid = self._vnc_lib.fq_name_to_id('virtual-network',
                                                  vn_fq_name)
            self.db.cleanup_table_insert(
                vn_uuid, {'proj_name': proj_obj.name, 'type': 'vn'})
        except NoIdError:
            pass

        if proj_obj.get_service_instances() is not None:
            return

        # no SIs left hence delete shared VNs
        for vn_name in svc_info.get_shared_vn_list():
            vn_fq_name = proj_obj.get_fq_name() + [vn_name]
            try:
                vn_uuid = self._vnc_lib.fq_name_to_id(
                    'virtual-network', vn_fq_name)
                self.db.cleanup_table_insert(
                    vn_uuid, {'proj_name': proj_obj.name, 'type': 'vn'})
            except Exception:
                pass
    def _delmsg_project_service_instance(self, idents):
        proj_fq_str = idents['project']
        si_fq_str = idents['service-instance']
        proj_obj = self._vnc_lib.project_read(fq_name_str=proj_fq_str)

        # Service instance SNAT NetNS have a dedicated left network (non
        # shared vn)
        vn_name = 'svc_snat_%s' % si_fq_str.split(':')[2]
        vn_fq_name = proj_obj.get_fq_name() + [vn_name]
        try:
            vn_uuid = self._vnc_lib.fq_name_to_id('virtual-network',
                                                  vn_fq_name)
            self.db.cleanup_table_insert(vn_uuid, {
                'proj_name': proj_obj.name,
                'type': 'vn'
            })
        except NoIdError:
            pass

        if proj_obj.get_service_instances() is not None:
            return

        # no SIs left hence delete shared VNs
        for vn_name in svc_info.get_shared_vn_list():
            vn_fq_name = proj_obj.get_fq_name() + [vn_name]
            try:
                vn_uuid = self._vnc_lib.fq_name_to_id('virtual-network',
                                                      vn_fq_name)
                self.db.cleanup_table_insert(vn_uuid, {
                    'proj_name': proj_obj.name,
                    'type': 'vn'
                })
            except Exception:
                pass
예제 #7
0
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)
예제 #8
0
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 clean_resources(self, proj_fq_str, si_fq_str):
        proj_obj = self._vnc_lib.project_read(fq_name_str=proj_fq_str)

        # If project still contains SI, do not delete shared virtual networks
        if proj_obj.get_service_instances() is not None:
            return

        # No SIs left hence delete shared VNs
        for vn_name in svc_info.get_shared_vn_list():
            self._delete_svc_vn(proj_obj.get_fq_name() + [vn_name])
예제 #11
0
    def clean_resources(self, proj_fq_str, si_fq_str):
        proj_obj = self._vnc_lib.project_read(fq_name_str=proj_fq_str)

        # If project still contains SI, do not delete shared virtual networks
        if proj_obj.get_service_instances() is not None:
            return

        # No SIs left hence delete shared VNs
        for vn_name in svc_info.get_shared_vn_list():
            self._delete_svc_vn(proj_obj.get_fq_name() + [vn_name])
예제 #12
0
 def _delmsg_virtual_machine_interface_virtual_network(self, idents):
     vmi_fq_str = idents['virtual-machine-interface']
     vn_fq_str = idents['virtual-network']
     vn_fq_name = vn_fq_str.split(':')
     for vn_name in svc_info.get_shared_vn_list():
         if vn_name != vn_fq_name[2]:
             continue
         try:
             vn_id = self._vnc_lib.fq_name_to_id(
                 'virtual-network', vn_fq_name)
         except NoIdError:
             continue
         self._delete_shared_vn(vn_id, vn_fq_name[1])
예제 #13
0
 def _delmsg_virtual_machine_interface_virtual_network(self, idents):
     vmi_fq_str = idents['virtual-machine-interface']
     vn_fq_str = idents['virtual-network']
     vn_fq_name = vn_fq_str.split(':')
     for vn_name in svc_info.get_shared_vn_list():
         if vn_name != vn_fq_name[2]:
             continue
         try:
             vn_id = self._vnc_lib.fq_name_to_id('virtual-network',
                                                 vn_fq_name)
         except NoIdError:
             continue
         self._delete_shared_vn(vn_id, vn_fq_name[1])