Add vserver creation and fix unit tests 63/13063/1
authorying.yunlong <ying.yunlong@zte.com.cn>
Mon, 18 Sep 2017 09:16:37 +0000 (17:16 +0800)
committerying.yunlong <ying.yunlong@zte.com.cn>
Mon, 18 Sep 2017 09:17:24 +0000 (17:17 +0800)
Change-Id: Ib4a75e04b273203d98c70973b5cf948a20af3cc3
Issue-ID: VFC-371
Signed-off-by: ying.yunlong <ying.yunlong@zte.com.cn>
lcm/ns/tests/vls/tests.py
lcm/ns/tests/vnfs/tests.py
lcm/ns/vnfs/create_vnfs.py

index 3c99bfb..5895c93 100644 (file)
@@ -53,7 +53,7 @@ vim_info = {"cloud-owner": "example-cloud-owner-val-97336",
                         "ip-address": "example-ip-address-val-99038",
                         "port": "example-port-val-27323",
                         "cloud-domain": "example-cloud-domain-val-55163",
-                        "default-tenant": "example-default-tenant-val-99383",
+                        "default-tenant": "admin",
                         "resource-version": "example-resource-version-val-15424"
                     }
                 ]
index f9cf339..d5b02ea 100644 (file)
@@ -18,6 +18,7 @@ import mock
 from django.test import TestCase, Client
 from rest_framework import status
 
+from lcm.ns.tests.vls.tests import vim_info
 from lcm.ns.vnfs import create_vnfs
 from lcm.ns.vnfs.const import VNF_STATUS
 from lcm.ns.vnfs.create_vnfs import CreateVnfs
@@ -84,14 +85,27 @@ class TestCreateVnfViews(TestCase):
         self.ns_inst_id = str(uuid.uuid4())
         self.job_id = str(uuid.uuid4())
         self.data = {
-            'nsInstanceId': self.ns_inst_id,
-            'additionalParamForNs': {"inputs": json.dumps({})},
-            'additionalParamForVnf': [{
-                'vnfprofileid': 'VBras',
-                'additionalparam': {
-                    'inputs': json.dumps({'vnf_param1': '11', 'vnf_param2': '22'}),
-                    'vnfminstanceid': "1"}}],
-            'vnfIndex': '1'}
+            "nsInstanceId": self.ns_inst_id,
+            "additionalParamForNs": {
+                "inputs": json.dumps({
+
+                })
+            },
+            "additionalParamForVnf": [
+                {
+                    "vnfprofileid": "VBras",
+                    "additionalparam": {
+                        "inputs": json.dumps({
+                            "vnf_param1": "11",
+                            "vnf_param2": "22"
+                        }),
+                        "vnfminstanceid": "1",
+                        "vimId": "zte_test"
+                    }
+                }
+            ],
+            "vnfIndex": "1"
+        }
         self.client = Client()
         NfPackageModel(uuid=str(uuid.uuid4()), nfpackageid='package_id1', vnfdid='zte_vbras', vendor='zte',
                        vnfdversion='1.0.0', vnfversion='1.0.0', vnfdmodel=json.dumps(vnfd_model_dict)).save()
@@ -112,16 +126,23 @@ class TestCreateVnfViews(TestCase):
 
     @mock.patch.object(restcall, 'call_req')
     def test_create_vnf_thread(self, mock_call_req):
