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 audit_snat_instances(self): for lr in LogicalRouterSM.values(): self.update_snat_instance(lr) for si in ServiceInstanceSM.values(): si_name = si.fq_name[-1] st_obj = ServiceTemplateSM.get(si.service_template) if st_obj.params['service_type'] != "source-nat": continue lr_uuid = si.logical_router lr = LogicalRouterSM.get(lr_uuid) if lr is None or lr.virtual_network is None: self.cleanup_snat_instance(lr_uuid, si.uuid)
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 audit_snat_instances(self): for lr in LogicalRouterSM.values(): self.update_snat_instance(lr) for si in ServiceInstanceSM.values(): si_name = si.fq_name[-1] st_obj = ServiceTemplateSM.get(si.service_template) if st_obj.params['service_type'] != "source-nat": continue lr_uuid = si_name.split('_')[1] lr = LogicalRouterSM.get(lr_uuid) if lr is None or lr.virtual_network is None: self.cleanup_snat_instance(lr_uuid, si.uuid)