VNF Deployment
authorying.yunlong <ying.yunlong@zte.com.cn>
Sat, 11 Feb 2017 07:11:30 +0000 (15:11 +0800)
committerying.yunlong <ying.yunlong@zte.com.cn>
Sat, 11 Feb 2017 07:11:30 +0000 (15:11 +0800)
Change-Id: I5a4c4510f020252578f97b1d191b4ba13eac4e3a
Issue-Id: GVNFM-1
Signed-off-by: ying.yunlong <ying.yunlong@zte.com.cn>
lcm/lcm/nf/vnfs/tests/test_vnf_create.py
lcm/lcm/nf/vnfs/vnf_create/inst_vnf.py
lcm/lcm/pub/database/models.py

index 00e3aa1..f4d3a5e 100644 (file)
@@ -21,7 +21,7 @@ from rest_framework import status
 
 from lcm.nf.vnfs.vnf_create.create_vnf_identifier import CreateVnf
 from lcm.nf.vnfs.vnf_create.inst_vnf import InstVnf
-from lcm.pub.database.models import NfInstModel, JobStatusModel, NfvoRegInfoModel
+from lcm.pub.database.models import NfInstModel, JobStatusModel, NfvoRegInfoModel, VmInstModel
 from lcm.pub.utils import restcall
 from lcm.pub.utils.jobutil import JobUtil
 
@@ -76,7 +76,10 @@ inst_req_data = {
 class TestNsInstantiate(TestCase):
     def setUp(self):
         self.client = Client()
-        self.nsd_id = str(uuid.uuid4())
+        VmInstModel.objects.create(vmid="1", vimid="1", resouceid="11", insttype=0, instid="1", vmname="test_01",
+                                   operationalstate=1)
+        VmInstModel.objects.create(vmid="2", vimid="2", resouceid="22", insttype=0, instid="2", vmname="test_02",
+                               operationalstate=1)
 
     def tearDown(self):
         pass
index 601ec6b..289eadd 100644 (file)
@@ -16,7 +16,7 @@ import logging
 import traceback
 from threading import Thread
 
-from lcm.pub.database.models import NfInstModel, JobStatusModel, NfvoRegInfoModel
+from lcm.pub.database.models import NfInstModel, JobStatusModel, NfvoRegInfoModel, VmInstModel, VNFCInstModel
 from lcm.pub.exceptions import NFLCMException
 from lcm.pub.msapi.nfvolcm import vnfd_rawdata_get, apply_grant_to_nfvo, apply_res_to_nfvo
 from lcm.pub.utils.jobutil import JobUtil
@@ -34,13 +34,42 @@ class InstVnf(Thread):
         self.job_id = job_id
         self.nfvo_inst_id = ''
         self.vnfm_inst_id = ''
+        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'
+                    },
+                    {
+                        'status': 'success',
+                        'vnfcinstanceid': '2',
+                        'computeresource': {'resourceid':'22'},
+                        'vduid': '222',
+                        'vdutype': '2222'
+                    }
+                ],
+                'affectedvirtuallink':{
+
+                },
+                'affectedcp':{
+
+                }
+
+            }
+        }
 
     def run(self):
         try:
             self.inst_pre()
             self.apply_grant()
             self.create_res()
-            # self.check_res_status(args)
+            self.check_res_status()
             # self.wait_inst_finish(args)
             # self.lcm_notify(args)
             JobUtil.add_job_status(self.job_id, 100, "Instantiate Vnf success.")
@@ -115,29 +144,74 @@ class InstVnf(Thread):
         logger.info("Nf instancing apply grant finish")
 
     def create_res(self):
-        logger.info("[NF instantiation] send resource apply request start")
-        content_args = {'nfvoInstanceId': self.nfvo_inst_id, 'vnfmInstanceId': self.vnfm_inst_id,
-                        'nfInstanceId': self.nf_inst_id, 'nfDescriptorId': '',
-                        'lifecycleOperation': 'Instantiate', 'jobId': '',
-                        'allocateData': self.vnfd_info}
+        logger.info("[NF instantiation] create resource start")
         volumns = ignore_case_get(self.data, "volumn_storages")
-        #call vim driver api
         #create_volumns(volumns)
         JobUtil.add_job_status(self.job_id, 35, 'Nf instancing create resource(volumn_storages) finish')
