Exemple #1
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)
    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)
Exemple #4
0
    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
Exemple #5
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)
Exemple #6
0
    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
Exemple #14
0
    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