From aa2bab667e831b5f63f4086ed5537ca6e4ff5b0d Mon Sep 17 00:00:00 2001 From: maopengzhang Date: Sat, 2 Sep 2017 15:35:28 +0800 Subject: [PATCH] Add tosca parser add tosca parser API in catalog Change-Id: Ib255d7d44db5833dd645e7ee81d181dbfcb975d4 Issue-ID: VFC-35 Signed-off-by: maopengzhang --- catalog/packages/nf_package.py | 6 +- catalog/packages/ns_package.py | 10 +-- catalog/packages/tests.py | 34 +++++++---- catalog/packages/urls.py | 4 +- catalog/packages/views.py | 8 +-- catalog/pub/msapi/nfvolcm.py | 5 ++ catalog/swagger/tests.py | 1 - catalog/swagger/vfc.catalog.swagger.json | 101 ++++++++++++++++++++++++++++++- 8 files changed, 141 insertions(+), 28 deletions(-) diff --git a/catalog/packages/nf_package.py b/catalog/packages/nf_package.py index 10fccdab..f2e1df93 100644 --- a/catalog/packages/nf_package.py +++ b/catalog/packages/nf_package.py @@ -59,18 +59,18 @@ def nf_get_csar(csar_id): return ret def parser_vnfmodel(csar_id,inputs): - ret = None + ret= None try: nf_pkg = NfPackageModel.objects.filter(nfpackageid=csar_id) if nf_pkg: csar_path=nf_pkg["vnfd_path"] - ret=toscaparser.parse_vnfd(csar_path,inputs) + ret={"model":toscaparser.parse_vnfd(csar_path,inputs)} except CatalogException as e: return [1, e.message] except: logger.error(traceback.format_exc()) return [1, str(sys.exc_info())] - return ret + return [0,ret] ##################################################################################### class NfDistributeThread(threading.Thread): diff --git a/catalog/packages/ns_package.py b/catalog/packages/ns_package.py index 5c32e4e6..8174b44d 100644 --- a/catalog/packages/ns_package.py +++ b/catalog/packages/ns_package.py @@ -84,19 +84,19 @@ def ns_get_csar(csar_id): return [1, str(sys.exc_info())] return ret -def parser_nsmodel(csar_id,inputs): - ret = None +def parser_nsdmodel(csar_id,inputs): + ret= None try: nf_pkg = NSDModel.objects.filter(id=csar_id) if nf_pkg: csar_path=nf_pkg["nsd_path"] - ret=toscaparser.parse_nsd(csar_path,inputs) + ret={"model":toscaparser.parse_nsd(csar_path,inputs)} except CatalogException as e: return [1, e.message] except: logger.error(traceback.format_exc()) return [1, str(sys.exc_info())] - return ret + return [0,ret] ############################################################################################################### @@ -167,7 +167,7 @@ class NsPackage(object): "csarId": ns.id, "nsdId": ns.nsd_id }) - return [0, csars] + return [0,csars] def get_csar(self, csar_id): package_info = {} diff --git a/catalog/packages/tests.py b/catalog/packages/tests.py index 94d3a21c..4c23b9d3 100644 --- a/catalog/packages/tests.py +++ b/catalog/packages/tests.py @@ -37,6 +37,17 @@ class PackageTest(unittest.TestCase): "csarId": str(self.ns_csarId) } + self.csars= [ + { + "csarId": "1", + "nsdId": "1" + }, + { + "csarId": "2", + "nsdId": "2" + } + ] + self.nfdata = { "csarId": str(self.nf_csarId) } @@ -437,12 +448,14 @@ class PackageTest(unittest.TestCase): def tearDown(self): pass + @mock.patch.object(NsPackage, 'get_csars') + def test_nspackages_get(self,mock_get_csars): + + mock_get_csars.return_value = [0,self.csars] - def test_nspackages_get(self): response = self.client.get("/api/catalog/v1/nspackages") - print response self.assertEqual(status.HTTP_200_OK, response.status_code, response.content) - self.assertEquals([],response.data) + self.assertEquals(self.csars,response.data) @mock.patch.object(NsPackage,'get_nsd') def test_ns_distribute_2(self, mock_get_nsd): @@ -543,15 +556,12 @@ class PackageTest(unittest.TestCase): self.assertEquals(size, len(vnfdmodels)) - def test_nf_package_parser(self): - # reqdata={"csarId":"1"} - # response = self.client.post("api/catalog/v1/vnfpackages/model",reqdata) - # self.assertEqual(status.HTTP_202_ACCEPTED, response.status_code, response.content) - pass + reqdata={"csarId":"1"} + response = self.client.post("/api/catalog/v1/vnfpackagemodel",reqdata) + self.assertEqual(status.HTTP_202_ACCEPTED, response.status_code, response.content) def test_ns_package_parser(self): - # reqdata={"csarId":"1"} - # response = self.client.post("api/catalog/v1/nspackages/model",reqdata) - # self.assertEqual(status.HTTP_202_ACCEPTED, response.status_code, response.content) - pass \ No newline at end of file + reqdata = {"csarId": "1"} + response = self.client.post("/api/catalog/v1/nspackagemodel",reqdata) + self.assertEqual(status.HTTP_202_ACCEPTED, response.status_code, response.content) \ No newline at end of file diff --git a/catalog/packages/urls.py b/catalog/packages/urls.py index 2768ee3b..f372464e 100644 --- a/catalog/packages/urls.py +++ b/catalog/packages/urls.py @@ -20,8 +20,8 @@ urlpatterns = [ url(r'^api/catalog/v1/nspackages/(?P[0-9a-zA-Z\-\_]+)$', views.ns_rd_csar, name='nspackage_rd'), url(r'^api/catalog/v1/vnfpackages$', views.nfpackages_rc, name='nfpackages_rc'), url(r'^api/catalog/v1/vnfpackages/(?P[0-9a-zA-Z\-\_]+)$', views.nf_rd_csar, name='nfpackage_rd'), - url(r'^api/catalog/v1/nspackages/model', views.ns_model_parser, name='ns_model_parser'), - url(r'^api/catalog/v1/vnfpackages/model', views.vnf_model_parser, name='vnf_model_parser') + url(r'^api/catalog/v1/nspackagemodel$', views.ns_model_parser, name='nsmodelparser_rc'), + url(r'^api/catalog/v1/vnfpackagemodel$', views.vnf_model_parser, name='vnfmodelparser_rc'), ] diff --git a/catalog/packages/views.py b/catalog/packages/views.py index 248c6a11..d4e44cd3 100644 --- a/catalog/packages/views.py +++ b/catalog/packages/views.py @@ -110,8 +110,8 @@ def ns_model_parser(request, *args, **kwargs): csar_id = ignore_case_get(kwargs, "csarId") inputs = ignore_case_get(kwargs, "inputs") if request.method == 'POST': - ret = ns_package.parser_nsmodel(csar_id,inputs) - normal_status = status.HTTP_200_OK + ret = ns_package.parser_nsdmodel(csar_id,inputs) + normal_status = status.HTTP_202_ACCEPTED logger.info("Leave %s, Return value is %s", fun_name(), str(ret)) if ret[0] != 0: @@ -123,8 +123,8 @@ def vnf_model_parser(request, *args, **kwargs): csar_id = ignore_case_get(kwargs, "csarId") inputs = ignore_case_get(kwargs, "inputs") if request.method == 'POST': - ret = nf_package.parser_nfmodel(csar_id,inputs) - normal_status = status.HTTP_200_OK + ret = nf_package.parser_vnfmodel(csar_id,inputs) + normal_status = status.HTTP_202_ACCEPTED logger.info("Leave %s, Return value is %s", fun_name(), str(ret)) if ret[0] != 0: diff --git a/catalog/pub/msapi/nfvolcm.py b/catalog/pub/msapi/nfvolcm.py index e25430ec..17cf686d 100644 --- a/catalog/pub/msapi/nfvolcm.py +++ b/catalog/pub/msapi/nfvolcm.py @@ -33,6 +33,11 @@ def call_lcm(resource, method, content=''): method=method, content=content) +def get_nsInstances(csarid): + nsInstances=call_lcm("/nlcm/v1/ns ","get") + + + # Mock code because the REST API from nfvolcm to delete ns instance is not implemented def delete_ns_inst_mock(): return [0,'success'] diff --git a/catalog/swagger/tests.py b/catalog/swagger/tests.py index 40aaea70..46e3f0db 100644 --- a/catalog/swagger/tests.py +++ b/catalog/swagger/tests.py @@ -24,7 +24,6 @@ class SampleViewTest(unittest.TestCase): def test_sample(self): response = self.client.get("/api/catalog/v1/swagger.json") - print response self.assertEqual(status.HTTP_200_OK, response.status_code, response.content) # resp_data = json.loads(response.content) # self.assertEqual({"status": "active"}, resp_data) diff --git a/catalog/swagger/vfc.catalog.swagger.json b/catalog/swagger/vfc.catalog.swagger.json index ece4cd4d..5ff983e9 100644 --- a/catalog/swagger/vfc.catalog.swagger.json +++ b/catalog/swagger/vfc.catalog.swagger.json @@ -144,6 +144,44 @@ } } }, + "/nspackagemodel": { + "post": { + "tags": [ + "model" + ], + "summary": "ns package model", + "description": "ns package model", + "operationId": "ms_model_parser", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "parameters": [ + { + "in": "body", + "name": "body", + "description": "distribute request param", + "required": true, + "schema": { + "$ref": "#/definitions/modelParserRequest" + } + } + ], + "responses": { + "202": { + "description": "", + "schema": { + "$ref": "#/definitions/modelParserResponse" + } + }, + "500": { + "description": "internal error" + } + } + } + }, "/vnfpackages": { "get": { "tags": [ @@ -277,7 +315,45 @@ } } } - } + }, + "/vnfpackagemodel": { + "post": { + "tags": [ + "model" + ], + "summary": "vnf package model", + "description": "vnf package model", + "operationId": "vnf_model_parser", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "parameters": [ + { + "in": "body", + "name": "body", + "description": "distribute request param", + "required": true, + "schema": { + "$ref": "#/definitions/modelParserRequest" + } + } + ], + "responses": { + "202": { + "description": "", + "schema": { + "$ref": "#/definitions/modelParserResponse" + } + }, + "500": { + "description": "internal error" + } + } + } + } }, "definitions": { "NsPkgDistributeRequest": { @@ -505,6 +581,29 @@ "description": "image file path in the csar or image url in external repository" } } + }, + "modelParserRequest":{ + "type": "object", + "properties": { + "csarId": { + "type": "string", + "description": "csar Package Id" + }, + "inputs": { + "type": "string", + "description": "csar package inputs" + } + } + }, + "modelParserResponse":{ + "type": "object", + "properties": { + "model": { + "type": "string", + "description": "model json data" + } + } } + } } \ No newline at end of file -- 2.16.6