diff options
-rw-r--r-- | zte/vmanager/driver/interfaces/tests.py | 134 | ||||
-rw-r--r-- | zte/vmanager/driver/interfaces/views.py | 37 | ||||
-rw-r--r-- | zte/vmanager/driver/pub/utils/restcall.py | 2 | ||||
-rw-r--r-- | zte/vmanager/driver/settings.py | 4 | ||||
-rw-r--r-- | zte/vmanager/driver/swagger/tests.py | 3 | ||||
-rw-r--r-- | zte/vmanager/driver/urls.py | 4 |
6 files changed, 106 insertions, 78 deletions
diff --git a/zte/vmanager/driver/interfaces/tests.py b/zte/vmanager/driver/interfaces/tests.py index daacdb6a..3dde266b 100644 --- a/zte/vmanager/driver/interfaces/tests.py +++ b/zte/vmanager/driver/interfaces/tests.py @@ -112,18 +112,22 @@ class InterfacesTest(TestCase): # mock_call_req_aai.side_effect =[r1] mock_call_req.side_effect = [r1, r2, r3, ret] - req_data = {'vnfInstanceName': 'VFW_f88c0cb7-512a-44c4-bd09-891663f19367', - 'vnfPackageId': 'd852e1be-0aac-48f1-b1a4-cd825f6cdf9a', - 'vnfDescriptorId': 'vcpe_vfw_zte_1_0', - 'additionalParam': {'sdncontroller': 'e4d637f1-a4ec-4c59-8b20-4e8ab34daba9', - 'NatIpRange': '192.167.0.10-192.168.0.20', - 'm6000_mng_ip': '192.168.11.11', - 'externalPluginManageNetworkName': 'plugin_net_2014', - 'location': '516cee95-e8ca-4d26-9268-38e343c2e31e', - 'externalManageNetworkName': 'mng_net_2017', - 'sfc_data_network': 'sfc_data_net_2016', - 'externalDataNetworkName': 'Flow_out_net', - 'inputs':{}}} + req_data = { + 'vnfInstanceName': 'VFW_f88c0cb7-512a-44c4-bd09-891663f19367', + 'vnfPackageId': 'd852e1be-0aac-48f1-b1a4-cd825f6cdf9a', + 'vnfDescriptorId': 'vcpe_vfw_zte_1_0', + 'additionalParam': { + 'sdncontroller': 'e4d637f1-a4ec-4c59-8b20-4e8ab34daba9', + 'NatIpRange': '192.167.0.10-192.168.0.20', + 'm6000_mng_ip': '192.168.11.11', + 'externalPluginManageNetworkName': 'plugin_net_2014', + 'location': '516cee95-e8ca-4d26-9268-38e343c2e31e', + 'externalManageNetworkName': 'mng_net_2017', + 'sfc_data_network': 'sfc_data_net_2016', + 'externalDataNetworkName': 'Flow_out_net', + 'inputs': {} + } + } response = self.client.post("/api/ztevmanagerdriver/v1/ztevnfmid/vnfs", data=json.dumps(req_data), content_type="application/json") @@ -210,27 +214,34 @@ class InterfacesTest(TestCase): u'type': u'ztevmanagerdriver', u'createTime': u'2016-10-31 11:08:39', u'description': u''} - resp_body = {"responsedescriptor": - {"status": "processing", "responsehistorylist": [ - {"status": "error", - "progress": 255, - "errorcode": "", - "responseid": 20, - "statusdescription": "'JsonParser' object has no attribute 'parser_info'"}], - "responseid": 21, - "errorcode": "", - "progress": 40, - "statusdescription": "Create nf apply resource failed"}, - "jobid": "NF-CREATE-11-ec6c2f2a-9f48-11e6-9405-fa163e91c2f9"} + resp_body = { + "responsedescriptor": { + "status": "processing", + "responsehistorylist": [ + { + "status": "error", + "progress": 255, + "errorcode": "", + "responseid": 20, + "statusdescription": "'JsonParser' object has no attribute 'parser_info'" + } + ], + "responseid": 21, + "errorcode": "", + "progress": 40, + "statusdescription": "Create nf apply resource failed" + }, + "jobid": "NF-CREATE-11-ec6c2f2a-9f48-11e6-9405-fa163e91c2f9" + } r1 = [0, json.JSONEncoder().encode(vnfm_info), '200'] r2 = [0, json.JSONEncoder().encode(resp_body), '200'] # mock_call_req_aai.side_effect = [r1] mock_call_req.side_effect = [r1, r2] - response = self.client.get("/api/ztevmanagerdriver/v1/{vnfmid}/jobs/{jobid}?responseId={responseId}". - format( + response = self.client.get("/api/ztevmanagerdriver/v1/{vnfmid}/jobs/{jobid}?responseId={responseId}".format( vnfmid=vnfm_info["vnfmId"], jobid=resp_body["jobid"], - responseId=resp_body["responsedescriptor"]["responseid"])) + responseId=resp_body["responsedescriptor"]["responseid"]) + ) self.assertEqual(str(status.HTTP_200_OK), response.status_code) @@ -250,19 +261,23 @@ class InterfacesTest(TestCase): "vnfmid": "13232222", "nfvoid": "03212234", "vimid": "12345678", - "exvimidlist ": - ["exvimid"], + "exvimidlist ": [ + "exvimid" + ], "tenant": " tenant1", "vnfistanceid": "1234", "operationright": "0", "vmlist": [ { "vmflavor": "SMP", - "vmnumber": "3"}, + "vmnumber": "3" + }, { "vmflavor": "CMP", - "vmnumber": "3"} - ]} + "vmnumber": "3" + } + ] + } mock_call_req.return_value = ret response = self.client.put("/api/ztevmanagerdriver/v1/resource/grant", @@ -341,7 +356,7 @@ class InterfacesTest(TestCase): # @mock.patch.object(restcall, 'call_req_aai') @mock.patch.object(restcall, 'call_req') def test_scale(self, mock_call_req): - job_info = {"jobid":"801","nfInstanceId":"101"} + job_info = {"jobid": "801", "nfInstanceId": "101"} vnfm_info = {u'userName': u'admin', u'vendor': u'ZTE', u'name': u'ZTE_VNFM_237_62', @@ -356,29 +371,30 @@ class InterfacesTest(TestCase): u'description': u''} ret = [0, json.JSONEncoder().encode(job_info), "202"] - ret_vnfm = [0,json.JSONEncoder().encode(vnfm_info), "200"] + ret_vnfm = [0, json.JSONEncoder().encode(vnfm_info), "200"] # mock_call_req_aai.side_effect = [ret_vnfm] mock_call_req.side_effect = [ret_vnfm, ret] vnfd_info = { - "vnf_flavours":[ + "vnf_flavours": [ { - "flavour_id":"flavour1", - "description":"", - "vdu_profiles":[ + "flavour_id": "flavour1", + "description": "", + "vdu_profiles": [ { - "vdu_id":"vdu1Id", + "vdu_id": "vdu1Id", "instances_minimum_number": 1, "instances_maximum_number": 4, - "local_affinity_antiaffinity_rule":[ + "local_affinity_antiaffinity_rule": [ { - "affinity_antiaffinity":"affinity", - "scope":"node", + "affinity_antiaffinity": "affinity", + "scope": "node", + } ] } ], - "scaling_aspects":[ + "scaling_aspects": [ { "id": "demo_aspect", "name": "demo_aspect", @@ -390,29 +406,31 @@ class InterfacesTest(TestCase): } ], "element_groups": [ - { - "group_id": "elementGroup1", - "description": "", - "properties":{ - "name": "elementGroup1", - }, - "members": ["gsu_vm","pfu_vm"], - } + { + "group_id": "elementGroup1", + "description": "", + "properties": { + "name": "elementGroup1" + }, + "members": [ + "gsu_vm", + "pfu_vm" + ] + } ] } scale_vnf_data = { - "type":"SCALE_OUT", - "aspectId":"demo_aspect", - "numberOfSteps":"3", - "additionalParam":{ - "vnfdModel":vnfd_info + "type": "SCALE_OUT", + "aspectId": "demo_aspect", + "numberOfSteps": "3", + "additionalParam": { + "vnfdModel": vnfd_info } } - response = self.client.post("/api/ztevmanagerdriver/v1/100/vnfs/101/scale", - data=json.dumps(scale_vnf_data), content_type='application/json') + data=json.dumps(scale_vnf_data), content_type='application/json') self.assertEqual(str(status.HTTP_202_ACCEPTED), response.status_code) self.assertDictEqual(job_info, response.data) diff --git a/zte/vmanager/driver/interfaces/views.py b/zte/vmanager/driver/interfaces/views.py index 3f4a4baf..a9a430d2 100644 --- a/zte/vmanager/driver/interfaces/views.py +++ b/zte/vmanager/driver/interfaces/views.py @@ -55,21 +55,25 @@ query_vnfd_url = "api/nslcm/v1/vnfpackage/%s" query_vnfm_url = "api/extsys/v1/vnfms/%s" query_package_url = "api/nslcm/v1/vnfpackage/%s" -#Query vnfm_info from nslcm + +# Query vnfm_info from nslcm def get_vnfminfo_from_nslcm(vnfmid): ret = req_by_msb("api/nslcm/v1/vnfms/%s" % vnfmid, "GET") return ret + # Query vnfm_info from esr def vnfm_get(vnfmid): ret = call_aai("api/aai-esr-server/v1/vnfms/%s" % vnfmid, "GET") return ret + # Query vnfd_info from nslcm def vnfd_get(vnfpackageid): ret = req_by_msb("api/nslcm/v1/vnfpackage/%s" % vnfpackageid, "GET") return ret + # Query vnfpackage_info from nslcm def vnfpackage_get(csarid): ret = req_by_msb("api/nslcm/v1/vnfpackage/%s" % csarid, "GET") @@ -91,7 +95,8 @@ create_vnf_param_mapping = { "additionalParam": ""} create_vnf_resp_mapping = { "VNFInstanceID": "vnfInstanceId", - "JobId": "jobid",} + "JobId": "jobid" +} @api_view(http_method_names=['POST']) @@ -214,7 +219,8 @@ def terminate_vnf(request, *args, **kwargs): vnf_detail_url = "v1/vnfs/%s" vnf_detail_resp_mapping = { - "VNFInstanseStatus": "status",} + "VNFInstanseStatus": "status" +} @api_view(http_method_names=['GET']) @@ -258,7 +264,8 @@ operation_status_resp_map = { "ErrorCode": "errorCode", "ResponseId": "responseId", "ResponseHistoryList": "responseHistoryList", - "ResponseDescriptor": "responseDescriptor",} + "ResponseDescriptor": "responseDescriptor" +} @api_view(http_method_names=['GET']) @@ -366,7 +373,8 @@ notify_param_map = { "VMFlavor": "", "VMNumber": "", "VMIDlist": "", - "VMUUID": "",} + "VMUUID": "" +} @api_view(http_method_names=['POST']) @@ -447,14 +455,14 @@ def scale(request, *args, **kwargs): scale_type = ignorcase_get(request.data, "type") aspect_id = ignorcase_get(request.data, "aspectId") number_of_steps = ignorcase_get(request.data, "numberOfSteps") - extension = ignorcase_get(request.data, "additionalParam") - vnfd_model = ignorcase_get(extension, "vnfdModel") + # extension = ignorcase_get(request.data, "additionalParam") + # vnfd_model = ignorcase_get(extension, "vnfdModel") data = { 'vnfmid': vnfm_id, 'nfvoid': 1, 'scaletype': '0' if scale_type == 'SCALE_OUT' else '1', - 'vmlist': [{'VMNumber':number_of_steps,'VMFlavor':aspect_id}], - 'extension':'' + 'vmlist': [{'VMNumber': number_of_steps, 'VMFlavor': aspect_id}], + 'extension': '' } ''' for vdu_id in get_vdus(vnfd_model, aspect_id): @@ -474,19 +482,20 @@ def scale(request, *args, **kwargs): content=json.JSONEncoder().encode(data)) logger.info("ret=%s", ret) if ret[0] != 0: - return Response(data={'error':'scale error'}, status=ret[2]) + return Response(data={'error': 'scale error'}, status=ret[2]) resp_data = json.JSONDecoder().decode(ret[1]) # jobId = resp_data["jobid"] logger.info("resp_data=%s", resp_data) except Exception as e: - logger.error("Error occurred when scaling VNF") + logger.error("Error occurred when scaling VNF,error:%s", e.message) logger.error(traceback.format_exc()) - return Response(data={'error':'scale expection'}, status='500') + return Response(data={'error': 'scale expection'}, status='500') return Response(data=resp_data, status=ret[2]) nf_healing_url = '/api/v1/nf_m_i/nfs/{vnfInstanceID}/vms/operation' + @api_view(http_method_names=['POST']) def heal(request, *args, **kwargs): logger.info("====heal_vnf===") @@ -519,12 +528,12 @@ def heal(request, *args, **kwargs): # jobId = resp_data["jobid"] logger.info("resp_data=%s", resp_data) except Exception as e: - logger.error("Error occurred when healing VNF") + logger.error("Error occurred when healing VNF,error:%s", e.message) logger.error(traceback.format_exc()) return Response(data={'error': 'heal expection'}, status='500') return Response(data=resp_data, status=ret[2]) -#@staticmethod + def get_vdus(nf_model, aspect_id): associated_group = '' members = [] diff --git a/zte/vmanager/driver/pub/utils/restcall.py b/zte/vmanager/driver/pub/utils/restcall.py index 8efe0afb..3bf9c2d8 100644 --- a/zte/vmanager/driver/pub/utils/restcall.py +++ b/zte/vmanager/driver/pub/utils/restcall.py @@ -94,6 +94,7 @@ def combine_url(base_url, resource): full_url = base_url + '/' + resource return full_url + def call_req_aai(base_url, user, passwd, auth_type, resource, method, content=''): callid = str(uuid.uuid1()) logger.debug("[%s]call_req('%s','%s','%s',%s,'%s','%s','%s')" % ( @@ -142,5 +143,6 @@ def call_req_aai(base_url, user, passwd, auth_type, resource, method, content='' logger.debug("[%s]ret=%s" % (callid, str(ret))) return ret + def call_aai(resource, method, data=''): return call_req_aai(AAI_BASE_URL, AAI_USER, AAI_PASSWORD, rest_no_auth, resource, method, data) diff --git a/zte/vmanager/driver/settings.py b/zte/vmanager/driver/settings.py index 6af1f267..f5923e22 100644 --- a/zte/vmanager/driver/settings.py +++ b/zte/vmanager/driver/settings.py @@ -44,7 +44,7 @@ INSTALLED_APPS = [ 'rest_framework', 'driver.pub.database', 'driver.interfaces' - ] +] MIDDLEWARE_CLASSES = [ 'django.middleware.security.SecurityMiddleware', @@ -55,7 +55,7 @@ MIDDLEWARE_CLASSES = [ 'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', - ] +] ROOT_URLCONF = 'driver.urls' diff --git a/zte/vmanager/driver/swagger/tests.py b/zte/vmanager/driver/swagger/tests.py index 20fe9805..157b92a2 100644 --- a/zte/vmanager/driver/swagger/tests.py +++ b/zte/vmanager/driver/swagger/tests.py @@ -13,7 +13,7 @@ # limitations under the License. import unittest -import json + from django.test import Client from rest_framework import status @@ -28,4 +28,3 @@ class SwaggerViewTest(unittest.TestCase): def test_sample(self): response = self.client.get("/api/ztevmanagerdriver/v1/swagger.json") self.assertEqual(status.HTTP_200_OK, response.status_code, response.content) - diff --git a/zte/vmanager/driver/urls.py b/zte/vmanager/driver/urls.py index 0e61dabb..fad242e1 100644 --- a/zte/vmanager/driver/urls.py +++ b/zte/vmanager/driver/urls.py @@ -15,8 +15,8 @@ from driver.pub.config.config import REG_TO_MSB_WHEN_START, REG_TO_MSB_REG_URL, REG_TO_MSB_REG_PARAM from django.conf.urls import include, url urlpatterns = [ - url(r'^', include('driver.interfaces.urls')), - url(r'^', include('driver.swagger.urls')), + url(r'^', include('driver.interfaces.urls')), + url(r'^', include('driver.swagger.urls')), ] # regist to MSB when startup |