From d672544f4b8c9a8b181b0f7feb6cf4ff710e0362 Mon Sep 17 00:00:00 2001 From: "ying.yunlong" Date: Thu, 23 Feb 2017 14:55:45 +0800 Subject: [PATCH] Modify code of create flavour Change-Id: I9336e010d6aa2e076f8f797e58e9e8ec71c0561b Issue-Id: GVNFM-34 Signed-off-by: ying.yunlong --- lcm/lcm/nf/vnfs/const.py | 240 +++++++++++++++++++------------ lcm/lcm/nf/vnfs/tests/test_vnf_create.py | 7 +- lcm/lcm/nf/vnfs/vnf_create/inst_vnf.py | 21 +-- lcm/lcm/pub/database/models.py | 14 +- 4 files changed, 176 insertions(+), 106 deletions(-) diff --git a/lcm/lcm/nf/vnfs/const.py b/lcm/lcm/nf/vnfs/const.py index 256b849e..66dae1ea 100644 --- a/lcm/lcm/nf/vnfs/const.py +++ b/lcm/lcm/nf/vnfs/const.py @@ -302,106 +302,149 @@ vnfd_model_dict = { }, 'vdus': [ { - 'volumn_storages': [ - - ], - 'nfv_compute': { - 'mem_size': '', - 'num_cpus': u'2' - }, - 'local_storages': [ - - ], - 'vdu_id': u'vdu_omm.001', - 'image_file': u'opencos_sss_omm_img_release_20150723-1-disk1', - 'dependencies': [ - - ], - 'vls': [ - - ], - 'cps': [ - - ], - 'properties': { - 'key_vdu': '', - 'support_scaling': False, - 'vdu_type': '', - 'name': '', - 'storage_policy': '', - 'location_info': { - 'vimId': '', - 'availability_zone': '', - 'region': '', - 'dc': '', - 'host': '', - 'tenant': '' + "vdu_id": "vdu1Id", + "description": "vdu description", + "properties": { + "name": "vduinstname", + "vdu_type": "OMP", + "key_vdu": True, + "support_scaling": True, + "location_info": { + "vimid": "vimid", + "tenant": "tenantname", + "availability_zone": "zone1", + "host": "host1" }, - 'inject_data_list': [ - + "local_affinity_antiaffinity_rule": [ + { + "affinity_antiaffinity": "anti-affinity", + "scope": "node" + }, + { + "affinity_antiaffinity": "affinity", + "scope": "zone" + } ], - 'watchdog': { - 'action': '', - 'enabledelay': '' - }, - 'local_affinity_antiaffinity_rule': { - + "inject_data_list": [ + { + "file_name": "abc.xml", + "file_data": "xxxssss" + } + ], + "storage_policy": "HIGH", + "template_id": "26", + "manual_scale_select_vim": False, + "watchdog": { + "enabledelay": 600000, + "action": "reset" }, - 'template_id': u'omm.001', - 'manual_scale_select_vim': False + "is_predefined": False, + "allow_scale_updown": False, + "inject_network_address": True, + "inner_hugepage_num": 100, + "inner_hugepage_size": "2048", + "action": "add" }, - 'description': u'singleommvm' - }, - { - 'volumn_storages': [ - + "image_file": "omm_image", + "local_storages": [ + "local_storage_id1", + "local_storage_id2" ], - 'nfv_compute': { - 'mem_size': '', - 'num_cpus': u'14' - }, - 'local_storages': [ - + "volume_storages": [ + { + "volume_storage_id": "volume_storage_id1", + "location": "/usr/data", + "device": "/dev/hda1" + } ], - 'vdu_id': u'vdu_12', - 'image_file': u'sss', - 'dependencies': [ - + "dependencies": [ + "vdu1Id", + "vduNId" ], - 'vls': [ - + "nfv_compute": { + "num_cpus": 4, + "mem_size": "1024MB", + "cpu_frequency": "1GHz", + "flavor_extra_specs": { + "hw: cpu_policy": "shared", + "hw: cpu_max_threads": 50, + "hw: cpu_sockets": 10, + "hw: cpu_max_sockets": 20, + "hw: cpu_max_cores": 8, + "hw: cpu_threads": 30, + "hw: numa_mem.0": 12288, + "hw: hugepage_num": 100, + "hw: high_performance": "dvs_high", + "hw: numa_nodes": 1, + "hw: numa_cpus.0": "2,4,8", + "hw: numa_pci": True, + "hw: cpu_cores": 4, + "pci_passthrough: alias": "ColetoCreek: 1", + "hw: mem_page_size": "large", + "hw: mem_paging_mechanism": "EPT" + } + }, + "vls": [ + "vlId1", + "vlIdN" ], - 'cps': [ - + "cps": [ + "cpId1", + "cpIdN" ], - 'properties': { - 'key_vdu': '', - 'support_scaling': False, - 'vdu_type': '', - 'name': '', - 'storage_policy': '', - 'location_info': { - 'vimId': '', - 'availability_zone': '', - 'region': '', - 'dc': '', - 'host': '', - 'tenant': '' - }, - 'inject_data_list': [ - - ], - 'watchdog': { - 'action': '', - 'enabledelay': '' - }, - 'local_affinity_antiaffinity_rule': { - - }, - 'template_id': u'12', - 'manual_scale_select_vim': False + "scalable": { + "min_instances": 1, + "max_instances": 2, + "default_instances": 1 + }, + "interfaces": { + "Standard": { + "create": { + "implementation": "", + "inputs": { + "param1Name": "value1", + "paramNName": "valueN" + } + }, + "configure": { + "implementation": "", + "inputs": { + "param1Name": "value1", + "paramNName": "valueN" + } + }, + "start": { + "implementation": "", + "inputs": { + "param1Name": "value1", + "paramNName": "valueN" + } + }, + "stop": { + "implementation": "", + "inputs": { + "param1Name": "value1", + "paramNName": "valueN" + } + }, + "delete": { + "implementation": "", + "inputs": { + "param1Name": "value1", + "paramNName": "valueN" + } + } + } }, - 'description': u'ppvm' + "artifacts": [ + { + "artifact_name": "software_version_file", + "type": "tosca.artifacts.Deployment", + "file": "AppSoftwares/zte-cn-xgw-V5.16.11_NFV-version.zip", + "repository": "", + "deploy_path": "" + } + ] } ], 'volume_storages': [ @@ -546,7 +589,7 @@ vnfd_model_dict = { "function": "control" }, "vl_id": "vldId1", - "vdu_id": u'vdu_omm.001' + "vdu_id": "vdu1Id" } ], 'local_storages': [ @@ -648,4 +691,19 @@ c6_data_create_port = { "ip": "10.43.38.11", "vnicType": "normal", "securityGroups": "" +} +c1_data_create_flavor ={ + "returnCode": 0, + "vimId": "11111", + "vimName": "11111", + "id": "142019d3-bc6e-4319-9c1d-6722fc136afg", + "tenantId": "tenant1", + "name": "subnet1", + "vcpu": 5, + "memory": 2, + "disk": 40, + "ephemeral": 40, + "swap": 20, + "isPublic": True, + "extraSpecs": "testtt" } \ No newline at end of file diff --git a/lcm/lcm/nf/vnfs/tests/test_vnf_create.py b/lcm/lcm/nf/vnfs/tests/test_vnf_create.py index 8bec7201..a666130c 100644 --- a/lcm/lcm/nf/vnfs/tests/test_vnf_create.py +++ b/lcm/lcm/nf/vnfs/tests/test_vnf_create.py @@ -19,7 +19,7 @@ from django.test import TestCase, Client 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 + c5_data_create_subnet, c3_data_get_volume, c6_data_create_port, c1_data_create_flavor from lcm.nf.vnfs.vnf_create.inst_vnf import InstVnf from lcm.pub.database.models import NfInstModel, JobStatusModel, VmInstModel, NetworkInstModel, \ SubNetworkInstModel, PortInstModel @@ -223,14 +223,15 @@ class TestNFInstantiate(TestCase): '200'] # apply_grant_to_nfvo mock_call_req.side_effect = [r1, r2, r3] 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] + c4_data_create_network, c5_data_create_subnet, c6_data_create_port, + c1_data_create_flavor] 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, 255, "unexpected exception") + self.assert_job_result(self.job_id, 255, "Undefined image(omm_image)") diff --git a/lcm/lcm/nf/vnfs/vnf_create/inst_vnf.py b/lcm/lcm/nf/vnfs/vnf_create/inst_vnf.py index 5d622741..1d5825e9 100644 --- a/lcm/lcm/nf/vnfs/vnf_create/inst_vnf.py +++ b/lcm/lcm/nf/vnfs/vnf_create/inst_vnf.py @@ -459,14 +459,19 @@ class InstVnf(Thread): # self.inst_resource['flavor'].append({"vim_id": "1"}, {"res_id": "2"}) JobUtil.add_job_status(self.job_id, 60, 'Create flavors!') FlavourInstModel.objects.create( - falavourid=str(uuid.uuid4()), - name=ret["name"], - vcpu=ret["vcpu"], - memory=ret["memory"], - extraspecs=ret["extraSpecs"], - is_predefined=ret["returnCode"], - tenant=ret["tenatId"], - vimid=ret["vimId"], + flavourid=str(uuid.uuid4()), + name=ignore_case_get(ret, "name"), + vimid=ignore_case_get(ret, "vimId"), + resouceid=ignore_case_get(ret, "id"), + tenant=ignore_case_get(ret, "tenantId"), + vcpu=ignore_case_get(ret, "vcpu"), + memory=ignore_case_get(ret, "memory"), + disk=ignore_case_get(ret, "disk"), + ephemeral=ignore_case_get(ret, "ephemeral"), + swap=ignore_case_get(ret, "swap"), + isPublic=get_boolean(ignore_case_get(ret, "isPublic")), + extraspecs=ignore_case_get(ret, "extraSpecs"), + is_predefined=ignore_case_get(ret, "returnCode"), instid=self.nf_inst_id) elif res_type == adaptor.RES_VM: logger.info('Create vms!') diff --git a/lcm/lcm/pub/database/models.py b/lcm/lcm/pub/database/models.py index de986a11..de6dc8df 100644 --- a/lcm/lcm/pub/database/models.py +++ b/lcm/lcm/pub/database/models.py @@ -147,14 +147,20 @@ class FlavourInstModel(models.Model): db_table = 'FLAVOURINST' flavourid = models.CharField(db_column='FLAVOURID', max_length=255, primary_key=True) + vimid = models.CharField(db_column='VIMID', max_length=255) + resouceid = models.CharField(db_column='RESOURCEID', max_length=255) name = models.CharField(db_column='NAME', max_length=255) - vcpu = models.CharField(db_column='VCPU', max_length=255) - memory = models.CharField(db_column='MEMORY', max_length=255) + tenant = models.CharField(db_column='TENANT', max_length=255, null=True) + vcpu = models.IntegerField(db_column='VCPU') + memory = models.IntegerField(db_column='MEMORY') + disk = models.IntegerField(db_column='DISK') + ephemeral = models.IntegerField(db_column='EPHEMERAL') + swap = models.IntegerField(db_column='SWAP') + isPublic = models.IntegerField(db_column='ISPUBLIC') extraspecs = models.CharField(db_column='EXTRASPECS', max_length=255) instid = models.CharField(db_column='INSTID', max_length=255) - tenant = models.CharField(db_column='TENANT', max_length=255, null=True) - vmid = models.CharField(db_column='VMID', max_length=255) create_time = models.CharField(db_column='CREATETIME', max_length=200, null=True, blank=True) + is_predefined = models.IntegerField(db_column='ISPREDEFINED', default=0, null=True) class NetworkInstModel(models.Model): class Meta: -- 2.16.6