diff options
author | 2017-02-23 20:15:38 +0800 | |
---|---|---|
committer | 2017-02-23 20:15:38 +0800 | |
commit | e58ecdebea987e9c481584b2eca3a5b8816885c3 (patch) | |
tree | 71b8ecb38868b0386f8d6316e4efa24ccef04407 | |
parent | 97f8569b9781e705851f65c51eb7b85242a9037d (diff) |
Refactor code and test case of gvnfmlcm
Change-Id: Id9933b7bb0625194fd5f4bc9ed69ffd75c67e10c
Issue-Id: GVNFM-34
Signed-off-by: ying.yunlong <ying.yunlong@zte.com.cn>
-rw-r--r-- | lcm/lcm/nf/vnfs/const.py | 47 | ||||
-rw-r--r-- | lcm/lcm/nf/vnfs/tests/test_vnf_create.py | 153 | ||||
-rw-r--r-- | lcm/lcm/nf/vnfs/vnf_create/inst_vnf.py | 195 |
3 files changed, 69 insertions, 326 deletions
diff --git a/lcm/lcm/nf/vnfs/const.py b/lcm/lcm/nf/vnfs/const.py index 9adb4ed6..a3a2f5f8 100644 --- a/lcm/lcm/nf/vnfs/const.py +++ b/lcm/lcm/nf/vnfs/const.py @@ -18,6 +18,53 @@ VNF_STATUS = enum(NULL='null', INSTANTIATING="instantiating", INACTIVE='inactive FAILED="failed", TERMINATING="terminating", SCALING="scaling", OPERATING="operating", UPDATING="updating", HEALING="healing") +inst_req_data = { + "flavourId": "flavour_1", + "instantiationLevelId": "instantiationLevel_1", + "extVirtualLinks": [ + { + "vlInstanceId": "1", + "vim": { + "vimInfoId": "1", + "vimId": "1", + "interfaceInfo": { + "vimType": "vim", + "apiVersion": "v2", + "protocolType": "http" + }, + "accessInfo": { + "tenant": "tenant_vCPE", + "username": "vCPE", + "password": "vCPE_321" + }, + "interfaceEndpoint": "http://10.43.21.105:80/" + }, + "resourceId": "1246", + "extCps": [ + { + "cpdId": "11", + "addresses": [ + { + "addressType": "MAC", + "l2AddressData": "00:f3:43:20:a2:a3" + }, + { + "addressType": "IP", + "l3AddressData": { + "iPAddressType": "IPv4", + "iPAddress": "192.168.104.2" + } + } + ], + "numDynamicAddresses": 0 + } + ] + } + ], + "localizationLanguage": "en_US", + "additionalParams": {} +} + vnfd_rawdata = { "rawData": { "instance": { diff --git a/lcm/lcm/nf/vnfs/tests/test_vnf_create.py b/lcm/lcm/nf/vnfs/tests/test_vnf_create.py index f9b5e30b..adda5174 100644 --- a/lcm/lcm/nf/vnfs/tests/test_vnf_create.py +++ b/lcm/lcm/nf/vnfs/tests/test_vnf_create.py @@ -20,7 +20,7 @@ from rest_framework import status from lcm.nf.vnfs.const import vnfd_rawdata, c1_data_get_tenant_id, c4_data_create_network, c2_data_create_volume, \ c5_data_create_subnet, c3_data_get_volume, c6_data_create_port, c7_data_create_flavor, c8_data_list_image, c9_data_create_vm, \ - c10_data_get_vm + c10_data_get_vm, inst_req_data from lcm.nf.vnfs.vnf_create.inst_vnf import InstVnf from lcm.pub.database.models import NfInstModel, JobStatusModel, VmInstModel, NetworkInstModel, \ SubNetworkInstModel, PortInstModel @@ -131,12 +131,7 @@ class TestNFInstantiate(TestCase): nf_desc='vFW in Nanjing TIC Edge', vnfdid='111', create_time=now_time()) r1 = [0, json.JSONEncoder().encode({'package_id': '222', 'csar_id': '2222'}), '200'] # get csar_id from nslcm by vnfd_id r2 = [0, json.JSONEncoder().encode(vnfd_rawdata), '200'] # get rawdata from catalog by csar_id - r3 = [1, json.JSONEncoder().encode({"vim": - { - "vimid": '1', - "accessinfo": {"tenant": '2'} - } - }), '200'] # apply_grant_to_nfvo + r3 = [1, json.JSONEncoder().encode({"vim":{"vimid": '1', "accessinfo": {"tenant": '2'}}}), '200'] # apply_grant_to_nfvo mock_call_req.side_effect = [r1, r2, r3] self.nf_inst_id = '1111' self.job_id = JobUtil.create_job('NF', 'CREATE', self.nf_inst_id) @@ -155,49 +150,7 @@ class TestNFInstantiate(TestCase): r2 = [0, json.JSONEncoder().encode(vnfd_rawdata), '200'] # get rawdata from catalog by csar_id r3 = [0, json.JSONEncoder().encode({"vim":{"vimid": '1', "accessinfo": {"tenant": '2'}}}), '200'] # apply_grant_to_nfvo mock_call_req.side_effect = [r1, r2, r3] - c1_data = { # get_tenant_id - "tenants": [ - { - "id": "1", - "name": "tenantname_1" - } - ] - } - c2_data = { - "returnCode": 0, - "vimId": "11111", - "vimName": "11111", - "status": "ACTIVE", - "id": "3c9eebdbbfd345658269340b9ea6fb73", - "name": "net1", - "tenantId": "tenant1", - "networkName": "ommnet", - "shared": 1, - "vlanTransparent": 1, - "networkType": "vlan", - "segmentationId": 202, - "physicalNetwork": "ctrl", - "routerExternal": 0 - } - c3_data = { # get_volume - "status": "available11", - "name": "wangsong", - "attachments": [ - { - "device": "/dev/vdc", - "serverId": "3030e666-528e-4954-88f5-cc21dab1262b", - "volumeId": "4bd3e9eb-cd8b-456a-8589-910836a0ab31", - "hostName": None, - "id": "4bd3e9eb-cd8b-456a-8589-910836a0ab31" - } - ], - "createTime": "2015-12-02T06:39:40.000000", - "type": None, - "id": "4bd3e9eb-cd8b-456a-8589-910836a0ab31", - "size": 40 - } - mock_call.side_effect = [c1_data, c2_data, c3_data] - + mock_call.side_effect = [c1_data_get_tenant_id, c2_data_create_volume, c3_data_get_volume] self.nf_inst_id = '1111' self.job_id = JobUtil.create_job('NF', 'CREATE', self.nf_inst_id) JobUtil.add_job_status(self.job_id, 0, "INST_VNF_READY") @@ -205,11 +158,6 @@ class TestNFInstantiate(TestCase): InstVnf(data, nf_inst_id=self.nf_inst_id, job_id=self.job_id).run() self.assert_job_result(self.job_id, 255, "unexpected exception") - - - - - @mock.patch.object(restcall, 'call_req') @mock.patch.object(api, 'call') def test_instantiate_vnf_when_111(self, mock_call, mock_call_req): @@ -226,104 +174,9 @@ class TestNFInstantiate(TestCase): mock_call.side_effect = [c1_data_get_tenant_id, c2_data_create_volume, c3_data_get_volume, c4_data_create_network, c5_data_create_subnet, c6_data_create_port, c7_data_create_flavor, c8_data_list_image, c9_data_create_vm, c10_data_get_vm] - self.nf_inst_id = '1111' self.job_id = JobUtil.create_job('NF', 'CREATE', self.nf_inst_id) JobUtil.add_job_status(self.job_id, 0, "INST_VNF_READY") data = inst_req_data InstVnf(data, nf_inst_id=self.nf_inst_id, job_id=self.job_id).run() self.assert_job_result(self.job_id, 100, "Instantiate Vnf success.") - - - - - # @mock.patch.object(restcall, 'call_req') - # # @mock.patch.object(adaptor, 'create_vim_res') - # def test_instantiate_vnf_when_create_res_failed(self, mock_call_req): - # NfvoRegInfoModel.objects.create(nfvoid='nfvo111', vnfminstid='vnfm111', apiurl='http://10.74.44.11', - # nfvouser='root', nfvopassword='root123') - # r1 = [0, json.JSONEncoder().encode(vnfd_model_dict), '200'] - # r2 = [0, json.JSONEncoder().encode(vnfd_model_dict), '200'] - # r3 = [0, json.JSONEncoder().encode('Nf instancing apply grant'), '200'] - # # r4 = [0, json.JSONEncoder().encode('Nf instancing apply resource'), '200'] - # mock_call_req.side_effect = [r1, r2, r3] - # # mock_create_vim_res.re.return_value = None - # create_data = { - # "vnfdId": "111", - # "vnfInstanceName": "vFW_01", - # "vnfInstanceDescription": " vFW in Nanjing TIC Edge"} - # self.nf_inst_id = CreateVnf(create_data).do_biz() - # self.job_id = JobUtil.create_job('NF', 'CREATE', self.nf_inst_id) - # JobUtil.add_job_status(self.job_id, 0, "INST_VNF_READY") - # data = inst_req_data - # InstVnf(data, nf_inst_id=self.nf_inst_id, job_id=self.job_id).run() - # self.assert_job_result(self.job_id, 255, "Create resource failed") - - # @mock.patch.object(restcall, 'call_req') - # # @mock.patch.object(adaptor, 'create_vim_res') - # def test_instantiate_vnf_success(self, mock_call_req): - # NfvoRegInfoModel.objects.create(nfvoid='nfvo111', vnfminstid='vnfm111', apiurl='http://10.74.44.11', - # nfvouser='root', nfvopassword='root123') - # r1 = [0, json.JSONEncoder().encode(vnfd_model_dict), '200'] - # r2 = [0, json.JSONEncoder().encode(vnfd_model_dict), '200'] - # r3 = [0, json.JSONEncoder().encode('Nf instancing apply grant'), '200'] - # r4 = [0, json.JSONEncoder().encode('None'), '200'] - # mock_call_req.side_effect = [r1, r2, r3, r4] - # # mock_create_vim_res.re.return_value = None - # create_data = { - # "vnfdId": "111", - # "vnfInstanceName": "vFW_01", - # "vnfInstanceDescription": " vFW in Nanjing TIC Edge"} - # self.nf_inst_id = CreateVnf(create_data).do_biz() - # self.job_id = JobUtil.create_job('NF', 'CREATE', self.nf_inst_id) - # JobUtil.add_job_status(self.job_id, 0, "INST_VNF_READY") - # data = inst_req_data - # InstVnf(data, nf_inst_id=self.nf_inst_id, job_id=self.job_id).run() - # self.assert_job_result(self.job_id, 100, "Instantiate Vnf success.") - -inst_req_data = { - "flavourId": "flavour_1", - "instantiationLevelId": "instantiationLevel_1", - "extVirtualLinks": [ - { - "vlInstanceId": "1", - "vim": { - "vimInfoId": "1", - "vimId": "1", - "interfaceInfo": { - "vimType": "vim", - "apiVersion": "v2", - "protocolType": "http" - }, - "accessInfo": { - "tenant": "tenant_vCPE", - "username": "vCPE", - "password": "vCPE_321" - }, - "interfaceEndpoint": "http://10.43.21.105:80/" - }, - "resourceId": "1246", - "extCps": [ - { - "cpdId": "11", - "addresses": [ - { - "addressType": "MAC", - "l2AddressData": "00:f3:43:20:a2:a3" - }, - { - "addressType": "IP", - "l3AddressData": { - "iPAddressType": "IPv4", - "iPAddress": "192.168.104.2" - } - } - ], - "numDynamicAddresses": 0 - } - ] - } - ], - "localizationLanguage": "en_US", - "additionalParams": {} -} diff --git a/lcm/lcm/nf/vnfs/vnf_create/inst_vnf.py b/lcm/lcm/nf/vnfs/vnf_create/inst_vnf.py index af47768a..b04cf04e 100644 --- a/lcm/lcm/nf/vnfs/vnf_create/inst_vnf.py +++ b/lcm/lcm/nf/vnfs/vnf_create/inst_vnf.py @@ -18,8 +18,8 @@ import uuid from threading import Thread from lcm.nf.vnfs.const import vnfd_model_dict -from lcm.pub.database.models import NfInstModel, NfvoRegInfoModel, VmInstModel, NetworkInstModel, \ - SubNetworkInstModel, PortInstModel, StorageInstModel, FlavourInstModel, VNFCInstModel, VLInstModel, CPInstModel +from lcm.pub.database.models import NfInstModel, VmInstModel, NetworkInstModel, \ + SubNetworkInstModel, PortInstModel, StorageInstModel, FlavourInstModel, VNFCInstModel from lcm.pub.exceptions import NFLCMException from lcm.pub.msapi.catalog import query_rawdata_from_catalog from lcm.pub.msapi.nfvolcm import apply_grant_to_nfvo, notify_lcm_to_nfvo, get_packageinfo_by_vnfdid @@ -42,48 +42,13 @@ class InstVnf(Thread): self.vnfm_inst_id = '' self.csar_id = '' self.vnfd_info = [] - self.inst_resource = {'volumn': [], # [{"vim_id": ignore_case_get(ret, "vim_id")},{}] - 'network': [], - 'subnet': [], - 'port': [], - 'flavor': [], - 'vm': [], - } - # self.create_res_result = { - # 'jobid': 'res_001', - # 'resourceResult': [{'name': 'vm01'}, {'name': 'vm02'}], - # 'resource_result':{ - # 'affectedvnfc':[ - # { - # 'status':'success', - # 'vnfcinstanceid':'1', - # 'computeresource':{'resourceid':'11'}, - # 'vduid':'111', - # 'vdutype':'1111' - # } - # ], - # 'affectedvirtuallink':[ - # { - # 'status': 'success', - # 'virtuallinkinstanceid':'', - # 'networkresource':{'resourceid':'1'}, - # 'subnetworkresource':{'resourceid':'1'}, - # 'virtuallinkdescid': '', - # } - # ], - # 'affectedcp':[{ - # 'status': 'success', - # 'portresource':{'resourceid':'1'}, - # 'cpinstanceid':'2', - # 'cpdid':'22', - # 'ownertype':'222', - # 'ownerid':'2222', - # 'virtuallinkinstanceid':'22222', - # - # }], - # - # } - # } + # self.inst_resource = {'volumn': [], # [{"vim_id": ignore_case_get(ret, "vim_id")},{}] + # 'network': [], + # 'subnet': [], + # 'port': [], + # 'flavor': [], + # 'vm': [], + # } def run(self): try: @@ -92,8 +57,6 @@ class InstVnf(Thread): self.create_res() self.lcm_notify() JobUtil.add_job_status(self.job_id, 100, "Instantiate Vnf success.") - # is_exist = JobStatusModel.objects.filter(jobid=self.job_id).exists() - # logger.debug("check_ns_inst_name_exist::is_exist=%s" % is_exist) except NFLCMException as e: self.vnf_inst_failed_handle(e.message) # self.rollback(e.message) @@ -184,71 +147,8 @@ class InstVnf(Thread): JobUtil.add_job_status(self.job_id, 70, '[NF instantiation] create resource finish') logger.info("[NF instantiation] create resource finish") - # def check_res_status(self): - # logger.info("[NF instantiation] confirm all vms are active start") - # vnfcs = self.create_res_result['resource_result']['affectedvnfc'] - # for vnfc in vnfcs: - # if 'success' != vnfc['status']: - # logger.error("VNFC_STATUS_IS_NOT_ACTIVE[vduid=%s]" % vnfc['vduId']) - # raise NFLCMException(msgid="VNFC_STATUS_IS_NOT_ACTIVE[vduid=%s]", args=vnfc['vduId']) - # - # JobUtil.add_job_status(self.job_id, 80, 'SAVE_VNFC_TO_DB') - # vls = self.create_res_result['resource_result']['affectedvirtuallink'] - # cps = self.create_res_result['resource_result']['affectedcp'] - # - # for vnfc in vnfcs: - # if 'failed' == vnfc['status']: - # continue - # compute_resource = vnfc['computeresource'] - # vminst = VmInstModel.objects.filter(resouceid=compute_resource['resourceid']).first() - # VNFCInstModel.objects.create( - # vnfcinstanceid=vnfc['vnfcinstanceid'], - # vduid=vnfc['vduid'], - # vdutype=vnfc['vdutype'], - # nfinstid=self.nf_inst_id, - # vmid=vminst.vmid) - # for vl in vls: - # if 'failed' == vl['status']: - # continue - # network_resource = vl['networkresource'] - # subnet_resource = vl['subnetworkresource'] - # networkinst = NetworkInstModel.objects.filter(resouceid=network_resource['resourceid']).first() - # subnetinst = SubNetworkInstModel.objects.filter(resouceid=subnet_resource['resourceid']).first() - # VLInstModel.objects.create( - # vlinstanceid=vl['virtuallinkinstanceid'], - # vldid=vl['virtuallinkdescid'], - # ownertype='0', - # ownerid=self.nf_inst_id, - # relatednetworkid=networkinst.networkid, - # relatedsubnetworkid=subnetinst.subnetworkid) - # # # for vs in vss: - # for cp in cps: - # if 'failed' == cp['status']: - # continue - # port_resource = cp['portresource'] - # portinst = PortInstModel.objects.filter(resouceid=port_resource['resourceid']).first() - # ttt = portinst.portid - # CPInstModel.objects.create( - # cpinstanceid=cp['cpinstanceid'], - # cpdid=cp['cpdid'], - # relatedtype='2', - # relatedport=portinst.portid, - # ownertype=cp['ownertype'], - # ownerid=cp['ownerid'], - # vlinstanceid=cp['virtuallinkinstanceid']) - # # self.add_job(43, 'INST_DPLY_VM_PRGS') - # logger.info("[NF instantiation] confirm all vms are active end") - def lcm_notify(self): logger.info('[NF instantiation] send notify request to nfvo start') - # reg_info = NfvoRegInfoModel.objects.filter(vnfminstid=self.vnfm_inst_id).first() - # vm_info = VmInstModel.objects.filter(nfinstid=self.nf_inst_id) - # vmlist = [] - # nfs = NfInstModel.objects.filter(nfinstid=self.nf_inst_id) - # nf = nfs[0] - # allocate_data = json.loads(nf.initallocatedata) - # vmlist = json.loads(nf.predefinedvm) - # addition_param = {'vmList': vmlist} affected_vnfc = [] vnfcs = VNFCInstModel.objects.filter(nfinstid=self.nf_inst_id) for vnfc in vnfcs: @@ -282,22 +182,6 @@ class InstVnf(Thread): 'changeType': 'added', 'storageResource': {'vimId': port.vimid, 'resourceId': port.resouceid, 'resourceName': port.name, 'resourceType': 'port'}}) - # vls = VLInstModel.objects.filter(ownerid=self.nf_inst_id) - # for vl in vls: - # network_resource = {} - # subnet_resource = {} - # if vl.relatednetworkid: - # network = NetworkInstModel.objects.filter(networkid=vl.relatednetworkid) - # subnet = SubNetworkInstModel.objects.filter(subnetworkid=vl.relatedsubnetworkid) - # if network: - # network_resource = {'vimId': network[0].vimid, 'resourceId': network[0].resouceid, - # 'resourceName': network[0].name, 'tenant': network[0].tenant} - # if subnet: - # subnet_resource = {'vimId': subnet[0].vimid, 'resourceId': subnet[0].resouceid, - # 'resourceName': subnet[0].name, 'tenant': subnet[0].tenant} - # affected_vl.append( - # {'virtualLinkInstanceId': vl.vlinstanceid, 'virtualLinkDescId': vl.vldid, 'changeType': 'added', - # 'networkResource': network_resource, 'subnetworkResource': subnet_resource, 'tenant': vl.tenant}) affected_vs = [] vss = StorageInstModel.objects.filter(instid=self.nf_inst_id) for vs in vss: @@ -307,47 +191,6 @@ class InstVnf(Thread): 'changeType': 'added', 'storageResource': {'vimId': vs.vimid, 'resourceId': vs.resouceid, 'resourceName': vs.name, 'resourceType': 'volume'}}) - # affected_cp = [] - # # vnfc cps - # for vnfc in vnfcs: - # cps = CPInstModel.objects.filter(ownerid=vnfc.vnfcinstanceid, ownertype=3) - # for cp in cps: - # port_resource = {} - # if cp.relatedport: - # port = PortInstModel.objects.filter(portid=cp.relatedport) - # if port: - # port_resource = {'vimId': port[0].vimid, 'resourceId': port[0].resouceid, - # 'resourceName': port[0].name, 'tenant': port[0].tenant} - # affected_cp.append( - # {'cPInstanceId': cp.cpinstanceid, 'cpdId': cp.cpdid, 'ownerid': cp.ownerid, - # 'ownertype': cp.ownertype, 'changeType': 'added', 'portResource': port_resource, - # 'virtualLinkInstanceId': cp.vlinstanceid}) - - - # # nf cps - # affected_cp = [] - # cps = PortInstModel.objects.filter(instid=self.nf_inst_id) - # # cps = CPInstModel.objects.filter(ownerid=self.nf_inst_id) - # logger.info('vnf_inst_id=%s, cps size=%s' % (self.nf_inst_id, cps.count())) - # for cp in cps: - # port_resource = {} - # if cp.relatedport: - # port = PortInstModel.objects.filter(portid=cp.relatedport) - # if port: - # port_resource = {'vimId': port[0].vimid, 'resourceId': port[0].resouceid, - # 'resourceName': port[0].name, 'tenant': port[0].tenant} - # affected_cp.append( - # {'cPInstanceId': cp.cpinstanceid, 'cpdId': cp.cpdid, 'ownerid': cp.ownerid, 'ownertype': cp.ownertype, - # 'changeType': 'added', 'portResource': port_resource, - # 'virtualLinkInstanceId': cp.vlinstanceid}) - # affectedcapacity = {} - # reserved_total = allocate_data.get('reserved_total', {}) - # affectedcapacity['vm'] = str(reserved_total.get('vmnum', 0)) - # affectedcapacity['vcpu'] = str(reserved_total.get('vcpunum', 0)) - # affectedcapacity['vMemory'] = str(reserved_total.get('memorysize', 0)) - # affectedcapacity['port'] = str(reserved_total.get('portnum', 0)) - # affectedcapacity['localStorage'] = str(reserved_total.get('hdsize', 0)) - # affectedcapacity['sharedStorage'] = str(reserved_total.get('shdsize', 0)) content_args = { "status": 'result', "nfInstanceId": self.nf_inst_id, @@ -373,16 +216,16 @@ class InstVnf(Thread): raise NFLCMException("send notify request to nfvo failed") logger.info('[NF instantiation] send notify request to nfvo end') - def load_nfvo_config(self): - logger.info("[NF instantiation]get nfvo connection info start") - reg_info = NfvoRegInfoModel.objects.filter(vnfminstid='vnfm111').first() - if reg_info: - self.vnfm_inst_id = reg_info.vnfminstid - self.nfvo_inst_id = reg_info.nfvoid - logger.info("[NF instantiation] Registered nfvo id is [%s]" % self.nfvo_inst_id) - else: - raise NFLCMException("Nfvo was not registered") - logger.info("[NF instantiation]get nfvo connection info end") + # def load_nfvo_config(self): + # logger.info("[NF instantiation]get nfvo connection info start") + # reg_info = NfvoRegInfoModel.objects.filter(vnfminstid='vnfm111').first() + # if reg_info: + # self.vnfm_inst_id = reg_info.vnfminstid + # self.nfvo_inst_id = reg_info.nfvoid + # logger.info("[NF instantiation] Registered nfvo id is [%s]" % self.nfvo_inst_id) + # else: + # raise NFLCMException("Nfvo was not registered") + # logger.info("[NF instantiation]get nfvo connection info end") def vnf_inst_failed_handle(self, error_msg): logger.error('VNF instantiation failed, detail message: %s' % error_msg) |