def clean_service(self, si): self.cleanup_si_iip_connections(si) vm_uuid_list = list(si.virtual_machines) for vm_uuid in vm_uuid_list: vm_obj = VirtualMachineSM.get(vm_uuid) if vm_obj: self.delete_vm(vm_obj)
def create_service(self, st, si): if not self._validate_nova_objects(st, si): return if not self.validate_network_config(st, si): return # get current vm list vm_list = [None for i in range(0, si.max_instances)] for vm_id in si.virtual_machines: vm = VirtualMachineSM.get(vm_id) index = int(vm.display_name.split('__')[-2]) - 1 vm_list[index] = vm # create and launch vm si.state = 'launching' instances = [] for index in range(0, si.max_instances): if vm_list[index]: vm_uuid = vm_list[index].uuid else: vm_uuid = self._create_service_vm(index, si, st) if not vm_uuid: continue instances.append({'uuid': vm_uuid}) # update static routes self.update_static_routes(si) # uve trace si.state = 'active' self.logger.uve_svc_instance(":".join(si.fq_name), status='CREATE', vms=instances, st_name=st.name)
def create_service(self, st, si): if not self.validate_network_config(st, si): return # get service appliances from service template sa_set = st.service_appliance_set if not sa_set: self.logger.log_error("Can't find service appliances set") return service_appliance_set = ServiceApplianceSetSM.get(sa_set) service_appliances = service_appliance_set.service_appliances # validation if not service_appliances: self.logger.log_error("Can't find service appliances") return service_appliances = list(service_appliances) si_obj = ServiceInstanceSM.get(si.uuid) # create a fake VM for the schmea transfer to use vm_uuid_list = list(si_obj.virtual_machines) vm_list = [None] * si.max_instances for vm_uuid in vm_uuid_list: vm = VirtualMachineSM.get(vm_uuid) if not vm: continue if (vm.index + 1) > si.max_instances: self.delete_service(vm) continue vm_list[vm.index] = vm_uuid if si.max_instances > len(service_appliances): self.logger.log_info("There are not enough Service appliance \ for that Service instance " + si.uuid) return for idx, sa_uuid in enumerate(service_appliances): if idx > si.max_instances: return vm_uuid = vm_list[idx] if not vm_uuid: vm_uuid = str(uuid.uuid4()) vm_obj = self.link_si_to_vm(si, st, idx, vm_uuid) instance_name = self._get_instance_name(si, idx) si.state = 'launching' sa = ServiceApplianceSM.get(sa_uuid) for nic in si.vn_info: pi_uuid = sa.physical_interfaces.get(nic['type'], None) pi_obj = PhysicalInterfaceSM.get(pi_uuid) if not pi_obj: return vmi_obj = self._create_svc_vm_port(nic, instance_name, si, st, vm_obj=vm_obj, pi=pi_obj, instance_id=idx) si.state = "active"
def create_service(self, st, si): if not self.validate_network_config(st, si): return # get service appliances from service template sa_set = st.service_appliance_set if not sa_set: self.logger.log_error("Can't find service appliances set") return service_appliance_set = ServiceApplianceSetSM.get(sa_set) service_appliances = service_appliance_set.service_appliances # validation if not service_appliances: self.logger.log_error("Can't find service appliances") return service_appliances = list(service_appliances) si_obj = ServiceInstanceSM.get(si.uuid) # create a fake VM for the schmea transfer to use vm_uuid_list = list(si_obj.virtual_machines) vm_list = [None]*si.max_instances for vm_uuid in vm_uuid_list: vm = VirtualMachineSM.get(vm_uuid) if not vm: continue if (vm.index + 1) > si.max_instances: self.delete_service(vm) continue vm_list[vm.index] = vm_uuid if si.max_instances > len(service_appliances): self.logger.log_info( "There are not enough Service appliance \ for that Service instance "+si.uuid) return for idx, sa_uuid in enumerate(service_appliances): if idx > si.max_instances: return vm_uuid = vm_list[idx] if not vm_uuid: vm_uuid = str(uuid.uuid4()) vm_obj = self.link_si_to_vm(si, st, idx, vm_uuid) instance_name = self._get_instance_name(si, idx) si.state = 'launching' sa = ServiceApplianceSM.get(sa_uuid) for nic in si.vn_info: pi_uuid = sa.physical_interfaces.get(nic['type'],None) pi_obj = PhysicalInterfaceSM.get(pi_uuid) if not pi_obj: return vmi_obj = self._create_svc_vm_port(nic, instance_name, si, st, vm_obj = vm_obj, pi=pi_obj, instance_id=idx) si.state = "active"
def sandesh_si_handle_request(self, req): si_resp = sandesh.ServiceInstanceListResp(si_names=[]) for si in ServiceInstanceSM.values(): if req.si_name and req.si_name != si.name: continue st = ServiceTemplateSM.get(si.service_template) sandesh_si = sandesh.ServiceInstance( name=(':').join(si.fq_name), si_type=st.virtualization_type, si_state=si.state) sandesh_vm_list = [] for vm_id in si.virtual_machines: vm = VirtualMachineSM.get(vm_id) if not vm: continue vm_str = ("%s: %s" % (vm.name, vm.uuid)) vr_name = 'None' vr = VirtualRouterSM.get(vm.virtual_router) if vr: vr_name = vr.name ha_str = "active" if vm.index < len(si.local_preference): if vm.index >= 0: ha = si.local_preference[vm.index] if ha and int(ha) == svc_info.get_standby_preference(): ha_str = "standby" if ha: ha_str = ha_str + ': ' + str(ha) else: ha_str = "unknown" vm = sandesh.ServiceInstanceVM(name=vm_str, vr_name=vr_name, ha=ha_str) sandesh_vm_list.append(vm) sandesh_si.vm_list = list(sandesh_vm_list) for nic in si.vn_info: vn = VirtualNetworkSM.get(nic['net-id']) if not vn: continue if nic['type'] == svc_info.get_left_if_str(): sandesh_si.left_vn = [vn.name, vn.uuid] if nic['type'] == svc_info.get_right_if_str(): sandesh_si.right_vn = [vn.name, vn.uuid] if nic['type'] == svc_info.get_management_if_str(): sandesh_si.management_vn = [vn.name, vn.uuid] si_resp.si_names.append(sandesh_si) si_resp.response(req.context())
def sandesh_si_handle_request(self, req): si_resp = sandesh.ServiceInstanceListResp(si_names=[]) for si in ServiceInstanceSM.values(): if req.si_name and req.si_name != si.name: continue st = ServiceTemplateSM.get(si.service_template) sandesh_si = sandesh.ServiceInstance( name=(':').join(si.fq_name), si_type=st.virtualization_type, si_state=si.state) sandesh_vm_list = [] for vm_id in si.virtual_machines: vm = VirtualMachineSM.get(vm_id) if not vm: continue vm_str = ("%s: %s" % (vm.name, vm.uuid)) vr_name = 'None' vr = VirtualRouterSM.get(vm.virtual_router) if vr: vr_name = vr.name ha_str = "active" if vm.index < len(si.local_preference): if vm.index >= 0: ha = si.local_preference[vm.index] if ha and int(ha) == svc_info.get_standby_preference(): ha_str = "standby" if ha: ha_str = ha_str + ': ' + str(ha) else: ha_str = "unknown" vm = sandesh.ServiceInstanceVM( name=vm_str, vr_name=vr_name, ha=ha_str) sandesh_vm_list.append(vm) sandesh_si.vm_list = list(sandesh_vm_list) for nic in si.vn_info: vn = VirtualNetworkSM.get(nic['net-id']) if not vn: continue if nic['type'] == svc_info.get_left_if_str(): sandesh_si.left_vn = [vn.name, vn.uuid] if nic['type'] == svc_info.get_right_if_str(): sandesh_si.right_vn = [vn.name, vn.uuid] if nic['type'] == svc_info.get_management_if_str(): sandesh_si.management_vn = [vn.name, vn.uuid] si_resp.si_names.append(sandesh_si) si_resp.response(req.context())
def create_service(self, st, si): if not self._validate_nova_objects(st, si): return if not self.validate_network_config(st, si): return # get current vm list vm_list = [None] * si.max_instances vm_id_list = list(si.virtual_machines) for vm_id in vm_id_list: vm = VirtualMachineSM.get(vm_id) if not vm: continue if (vm.index + 1) > si.max_instances: self.delete_service(vm) continue vm_list[vm.index] = vm # create and launch vm si.state = 'launching' instances = [] for index in range(0, si.max_instances): if vm_list[index]: vm_uuid = vm_list[index].uuid else: vm_uuid = self._create_service_vm(index, si, st) if not vm_uuid: continue instances.append({'uuid': vm_uuid}) # update static routes self.update_static_routes(si) # uve trace si.state = 'active' self.logger.uve_svc_instance(":".join(si.fq_name), status='CREATE', vms=instances, st_name=st.name)