-        # create_networks(self.vnfd_info)
-        JobUtil.add_job_status(self.job_id, 45, 'Nf instancing create resource(networks) finish')
-        # create_vdus(self.vnfd_info)
-        JobUtil.add_job_status(self.job_id, 65, 'Nf instancing create resource(vms) finish')
 
-    def check_res_status(self, args):
-        try:
-            logger.info('check_res_status, args=%s' % args)
-            # CheckResStatusTask(args).do_biz()
-            return {'result': '100', 'msg': 'Nf instancing check resource status finish', 'context': {}}
-        except Exception as e:
-            logger.error('Nf instancing check resource status exception=%s' % e.message)
-            logger.error(traceback.format_exc())
-            return {'result': '255', 'msg': 'Nf instancing check resource status exception', 'context': {}}
+        vls = ignore_case_get(self.data, "vls")
+        # create_networks(vls)
+        JobUtil.add_job_status(self.job_id, 55, 'Nf instancing create resource(networks) finish')
+
+        vdus = ignore_case_get(self.data, "vdus")
+        # create_vdus(vdus)
+        JobUtil.add_job_status(self.job_id, 75, 'Nf instancing create resource(vms) finish')
+
+        logger.info("[NF instantiation] create resource end")
+
+    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',  # VNF
+        #         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()
+        #     CPInstModel.objects.create(
+        #         cpinstanceid=cp['cpinstanceid'],
+        #         cpdid=cp['cpdid'],
+        #         relatedtype='2',  # port
+        #         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 wait_inst_finish(self, args):
         try:
index d434840..24dcdf3 100644 (file)
@@ -91,7 +91,7 @@ class JobStatusModel(models.Model):
     jobid = models.CharField(db_column='JOBID', max_length=255)
     status = models.CharField(db_column='STATUS', max_length=255)
     progress = models.IntegerField(db_column='PROGRESS', null=True, blank=True)
-    descp = models.CharField(db_column='DESCP', max_length=1024)
+    descp = models.TextField(db_column='DESCP', max_length=1024)
     errcode = models.CharField(db_column='ERRCODE', max_length=255, null=True, blank=True)
     addtime = models.CharField(db_column='ADDTIME', max_length=255, null=True, blank=True)
 
@@ -112,3 +112,30 @@ class NfvoRegInfoModel(models.Model):
     clientcert = models.CharField(max_length=255, db_column='CLIENTCERT', null=True)
     servercert = models.CharField(max_length=255, db_column='SERVERCERT', null=True)
     regtime = models.CharField(max_length=255, db_column='REGTIME')
+
+class VmInstModel(models.Model):
+    class Meta:
+        db_table = 'VMINST'
+
+    vmid = models.CharField(db_column='VMID', primary_key=True, max_length=255)
+    vimid = models.CharField(db_column='VIMID', max_length=255)
+    resouceid = models.CharField(db_column='RESOURCEID', max_length=255)
+    insttype = models.IntegerField(db_column='INSTTYPE')
+    instid = models.CharField(db_column='INSTID', max_length=255)
+    vmname = models.CharField(db_column='VMNAME', max_length=255)
+    operationalstate = models.IntegerField(db_column='OPERATIONALSTATE', null=True)
+    zoneid = models.CharField(db_column='ZONEID', max_length=255, null=True)
+    tenant = models.CharField(db_column='TENANT', max_length=255, null=True)
+    hostid = models.CharField(db_column='HOSTID', max_length=255, null=True)
+    detailinfo = models.TextField(db_column='DETAILINFO', max_length=8192, null=True)
+    is_predefined = models.IntegerField(db_column='ISPREDEFINED', default=0, null=True)
+
+class VNFCInstModel(models.Model):
+    class Meta:
+        db_table = 'VNFCINST'
+
+    vnfcinstanceid = models.CharField(db_column='VNFCINSTANCEID', max_length=255, primary_key=True)
+    vduid = models.CharField(db_column='VDUID', max_length=255)
+    vdutype = models.CharField(db_column='VDUTYPE', max_length=255)
+    nfinstid = models.CharField(db_column='NFINSTID', max_length=255)
+    vmid = models.CharField(db_column='VMID', max_length=255)