def _delete_svc_instance(self, vm_uuid, proj_name, si_fq_str=None, virt_type=None): self.logger.log("Deleting VM %s %s" % (proj_name, vm_uuid)) try: if virt_type == svc_info.get_vm_instance_type(): self.vm_manager.delete_service(vm_uuid, proj_name) elif virt_type == svc_info.get_netns_instance_type(): self.netns_manager.delete_service(vm_uuid) except KeyError: self.db.cleanup_table_remove(vm_uuid) return # remove from launch table and queue into cleanup list self.db.virtual_machine_remove(vm_uuid) self.db.cleanup_table_insert(vm_uuid, { 'proj_name': proj_name, 'type': virt_type }) self.logger.uve_svc_instance(si_fq_str, status='DELETE', vm_uuid=vm_uuid)
def delete_service_instance(self, vm): self.logger.info("Deleting VM %s %s for SI %s" % ((':').join(vm.fq_name), vm.uuid, vm.service_id)) try: if vm.virtualization_type == svc_info.get_vm_instance_type(): self.vm_manager.delete_service(vm) elif vm.virtualization_type == svc_info.get_netns_instance_type(): self.netns_manager.delete_service(vm) elif vm.virtualization_type == 'vrouter-instance': self.vrouter_manager.delete_service(vm) elif vm.virtualization_type == 'physical-device': self.ps_manager.delete_service(vm) self.logger.info("Deleted VM %s %s for SI %s" % ((':').join(vm.fq_name), vm.uuid, vm.service_id)) except Exception: cgitb_error_log(self) # generate UVE si_fq_name = vm.display_name.split('__')[:-2] si_fq_str = (':').join(si_fq_name) self.logger.uve_svc_instance(si_fq_str, status='DELETE', vms=[{ 'uuid': vm.uuid }]) return True
def create_service(self, st_obj, si_obj): si_props = si_obj.get_service_instance_properties() st_props = st_obj.get_service_template_properties() if st_props is None: self.logger.log("Cannot find service template associated to " "service instance %s" % si_obj.get_fq_name_str()) return flavor = st_props.get_flavor() image_name = st_props.get_image_name() if image_name is None: self.logger.log("Error: Image name not present in %s" % (st_obj.name)) return # populate nic information nics = self._get_nic_info(si_obj, si_props, st_props) # get availability zone avail_zone = None if st_props.get_availability_zone_enable(): avail_zone = si_props.get_availability_zone() elif self._args.availability_zone: avail_zone = self._args.availability_zone # create and launch vm vm_back_refs = si_obj.get_virtual_machine_back_refs() proj_name = si_obj.get_parent_fq_name()[-1] max_instances = si_props.get_scale_out().get_max_instances() for inst_count in range(0, max_instances): instance_name = self._get_instance_name(si_obj, inst_count) exists = False for vm_back_ref in vm_back_refs or []: vm = self.novaclient_oper('servers', 'find', proj_name, id=vm_back_ref['uuid']) if vm.name == instance_name: exists = True break if exists: vm_uuid = vm_back_ref['uuid'] else: vm = self._create_svc_vm(instance_name, image_name, nics, flavor, st_obj, si_obj, avail_zone) if vm is None: continue vm_uuid = vm.id # store vm, instance in db; use for linking when VM is up row_entry = {} row_entry['si_fq_str'] = si_obj.get_fq_name_str() row_entry['instance_name'] = instance_name row_entry['instance_type'] = svc_info.get_vm_instance_type() self.db.virtual_machine_insert(vm_uuid, row_entry) # uve trace self.logger.uve_svc_instance(si_obj.get_fq_name_str(), status='CREATE', vm_uuid=vm.id, st_name=st_obj.get_fq_name_str())
def cleanup_callback(monitor): delete_list = monitor.db.cleanup_table_list() if not delete_list: return for uuid, info in delete_list or []: if info["type"] == svc_info.get_vm_instance_type() or info["type"] == svc_info.get_netns_instance_type(): monitor._delete_svc_instance(uuid, info["proj_name"], virt_type=info["type"]) elif info["type"] == "vn": monitor._delete_shared_vn(uuid, info["proj_name"])
def cleanup_callback(monitor): delete_list = monitor.db.cleanup_table_list() if not delete_list: return for uuid, info in delete_list or []: if info['type'] == svc_info.get_vm_instance_type() or \ info['type'] == svc_info.get_netns_instance_type(): monitor._delete_svc_instance(uuid, info['proj_name'], virt_type=info['type']) elif info['type'] == 'vn': monitor._delete_shared_vn(uuid, info['proj_name'])
def _delete_svc_instance(self, vm_uuid, proj_name, si_fq_str=None, virt_type=None): self.logger.log("Deleting VM %s %s" % (proj_name, vm_uuid)) try: if virt_type == svc_info.get_vm_instance_type(): self.vm_manager.delete_service(vm_uuid, proj_name) elif virt_type == svc_info.get_netns_instance_type(): self.netns_manager.delete_service(vm_uuid) except KeyError: return True # generate UVE self.logger.uve_svc_instance(si_fq_str, status='DELETE', vms=[{'uuid': vm_uuid}]) return False
def _delete_svc_instance(self, vm_uuid, proj_name, si_fq_str=None, virt_type=None): self.logger.log("Deleting VM %s %s" % (proj_name, vm_uuid)) try: if virt_type == svc_info.get_vm_instance_type(): self.vm_manager.delete_service(vm_uuid, proj_name) elif virt_type == svc_info.get_netns_instance_type(): self.netns_manager.delete_service(vm_uuid) except KeyError: self.db.cleanup_table_remove(vm_uuid) return # remove from launch table and queue into cleanup list self.db.virtual_machine_remove(vm_uuid) self.db.cleanup_table_insert(vm_uuid, {"proj_name": proj_name, "type": virt_type}) self.logger.uve_svc_instance(si_fq_str, status="DELETE", vm_uuid=vm_uuid)
def _delete_service_instance(self, vm): self.logger.log_info("Deleting VM %s %s" % ((':').join(vm.proj_fq_name), vm.uuid)) if vm.virtualization_type == svc_info.get_vm_instance_type(): self.vm_manager.delete_service(vm) elif vm.virtualization_type == svc_info.get_netns_instance_type(): self.netns_manager.delete_service(vm) elif vm.virtualization_type == 'vrouter-instance': self.vrouter_manager.delete_service(vm) # generate UVE si_fq_name = vm.display_name.split('__')[:-2] si_fq_str = (':').join(si_fq_name) self.logger.uve_svc_instance(si_fq_str, status='DELETE', vms=[{'uuid': vm.uuid}]) return True
def _delete_service_instance(self, vm): self.logger.log_info("Deleting VM %s %s" % ((":").join(vm.proj_fq_name), vm.uuid)) try: if vm.virtualization_type == svc_info.get_vm_instance_type(): self.vm_manager.delete_service(vm) elif vm.virtualization_type == svc_info.get_netns_instance_type(): self.netns_manager.delete_service(vm) elif vm.virtualization_type == "vrouter-instance": self.vrouter_manager.delete_service(vm) elif vm.virtualization_type == "physical-device": self.ps_manager.delete_service(vm) except Exception: cgitb_error_log(self) # generate UVE si_fq_name = vm.display_name.split("__")[:-2] si_fq_str = (":").join(si_fq_name) self.logger.uve_svc_instance(si_fq_str, status="DELETE", vms=[{"uuid": vm.uuid}]) return True
def delete_service_instance(self, vm): self.logger.info("Deleting VM %s %s for SI %s" % ((':').join(vm.fq_name), vm.uuid, vm.service_id)) try: if vm.virtualization_type == svc_info.get_vm_instance_type(): self.vm_manager.delete_service(vm) elif vm.virtualization_type == svc_info.get_netns_instance_type(): self.netns_manager.delete_service(vm) elif vm.virtualization_type == 'vrouter-instance': self.vrouter_manager.delete_service(vm) elif vm.virtualization_type == 'physical-device': self.ps_manager.delete_service(vm) self.logger.info("Deleted VM %s %s for SI %s" % ((':').join(vm.fq_name), vm.uuid, vm.service_id)) except Exception: cgitb_error_log(self) # generate UVE si_fq_name = vm.display_name.split('__')[:-2] si_fq_str = (':').join(si_fq_name) self.logger.uve_svc_instance(si_fq_str, status='DELETE', vms=[{'uuid': vm.uuid}]) return True
def _delete_svc_instance(self, vm_uuid, proj_name, si_fq_str=None, virt_type=None): self.logger.log("Deleting VM %s %s" % (proj_name, vm_uuid)) try: if virt_type == svc_info.get_vm_instance_type(): self.vm_manager.delete_service(si_fq_str, vm_uuid, proj_name) elif virt_type == svc_info.get_netns_instance_type(): self.netns_manager.delete_service(si_fq_str, vm_uuid) elif virt_type == 'vrouter-instance': self.vrouter_manager.delete_service(si_fq_str, vm_uuid) except KeyError: return True # generate UVE self.logger.uve_svc_instance(si_fq_str, status='DELETE', vms=[{ 'uuid': vm_uuid }]) return False
def _get_virtualization_type(self, st_props): service_type = st_props.get_service_virtualization_type() return service_type or svc_info.get_vm_instance_type()
def create_service(self, st_obj, si_obj): si_props = si_obj.get_service_instance_properties() st_props = st_obj.get_service_template_properties() if st_props is None: self.logger.log("Cannot find service template associated to " "service instance %s" % si_obj.get_fq_name_str()) return flavor = st_props.get_flavor() image_name = st_props.get_image_name() if image_name is None: self.logger.log("Error: Image name not present in %s" % (st_obj.name)) return # populate nic information nics = self._get_nic_info(si_obj, si_props, st_props) # get availability zone avail_zone = None if st_props.get_availability_zone_enable(): avail_zone = si_props.get_availability_zone() elif self._args.availability_zone: avail_zone = self._args.availability_zone # create and launch vm vm_back_refs = si_obj.get_virtual_machine_back_refs() proj_name = si_obj.get_parent_fq_name()[-1] max_instances = si_props.get_scale_out().get_max_instances() for inst_count in range(0, max_instances): instance_name = si_obj.name + '_' + str(inst_count + 1) exists = False for vm_back_ref in vm_back_refs or []: vm = self.novaclient_oper('servers', 'find', proj_name, id=vm_back_ref['uuid']) if vm.name == instance_name: exists = True break if exists: vm_uuid = vm_back_ref['uuid'] else: vm = self._create_svc_vm(instance_name, image_name, nics, flavor, st_obj, si_obj, avail_zone) if vm is None: continue vm_uuid = vm.id # store vm, instance in db; use for linking when VM is up row_entry = {} row_entry['si_fq_str'] = si_obj.get_fq_name_str() row_entry['instance_name'] = instance_name row_entry['instance_type'] = svc_info.get_vm_instance_type() self.db.virtual_machine_insert(vm_uuid, row_entry) # uve trace self.logger.uve_svc_instance(si_obj.get_fq_name_str(), status='CREATE', vm_uuid=vm.id, st_name=st_obj.get_fq_name_str())