+        nf_inst_id, job_id = create_vnfs.prepare_create_params()
         mock_vals = {
             "/api/ztevmanagerdriver/v1/1/vnfs":
                 [0, json.JSONEncoder().encode({"jobId": self.job_id, "vnfInstanceId": 3}), '200'],
-            "/external-system/esr-vnfm-list/esr-vnfm/1":
+            "/external-system/esr-vnfm-list/esr-vnfm/1?depth=all":
                 [0, json.JSONEncoder().encode(vnfm_info), '200'],
             "/api/resmgr/v1/vnf":
                 [0, json.JSONEncoder().encode({}), '200'],
             "/api/resmgr/v1/vnfinfo":
                 [0, json.JSONEncoder().encode({}), '200'],
-            "/api/ztevmanagerdriver/v1/jobs/" + self.job_id + "&responseId=0":
+            "/network/generic-vnfs/generic-vnf/%s" % nf_inst_id:
+                [0, json.JSONEncoder().encode({}), '201'],
+            "/cloud-infrastructure/cloud-regions/cloud-region/zte/test?depth=all":
+                [0, json.JSONEncoder().encode(vim_info), '201'],
+            "/cloud-infrastructure/cloud-regions/cloud-region/zte/test/tenants/tenant/admin/vservers/vserver/1":
+                [0, json.JSONEncoder().encode({}), '201'],
+            "/api/ztevmanagerdriver/v1/1/jobs/" + self.job_id + "?responseId=0":
                 [0, json.JSONEncoder().encode({"jobid": self.job_id,
                                                "responsedescriptor": {"progress": "100",
                                                                       "status": JOB_MODEL_STATUS.FINISHED,
@@ -142,7 +163,6 @@ class TestCreateVnfViews(TestCase):
                 'additional_param_for_ns': ignore_case_get(self.data, 'additionalParamForNs'),
                 'additional_param_for_vnf': ignore_case_get(self.data, 'additionalParamForVnf'),
                 'vnf_index': ignore_case_get(self.data, 'vnfIndex')}
-        nf_inst_id, job_id = create_vnfs.prepare_create_params()
         CreateVnfs(data, nf_inst_id, job_id).run()
         self.assertTrue(NfInstModel.objects.get(nfinstid=nf_inst_id).status, VNF_STATUS.ACTIVE)
 
@@ -453,52 +473,50 @@ class TestGetVnfmInfoViews(TestCase):
 
     @mock.patch.object(restcall, "call_req")
     def test_get_vnfm_info(self, mock_call_req):
-        vnfm_info_aai = \
-            {
-                "vnfm-id": "example-vnfm-id-val-62576",
-                "vim-id": "example-vim-id-val-35114",
-                "certificate-url": "example-certificate-url-val-90242",
-                "esr-system-info-list": {
-                    "esr-system-info": [
-                        {
-                            "esr-system-info-id": "example-esr-system-info-id-val-78484",
-                            "system-name": "example-system-name-val-23790",
-                            "type": "example-type-val-52596",
-                            "vendor": "example-vendor-val-47399",
-                            "version": "example-version-val-42051",
-                            "service-url": "example-service-url-val-10731",
-                            "user-name": "example-user-name-val-65946",
-                            "password": "example-password-val-22505",
-                            "system-type": "example-system-type-val-27221",
-                            "protocal": "example-protocal-val-54632",
-                            "ssl-cacert": "example-ssl-cacert-val-45965",
-                            "ssl-insecure": True,
-                            "ip-address": "example-ip-address-val-19212",
-                            "port": "example-port-val-57641",
-                            "cloud-domain": "example-cloud-domain-val-26296",
-                            "default-tenant": "example-default-tenant-val-87724"
-                        }
-                    ]
-                }
+        vnfm_info_aai = {
+            "vnfm-id": "example-vnfm-id-val-62576",
+            "vim-id": "example-vim-id-val-35114",
+            "certificate-url": "example-certificate-url-val-90242",
+            "esr-system-info-list": {
+                "esr-system-info": [
+                    {
+                        "esr-system-info-id": "example-esr-system-info-id-val-78484",
+                        "system-name": "example-system-name-val-23790",
+                        "type": "example-type-val-52596",
+                        "vendor": "example-vendor-val-47399",
+                        "version": "example-version-val-42051",
+                        "service-url": "example-service-url-val-10731",
+                        "user-name": "example-user-name-val-65946",
+                        "password": "example-password-val-22505",
+                        "system-type": "example-system-type-val-27221",
+                        "protocal": "example-protocal-val-54632",
+                        "ssl-cacert": "example-ssl-cacert-val-45965",
+                        "ssl-insecure": True,
+                        "ip-address": "example-ip-address-val-19212",
+                        "port": "example-port-val-57641",
+                        "cloud-domain": "example-cloud-domain-val-26296",
+                        "default-tenant": "example-default-tenant-val-87724"
+                    }
+                ]
             }
+        }
         r1 = [0, json.JSONEncoder().encode(vnfm_info_aai), '200']
         mock_call_req.side_effect = [r1]
         esr_system_info = ignore_case_get(ignore_case_get(vnfm_info_aai, "esr-system-info-list"), "esr-system-info")
-        expect_data = \
-            {
-                "vnfmId": vnfm_info_aai["vnfm-id"],
-                "name": vnfm_info_aai["vnfm-id"],
-                "type": ignore_case_get(esr_system_info[0], "type"),
-                "vimId": vnfm_info_aai["vim-id"],
-                "vendor": ignore_case_get(esr_system_info[0], "vendor"),
-                "version": ignore_case_get(esr_system_info[0], "version"),
-                "description": "vnfm",
-                "certificateUrl": vnfm_info_aai["certificate-url"],
-                "url": ignore_case_get(esr_system_info[0], "service-url"),
-                "userName": ignore_case_get(esr_system_info[0], "user-name"),
-                "password": ignore_case_get(esr_system_info[0], "password"),
-                "createTime": "2016-07-06 15:33:18"
-            }
+        expect_data = {
+            "vnfmId": vnfm_info_aai["vnfm-id"],
+            "name": vnfm_info_aai["vnfm-id"],
+            "type": ignore_case_get(esr_system_info[0], "type"),
+            "vimId": vnfm_info_aai["vim-id"],
+            "vendor": ignore_case_get(esr_system_info[0], "vendor"),
+            "version": ignore_case_get(esr_system_info[0], "version"),
+            "description": "vnfm",
+            "certificateUrl": vnfm_info_aai["certificate-url"],
+            "url": ignore_case_get(esr_system_info[0], "service-url"),
+            "userName": ignore_case_get(esr_system_info[0], "user-name"),
+            "password": ignore_case_get(esr_system_info[0], "password"),
+            "createTime": "2016-07-06 15:33:18"
+        }
 
         response = self.client.get("/api/nslcm/v1/vnfms/%s" % self.vnfm_id)
         self.failUnlessEqual(status.HTTP_200_OK, response.status_code)
@@ -518,22 +536,21 @@ class TestGetVimInfoViews(TestCase):
         r1 = [0, json.JSONEncoder().encode(vim_info_aai), '200']
         mock_call_req.side_effect = [r1]
         esr_system_info = ignore_case_get(ignore_case_get(vim_info_aai, "esr-system-info-list"), "esr-system-info")
-        expect_data = \
-            {
-                "vimId": self.vim_id,
-                "name": self.vim_id,
-                "url": ignore_case_get(esr_system_info[0], "service-url"),
-                "userName": ignore_case_get(esr_system_info[0], "user-name"),
-                "password": ignore_case_get(esr_system_info[0], "password"),
-                # "tenant": ignore_case_get(tenants[0], "tenant-id"),
-                "tenant": ignore_case_get(esr_system_info[0], "default-tenant"),
-                "vendor": ignore_case_get(esr_system_info[0], "vendor"),
-                "version": ignore_case_get(esr_system_info[0], "version"),
-                "description": "vim",
-                "domain": "",
-                "type": ignore_case_get(esr_system_info[0], "type"),
-                "createTime": "2016-07-18 12:22:53"
-            }
+        expect_data = {
+            "vimId": self.vim_id,
+            "name": self.vim_id,
+            "url": ignore_case_get(esr_system_info[0], "service-url"),
+            "userName": ignore_case_get(esr_system_info[0], "user-name"),
+            "password": ignore_case_get(esr_system_info[0], "password"),
+            # "tenant": ignore_case_get(tenants[0], "tenant-id"),
+            "tenant": ignore_case_get(esr_system_info[0], "default-tenant"),
+            "vendor": ignore_case_get(esr_system_info[0], "vendor"),
+            "version": ignore_case_get(esr_system_info[0], "version"),
+            "description": "vim",
+            "domain": "",
+            "type": ignore_case_get(esr_system_info[0], "type"),
+            "createTime": "2016-07-18 12:22:53"
+        }
 
         response = self.client.get("/api/nslcm/v1/vims/%s" % self.vim_id)
         self.failUnlessEqual(status.HTTP_200_OK, response.status_code)
index dc633f0..b170d73 100644 (file)
@@ -22,8 +22,8 @@ from lcm.ns.vnfs.const import VNF_STATUS, NFVO_VNF_INST_TIMEOUT_SECOND, INST_TYP
 from lcm.ns.vnfs.wait_job import wait_job_finish
 from lcm.pub.database.models import NfPackageModel, NfInstModel, NSInstModel, VmInstModel, VNFFGInstModel, VLInstModel
 from lcm.pub.exceptions import NSLCMException
-from lcm.pub.msapi.aai import create_vnf_aai
-from lcm.pub.msapi.extsys import get_vnfm_by_id
+from lcm.pub.msapi.aai import create_vnf_aai, create_vserver_aai
+from lcm.pub.msapi.extsys import get_vnfm_by_id, split_vim_to_owner_region, get_vim_by_id
 from lcm.pub.msapi.resmgr import create_vnf, create_vnf_creation_info
 from lcm.pub.msapi.vnfmdriver import send_nf_init_request
 from lcm.pub.utils.jobutil import JOB_MODEL_STATUS, JobUtil, JOB_TYPE
@@ -77,6 +77,7 @@ class CreateVnfs(Thread):
             self.write_vnf_creation_info()
             self.save_info_to_db()
             self.create_vnf_in_aai()
+            self.create_vserver_in_aai()
         except NSLCMException as e:
             self.vnf_inst_failed_handle(e.message)
         except Exception:
@@ -284,3 +285,33 @@ class CreateVnfs(Thread):
             logger.debug("Fail to create vnf instance[%s] to aai, resp_status: [%s]." % (self.nf_inst_id, resp_status))
         else:
             logger.debug("Success to create vnf instance[%s] to aai, resp_status: [%s]." % (self.nf_inst_id, resp_status))
+
+    def create_vserver_in_aai(self):
+        logger.debug("create_vserver_in_aai start!")
+        cloud_owner, cloud_region_id = split_vim_to_owner_region(self.vim_id)
+
+        # query vim_info from aai
+        vim_info = get_vim_by_id(self.vim_id)
+        tenant_id = vim_info["tenant"]
+        vm_inst_infos = VmInstModel.objects.filter(insttype=INST_TYPE.VNF, instid=self.nf_inst_id)
+        for vm_inst_info in vm_inst_infos:
+            vserver_id = vm_inst_info.resouceid
+            data = {
+                "vserver-id": vm_inst_info.resouceid,
+                "vserver-name": vm_inst_info.vmname,
+                "prov-status": "ACTIVE",
+                "vserver-selflink": "",
+                "in-maint": True,
+                "is-closed-loop-disabled": False
+            }
+
+            # create vserver instance in aai
+            resp_data, resp_status = create_vserver_aai(cloud_owner, cloud_region_id, tenant_id, vserver_id, data)
+            if resp_data:
+                logger.debug(
+                    "Fail to create vserver instance[%s] to aai, resp_status: [%s]." % (vserver_id, resp_status))
+            else:
+                logger.debug(
+                    "Success to create vserver instance[%s] to aai, resp_status: [%s]." % (vserver_id, resp_status))
+
+        logger.debug("create_vserver_in_aai end!")