def save_vnffg_inst_data(self): VNFFGInstModel( vnffgdid="vnffg_id1", vnffginstid="vnffg_inst_1", nsinstid="ns_inst_1", endpointnumber=2, vllist="vlinst1", cplist="cp1", vnflist="vnf1,vnf2" ).save()
def setUp(self): self.client = Client() self.vl_inst_id = str(uuid.uuid4()) self.vl_name = str(uuid.uuid4()) self.ns_inst_id = str(uuid.uuid4()) VLInstModel(vlinstanceid=self.vl_inst_id, vldid="", vlinstancename=self.vl_name, ownertype=1, ownerid=self.ns_inst_id, relatednetworkid="network1", relatedsubnetworkid="subnet1,subnet2", vimid='{"cloud_owner": "VCPE", "cloud_regionid": "RegionOne"}', tenant="").save() VNFFGInstModel(vnffgdid="", vnffginstid="", nsinstid=self.ns_inst_id, vllist="test1," + self.vl_inst_id + ",test2,test3", endpointnumber=0, cplist="", vnflist="", fplist="", status="").save()
def setUp(self): self.client = Client() self.ns_inst_id = str(uuid.uuid4()) self.sfc_inst_id = str(uuid.uuid4()) self.status = "active" self.sdn_controler_id = str(uuid.uuid4()) sfc_id = str(uuid.uuid4()) flow_classifiers = "flow1,flow2" port_pair_groups = json.JSONEncoder().encode( [{"groupid": "group1", "portpair": [str(uuid.uuid4()), str(uuid.uuid4())]}, {"groupid": "group2", "portpair": [str(uuid.uuid4()), str(uuid.uuid4())]}]) FPInstModel(fpid="", fpinstid=self.sfc_inst_id, nsinstid=self.ns_inst_id, vnffginstid="", policyinfo="", status=self.status, sdncontrollerid=self.sdn_controler_id, sfcid=sfc_id, flowclassifiers=flow_classifiers, portpairgroups=port_pair_groups).save() VNFFGInstModel(vnffgdid="", vnffginstid="", nsinstid=self.ns_inst_id, fplist="test1," + self.sfc_inst_id + ",test2,test3", endpointnumber=0, cplist="", vnflist="", vllist="", status="").save()
def setUp(self): self.client = Client() self.data = { "nsInstanceId": "ns_inst_1", "context": json.dumps(nsd_model), "fpindex": "fpd_1", "sdnControllerId": "sdnControllerId_1" } VNFFGInstModel.objects.all().delete() FPInstModel.objects.all().delete() VNFFGInstModel(vnffgdid="vnffg_id1", vnffginstid="vnffg_inst_1", nsinstid="ns_inst_1", endpointnumber=2, vllist="vlinst1", cplist="cp1", vnflist="vnf1,vnf2", fplist="fp1").save()
def setUp(self): self.client = Client() self.ns_inst_id = str(uuid.uuid4()) self.vnffg_id = str(uuid.uuid4()) self.vl_id_1 = 1 self.vl_id_2 = 2 self.vim_id = '{"cloud_owner": "cloud_owner", "cloud_regionid": "cloud_regionid"}' self.tenant = "tenantname" properties = {"vl_profile": {"networkName": "vl_inst_name", "network_type": "vlan", "segmentationId": "segmentation_id", "physicalNetwork": "physical_network", "mtu": 1500, "vlanTransparent": True, "dhcp_enabled": False, "cidr": "190.168.100.0/24", "ip_version": const.IPV4, "dhcpEnabled": True, "gatewayIp": "190.168.100.1", "dns_nameservers": "dns_nameservers", "host_routes": "host_routes", "start_ip": "190.168.100.2", "end_ip": "190.168.100.100"}, "location_info": {"host": True, "vimid": self.vim_id, "region": True, "tenant": self.tenant}} properties2 = {"vl_profile": {"networkName": "vl_inst_name", "network_type": "vlan", "segmentationId": "segmentation_id", "physicalNetwork": "physical_network", "mtu": 1500, "vlanTransparent": True, "dhcp_enabled": False, "cidr": "190.168.100.0/24", "ip_version": const.IPV4, "dhcpEnabled": True, "gatewayIp": "190.168.100.1", "dns_nameservers": "dns_nameservers", "host_routes": "host_routes", "start_ip": "190.168.100.2", "end_ip": "190.168.100.100"}, "location_info": {"host": True, "vimid": "", "region": True, "tenant": self.tenant}} self.context = { "vls": [{"vl_id": self.vl_id_1, "description": "", "properties": properties, "route_external": False}, {"vl_id": self.vl_id_2, "description": "", "properties": properties2, "route_external": False}], "vnffgs": [{"vnffg_id": self.vnffg_id, "description": "", "properties": {"vendor": "zte", "version": "1.1.2", "number_of_endpoints": 7, "dependent_virtual_link": [self.vl_id_2, self.vl_id_1], "connection_point": ["CP01", "CP02"], "constituent_vnfs": ["VNF1", "VNF2", "VNF3"], "constituent_pnfs": ["pnf1", "pnf2"]}, "members": ["forwarding_path1", "forwarding_path2"]}]} NSInstModel(id=self.ns_inst_id, name="ns_name").save() VNFFGInstModel(vnffgdid=self.vnffg_id, vnffginstid="", nsinstid=self.ns_inst_id, endpointnumber=0, vllist="", cplist="", vnflist="", fplist="", status="").save()
def do_biz(self): job_id = JobUtil.create_job("NS", "NS_INST", self.ns_inst_id) occ_id = NsLcmOpOcc.create(self.ns_inst_id, "INSTANTIATE", "PROCESSING", False, self.req_data) NSInstModel.objects.filter(id=self.ns_inst_id).update( status=NS_INST_STATUS.INSTANTIATING) try: logger.debug('ns-instant(%s) workflow starting...' % self.ns_inst_id) logger.debug('req_data=%s' % self.req_data) ns_inst = NSInstModel.objects.get(id=self.ns_inst_id) vim_id = {} input_parameters = [] if 'additionalParamForNs' in self.req_data: for key, val in list( self.req_data['additionalParamForNs'].items()): input_parameters.append({"key": key, "value": val}) if 'location' in self.req_data['additionalParamForNs']: cloud_owner = self.req_data['additionalParamForNs'][ 'location'].split('_')[0] cloud_regionid = self.req_data["additionalParamForNs"][ "location"].split('_')[1] vim_id = { "cloud_owner": cloud_owner, "cloud_regionid": cloud_regionid } params_json = json.JSONEncoder().encode( self.req_data["additionalParamForNs"]) else: params_json = json.JSONEncoder().encode({}) location_constraints = [] if not self.req_data.get('locationConstraints')\ else self.req_data['locationConstraints'] vnf_vim = self.get_vnf_vim_info(location_constraints) JobUtil.add_job_status( job_id, 5, 'Start query nsd(%s)' % ns_inst.nspackage_id) dst_plan = sdc_run_catalog.parse_nsd(ns_inst.nspackage_id, input_parameters) logger.debug('tosca plan dest: %s' % dst_plan) logger.debug('Start query nsd(%s)' % ns_inst.nspackage_id) sdc_run_catalog.modify_nsd_state(ns_inst.nspackage_id) NSInstModel.objects.filter(id=self.ns_inst_id).update( nsd_model=dst_plan) params_vnf = [] plan_dict = json.JSONDecoder().decode(dst_plan) for vnf in ignore_case_get(plan_dict, "vnfs"): vnfd_id = vnf['properties']['id'] vnfm_type = vnf['properties'].get("vnfm_info", "undefined") logger.debug("vnfd_id: %s, vnfm_type : %s", vnfd_id, vnfm_type) if isinstance(vnfm_type, list): vnfm_type = vnfm_type[0] vimid = self.get_vnf_vim_id(vim_id, vnf_vim, vnfd_id) s_vimid = "%s_%s" % (vimid["cloud_owner"], vimid["cloud_regionid"]) vnfm_info = extsys.select_vnfm(vnfm_type=vnfm_type, vim_id=s_vimid) params_vnf.append({ "vnfProfileId": vnf["vnf_id"], "additionalParam": { "properties": json.JSONEncoder().encode(vnf['properties']), "vimId": vimid, "vnfmInstanceId": vnfm_info["vnfmId"], "vnfmType": vnfm_type, "inputs": params_json } }) self.set_vl_vim_id(vim_id, vnf_vim, plan_dict) dst_plan = json.JSONEncoder().encode(plan_dict) logger.debug('tosca plan dest add vimid:%s' % dst_plan) NSInstModel.objects.filter(id=self.ns_inst_id).update( nsd_model=dst_plan) pnf_params_json = json.JSONEncoder().encode( self.init_pnf_para(plan_dict)) vnf_params_json = json.JSONEncoder().encode(params_vnf) plan_input = { 'jobId': job_id, 'nsInstanceId': self.ns_inst_id, 'object_context': dst_plan, 'object_additionalParamForNs': params_json, 'object_additionalParamForVnf': vnf_params_json, 'object_additionalParamForPnf': pnf_params_json } plan_input.update(**self.get_model_count(dst_plan)) if 'additionalParamForNs' in self.req_data: plan_input["sdnControllerId"] = ignore_case_get( self.req_data['additionalParamForNs'], "sdncontroller") ServiceBaseInfoModel(service_id=self.ns_inst_id, service_name=ns_inst.name, service_type='NFVO', description=ns_inst.description, active_status='--', status=ns_inst.status, creator='--', create_time=int(time.time() * 1000)).save() if config.WORKFLOW_OPTION == "wso2": service_tpl = get_servicetemplate(ns_inst.nsd_id) DefPkgMappingModel( service_id=self.ns_inst_id, service_def_id=service_tpl['csarId'], template_name=service_tpl['templateName'], template_id=service_tpl['serviceTemplateId']).save() for key, val in list( self.req_data['additionalParamForNs'].items()): InputParamMappingModel(service_id=self.ns_inst_id, input_key=key, input_value=val).save() for vnffg in ignore_case_get(plan_dict, "vnffgs"): VNFFGInstModel(vnffgdid=vnffg["vnffg_id"], vnffginstid=str(uuid.uuid4()), nsinstid=self.ns_inst_id, endpointnumber=0).save() else: # TODO pass logger.debug("workflow option: %s" % config.WORKFLOW_OPTION) if config.WORKFLOW_OPTION == "wso2": return self.start_wso2_workflow(job_id, ns_inst, plan_input, occ_id=occ_id) elif config.WORKFLOW_OPTION == "activiti": return self.start_activiti_workflow(job_id, plan_input, occ_id=occ_id) elif config.WORKFLOW_OPTION == "grapflow": return self.start_buildin_grapflow(job_id, plan_input, occ_id=occ_id) else: return self.start_buildin_workflow(job_id, plan_input, occ_id=occ_id) except Exception as e: logger.error(traceback.format_exc()) logger.error("ns-instant(%s) workflow error:%s" % (self.ns_inst_id, e.args[0])) NsLcmOpOcc.update(occ_id, operationState="FAILED", error=e.args[0]) JobUtil.add_job_status(job_id, 255, 'NS instantiation failed') build_in.post_deal(self.ns_inst_id, "false") return dict(data={'error': e.args[0]}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)
def do_biz(self): try: job_id = JobUtil.create_job("NS", "NS_INST", self.ns_inst_id) logger.debug('ns-instant(%s) workflow starting...' % self.ns_inst_id) logger.debug('req_data=%s' % self.req_data) ns_inst = NSInstModel.objects.get(id=self.ns_inst_id) input_parameters = [] for key, val in self.req_data['additionalParamForNs'].items(): input_parameters.append({"key": key, "value": val}) vim_id = '' if 'location' in self.req_data['additionalParamForNs']: vim_id = self.req_data['additionalParamForNs']['location'] location_constraints = [] if 'locationConstraints' in self.req_data: location_constraints = self.req_data['locationConstraints'] JobUtil.add_job_status( job_id, 5, 'Start query nsd(%s)' % ns_inst.nspackage_id) src_plan = query_rawdata_from_catalog(ns_inst.nspackage_id, input_parameters) dst_plan = toscautil.convert_nsd_model(src_plan["rawData"]) logger.debug('tosca plan dest:%s' % dst_plan) NSInstModel.objects.filter(id=self.ns_inst_id).update( nsd_model=dst_plan) params_json = json.JSONEncoder().encode( self.req_data["additionalParamForNs"]) # start params_vnf = [] plan_dict = json.JSONDecoder().decode(dst_plan) for vnf in ignore_case_get(plan_dict, "vnfs"): vnfd_id = vnf['properties']['id'] vnfd = NfPackageModel.objects.get(vnfdid=vnfd_id) vnfd_model = json.JSONDecoder().decode(vnfd.vnfdmodel) vnfm_type = vnfd_model["metadata"].get("vnfmType", "ztevmanagerdriver") vimid = self.get_vnf_vim_id(vim_id, location_constraints, vnfd_id) vnfm_info = select_vnfm(vnfm_type=vnfm_type, vim_id=vimid) params_vnf.append({ "vnfProfileId": vnf["vnf_id"], "additionalParam": { "vimId": vimid, "vnfmInstanceId": vnfm_info["vnfmId"], "vnfmType": vnfm_type, "inputs": params_json } }) # end self.set_vl_vim_id(vim_id, location_constraints, plan_dict) dst_plan = json.JSONEncoder().encode(plan_dict) logger.debug('tosca plan dest add vimid:%s' % dst_plan) NSInstModel.objects.filter(id=self.ns_inst_id).update( nsd_model=dst_plan) vnf_params_json = json.JSONEncoder().encode(params_vnf) plan_input = { 'jobId': job_id, 'nsInstanceId': self.req_data["nsInstanceId"], 'object_context': dst_plan, 'object_additionalParamForNs': params_json, 'object_additionalParamForVnf': vnf_params_json } plan_input.update(**self.get_model_count(dst_plan)) plan_input["sdnControllerId"] = ignore_case_get( self.req_data['additionalParamForNs'], "sdncontroller") ServiceBaseInfoModel(service_id=self.ns_inst_id, service_name=ns_inst.name, service_type='NFVO', description=ns_inst.description, active_status='--', status=ns_inst.status, creator='--', create_time=int(time.time() * 1000)).save() service_tpl = get_servicetemplate(ns_inst.nsd_id) DefPkgMappingModel( service_id=self.ns_inst_id, service_def_id=service_tpl['csarId'], template_name=service_tpl['templateName'], template_id=service_tpl['serviceTemplateId']).save() for key, val in self.req_data['additionalParamForNs'].items(): InputParamMappingModel(service_id=self.ns_inst_id, input_key=key, input_value=val).save() for vnffg in ignore_case_get(plan_dict, "vnffgs"): VNFFGInstModel(vnffgdid=vnffg["vnffg_id"], vnffginstid=str(uuid.uuid4()), nsinstid=self.ns_inst_id, endpointnumber=0).save() servicetemplate_id = get_servicetemplate_id(ns_inst.nsd_id) process_id = get_process_id('init', servicetemplate_id) data = { "processId": process_id, "params": { "planInput": plan_input } } logger.debug('ns-instant(%s) workflow data:%s' % (self.ns_inst_id, data)) ret = workflow_run(data) logger.info("ns-instant(%s) workflow result:%s" % (self.ns_inst_id, ret)) JobUtil.add_job_status( job_id, 10, 'NS inst(%s) workflow started: %s' % (self.ns_inst_id, ret.get('status'))) if ret.get('status') == 1: return dict(data={'jobId': job_id}, status=status.HTTP_200_OK) return dict(data={'error': ret['message']}, status=status.HTTP_500_INTERNAL_SERVER_ERROR) except Exception as e: logger.error(traceback.format_exc()) logger.error("ns-instant(%s) workflow error:%s" % (self.ns_inst_id, e.message)) JobUtil.add_job_status(job_id, 255, 'NS instantiation failed: %s' % e.message) return dict(data={'error': e.message}, status=status.HTTP_500_INTERNAL_SERVER_ERROR)