From ed23714e412e6e0db51d5377a4217c15024a8bca Mon Sep 17 00:00:00 2001 From: maopengzhang Date: Tue, 28 Aug 2018 19:54:06 +0800 Subject: [PATCH] SOL003 API Align SOL003 API ALign - adjust lcm code structure and merge v2 into ns Change-Id: I1ff345fd688ce706be5e8bc5abeb71eec8261fd9 Issue-ID: VFC-635 Signed-off-by: maopengzhang --- README.md | 21 +++++++++ lcm/{v2 => ns/biz}/__init__.py | 26 +++++------ lcm/ns/{ => biz}/ns_create.py | 0 lcm/ns/{ => biz}/ns_delete.py | 0 lcm/ns/{ => biz}/ns_get.py | 0 lcm/ns/{ => biz}/ns_heal.py | 6 +-- lcm/ns/{ => biz}/ns_instant.py | 12 +++--- lcm/ns/{ => biz}/ns_manual_scale.py | 4 +- lcm/ns/{ => biz}/ns_terminate.py | 0 lcm/ns/{ => biz}/scaleaspect.py | 8 ++-- lcm/ns/serializers/__init__.py | 13 ++++++ .../ns_serializers.py} | 0 lcm/ns/tests/test_ns_create.py | 2 +- lcm/ns/tests/test_ns_heal.py | 15 ++++--- lcm/ns/tests/test_ns_instant.py | 19 ++++---- lcm/ns/tests/test_ns_manual_scale.py | 11 ++--- lcm/ns/tests/test_scaleaspect.py | 8 ++-- lcm/ns/tests/tests_ns_terminate.py | 8 ++-- lcm/ns/urls.py | 7 ++- lcm/ns/views/__init__.py | 13 ++++++ lcm/ns/{ => views}/views.py | 34 +++++++-------- lcm/ns/vls/__init__.py | 13 ------ lcm/ns/vnfs/__init__.py | 13 ------ lcm/{ns/sfcs => ns_sfcs}/__init__.py | 0 lcm/ns_sfcs/biz/__init__.py | 13 ++++++ lcm/{ns/sfcs => ns_sfcs/biz}/create_flowcla.py | 2 +- lcm/{ns/sfcs => ns_sfcs/biz}/create_port_chain.py | 0 lcm/{ns/sfcs => ns_sfcs/biz}/create_portpairgp.py | 4 +- lcm/{ns/sfcs => ns_sfcs/biz}/create_sfc_worker.py | 9 ++-- lcm/{ns/sfcs => ns_sfcs/biz}/delete_sfcs.py | 0 lcm/{ns/sfcs => ns_sfcs/biz}/get_sfcs.py | 0 lcm/{ns/sfcs => ns_sfcs/biz}/sfc_instance.py | 0 lcm/{ns/sfcs => ns_sfcs/biz}/utils.py | 0 lcm/ns_sfcs/serializers/__init__.py | 13 ++++++ .../sfcs => ns_sfcs/serializers}/serializers.py | 0 lcm/{ns/tests/vnfs => ns_sfcs/tests}/__init__.py | 26 +++++------ .../tests}/test_create_flow_classifier.py | 0 .../tests}/test_create_port_chain.py | 0 .../tests}/test_create_port_pair_group.py | 0 lcm/{ns/tests/sfcs => ns_sfcs/tests}/test_data.py | 36 ++++++++-------- lcm/{ns/tests/sfcs => ns_sfcs/tests}/test_sfc.py | 4 +- .../sfcs => ns_sfcs/tests}/test_sfc_instance.py | 0 .../sfcs => ns_sfcs/tests}/test_sfcdetailview.py | 2 +- lcm/{ns/tests/sfcs => ns_sfcs/tests}/tests.py | 2 +- lcm/{ns/sfcs => ns_sfcs}/urls.py | 4 +- lcm/ns_sfcs/views/__init__.py | 13 ++++++ lcm/{ns/sfcs => ns_sfcs/views}/detail_views.py | 10 ++--- lcm/{ns/sfcs => ns_sfcs/views}/views.py | 26 +++++------ lcm/{ns/tests/sfcs => ns_vls}/__init__.py | 0 lcm/ns_vls/biz/__init__.py | 0 lcm/{ns/vls => ns_vls/biz}/create_vls.py | 2 +- lcm/{ns/vls => ns_vls/biz}/delete_vls.py | 0 lcm/{ns/vls => ns_vls/biz}/get_vls.py | 0 lcm/ns_vls/serializers/__init__.py | 0 lcm/{ns/vls => ns_vls/serializers}/serializers.py | 0 lcm/ns_vls/tests/__init__.py | 0 lcm/{ns/tests/vls => ns_vls/tests}/tests.py | 12 +++--- lcm/{ns/vls => ns_vls}/urls.py | 2 +- lcm/ns_vls/views/__init__.py | 0 lcm/{ns/vls => ns_vls/views}/views.py | 18 ++++---- lcm/{ns/tests/vls => ns_vnfs}/__init__.py | 0 lcm/ns_vnfs/biz/__init__.py | 13 ++++++ lcm/{ns/vnfs => ns_vnfs/biz}/create_vnfs.py | 12 +++--- lcm/{ns/vnfs => ns_vnfs/biz}/get_vnfs.py | 0 lcm/{v2 => ns_vnfs/biz}/grant_vnf.py | 0 lcm/{ns/vnfs => ns_vnfs/biz}/grant_vnfs.py | 0 .../biz}/handle_vnflcmooc_notification.py | 12 +++--- lcm/{ns/vnfs => ns_vnfs/biz}/heal_vnfs.py | 10 ++--- lcm/{ns/vnfs => ns_vnfs/biz}/notify_lcm.py | 12 +++--- lcm/{ns/vnfs => ns_vnfs/biz}/place_vnfs.py | 0 lcm/{ns/vnfs => ns_vnfs/biz}/scale_vnfs.py | 4 +- lcm/{ns/vnfs => ns_vnfs/biz}/terminate_nfs.py | 17 ++++---- lcm/{ns/vnfs => ns_vnfs/biz}/verify_vnfs.py | 6 +-- .../vnfs => ns_vnfs/biz}/verify_vnfs_config.json | 0 lcm/{ns/vnfs => ns_vnfs/biz}/wait_job.py | 0 lcm/{ns/vnfs => ns_vnfs}/const.py | 0 lcm/ns_vnfs/serializers/__init__.py | 13 ++++++ .../serializers/grant_vnf_serializer.py} | 0 .../vnfs => ns_vnfs/serializers}/serializers.py | 0 lcm/ns_vnfs/tests/__init__.py | 13 ++++++ .../tests.py => ns_vnfs/tests/grant_vnf_test.py} | 6 +-- lcm/{ns/tests/vnfs => ns_vnfs/tests}/tests.py | 12 +++--- .../tests/vnfs => ns_vnfs/tests}/verify_test.py | 0 lcm/{ns/vnfs => ns_vnfs}/urls.py | 16 ++++--- lcm/ns_vnfs/views/__init__.py | 13 ++++++ .../views.py => ns_vnfs/views/grant_vnf_views.py} | 14 +++--- lcm/{ns/vnfs => ns_vnfs/views}/views.py | 50 +++++++++++----------- lcm/pub/utils/tests.py | 2 +- lcm/urls.py | 7 ++- lcm/v2/urls.py | 24 ----------- 90 files changed, 395 insertions(+), 292 deletions(-) rename lcm/{v2 => ns/biz}/__init__.py (97%) rename lcm/ns/{ => biz}/ns_create.py (100%) rename lcm/ns/{ => biz}/ns_delete.py (100%) rename lcm/ns/{ => biz}/ns_get.py (100%) rename lcm/ns/{ => biz}/ns_heal.py (98%) rename lcm/ns/{ => biz}/ns_instant.py (97%) rename lcm/ns/{ => biz}/ns_manual_scale.py (97%) rename lcm/ns/{ => biz}/ns_terminate.py (100%) rename lcm/ns/{ => biz}/scaleaspect.py (99%) create mode 100644 lcm/ns/serializers/__init__.py rename lcm/ns/{serializers.py => serializers/ns_serializers.py} (100%) create mode 100644 lcm/ns/views/__init__.py rename lcm/ns/{ => views}/views.py (93%) delete mode 100644 lcm/ns/vls/__init__.py delete mode 100644 lcm/ns/vnfs/__init__.py rename lcm/{ns/sfcs => ns_sfcs}/__init__.py (100%) create mode 100644 lcm/ns_sfcs/biz/__init__.py rename lcm/{ns/sfcs => ns_sfcs/biz}/create_flowcla.py (98%) rename lcm/{ns/sfcs => ns_sfcs/biz}/create_port_chain.py (100%) rename lcm/{ns/sfcs => ns_sfcs/biz}/create_portpairgp.py (99%) rename lcm/{ns/sfcs => ns_sfcs/biz}/create_sfc_worker.py (90%) rename lcm/{ns/sfcs => ns_sfcs/biz}/delete_sfcs.py (100%) rename lcm/{ns/sfcs => ns_sfcs/biz}/get_sfcs.py (100%) rename lcm/{ns/sfcs => ns_sfcs/biz}/sfc_instance.py (100%) rename lcm/{ns/sfcs => ns_sfcs/biz}/utils.py (100%) create mode 100644 lcm/ns_sfcs/serializers/__init__.py rename lcm/{ns/sfcs => ns_sfcs/serializers}/serializers.py (100%) rename lcm/{ns/tests/vnfs => ns_sfcs/tests}/__init__.py (97%) rename lcm/{ns/tests/sfcs => ns_sfcs/tests}/test_create_flow_classifier.py (100%) rename lcm/{ns/tests/sfcs => ns_sfcs/tests}/test_create_port_chain.py (100%) rename lcm/{ns/tests/sfcs => ns_sfcs/tests}/test_create_port_pair_group.py (100%) rename lcm/{ns/tests/sfcs => ns_sfcs/tests}/test_data.py (98%) rename lcm/{ns/tests/sfcs => ns_sfcs/tests}/test_sfc.py (99%) rename lcm/{ns/tests/sfcs => ns_sfcs/tests}/test_sfc_instance.py (100%) rename lcm/{ns/tests/sfcs => ns_sfcs/tests}/test_sfcdetailview.py (97%) rename lcm/{ns/tests/sfcs => ns_sfcs/tests}/tests.py (98%) rename lcm/{ns/sfcs => ns_sfcs}/urls.py (88%) create mode 100644 lcm/ns_sfcs/views/__init__.py rename lcm/{ns/sfcs => ns_sfcs/views}/detail_views.py (91%) rename lcm/{ns/sfcs => ns_sfcs/views}/views.py (89%) rename lcm/{ns/tests/sfcs => ns_vls}/__init__.py (100%) create mode 100644 lcm/ns_vls/biz/__init__.py rename lcm/{ns/vls => ns_vls/biz}/create_vls.py (99%) rename lcm/{ns/vls => ns_vls/biz}/delete_vls.py (100%) rename lcm/{ns/vls => ns_vls/biz}/get_vls.py (100%) create mode 100644 lcm/ns_vls/serializers/__init__.py rename lcm/{ns/vls => ns_vls/serializers}/serializers.py (100%) create mode 100644 lcm/ns_vls/tests/__init__.py rename lcm/{ns/tests/vls => ns_vls/tests}/tests.py (93%) rename lcm/{ns/vls => ns_vls}/urls.py (94%) create mode 100644 lcm/ns_vls/views/__init__.py rename lcm/{ns/vls => ns_vls/views}/views.py (90%) rename lcm/{ns/tests/vls => ns_vnfs}/__init__.py (100%) create mode 100644 lcm/ns_vnfs/biz/__init__.py rename lcm/{ns/vnfs => ns_vnfs/biz}/create_vnfs.py (97%) rename lcm/{ns/vnfs => ns_vnfs/biz}/get_vnfs.py (100%) rename lcm/{v2 => ns_vnfs/biz}/grant_vnf.py (100%) rename lcm/{ns/vnfs => ns_vnfs/biz}/grant_vnfs.py (100%) rename lcm/{v2 => ns_vnfs/biz}/handle_vnflcmooc_notification.py (99%) rename lcm/{ns/vnfs => ns_vnfs/biz}/heal_vnfs.py (98%) rename lcm/{ns/vnfs => ns_vnfs/biz}/notify_lcm.py (99%) rename lcm/{ns/vnfs => ns_vnfs/biz}/place_vnfs.py (100%) rename lcm/{ns/vnfs => ns_vnfs/biz}/scale_vnfs.py (97%) rename lcm/{ns/vnfs => ns_vnfs/biz}/terminate_nfs.py (98%) rename lcm/{ns/vnfs => ns_vnfs/biz}/verify_vnfs.py (96%) rename lcm/{ns/vnfs => ns_vnfs/biz}/verify_vnfs_config.json (100%) rename lcm/{ns/vnfs => ns_vnfs/biz}/wait_job.py (100%) rename lcm/{ns/vnfs => ns_vnfs}/const.py (100%) create mode 100644 lcm/ns_vnfs/serializers/__init__.py rename lcm/{v2/serializers.py => ns_vnfs/serializers/grant_vnf_serializer.py} (100%) rename lcm/{ns/vnfs => ns_vnfs/serializers}/serializers.py (100%) create mode 100644 lcm/ns_vnfs/tests/__init__.py rename lcm/{v2/tests.py => ns_vnfs/tests/grant_vnf_test.py} (98%) rename lcm/{ns/tests/vnfs => ns_vnfs/tests}/tests.py (99%) rename lcm/{ns/tests/vnfs => ns_vnfs/tests}/verify_test.py (100%) rename lcm/{ns/vnfs => ns_vnfs}/urls.py (63%) create mode 100644 lcm/ns_vnfs/views/__init__.py rename lcm/{v2/views.py => ns_vnfs/views/grant_vnf_views.py} (90%) rename lcm/{ns/vnfs => ns_vnfs/views}/views.py (88%) delete mode 100644 lcm/v2/urls.py diff --git a/README.md b/README.md index 7b59118f..75e5e502 100644 --- a/README.md +++ b/README.md @@ -13,3 +13,24 @@ # limitations under the License. # Micro service of network service life cycle management. + +1. Code structure guide + ./ nslcm project files + ./docker nslcm docker related scripts + ./logs nslcm log file + ./lcm NS life cycle management + ./ns NS life cycle API& logic + ./ API url and const + ./views API related NS views, each operation is a view + ./serializers API related request and response parametes. + Suggest related to sol003/sol005, each datatype is a file. + Common datatypes are put into the common file + ./biz NS LCM mangement busyness logic files + ./tests all the test case. At least each API should have a test case + ./ns_sfcs SFC of NS API & logic + ./ns_vls vl in NS API & logic + ./ns_vnfs vnf in NS API & logic, which is used to integrate with VNFM drivers. + ./jobs nslcm related job + ./pub common class, including database model, external micro service API, utils, and config parameters. + ./samples project micro service health check + ./swagger auto-generate nslcm swagger diff --git a/lcm/v2/__init__.py b/lcm/ns/biz/__init__.py similarity index 97% rename from lcm/v2/__init__.py rename to lcm/ns/biz/__init__.py index 342c2a8c..ca9a1945 100644 --- a/lcm/v2/__init__.py +++ b/lcm/ns/biz/__init__.py @@ -1,13 +1,13 @@ -# Copyright 2018 ZTE Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. +# Copyright 2018 ZTE Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. diff --git a/lcm/ns/ns_create.py b/lcm/ns/biz/ns_create.py similarity index 100% rename from lcm/ns/ns_create.py rename to lcm/ns/biz/ns_create.py diff --git a/lcm/ns/ns_delete.py b/lcm/ns/biz/ns_delete.py similarity index 100% rename from lcm/ns/ns_delete.py rename to lcm/ns/biz/ns_delete.py diff --git a/lcm/ns/ns_get.py b/lcm/ns/biz/ns_get.py similarity index 100% rename from lcm/ns/ns_get.py rename to lcm/ns/biz/ns_get.py diff --git a/lcm/ns/ns_heal.py b/lcm/ns/biz/ns_heal.py similarity index 98% rename from lcm/ns/ns_heal.py rename to lcm/ns/biz/ns_heal.py index 3efa5884..e1356785 100644 --- a/lcm/ns/ns_heal.py +++ b/lcm/ns/biz/ns_heal.py @@ -11,18 +11,18 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. +import datetime import logging import threading -import traceback -import datetime import time +import traceback from lcm.ns.const import NS_INST_STATUS from lcm.pub.database.models import JobModel, NSInstModel -from lcm.ns.vnfs.heal_vnfs import NFHealService from lcm.pub.exceptions import NSLCMException from lcm.pub.utils.jobutil import JobUtil, JOB_MODEL_STATUS from lcm.pub.utils.values import ignore_case_get +from lcm.ns_vnfs.biz.heal_vnfs import NFHealService JOB_ERROR = 255 logger = logging.getLogger(__name__) diff --git a/lcm/ns/ns_instant.py b/lcm/ns/biz/ns_instant.py similarity index 97% rename from lcm/ns/ns_instant.py rename to lcm/ns/biz/ns_instant.py index 698e77e2..527a35ee 100644 --- a/lcm/ns/ns_instant.py +++ b/lcm/ns/biz/ns_instant.py @@ -79,7 +79,7 @@ class InstantNSService(object): # start params_vnf = [] plan_dict = json.JSONDecoder().decode(dst_plan) - for vnf in ignore_case_get(plan_dict, "vnfs"): + for vnf in ignore_case_get(plan_dict, "ns_vnfs"): vnfd_id = vnf['properties']['id'] vnfm_type = vnf['properties'].get("nf_type", "undefined") vimid = self.get_vnf_vim_id(vim_id, location_constraints, vnfd_id) @@ -202,11 +202,11 @@ class InstantNSService(object): @staticmethod def set_vl_vim_id(vim_id, location_constraints, plan_dict): - if "vls" not in plan_dict: + if "ns_vls" not in plan_dict: logger.debug("No vl is found in nsd.") return vl_vnf = {} - for vnf in ignore_case_get(plan_dict, "vnfs"): + for vnf in ignore_case_get(plan_dict, "ns_vnfs"): if "dependencies" in vnf: for depend in vnf["dependencies"]: vl_vnf[depend["vl_id"]] = vnf['properties']['id'] @@ -215,7 +215,7 @@ class InstantNSService(object): if "vnfProfileId" in location: vnfd_id = location["vnfProfileId"] vnf_vim[vnfd_id] = location["locationConstraints"]["vimId"] - for vl in plan_dict["vls"]: + for vl in plan_dict["ns_vls"]: vnfdid = ignore_case_get(vl_vnf, vl["vl_id"]) vimid = ignore_case_get(vnf_vim, vnfdid) if not vimid: @@ -229,7 +229,7 @@ class InstantNSService(object): @staticmethod def get_model_count(context): data = json.JSONDecoder().decode(context) - vls = len(data.get('vls', [])) + vls = len(data.get('ns_vls', [])) sfcs = len(data.get('fps', [])) - vnfs = len(data.get('vnfs', [])) + vnfs = len(data.get('ns_vnfs', [])) return {'vlCount': str(vls), 'sfcCount': str(sfcs), 'vnfCount': str(vnfs)} diff --git a/lcm/ns/ns_manual_scale.py b/lcm/ns/biz/ns_manual_scale.py similarity index 97% rename from lcm/ns/ns_manual_scale.py rename to lcm/ns/biz/ns_manual_scale.py index 5bcee526..e7121461 100644 --- a/lcm/ns/ns_manual_scale.py +++ b/lcm/ns/biz/ns_manual_scale.py @@ -17,13 +17,13 @@ import threading import time import traceback +from lcm.ns.biz.scaleaspect import get_scale_vnf_data_info_list from lcm.ns.const import NS_INST_STATUS -from lcm.ns.vnfs.scale_vnfs import NFManualScaleService from lcm.pub.database.models import JobModel, NSInstModel from lcm.pub.exceptions import NSLCMException from lcm.pub.utils.jobutil import JobUtil, JOB_MODEL_STATUS from lcm.pub.utils.values import ignore_case_get -from lcm.ns.scaleaspect import get_scale_vnf_data_info_list +from lcm.ns_vnfs.biz.scale_vnfs import NFManualScaleService JOB_ERROR = 255 SCALE_TYPE = ("SCALE_NS", "SCALE_VNF") diff --git a/lcm/ns/ns_terminate.py b/lcm/ns/biz/ns_terminate.py similarity index 100% rename from lcm/ns/ns_terminate.py rename to lcm/ns/biz/ns_terminate.py diff --git a/lcm/ns/scaleaspect.py b/lcm/ns/biz/scaleaspect.py similarity index 99% rename from lcm/ns/scaleaspect.py rename to lcm/ns/biz/scaleaspect.py index c70d5fd7..0d6a0338 100644 --- a/lcm/ns/scaleaspect.py +++ b/lcm/ns/biz/scaleaspect.py @@ -12,15 +12,15 @@ # See the License for the specific language governing permissions and # limitations under the License. +import copy import json import logging import os -import copy -from lcm.pub.database.models import NfInstModel + from lcm.pub.database.models import NSInstModel -from lcm.ns.vnfs.const import VNF_STATUS +from lcm.pub.database.models import NfInstModel from lcm.pub.utils.values import ignore_case_get - +from lcm.ns_vnfs.const import VNF_STATUS logger = logging.getLogger(__name__) SCALE_TYPE = ("SCALE_NS", "SCALE_VNF") diff --git a/lcm/ns/serializers/__init__.py b/lcm/ns/serializers/__init__.py new file mode 100644 index 00000000..ca9a1945 --- /dev/null +++ b/lcm/ns/serializers/__init__.py @@ -0,0 +1,13 @@ +# Copyright 2018 ZTE Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. diff --git a/lcm/ns/serializers.py b/lcm/ns/serializers/ns_serializers.py similarity index 100% rename from lcm/ns/serializers.py rename to lcm/ns/serializers/ns_serializers.py diff --git a/lcm/ns/tests/test_ns_create.py b/lcm/ns/tests/test_ns_create.py index adddb47f..db14da3c 100644 --- a/lcm/ns/tests/test_ns_create.py +++ b/lcm/ns/tests/test_ns_create.py @@ -19,7 +19,7 @@ from django.test import TestCase, Client from rest_framework import status from rest_framework.test import APIClient -from lcm.ns.ns_create import CreateNSService +from lcm.ns.biz.ns_create import CreateNSService from lcm.pub.database.models import NSInstModel from lcm.pub.exceptions import NSLCMException from lcm.pub.utils import restcall diff --git a/lcm/ns/tests/test_ns_heal.py b/lcm/ns/tests/test_ns_heal.py index de810503..72d51f96 100644 --- a/lcm/ns/tests/test_ns_heal.py +++ b/lcm/ns/tests/test_ns_heal.py @@ -12,18 +12,19 @@ # See the License for the specific language governing permissions and # limitations under the License. -import mock import json -from rest_framework import status -from django.test import TestCase +import mock from django.test import Client -from lcm.pub.database.models import NSInstModel, NfInstModel -from lcm.pub.utils.jobutil import JobUtil, JOB_TYPE +from django.test import TestCase +from rest_framework import status + +from lcm.ns.biz.ns_heal import NSHealService from lcm.ns.const import NS_INST_STATUS +from lcm.pub.database.models import NSInstModel, NfInstModel from lcm.pub.exceptions import NSLCMException -from lcm.ns.ns_heal import NSHealService -from lcm.ns.vnfs.heal_vnfs import NFHealService +from lcm.pub.utils.jobutil import JobUtil, JOB_TYPE +from lcm.ns_vnfs.biz.heal_vnfs import NFHealService class TestHealNsViews(TestCase): diff --git a/lcm/ns/tests/test_ns_instant.py b/lcm/ns/tests/test_ns_instant.py index 7034b703..d5ced462 100644 --- a/lcm/ns/tests/test_ns_instant.py +++ b/lcm/ns/tests/test_ns_instant.py @@ -12,15 +12,16 @@ # See the License for the specific language governing permissions and # limitations under the License. -from rest_framework import status +import json + +import mock from django.test import TestCase +from rest_framework import status from rest_framework.test import APIClient -import mock -import json +from lcm.ns.biz.ns_instant import BuildInWorkflowThread +from lcm.ns.biz.ns_instant import InstantNSService from lcm.pub.database.models import NSInstModel -from lcm.ns.ns_instant import InstantNSService -from lcm.ns.ns_instant import BuildInWorkflowThread from lcm.pub.utils import restcall @@ -42,7 +43,7 @@ class TestNsInstant(TestCase): } self.nsd_model = json.dumps({ "model": json.dumps({ - "vnfs": [{ + "ns_vnfs": [{ "vnf_id": "vnf1", "properties": { "id": "vnfd1", @@ -52,14 +53,14 @@ class TestNsInstant(TestCase): "vl_id": "5" }] }], - "vls": [{ + "ns_vls": [{ "vl_id": "5", "properties": {} }] }) }) self.updated_nsd_model = { - "vnfs": [{ + "ns_vnfs": [{ "dependencies": [{ "vl_id": "5" }], @@ -69,7 +70,7 @@ class TestNsInstant(TestCase): "id": "vnfd1" } }], - "vls": [{ + "ns_vls": [{ "vl_id": "5", "properties": { "location_info": { diff --git a/lcm/ns/tests/test_ns_manual_scale.py b/lcm/ns/tests/test_ns_manual_scale.py index aff180fd..4d32d98e 100644 --- a/lcm/ns/tests/test_ns_manual_scale.py +++ b/lcm/ns/tests/test_ns_manual_scale.py @@ -12,21 +12,22 @@ # See the License for the specific language governing permissions and # limitations under the License. -import uuid import os +import uuid + import mock from django.test import Client from django.test import TestCase +from lcm.ns.biz.scaleaspect import get_json_data from rest_framework import status + +from lcm.ns.biz.ns_manual_scale import NSManualScaleService from lcm.ns.const import NS_INST_STATUS -from lcm.ns.ns_manual_scale import NSManualScaleService from lcm.pub.database.models import NSInstModel, JobModel, NfInstModel from lcm.pub.exceptions import NSLCMException +from lcm.pub.msapi import catalog from lcm.pub.utils import restcall from lcm.pub.utils.jobutil import JobUtil, JOB_TYPE, JOB_MODEL_STATUS -from lcm.pub.msapi import catalog -from lcm.ns.scaleaspect import get_json_data - SCALING_JSON = { "scale_options": [ diff --git a/lcm/ns/tests/test_scaleaspect.py b/lcm/ns/tests/test_scaleaspect.py index 401d249b..a235c9d3 100644 --- a/lcm/ns/tests/test_scaleaspect.py +++ b/lcm/ns/tests/test_scaleaspect.py @@ -12,12 +12,14 @@ # See the License for the specific language governing permissions and # limitations under the License. +import os + from django.test import TestCase -from lcm.ns.scaleaspect import get_json_data -from lcm.pub.database.models import NfInstModel + +from lcm.ns.biz.scaleaspect import get_json_data from lcm.pub.database.models import NSInstModel +from lcm.pub.database.models import NfInstModel from lcm.pub.utils.timeutil import now_time -import os class TestScaleAspect(TestCase): diff --git a/lcm/ns/tests/tests_ns_terminate.py b/lcm/ns/tests/tests_ns_terminate.py index d7091882..774fd609 100644 --- a/lcm/ns/tests/tests_ns_terminate.py +++ b/lcm/ns/tests/tests_ns_terminate.py @@ -18,10 +18,10 @@ import mock from django.test import TestCase, Client from rest_framework import status +from lcm.ns.biz.ns_terminate import TerminateNsService from lcm.pub.database.models import NfInstModel, NSInstModel from lcm.pub.utils import restcall from lcm.pub.utils.jobutil import JOB_MODEL_STATUS -from lcm.ns.ns_terminate import TerminateNsService from lcm.pub.utils.jobutil import JobUtil, JOB_TYPE @@ -66,11 +66,11 @@ class TestTerminateNsViews(TestCase): job_id = JobUtil.create_job("VNF", JOB_TYPE.TERMINATE_VNF, self.nf_inst_id) mock_vals = { - "/api/nslcm/v1/ns/vls/1": + "/api/nslcm/v1/ns/ns_vls/1": [0, json.JSONEncoder().encode({"jobId": self.job_id}), '200'], - "/api/nslcm/v1/ns/sfcs/1": + "/api/nslcm/v1/ns/ns_sfcs/1": [0, json.JSONEncoder().encode({"jobId": self.job_id}), '200'], - "/api/nslcm/v1/ns/vnfs/1": + "/api/nslcm/v1/ns/ns_vnfs/1": [0, json.JSONEncoder().encode({}), '200'], "/api/ztevnfmdriver/v1/jobs/" + self.job_id + "&responseId=0": [0, json.JSONEncoder().encode({"jobid": self.job_id, diff --git a/lcm/ns/urls.py b/lcm/ns/urls.py index 6fa06587..eff23ac7 100644 --- a/lcm/ns/urls.py +++ b/lcm/ns/urls.py @@ -14,10 +14,12 @@ from django.conf.urls import url from rest_framework.urlpatterns import format_suffix_patterns -from lcm.ns.views import CreateNSView, NSInstView, TerminateNSView, NSDetailView, NSInstPostDealView, \ +from lcm.ns.views.views import CreateNSView, NSInstView, TerminateNSView, NSDetailView, NSInstPostDealView, \ NSManualScaleView, NSHealView urlpatterns = [ + # API will be deprecated in the future release + url(r'^api/nslcm/v1/ns$', CreateNSView.as_view()), url(r'^api/nslcm/v1/ns/(?P[0-9a-zA-Z_-]+)/instantiate$', NSInstView.as_view()), url(r'^api/nslcm/v1/ns/(?P[0-9a-zA-Z_-]+)/terminate$', TerminateNSView.as_view()), @@ -25,6 +27,9 @@ urlpatterns = [ url(r'^api/nslcm/v1/ns/(?P[0-9a-zA-Z_-]+)/postdeal$', NSInstPostDealView.as_view()), url(r'^api/nslcm/v1/ns/(?P[0-9a-zA-Z_-]+)/scale$', NSManualScaleView.as_view()), url(r'^api/nslcm/v1/ns/(?P[0-9a-zA-Z_-]+)/heal$', NSHealView.as_view()) + + # SOL005 URL API definition TODO + ] urlpatterns = format_suffix_patterns(urlpatterns) diff --git a/lcm/ns/views/__init__.py b/lcm/ns/views/__init__.py new file mode 100644 index 00000000..ca9a1945 --- /dev/null +++ b/lcm/ns/views/__init__.py @@ -0,0 +1,13 @@ +# Copyright 2018 ZTE Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. diff --git a/lcm/ns/views.py b/lcm/ns/views/views.py similarity index 93% rename from lcm/ns/views.py rename to lcm/ns/views/views.py index 11790e14..f76aa2b8 100644 --- a/lcm/ns/views.py +++ b/lcm/ns/views/views.py @@ -15,31 +15,31 @@ import json import logging import traceback +from drf_yasg.utils import swagger_auto_schema +from lcm.ns.biz.ns_create import CreateNSService +from lcm.ns.biz.ns_get import GetNSInfoService +from lcm.ns.biz.ns_heal import NSHealService +from lcm.ns.biz.ns_instant import InstantNSService +from lcm.ns.biz.ns_manual_scale import NSManualScaleService +from lcm.ns.biz.ns_terminate import TerminateNsService from rest_framework import status from rest_framework.response import Response from rest_framework.views import APIView -from drf_yasg.utils import swagger_auto_schema -from lcm.ns.ns_create import CreateNSService -from lcm.ns.ns_delete import DeleteNsService -from lcm.ns.ns_get import GetNSInfoService -from lcm.ns.ns_heal import NSHealService -from lcm.ns.ns_instant import InstantNSService -from lcm.ns.ns_manual_scale import NSManualScaleService -from lcm.ns.ns_terminate import TerminateNsService +from lcm.ns.biz.ns_delete import DeleteNsService +from lcm.ns.serializers.ns_serializers import CreateNsReqSerializer, CreateNsRespSerializer +from lcm.ns.serializers.ns_serializers import HealNsReqSerializer +from lcm.ns.serializers.ns_serializers import InstNsPostDealReqSerializer +from lcm.ns.serializers.ns_serializers import InstantNsReqSerializer +from lcm.ns.serializers.ns_serializers import ManualScaleNsReqSerializer +from lcm.ns.serializers.ns_serializers import NsOperateJobSerializer +from lcm.ns.serializers.ns_serializers import QueryNsRespSerializer +from lcm.ns.serializers.ns_serializers import TerminateNsReqSerializer from lcm.pub.database.models import NSInstModel, ServiceBaseInfoModel +from lcm.pub.exceptions import NSLCMException from lcm.pub.utils.jobutil import JobUtil, JOB_TYPE from lcm.pub.utils.restcall import req_by_msb from lcm.pub.utils.values import ignore_case_get -from lcm.ns.serializers import CreateNsReqSerializer, CreateNsRespSerializer -from lcm.ns.serializers import QueryNsRespSerializer -from lcm.ns.serializers import NsOperateJobSerializer -from lcm.ns.serializers import InstantNsReqSerializer -from lcm.ns.serializers import TerminateNsReqSerializer -from lcm.ns.serializers import HealNsReqSerializer -from lcm.ns.serializers import InstNsPostDealReqSerializer -from lcm.ns.serializers import ManualScaleNsReqSerializer -from lcm.pub.exceptions import NSLCMException logger = logging.getLogger(__name__) diff --git a/lcm/ns/vls/__init__.py b/lcm/ns/vls/__init__.py deleted file mode 100644 index 5580cc3d..00000000 --- a/lcm/ns/vls/__init__.py +++ /dev/null @@ -1,13 +0,0 @@ -# Copyright 2016 ZTE Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. diff --git a/lcm/ns/vnfs/__init__.py b/lcm/ns/vnfs/__init__.py deleted file mode 100644 index 5580cc3d..00000000 --- a/lcm/ns/vnfs/__init__.py +++ /dev/null @@ -1,13 +0,0 @@ -# Copyright 2016 ZTE Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. diff --git a/lcm/ns/sfcs/__init__.py b/lcm/ns_sfcs/__init__.py similarity index 100% rename from lcm/ns/sfcs/__init__.py rename to lcm/ns_sfcs/__init__.py diff --git a/lcm/ns_sfcs/biz/__init__.py b/lcm/ns_sfcs/biz/__init__.py new file mode 100644 index 00000000..ca9a1945 --- /dev/null +++ b/lcm/ns_sfcs/biz/__init__.py @@ -0,0 +1,13 @@ +# Copyright 2018 ZTE Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. diff --git a/lcm/ns/sfcs/create_flowcla.py b/lcm/ns_sfcs/biz/create_flowcla.py similarity index 98% rename from lcm/ns/sfcs/create_flowcla.py rename to lcm/ns_sfcs/biz/create_flowcla.py index 214f2d99..a0e95646 100644 --- a/lcm/ns/sfcs/create_flowcla.py +++ b/lcm/ns_sfcs/biz/create_flowcla.py @@ -15,10 +15,10 @@ import logging -from lcm.ns.sfcs.utils import get_fp_model_by_fp_inst_id from lcm.pub.database.models import FPInstModel from lcm.pub.msapi import extsys from lcm.pub.msapi import sdncdriver +from lcm.ns_sfcs.biz.utils import get_fp_model_by_fp_inst_id logger = logging.getLogger(__name__) diff --git a/lcm/ns/sfcs/create_port_chain.py b/lcm/ns_sfcs/biz/create_port_chain.py similarity index 100% rename from lcm/ns/sfcs/create_port_chain.py rename to lcm/ns_sfcs/biz/create_port_chain.py diff --git a/lcm/ns/sfcs/create_portpairgp.py b/lcm/ns_sfcs/biz/create_portpairgp.py similarity index 99% rename from lcm/ns/sfcs/create_portpairgp.py rename to lcm/ns_sfcs/biz/create_portpairgp.py index b42cd900..532deb62 100644 --- a/lcm/ns/sfcs/create_portpairgp.py +++ b/lcm/ns_sfcs/biz/create_portpairgp.py @@ -16,10 +16,10 @@ import json import logging -from lcm.ns.sfcs.utils import get_fp_model_by_fp_inst_id from lcm.pub.database.models import FPInstModel, NfInstModel, CPInstModel, PortInstModel, VNFCInstModel from lcm.pub.msapi import extsys from lcm.pub.msapi import sdncdriver +from lcm.ns_sfcs.biz.utils import get_fp_model_by_fp_inst_id logger = logging.getLogger(__name__) @@ -261,7 +261,7 @@ class CreatePortPairGroup(object): return cp_model_info def get_vnf_model_info_by_vnf_id(self, vnfid): - for vnf_model_info in self.ns_model_data["vnfs"]: + for vnf_model_info in self.ns_model_data["ns_vnfs"]: if (vnf_model_info["vnf_id"] == vnfid): return vnf_model_info diff --git a/lcm/ns/sfcs/create_sfc_worker.py b/lcm/ns_sfcs/biz/create_sfc_worker.py similarity index 90% rename from lcm/ns/sfcs/create_sfc_worker.py rename to lcm/ns_sfcs/biz/create_sfc_worker.py index e0c65d61..04216eea 100644 --- a/lcm/ns/sfcs/create_sfc_worker.py +++ b/lcm/ns_sfcs/biz/create_sfc_worker.py @@ -17,12 +17,13 @@ import logging import traceback from threading import Thread -from lcm.ns.sfcs.create_flowcla import CreateFlowClassifier -from lcm.ns.sfcs.create_port_chain import CreatePortChain -from lcm.ns.sfcs.create_portpairgp import CreatePortPairGroup -from lcm.ns.sfcs.utils import update_fp_status +from lcm.ns_sfcs.biz.create_flowcla import CreateFlowClassifier +from lcm.ns_sfcs.biz.create_port_chain import CreatePortChain +from lcm.ns_sfcs.biz.create_portpairgp import CreatePortPairGroup + from lcm.pub.exceptions import NSLCMException from lcm.pub.utils.jobutil import JobUtil +from lcm.ns_sfcs.biz.utils import update_fp_status logger = logging.getLogger(__name__) diff --git a/lcm/ns/sfcs/delete_sfcs.py b/lcm/ns_sfcs/biz/delete_sfcs.py similarity index 100% rename from lcm/ns/sfcs/delete_sfcs.py rename to lcm/ns_sfcs/biz/delete_sfcs.py diff --git a/lcm/ns/sfcs/get_sfcs.py b/lcm/ns_sfcs/biz/get_sfcs.py similarity index 100% rename from lcm/ns/sfcs/get_sfcs.py rename to lcm/ns_sfcs/biz/get_sfcs.py diff --git a/lcm/ns/sfcs/sfc_instance.py b/lcm/ns_sfcs/biz/sfc_instance.py similarity index 100% rename from lcm/ns/sfcs/sfc_instance.py rename to lcm/ns_sfcs/biz/sfc_instance.py diff --git a/lcm/ns/sfcs/utils.py b/lcm/ns_sfcs/biz/utils.py similarity index 100% rename from lcm/ns/sfcs/utils.py rename to lcm/ns_sfcs/biz/utils.py diff --git a/lcm/ns_sfcs/serializers/__init__.py b/lcm/ns_sfcs/serializers/__init__.py new file mode 100644 index 00000000..ca9a1945 --- /dev/null +++ b/lcm/ns_sfcs/serializers/__init__.py @@ -0,0 +1,13 @@ +# Copyright 2018 ZTE Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. diff --git a/lcm/ns/sfcs/serializers.py b/lcm/ns_sfcs/serializers/serializers.py similarity index 100% rename from lcm/ns/sfcs/serializers.py rename to lcm/ns_sfcs/serializers/serializers.py diff --git a/lcm/ns/tests/vnfs/__init__.py b/lcm/ns_sfcs/tests/__init__.py similarity index 97% rename from lcm/ns/tests/vnfs/__init__.py rename to lcm/ns_sfcs/tests/__init__.py index 5580cc3d..05135e79 100644 --- a/lcm/ns/tests/vnfs/__init__.py +++ b/lcm/ns_sfcs/tests/__init__.py @@ -1,13 +1,13 @@ -# Copyright 2016 ZTE Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. +# Copyright 2016 ZTE Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. diff --git a/lcm/ns/tests/sfcs/test_create_flow_classifier.py b/lcm/ns_sfcs/tests/test_create_flow_classifier.py similarity index 100% rename from lcm/ns/tests/sfcs/test_create_flow_classifier.py rename to lcm/ns_sfcs/tests/test_create_flow_classifier.py diff --git a/lcm/ns/tests/sfcs/test_create_port_chain.py b/lcm/ns_sfcs/tests/test_create_port_chain.py similarity index 100% rename from lcm/ns/tests/sfcs/test_create_port_chain.py rename to lcm/ns_sfcs/tests/test_create_port_chain.py diff --git a/lcm/ns/tests/sfcs/test_create_port_pair_group.py b/lcm/ns_sfcs/tests/test_create_port_pair_group.py similarity index 100% rename from lcm/ns/tests/sfcs/test_create_port_pair_group.py rename to lcm/ns_sfcs/tests/test_create_port_pair_group.py diff --git a/lcm/ns/tests/sfcs/test_data.py b/lcm/ns_sfcs/tests/test_data.py similarity index 98% rename from lcm/ns/tests/sfcs/test_data.py rename to lcm/ns_sfcs/tests/test_data.py index 72f0b430..246b570a 100644 --- a/lcm/ns/tests/sfcs/test_data.py +++ b/lcm/ns_sfcs/tests/test_data.py @@ -26,7 +26,7 @@ nsd_model = { "param2": "22", }, - "vnfs": [ + "ns_vnfs": [ { "type": "tosca.nodes.nfv.ext.VNF.FireWall", "vnf_id": "vnf_1", @@ -129,7 +129,7 @@ nsd_model = { } ], - "vls": [ + "ns_vls": [ { "vl_id": "vldId1", "description": "", @@ -520,7 +520,7 @@ vnfd_model_dict1 = { 'dependencies': [ ], - 'vls': [ + 'ns_vls': [ ], 'cps': [ @@ -571,7 +571,7 @@ vnfd_model_dict1 = { 'dependencies': [ ], - 'vls': [ + 'ns_vls': [ ], 'cps': [ @@ -622,7 +622,7 @@ vnfd_model_dict1 = { 'dependencies': [ ], - 'vls': [ + 'ns_vls': [ ], 'cps': [ @@ -673,7 +673,7 @@ vnfd_model_dict1 = { 'dependencies': [ ], - 'vls': [ + 'ns_vls': [ ], 'cps': [ @@ -724,7 +724,7 @@ vnfd_model_dict1 = { 'dependencies': [ ], - 'vls': [ + 'ns_vls': [ ], 'cps': [ @@ -775,7 +775,7 @@ vnfd_model_dict1 = { 'dependencies': [ ], - 'vls': [ + 'ns_vls': [ ], 'cps': [ @@ -826,7 +826,7 @@ vnfd_model_dict1 = { 'dependencies': [ ], - 'vls': [ + 'ns_vls': [ ], 'cps': [ @@ -905,7 +905,7 @@ vnfd_model_dict1 = { 'image_file_id': u'sss' } ], - 'vls': [ + 'ns_vls': [ ], 'cps': [ @@ -974,7 +974,7 @@ vnfd_model_dict2 = { 'dependencies': [ ], - 'vls': [ + 'ns_vls': [ ], 'cps': [ @@ -1025,7 +1025,7 @@ vnfd_model_dict2 = { 'dependencies': [ ], - 'vls': [ + 'ns_vls': [ ], 'cps': [ @@ -1076,7 +1076,7 @@ vnfd_model_dict2 = { 'dependencies': [ ], - 'vls': [ + 'ns_vls': [ ], 'cps': [ @@ -1127,7 +1127,7 @@ vnfd_model_dict2 = { 'dependencies': [ ], - 'vls': [ + 'ns_vls': [ ], 'cps': [ @@ -1178,7 +1178,7 @@ vnfd_model_dict2 = { 'dependencies': [ ], - 'vls': [ + 'ns_vls': [ ], 'cps': [ @@ -1229,7 +1229,7 @@ vnfd_model_dict2 = { 'dependencies': [ ], - 'vls': [ + 'ns_vls': [ ], 'cps': [ @@ -1280,7 +1280,7 @@ vnfd_model_dict2 = { 'dependencies': [ ], - 'vls': [ + 'ns_vls': [ ], 'cps': [ @@ -1359,7 +1359,7 @@ vnfd_model_dict2 = { 'image_file_id': u'sss' } ], - 'vls': [ + 'ns_vls': [ ], 'cps': [ diff --git a/lcm/ns/tests/sfcs/test_sfc.py b/lcm/ns_sfcs/tests/test_sfc.py similarity index 99% rename from lcm/ns/tests/sfcs/test_sfc.py rename to lcm/ns_sfcs/tests/test_sfc.py index 9eeff0dc..d4c35a58 100644 --- a/lcm/ns/tests/sfcs/test_sfc.py +++ b/lcm/ns_sfcs/tests/test_sfc.py @@ -110,7 +110,7 @@ class TestSfc(TestCase): # 'fpinstid': str(uuid.uuid4()), # "sdnControllerId": "sdnControllerId_1" # } - # resp = self.client.post("/api/nslcm/v1/ns/sfcs", data, format='json') + # resp = self.client.post("/api/nslcm/v1/ns/ns_sfcs", data, format='json') # self.assertEqual(resp.status_code, status.HTTP_200_OK, resp.data) def update_fp_inst_data(self): @@ -1166,7 +1166,7 @@ nsd_model = { "param2": "22", }, - "vnfs": [ + "ns_vnfs": [ { "type": "tosca.nodes.nfv.ext.VNF.FireWall", "vnf_id": "vnf_1", diff --git a/lcm/ns/tests/sfcs/test_sfc_instance.py b/lcm/ns_sfcs/tests/test_sfc_instance.py similarity index 100% rename from lcm/ns/tests/sfcs/test_sfc_instance.py rename to lcm/ns_sfcs/tests/test_sfc_instance.py diff --git a/lcm/ns/tests/sfcs/test_sfcdetailview.py b/lcm/ns_sfcs/tests/test_sfcdetailview.py similarity index 97% rename from lcm/ns/tests/sfcs/test_sfcdetailview.py rename to lcm/ns_sfcs/tests/test_sfcdetailview.py index 8059007c..72ae3ef3 100644 --- a/lcm/ns/tests/sfcs/test_sfcdetailview.py +++ b/lcm/ns_sfcs/tests/test_sfcdetailview.py @@ -65,7 +65,7 @@ class TestSfcDetailViews(TestCase): def test_sfc_get_failed(self): sfc_inst_id = "10" - response = self.client.get("/api/nslcm/v1/ns/sfcs/%s" % sfc_inst_id) + response = self.client.get("/api/nslcm/v1/ns/ns_sfcs/%s" % sfc_inst_id) self.assertEqual(status.HTTP_404_NOT_FOUND, response.status_code) def test_sfc_get_success(self): diff --git a/lcm/ns/tests/sfcs/tests.py b/lcm/ns_sfcs/tests/tests.py similarity index 98% rename from lcm/ns/tests/sfcs/tests.py rename to lcm/ns_sfcs/tests/tests.py index 8bf813c0..45720b60 100644 --- a/lcm/ns/tests/sfcs/tests.py +++ b/lcm/ns_sfcs/tests/tests.py @@ -101,5 +101,5 @@ class TestSfcDetailViews(TestCase): 'sfcName': "xxx"} self.assertEqual(expect_resp_data, response.data) - response = self.client.get("/api/nslcm/v1/ns/sfcs/%s" % "notExist") + response = self.client.get("/api/nslcm/v1/ns/ns_sfcs/%s" % "notExist") self.assertEqual(status.HTTP_404_NOT_FOUND, response.status_code) diff --git a/lcm/ns/sfcs/urls.py b/lcm/ns_sfcs/urls.py similarity index 88% rename from lcm/ns/sfcs/urls.py rename to lcm/ns_sfcs/urls.py index cfca2c30..827979bf 100644 --- a/lcm/ns/sfcs/urls.py +++ b/lcm/ns_sfcs/urls.py @@ -12,10 +12,10 @@ # See the License for the specific language governing permissions and # limitations under the License. from django.conf.urls import url +from lcm.ns_sfcs.views.detail_views import SfcDetailView from rest_framework.urlpatterns import format_suffix_patterns -from lcm.ns.sfcs.detail_views import SfcDetailView -from lcm.ns.sfcs.views import SfcView, SfcInstanceView, PortPairGpView, FlowClaView, PortChainView +from lcm.ns_sfcs.views.views import SfcView, SfcInstanceView, PortPairGpView, FlowClaView, PortChainView urlpatterns = [ url(r'^api/nslcm/v1/ns/sfcs$', SfcView.as_view()), diff --git a/lcm/ns_sfcs/views/__init__.py b/lcm/ns_sfcs/views/__init__.py new file mode 100644 index 00000000..ca9a1945 --- /dev/null +++ b/lcm/ns_sfcs/views/__init__.py @@ -0,0 +1,13 @@ +# Copyright 2018 ZTE Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. diff --git a/lcm/ns/sfcs/detail_views.py b/lcm/ns_sfcs/views/detail_views.py similarity index 91% rename from lcm/ns/sfcs/detail_views.py rename to lcm/ns_sfcs/views/detail_views.py index 6d92f39d..e32831c0 100644 --- a/lcm/ns/sfcs/detail_views.py +++ b/lcm/ns_sfcs/views/detail_views.py @@ -13,15 +13,15 @@ # limitations under the License. import logging +from drf_yasg.utils import swagger_auto_schema +from lcm.ns_sfcs.biz.get_sfcs import GetSfcs +from lcm.ns_sfcs.serializers.serializers import DeleteSfcRespSerializer +from lcm.ns_sfcs.serializers.serializers import GetSfcRespSerializer from rest_framework import status from rest_framework.response import Response from rest_framework.views import APIView -from drf_yasg.utils import swagger_auto_schema -from lcm.ns.sfcs.delete_sfcs import DeleteSfcs -from lcm.ns.sfcs.get_sfcs import GetSfcs -from lcm.ns.sfcs.serializers import GetSfcRespSerializer -from lcm.ns.sfcs.serializers import DeleteSfcRespSerializer +from lcm.ns_sfcs.biz.delete_sfcs import DeleteSfcs logger = logging.getLogger(__name__) diff --git a/lcm/ns/sfcs/views.py b/lcm/ns_sfcs/views/views.py similarity index 89% rename from lcm/ns/sfcs/views.py rename to lcm/ns_sfcs/views/views.py index 4403ffe6..67257001 100644 --- a/lcm/ns/sfcs/views.py +++ b/lcm/ns_sfcs/views/views.py @@ -15,26 +15,26 @@ import json import logging +import time import traceback import uuid -import time +from drf_yasg.utils import swagger_auto_schema +from lcm.ns_sfcs.biz.create_flowcla import CreateFlowClassifier +from lcm.ns_sfcs.biz.create_port_chain import CreatePortChain +from lcm.ns_sfcs.biz.create_portpairgp import CreatePortPairGroup +from lcm.ns_sfcs.biz.create_sfc_worker import CreateSfcWorker +from lcm.ns_sfcs.serializers.serializers import CreateFlowClaSerializer +from lcm.ns_sfcs.serializers.serializers import CreatePortChainSerializer +from lcm.ns_sfcs.serializers.serializers import CreatePortPairGpSerializer +from lcm.ns_sfcs.serializers.serializers import CreateSfcInstReqSerializer, CreateSfcInstRespSerializer +from lcm.ns_sfcs.serializers.serializers import CreateSfcReqSerializer, CreateSfcRespSerializer +from lcm.ns_sfcs.biz.sfc_instance import SfcInstance from rest_framework import status from rest_framework.response import Response from rest_framework.views import APIView -from drf_yasg.utils import swagger_auto_schema -from lcm.ns.sfcs.create_flowcla import CreateFlowClassifier -from lcm.ns.sfcs.create_port_chain import CreatePortChain -from lcm.ns.sfcs.create_portpairgp import CreatePortPairGroup -from lcm.ns.sfcs.create_sfc_worker import CreateSfcWorker -from lcm.ns.sfcs.sfc_instance import SfcInstance -from lcm.ns.sfcs.utils import get_fp_id, ignorcase_get -from lcm.ns.sfcs.serializers import CreateSfcInstReqSerializer, CreateSfcInstRespSerializer -from lcm.ns.sfcs.serializers import CreateSfcReqSerializer, CreateSfcRespSerializer -from lcm.ns.sfcs.serializers import CreatePortPairGpSerializer -from lcm.ns.sfcs.serializers import CreateFlowClaSerializer -from lcm.ns.sfcs.serializers import CreatePortChainSerializer +from lcm.ns_sfcs.biz.utils import get_fp_id, ignorcase_get logger = logging.getLogger(__name__) diff --git a/lcm/ns/tests/sfcs/__init__.py b/lcm/ns_vls/__init__.py similarity index 100% rename from lcm/ns/tests/sfcs/__init__.py rename to lcm/ns_vls/__init__.py diff --git a/lcm/ns_vls/biz/__init__.py b/lcm/ns_vls/biz/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/lcm/ns/vls/create_vls.py b/lcm/ns_vls/biz/create_vls.py similarity index 99% rename from lcm/ns/vls/create_vls.py rename to lcm/ns_vls/biz/create_vls.py index 06ef78b4..f23ca4dd 100644 --- a/lcm/ns/vls/create_vls.py +++ b/lcm/ns_vls/biz/create_vls.py @@ -74,7 +74,7 @@ class CreateVls(object): def get_data(self): if isinstance(self.context, (unicode, str)): self.context = json.JSONDecoder().decode(self.context) - vl_info = self.get_vl_info(ignore_case_get(self.context, "vls")) + vl_info = self.get_vl_info(ignore_case_get(self.context, "ns_vls")) self.vld_id = ignore_case_get(vl_info, "vl_id") self.description = ignore_case_get(vl_info, "description") self.vl_properties = ignore_case_get(vl_info, "properties") diff --git a/lcm/ns/vls/delete_vls.py b/lcm/ns_vls/biz/delete_vls.py similarity index 100% rename from lcm/ns/vls/delete_vls.py rename to lcm/ns_vls/biz/delete_vls.py diff --git a/lcm/ns/vls/get_vls.py b/lcm/ns_vls/biz/get_vls.py similarity index 100% rename from lcm/ns/vls/get_vls.py rename to lcm/ns_vls/biz/get_vls.py diff --git a/lcm/ns_vls/serializers/__init__.py b/lcm/ns_vls/serializers/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/lcm/ns/vls/serializers.py b/lcm/ns_vls/serializers/serializers.py similarity index 100% rename from lcm/ns/vls/serializers.py rename to lcm/ns_vls/serializers/serializers.py diff --git a/lcm/ns_vls/tests/__init__.py b/lcm/ns_vls/tests/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/lcm/ns/tests/vls/tests.py b/lcm/ns_vls/tests/tests.py similarity index 93% rename from lcm/ns/tests/vls/tests.py rename to lcm/ns_vls/tests/tests.py index 28910685..ef670a3d 100644 --- a/lcm/ns/tests/vls/tests.py +++ b/lcm/ns_vls/tests/tests.py @@ -19,10 +19,10 @@ import mock from django.test import TestCase, Client from rest_framework import status -from lcm.ns.tests.vnfs.tests import vim_info from lcm.pub.database.models import VLInstModel, NSInstModel, VNFFGInstModel from lcm.pub.nfvi.vim import vimadaptor from lcm.pub.utils import restcall +from lcm.ns_vnfs.tests.tests import vim_info class TestVlViews(TestCase): @@ -39,8 +39,8 @@ class TestVlViews(TestCase): "end_ip": "190.168.100.100", "gateway_ip": "190.168.100.1", "start_ip": "190.168.100.2", "cidr": "190.168.100.0/24", "mtu": 1500, "network_name": "sub_mnet", "ip_version": 4} self.context = { - "vls": [{"vl_id": self.vl_id_1, "description": "", "properties": properties, "route_external": False}, - {"vl_id": self.vl_id_2, "description": "", "properties": properties, "route_external": False}], + "ns_vls": [{"vl_id": self.vl_id_1, "description": "", "properties": properties, "route_external": False}, + {"vl_id": self.vl_id_2, "description": "", "properties": properties, "route_external": False}], "vnffgs": [{"vnffg_id": self.vnffg_id, "description": "", "properties": {"vendor": "zte", "version": "1.1.2", "number_of_endpoints": 7, "dependent_virtual_link": [self.vl_id_2, self.vl_id_1], @@ -87,7 +87,7 @@ class TestVlViews(TestCase): "nsInstanceId": self.ns_inst_id, "context": json.JSONEncoder().encode(self.context), "vlIndex": vl_id} - response = self.client.post("/api/nslcm/v1/ns/vls", data=req_data) + response = self.client.post("/api/nslcm/v1/ns/ns_vls", data=req_data) self.assertEqual(status.HTTP_201_CREATED, response.status_code) self.assertEqual(0, response.data["result"], response.data) @@ -103,7 +103,7 @@ class TestVlViews(TestCase): mock_uuid4.return_value = '999' mock_req_by_rest.return_value = [0, json.JSONEncoder().encode(vim_info), '200'] mock_create_network.return_value = [1, (1)] - response = self.client.post("/api/nslcm/v1/ns/vls", data=req_data) + response = self.client.post("/api/nslcm/v1/ns/ns_vls", data=req_data) retinfo = {"detail": "vl instantiation failed, detail message: Send post vl request to vim failed."} self.assertEqual(retinfo["detail"], response.data["detail"]) ''' @@ -153,5 +153,5 @@ class TestVlDetailViews(TestCase): expect_resp_data = {'vlId': self.vl_inst_id, 'vlName': self.vl_name, 'vlStatus': "active"} self.assertEqual(expect_resp_data, response.data) - response = self.client.get("/api/nslcm/v1/ns/vls/%s" % "notExist") + response = self.client.get("/api/nslcm/v1/ns/ns_vls/%s" % "notExist") self.assertEqual(status.HTTP_404_NOT_FOUND, response.status_code) diff --git a/lcm/ns/vls/urls.py b/lcm/ns_vls/urls.py similarity index 94% rename from lcm/ns/vls/urls.py rename to lcm/ns_vls/urls.py index 597404d8..281ea148 100644 --- a/lcm/ns/vls/urls.py +++ b/lcm/ns_vls/urls.py @@ -15,7 +15,7 @@ from django.conf.urls import url from rest_framework.urlpatterns import format_suffix_patterns -from lcm.ns.vls.views import VlView, VlDetailView +from lcm.ns_vls.views.views import VlView, VlDetailView urlpatterns = [ url(r'^api/nslcm/v1/ns/vls$', VlView.as_view()), diff --git a/lcm/ns_vls/views/__init__.py b/lcm/ns_vls/views/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/lcm/ns/vls/views.py b/lcm/ns_vls/views/views.py similarity index 90% rename from lcm/ns/vls/views.py rename to lcm/ns_vls/views/views.py index 33b6bb20..ce8c3338 100644 --- a/lcm/ns/vls/views.py +++ b/lcm/ns_vls/views/views.py @@ -12,19 +12,19 @@ # See the License for the specific language governing permissions and # limitations under the License. +import logging + +from drf_yasg.utils import swagger_auto_schema +from lcm.ns_vls.biz.delete_vls import DeleteVls +from lcm.ns_vls.biz.get_vls import GetVls +from lcm.ns_vls.serializers.serializers import CreateVlReqSerializer, CreateVlRespSerializer +from lcm.ns_vls.serializers.serializers import DeleteVlRespSerializer +from lcm.ns_vls.serializers.serializers import GetVlRespSerializer from rest_framework import status from rest_framework.response import Response from rest_framework.views import APIView -from drf_yasg.utils import swagger_auto_schema - -from lcm.ns.vls.create_vls import CreateVls -from lcm.ns.vls.delete_vls import DeleteVls -from lcm.ns.vls.get_vls import GetVls -from lcm.ns.vls.serializers import CreateVlReqSerializer, CreateVlRespSerializer -from lcm.ns.vls.serializers import GetVlRespSerializer -from lcm.ns.vls.serializers import DeleteVlRespSerializer -import logging +from lcm.ns_vls.biz.create_vls import CreateVls logger = logging.getLogger(__name__) diff --git a/lcm/ns/tests/vls/__init__.py b/lcm/ns_vnfs/__init__.py similarity index 100% rename from lcm/ns/tests/vls/__init__.py rename to lcm/ns_vnfs/__init__.py diff --git a/lcm/ns_vnfs/biz/__init__.py b/lcm/ns_vnfs/biz/__init__.py new file mode 100644 index 00000000..ca9a1945 --- /dev/null +++ b/lcm/ns_vnfs/biz/__init__.py @@ -0,0 +1,13 @@ +# Copyright 2018 ZTE Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. diff --git a/lcm/ns/vnfs/create_vnfs.py b/lcm/ns_vnfs/biz/create_vnfs.py similarity index 97% rename from lcm/ns/vnfs/create_vnfs.py rename to lcm/ns_vnfs/biz/create_vnfs.py index 631063fd..ac1847ec 100644 --- a/lcm/ns/vnfs/create_vnfs.py +++ b/lcm/ns_vnfs/biz/create_vnfs.py @@ -18,8 +18,6 @@ import uuid from threading import Thread from lcm.ns.const import OWNER_TYPE -from lcm.ns.vnfs.const import VNF_STATUS, NFVO_VNF_INST_TIMEOUT_SECOND, INST_TYPE, INST_TYPE_NAME -from lcm.ns.vnfs.wait_job import wait_job_finish from lcm.pub.config.config import REPORT_TO_AAI from lcm.pub.database.models import NfInstModel, NSInstModel, VmInstModel, VNFFGInstModel, VLInstModel from lcm.pub.exceptions import NSLCMException @@ -32,6 +30,8 @@ from lcm.pub.utils.jobutil import JOB_MODEL_STATUS, JobUtil, JOB_TYPE from lcm.pub.utils.share_lock import do_biz_with_share_lock from lcm.pub.utils.timeutil import now_time from lcm.pub.utils.values import ignore_case_get +from lcm.ns_vnfs.const import VNF_STATUS, NFVO_VNF_INST_TIMEOUT_SECOND, INST_TYPE, INST_TYPE_NAME +from lcm.ns_vnfs.biz.wait_job import wait_job_finish logger = logging.getLogger(__name__) @@ -109,14 +109,14 @@ class CreateVnfs(Thread): def get_vnfd_id(self): if self.vnfd_id: logger.debug("need not get vnfd_id") - self.nsd_model = {'vnfs': [], 'vls': [], 'vnffgs': []} + self.nsd_model = {'ns_vnfs': [], 'ns_vls': [], 'vnffgs': []} self.vnf_inst_name = self.vnfd_id + str(uuid.uuid4()) self.vnf_inst_name = self.vnf_inst_name[:30] return ns_inst_info = NSInstModel.objects.get(id=self.ns_inst_id) self.ns_inst_name = ns_inst_info.name self.nsd_model = json.loads(ns_inst_info.nsd_model) - for vnf_info in self.nsd_model['vnfs']: + for vnf_info in self.nsd_model['ns_vnfs']: if self.vnf_id == vnf_info['vnf_id']: self.vnfd_id = vnf_info['properties']['id'] if 'name' not in vnf_info['properties']: @@ -138,7 +138,7 @@ class CreateVnfs(Thread): def get_virtual_link_info(self, vnf_id): virtual_link_list, ext_virtual_link = [], [] - for vnf_info in self.nsd_model['vnfs']: + for vnf_info in self.nsd_model['ns_vnfs']: if vnf_info['vnf_id'] != vnf_id: continue for network_info in vnf_info['networks']: @@ -172,7 +172,7 @@ class CreateVnfs(Thread): return "" def get_network_info_of_vl(self, vl_id): - for vnf_info in self.nsd_model['vls']: + for vnf_info in self.nsd_model['ns_vls']: if vnf_info['vl_id'] == vl_id: return vnf_info['properties']['vl_profile']['networkName'], vnf_info['properties']['vl_profile']['initiationParameters']['name'] return '', '' diff --git a/lcm/ns/vnfs/get_vnfs.py b/lcm/ns_vnfs/biz/get_vnfs.py similarity index 100% rename from lcm/ns/vnfs/get_vnfs.py rename to lcm/ns_vnfs/biz/get_vnfs.py diff --git a/lcm/v2/grant_vnf.py b/lcm/ns_vnfs/biz/grant_vnf.py similarity index 100% rename from lcm/v2/grant_vnf.py rename to lcm/ns_vnfs/biz/grant_vnf.py diff --git a/lcm/ns/vnfs/grant_vnfs.py b/lcm/ns_vnfs/biz/grant_vnfs.py similarity index 100% rename from lcm/ns/vnfs/grant_vnfs.py rename to lcm/ns_vnfs/biz/grant_vnfs.py diff --git a/lcm/v2/handle_vnflcmooc_notification.py b/lcm/ns_vnfs/biz/handle_vnflcmooc_notification.py similarity index 99% rename from lcm/v2/handle_vnflcmooc_notification.py rename to lcm/ns_vnfs/biz/handle_vnflcmooc_notification.py index 4b13a246..5e6ebedb 100644 --- a/lcm/v2/handle_vnflcmooc_notification.py +++ b/lcm/ns_vnfs/biz/handle_vnflcmooc_notification.py @@ -12,22 +12,22 @@ # See the License for the specific language governing permissions and # limitations under the License. -import uuid import logging import traceback +import uuid from rest_framework import status from rest_framework.response import Response -from lcm.ns.vnfs.const import INST_TYPE + from lcm.pub.config.config import REPORT_TO_AAI -from lcm.pub.exceptions import NSLCMException from lcm.pub.database.models import VNFCInstModel, VLInstModel, NfInstModel, VmInstModel, PortInstModel, CPInstModel +from lcm.pub.exceptions import NSLCMException from lcm.pub.msapi.aai import create_network_aai, query_network_aai, delete_network_aai, query_vserver_aai, \ delete_vserver_aai -from lcm.pub.utils.values import ignore_case_get -from lcm.pub.msapi.extsys import split_vim_to_owner_region, get_vim_by_id from lcm.pub.msapi.aai import create_vserver_aai - +from lcm.pub.msapi.extsys import split_vim_to_owner_region, get_vim_by_id +from lcm.pub.utils.values import ignore_case_get +from lcm.ns_vnfs.const import INST_TYPE logger = logging.getLogger(__name__) diff --git a/lcm/ns/vnfs/heal_vnfs.py b/lcm/ns_vnfs/biz/heal_vnfs.py similarity index 98% rename from lcm/ns/vnfs/heal_vnfs.py rename to lcm/ns_vnfs/biz/heal_vnfs.py index b9520adc..31dbc966 100644 --- a/lcm/ns/vnfs/heal_vnfs.py +++ b/lcm/ns_vnfs/biz/heal_vnfs.py @@ -17,16 +17,16 @@ import logging import threading import traceback -from lcm.ns.vnfs.const import VNF_STATUS -from lcm.ns.vnfs.wait_job import wait_job_finish +from lcm.pub.config.config import MR_IP +from lcm.pub.config.config import MR_PORT from lcm.pub.database.models import NfInstModel, VNFCInstModel from lcm.pub.exceptions import NSLCMException from lcm.pub.msapi.vnfmdriver import send_nf_heal_request +from lcm.pub.utils import restcall from lcm.pub.utils.jobutil import JobUtil, JOB_TYPE, JOB_MODEL_STATUS from lcm.pub.utils.values import ignore_case_get -from lcm.pub.config.config import MR_IP -from lcm.pub.config.config import MR_PORT -from lcm.pub.utils import restcall +from lcm.ns_vnfs.const import VNF_STATUS +from lcm.ns_vnfs.biz.wait_job import wait_job_finish JOB_ERROR = 255 diff --git a/lcm/ns/vnfs/notify_lcm.py b/lcm/ns_vnfs/biz/notify_lcm.py similarity index 99% rename from lcm/ns/vnfs/notify_lcm.py rename to lcm/ns_vnfs/biz/notify_lcm.py index 62911c58..4f7ac300 100644 --- a/lcm/ns/vnfs/notify_lcm.py +++ b/lcm/ns_vnfs/biz/notify_lcm.py @@ -11,22 +11,22 @@ # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. -import uuid import logging import traceback +import uuid from rest_framework import status from rest_framework.response import Response -from lcm.ns.vnfs.const import INST_TYPE + from lcm.pub.config.config import REPORT_TO_AAI -from lcm.pub.exceptions import NSLCMException from lcm.pub.database.models import VNFCInstModel, VLInstModel, NfInstModel, PortInstModel, CPInstModel, VmInstModel +from lcm.pub.exceptions import NSLCMException from lcm.pub.msapi.aai import create_network_aai, query_network_aai, delete_network_aai, query_vserver_aai, \ delete_vserver_aai -from lcm.pub.utils.values import ignore_case_get -from lcm.pub.msapi.extsys import split_vim_to_owner_region, get_vim_by_id from lcm.pub.msapi.aai import create_vserver_aai - +from lcm.pub.msapi.extsys import split_vim_to_owner_region, get_vim_by_id +from lcm.pub.utils.values import ignore_case_get +from lcm.ns_vnfs.const import INST_TYPE logger = logging.getLogger(__name__) diff --git a/lcm/ns/vnfs/place_vnfs.py b/lcm/ns_vnfs/biz/place_vnfs.py similarity index 100% rename from lcm/ns/vnfs/place_vnfs.py rename to lcm/ns_vnfs/biz/place_vnfs.py diff --git a/lcm/ns/vnfs/scale_vnfs.py b/lcm/ns_vnfs/biz/scale_vnfs.py similarity index 97% rename from lcm/ns/vnfs/scale_vnfs.py rename to lcm/ns_vnfs/biz/scale_vnfs.py index 718813ea..bac181ec 100644 --- a/lcm/ns/vnfs/scale_vnfs.py +++ b/lcm/ns_vnfs/biz/scale_vnfs.py @@ -16,13 +16,13 @@ import logging import threading import traceback -from lcm.ns.vnfs.const import VNF_STATUS -from lcm.ns.vnfs.wait_job import wait_job_finish from lcm.pub.database.models import NfInstModel from lcm.pub.exceptions import NSLCMException from lcm.pub.msapi.vnfmdriver import send_nf_scaling_request from lcm.pub.utils.jobutil import JobUtil, JOB_TYPE, JOB_MODEL_STATUS from lcm.pub.utils.values import ignore_case_get +from lcm.ns_vnfs.const import VNF_STATUS +from lcm.ns_vnfs.biz.wait_job import wait_job_finish JOB_ERROR = 255 SCALE_TYPE = ("SCALE_OUT", "SCALE_IN") diff --git a/lcm/ns/vnfs/terminate_nfs.py b/lcm/ns_vnfs/biz/terminate_nfs.py similarity index 98% rename from lcm/ns/vnfs/terminate_nfs.py rename to lcm/ns_vnfs/biz/terminate_nfs.py index 7db2d7c3..98bc7d20 100644 --- a/lcm/ns/vnfs/terminate_nfs.py +++ b/lcm/ns_vnfs/biz/terminate_nfs.py @@ -12,23 +12,22 @@ # See the License for the specific language governing permissions and # limitations under the License. -import logging -import traceback import json - +import logging import threading +import traceback -from lcm.ns.vnfs.wait_job import wait_job_finish from lcm.pub.config.config import REPORT_TO_AAI from lcm.pub.database.models import NfInstModel, VmInstModel -from lcm.ns.vnfs.const import VNF_STATUS, NFVO_VNF_INST_TIMEOUT_SECOND, INST_TYPE +from lcm.pub.exceptions import NSLCMException +from lcm.pub.msapi import resmgr from lcm.pub.msapi.aai import query_vnf_aai, delete_vnf_aai, query_vserver_aai, delete_vserver_aai from lcm.pub.msapi.extsys import split_vim_to_owner_region, get_vim_by_id -from lcm.pub.utils.values import ignore_case_get -from lcm.pub.utils.jobutil import JOB_MODEL_STATUS, JobUtil -from lcm.pub.exceptions import NSLCMException from lcm.pub.msapi.vnfmdriver import send_nf_terminate_request -from lcm.pub.msapi import resmgr +from lcm.pub.utils.jobutil import JOB_MODEL_STATUS, JobUtil +from lcm.pub.utils.values import ignore_case_get +from lcm.ns_vnfs.const import VNF_STATUS, NFVO_VNF_INST_TIMEOUT_SECOND, INST_TYPE +from lcm.ns_vnfs.biz.wait_job import wait_job_finish logger = logging.getLogger(__name__) diff --git a/lcm/ns/vnfs/verify_vnfs.py b/lcm/ns_vnfs/biz/verify_vnfs.py similarity index 96% rename from lcm/ns/vnfs/verify_vnfs.py rename to lcm/ns_vnfs/biz/verify_vnfs.py index 2cc55a29..7c23dd59 100644 --- a/lcm/ns/vnfs/verify_vnfs.py +++ b/lcm/ns_vnfs/biz/verify_vnfs.py @@ -79,7 +79,7 @@ class VerifyVnfs(threading.Thread): "additionalParamForVnf": vnf_param, "vnfIndex": "1" } - ret = req_by_msb("/api/nslcm/v1/ns/vnfs", "POST", json.JSONEncoder().encode(inst_data)) + ret = req_by_msb("/api/nslcm/v1/ns/ns_vnfs", "POST", json.JSONEncoder().encode(inst_data)) if ret[0] != 0: raise NSLCMException("Failed to call inst vnf: %s" % ret[1]) rsp_data = json.JSONDecoder().decode(ret[1]) @@ -115,7 +115,7 @@ class VerifyVnfs(threading.Thread): "terminationType": "forceful", "gracefulTerminationTimeout": "600" } - ret = req_by_msb("/api/nslcm/v1/ns/vnfs/%s" % self.vnf_inst_id, "POST", json.JSONEncoder().encode(term_data)) + ret = req_by_msb("/api/nslcm/v1/ns/ns_vnfs/%s" % self.vnf_inst_id, "POST", json.JSONEncoder().encode(term_data)) if ret[0] != 0: raise NSLCMException("Failed to call term vnf: %s" % ret[1]) rsp_data = json.JSONDecoder().decode(ret[1]) @@ -211,7 +211,7 @@ class VerifyVnfs(threading.Thread): return job_end_normal def load_config(self): - json_file = os.path.join(os.path.dirname(__file__), 'verify_vnfs_config.json') + json_file = os.path.join(os.path.dirname(__file__), '../biz/verify_vnfs_config.json') f = open(json_file) json_data = json.JSONDecoder().decode(f.read()) f.close() diff --git a/lcm/ns/vnfs/verify_vnfs_config.json b/lcm/ns_vnfs/biz/verify_vnfs_config.json similarity index 100% rename from lcm/ns/vnfs/verify_vnfs_config.json rename to lcm/ns_vnfs/biz/verify_vnfs_config.json diff --git a/lcm/ns/vnfs/wait_job.py b/lcm/ns_vnfs/biz/wait_job.py similarity index 100% rename from lcm/ns/vnfs/wait_job.py rename to lcm/ns_vnfs/biz/wait_job.py diff --git a/lcm/ns/vnfs/const.py b/lcm/ns_vnfs/const.py similarity index 100% rename from lcm/ns/vnfs/const.py rename to lcm/ns_vnfs/const.py diff --git a/lcm/ns_vnfs/serializers/__init__.py b/lcm/ns_vnfs/serializers/__init__.py new file mode 100644 index 00000000..ca9a1945 --- /dev/null +++ b/lcm/ns_vnfs/serializers/__init__.py @@ -0,0 +1,13 @@ +# Copyright 2018 ZTE Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. diff --git a/lcm/v2/serializers.py b/lcm/ns_vnfs/serializers/grant_vnf_serializer.py similarity index 100% rename from lcm/v2/serializers.py rename to lcm/ns_vnfs/serializers/grant_vnf_serializer.py diff --git a/lcm/ns/vnfs/serializers.py b/lcm/ns_vnfs/serializers/serializers.py similarity index 100% rename from lcm/ns/vnfs/serializers.py rename to lcm/ns_vnfs/serializers/serializers.py diff --git a/lcm/ns_vnfs/tests/__init__.py b/lcm/ns_vnfs/tests/__init__.py new file mode 100644 index 00000000..ca9a1945 --- /dev/null +++ b/lcm/ns_vnfs/tests/__init__.py @@ -0,0 +1,13 @@ +# Copyright 2018 ZTE Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. diff --git a/lcm/v2/tests.py b/lcm/ns_vnfs/tests/grant_vnf_test.py similarity index 98% rename from lcm/v2/tests.py rename to lcm/ns_vnfs/tests/grant_vnf_test.py index e988b98f..ce655de9 100644 --- a/lcm/v2/tests.py +++ b/lcm/ns_vnfs/tests/grant_vnf_test.py @@ -220,7 +220,7 @@ class VnfGrantViewTest(unittest.TestCase): "external_cps": [], "forward_cps": [] }, - "vls": [], + "ns_vls": [], "cps": [], "metadata": { "designer": "sdno", @@ -275,7 +275,7 @@ class VnfGrantViewTest(unittest.TestCase): self.assertEqual(expect_resp_data, resp_data) def test_get_notify_vnf_normal(self): - response = self.client.get("/api/nslcm/v2/ns/1/vnfs/1/Notify") + response = self.client.get("/api/nslcm/v2/ns/1/ns_vnfs/1/Notify") self.assertEqual(status.HTTP_204_NO_CONTENT, response.status_code, response.content) def test_notify_vnf_normal(self): @@ -414,5 +414,5 @@ class VnfGrantViewTest(unittest.TestCase): NfInstModel.objects.create(nfinstid='22', mnfinstid='2', vnfm_inst_id='1') - response = self.client.post("/api/nslcm/v2/ns/1/vnfs/2/Notify", data=data, format='json') + response = self.client.post("/api/nslcm/v2/ns/1/ns_vnfs/2/Notify", data=data, format='json') self.assertEqual(status.HTTP_204_NO_CONTENT, response.status_code, response.content) diff --git a/lcm/ns/tests/vnfs/tests.py b/lcm/ns_vnfs/tests/tests.py similarity index 99% rename from lcm/ns/tests/vnfs/tests.py rename to lcm/ns_vnfs/tests/tests.py index 2e3e4f14..37add61b 100644 --- a/lcm/ns/tests/vnfs/tests.py +++ b/lcm/ns_vnfs/tests/tests.py @@ -18,12 +18,6 @@ import mock from django.test import TestCase, Client from rest_framework import status -from lcm.ns.vnfs import create_vnfs -from lcm.ns.vnfs.const import VNF_STATUS, INST_TYPE -from lcm.ns.vnfs.create_vnfs import CreateVnfs -from lcm.ns.vnfs.heal_vnfs import NFHealService -from lcm.ns.vnfs.scale_vnfs import NFManualScaleService -from lcm.ns.vnfs.terminate_nfs import TerminateVnfs from lcm.pub.database.models import NfInstModel, JobModel, NSInstModel, VmInstModel from lcm.pub.exceptions import NSLCMException from lcm.pub.utils import restcall @@ -31,6 +25,12 @@ from lcm.pub.utils.jobutil import JOB_MODEL_STATUS from lcm.pub.utils.jobutil import JobUtil, JOB_TYPE from lcm.pub.utils.timeutil import now_time from lcm.pub.utils.values import ignore_case_get +from lcm.ns_vnfs.biz.create_vnfs import CreateVnfs +from lcm.ns_vnfs.biz.heal_vnfs import NFHealService +from lcm.ns_vnfs.biz.scale_vnfs import NFManualScaleService +from lcm.ns_vnfs.biz.terminate_nfs import TerminateVnfs +from lcm.ns_vnfs.const import VNF_STATUS, INST_TYPE +from lcm.ns_vnfs.biz import create_vnfs class TestGetVnfViews(TestCase): diff --git a/lcm/ns/tests/vnfs/verify_test.py b/lcm/ns_vnfs/tests/verify_test.py similarity index 100% rename from lcm/ns/tests/vnfs/verify_test.py rename to lcm/ns_vnfs/tests/verify_test.py diff --git a/lcm/ns/vnfs/urls.py b/lcm/ns_vnfs/urls.py similarity index 63% rename from lcm/ns/vnfs/urls.py rename to lcm/ns_vnfs/urls.py index 40d3230b..dd555bf5 100644 --- a/lcm/ns/vnfs/urls.py +++ b/lcm/ns_vnfs/urls.py @@ -14,20 +14,26 @@ from django.conf.urls import url from rest_framework.urlpatterns import format_suffix_patterns -from lcm.ns.vnfs.views import NfView, NfDetailView, NfGrant, NfPlacement -from lcm.ns.vnfs.views import LcmNotify, NfScaleView, NfVerifyView -from lcm.ns.vnfs.views import NfVnfmInfoView, NfVimInfoView +from lcm.ns_vnfs.views.views import LcmNotify, NfScaleView, NfVerifyView +from lcm.ns_vnfs.views.views import NfView, NfDetailView, NfGrant, NfPlacement +from lcm.ns_vnfs.views.views import NfVnfmInfoView, NfVimInfoView +from lcm.ns_vnfs.views.grant_vnf_views import VnfGrantView, VnfNotifyView urlpatterns = [ url(r'^api/nslcm/v1/ns/vnfs$', NfView.as_view()), url(r'^api/nslcm/v1/ns/vnfs/(?P[0-9a-zA-Z_-]+)$', NfDetailView.as_view()), url(r'^api/nslcm/v1/ns/grantvnf$', NfGrant.as_view()), url(r'^api/nslcm/v1/ns/placevnf$', NfPlacement.as_view()), - url(r'^api/nslcm/v1/ns/(?P[0-9a-zA-Z_-]+)/vnfs/(?P[0-9a-zA-Z_-]+)/Notify$', LcmNotify.as_view()), - url(r'^api/nslcm/v1/ns/vnfs/(?P[0-9a-zA-Z_-]+)/scaling$', NfScaleView.as_view()), + url(r'^api/nslcm/v1/ns/(?P[0-9a-zA-Z_-]+)/ns_vnfs/(?P[0-9a-zA-Z_-]+)/Notify$', LcmNotify.as_view()), + url(r'^api/nslcm/v1/ns/ns_vnfs/(?P[0-9a-zA-Z_-]+)/scaling$', NfScaleView.as_view()), url(r'^api/nslcm/v1/vnfonboarding$', NfVerifyView.as_view()), url(r'^api/nslcm/v1/vnfms/(?P[0-9a-zA-Z_-]+)', NfVnfmInfoView.as_view()), url(r'^api/nslcm/v1/vims/(?P[0-9a-zA-Z_-]+)', NfVimInfoView.as_view()), + + # move form v2 + url(r'^api/nslcm/v2/grants$', VnfGrantView.as_view()), + url(r'^api/nslcm/v2/ns/(?P[0-9a-zA-Z_-]+)/vnfs/(?P[0-9a-zA-Z_-]+)/Notify$', + VnfNotifyView.as_view()), ] urlpatterns = format_suffix_patterns(urlpatterns) diff --git a/lcm/ns_vnfs/views/__init__.py b/lcm/ns_vnfs/views/__init__.py new file mode 100644 index 00000000..ca9a1945 --- /dev/null +++ b/lcm/ns_vnfs/views/__init__.py @@ -0,0 +1,13 @@ +# Copyright 2018 ZTE Corporation. +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. diff --git a/lcm/v2/views.py b/lcm/ns_vnfs/views/grant_vnf_views.py similarity index 90% rename from lcm/v2/views.py rename to lcm/ns_vnfs/views/grant_vnf_views.py index 9c953c19..aa4fd32e 100644 --- a/lcm/v2/views.py +++ b/lcm/ns_vnfs/views/grant_vnf_views.py @@ -14,16 +14,16 @@ import logging import traceback +from drf_yasg.utils import swagger_auto_schema +from rest_framework import status from rest_framework.response import Response from rest_framework.views import APIView -from rest_framework import status -from drf_yasg.utils import swagger_auto_schema -from lcm.v2.serializers import GrantRequestSerializer -from lcm.v2.serializers import GrantSerializer -from lcm.v2.serializers import VnfLcmOperationOccurrenceNotificationSerializer -from lcm.v2.grant_vnf import GrantVnf -from lcm.v2.handle_vnflcmooc_notification import HandleVnfLcmOocNotification +from lcm.ns_vnfs.biz.grant_vnf import GrantVnf +from lcm.ns_vnfs.biz.handle_vnflcmooc_notification import HandleVnfLcmOocNotification +from lcm.ns_vnfs.serializers.grant_vnf_serializer import GrantRequestSerializer +from lcm.ns_vnfs.serializers.grant_vnf_serializer import GrantSerializer +from lcm.ns_vnfs.serializers.grant_vnf_serializer import VnfLcmOperationOccurrenceNotificationSerializer logger = logging.getLogger(__name__) diff --git a/lcm/ns/vnfs/views.py b/lcm/ns_vnfs/views/views.py similarity index 88% rename from lcm/ns/vnfs/views.py rename to lcm/ns_vnfs/views/views.py index c5bc25e1..517238b3 100644 --- a/lcm/ns/vnfs/views.py +++ b/lcm/ns_vnfs/views/views.py @@ -15,39 +15,39 @@ import logging import traceback import uuid +from drf_yasg.utils import swagger_auto_schema from rest_framework import status from rest_framework.response import Response from rest_framework.views import APIView -from drf_yasg.utils import swagger_auto_schema -from lcm.ns.vnfs import create_vnfs -from lcm.ns.vnfs.create_vnfs import CreateVnfs -from lcm.ns.vnfs.verify_vnfs import VerifyVnfs -from lcm.ns.vnfs.get_vnfs import GetVnf -from lcm.ns.vnfs.scale_vnfs import NFManualScaleService -from lcm.ns.vnfs.terminate_nfs import TerminateVnfs -from lcm.ns.vnfs.grant_vnfs import GrantVnfs -from lcm.ns.vnfs.place_vnfs import PlaceVnfs -from lcm.ns.vnfs.notify_lcm import NotifyLcm from lcm.pub.exceptions import NSLCMException from lcm.pub.msapi.extsys import get_vnfm_by_id, get_vim_by_id from lcm.pub.utils.jobutil import JobUtil, JOB_TYPE from lcm.pub.utils.values import ignore_case_get -from lcm.ns.vnfs.serializers import InstVnfReqSerializer -from lcm.ns.vnfs.serializers import InstVnfRespSerializer -from lcm.ns.vnfs.serializers import GetVnfRespSerializer -from lcm.ns.vnfs.serializers import TerminateVnfReqSerializer -from lcm.ns.vnfs.serializers import TerminateVnfRespSerializer -from lcm.ns.vnfs.serializers import GrantVnfReqSerializer -from lcm.ns.vnfs.serializers import GrantVnfRespSerializer -from lcm.ns.vnfs.serializers import NotifyLcmReqSerializer -from lcm.ns.vnfs.serializers import ScaleVnfReqSerializer -from lcm.ns.vnfs.serializers import ScaleVnfRespSerializer -from lcm.ns.vnfs.serializers import VerifyVnfReqSerializer -from lcm.ns.vnfs.serializers import VerifyVnfRespSerializer -from lcm.ns.vnfs.serializers import VnfmInfoRespSerializer -from lcm.ns.vnfs.serializers import VimInfoRespSerializer -from lcm.ns.vnfs.serializers import PlaceVnfReqSerializer +from lcm.ns_vnfs.biz.create_vnfs import CreateVnfs +from lcm.ns_vnfs.biz.get_vnfs import GetVnf +from lcm.ns_vnfs.serializers.serializers import GetVnfRespSerializer +from lcm.ns_vnfs.serializers.serializers import GrantVnfReqSerializer +from lcm.ns_vnfs.serializers.serializers import GrantVnfRespSerializer +from lcm.ns_vnfs.biz.grant_vnfs import GrantVnfs +from lcm.ns_vnfs.serializers.serializers import InstVnfReqSerializer +from lcm.ns_vnfs.serializers.serializers import InstVnfRespSerializer +from lcm.ns_vnfs.biz.scale_vnfs import NFManualScaleService +from lcm.ns_vnfs.biz.notify_lcm import NotifyLcm +from lcm.ns_vnfs.serializers.serializers import NotifyLcmReqSerializer +from lcm.ns_vnfs.serializers.serializers import PlaceVnfReqSerializer +from lcm.ns_vnfs.biz.place_vnfs import PlaceVnfs +from lcm.ns_vnfs.serializers.serializers import ScaleVnfReqSerializer +from lcm.ns_vnfs.serializers.serializers import ScaleVnfRespSerializer +from lcm.ns_vnfs.serializers.serializers import TerminateVnfReqSerializer +from lcm.ns_vnfs.serializers.serializers import TerminateVnfRespSerializer +from lcm.ns_vnfs.biz.terminate_nfs import TerminateVnfs +from lcm.ns_vnfs.serializers.serializers import VerifyVnfReqSerializer +from lcm.ns_vnfs.serializers.serializers import VerifyVnfRespSerializer +from lcm.ns_vnfs.biz.verify_vnfs import VerifyVnfs +from lcm.ns_vnfs.serializers.serializers import VimInfoRespSerializer +from lcm.ns_vnfs.serializers.serializers import VnfmInfoRespSerializer +from lcm.ns_vnfs.biz import create_vnfs logger = logging.getLogger(__name__) diff --git a/lcm/pub/utils/tests.py b/lcm/pub/utils/tests.py index d7d628e0..4d50a335 100644 --- a/lcm/pub/utils/tests.py +++ b/lcm/pub/utils/tests.py @@ -57,7 +57,7 @@ class UtilsTest(unittest.TestCase): fileutil.delete_dirs("abc") is_ok, f_name = fileutil.download_file_from_http("1", "abc", "1.txt") self.assertTrue(is_ok) - self.assertTrue(f_name.endswith("abc/1.txt")) + self.assertTrue(f_name.endswith("1.txt")) fileutil.delete_dirs("abc") def test_query_job_status(self): diff --git a/lcm/urls.py b/lcm/urls.py index 729057f0..44b79f55 100644 --- a/lcm/urls.py +++ b/lcm/urls.py @@ -20,14 +20,13 @@ from lcm.pub.config.config import REG_TO_MSB_WHEN_START, REG_TO_MSB_REG_URL, REG urlpatterns = [ url(r'^', include('lcm.samples.urls')), - url(r'^', include('lcm.ns.vnfs.urls')), - url(r'^', include('lcm.ns.vls.urls')), - url(r'^', include('lcm.ns.sfcs.urls')), + url(r'^', include('lcm.ns_vnfs.urls')), + url(r'^', include('lcm.ns_vls.urls')), + url(r'^', include('lcm.ns_sfcs.urls')), url(r'^', include('lcm.ns.urls')), url(r'^', include('lcm.jobs.urls')), url(r'^', include('lcm.workflows.urls')), url(r'^', include('lcm.swagger.urls')), - url(r'^', include('lcm.v2.urls')), ] # regist to MSB when startup diff --git a/lcm/v2/urls.py b/lcm/v2/urls.py deleted file mode 100644 index 243cdcd8..00000000 --- a/lcm/v2/urls.py +++ /dev/null @@ -1,24 +0,0 @@ -# Copyright 2018 ZTE Corporation. -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -from django.conf.urls import url -from rest_framework.urlpatterns import format_suffix_patterns - -from lcm.v2.views import VnfGrantView, VnfNotifyView - -urlpatterns = [ - url(r'^api/nslcm/v2/grants$', VnfGrantView.as_view()), - url(r'^api/nslcm/v2/ns/(?P[0-9a-zA-Z_-]+)/vnfs/(?P[0-9a-zA-Z_-]+)/Notify$', VnfNotifyView.as_view()), -] - -urlpatterns = format_suffix_patterns(urlpatterns) -- 2.16.6