From a32c2b20207885d895bd96204cc166fca14db97b Mon Sep 17 00:00:00 2001 From: dyh Date: Wed, 4 Sep 2019 09:52:48 +0800 Subject: [PATCH] update for change to etsicatalog Change-Id: Idc2a6950960a324964500a8c4701be422de2b782 Issue-ID: MODELING-216 Signed-off-by: dyh --- LICENSE | 2 +- README.md | 8 +- assembly.xml | 8 +- {genericparser => catalog}/__init__.py | 0 {genericparser => catalog}/jobs/__init__.py | 0 {genericparser => catalog}/jobs/job_get.py | 2 +- {genericparser => catalog}/jobs/tests/__init__.py | 0 {genericparser => catalog}/jobs/tests/tests.py | 6 +- {genericparser => catalog}/jobs/urls.py | 4 +- {genericparser => catalog}/jobs/views.py | 12 +- {genericparser => catalog}/log.yml | 14 +- {genericparser => catalog}/middleware.py | 2 +- {genericparser => catalog}/packages/__init__.py | 0 .../packages/biz/__init__.py | 0 {genericparser => catalog}/packages/biz/common.py | 6 +- .../packages/biz/ns_descriptor.py | 34 +- .../packages/biz/nsdm_subscription.py | 20 +- .../packages/biz/pnf_descriptor.py | 44 +- .../packages/biz/sdc_ns_package.py | 36 +- .../packages/biz/sdc_service_package.py | 22 +- .../packages/biz/sdc_vnf_package.py | 48 +- .../packages/biz/service_descriptor.py | 25 +- .../packages/biz/vnf_package.py | 38 +- .../packages/biz/vnf_pkg_artifacts.py | 6 +- .../packages/biz/vnf_pkg_subscription.py | 8 +- {genericparser => catalog}/packages/const.py | 2 +- .../packages/serializers/__init__.py | 0 .../packages/serializers/catalog_serializers.py | 4 +- .../packages/serializers/checksum.py | 0 .../serializers/create_nsd_info_request.py | 0 .../serializers/create_pnfd_info_request.py | 0 .../serializers/create_vnf_pkg_info_req.py | 0 .../packages/serializers/link.py | 0 .../packages/serializers/nsd_info.py | 0 .../packages/serializers/nsd_infos.py | 0 .../packages/serializers/nsdm_filter_data.py | 2 +- .../packages/serializers/nsdm_subscription.py | 0 .../packages/serializers/pnfd_info.py | 0 .../packages/serializers/pnfd_infos.py | 0 .../packages/serializers/problem_details.py | 0 .../packages/serializers/response.py | 0 .../packages/serializers/subscription_auth_data.py | 2 +- .../serializers/upload_vnf_pkg_from_uri_req.py | 0 .../packages/serializers/vnf_pkg_artifact_info.py | 0 .../packages/serializers/vnf_pkg_info.py | 0 .../packages/serializers/vnf_pkg_infos.py | 0 .../packages/serializers/vnf_pkg_notifications.py | 2 +- .../serializers/vnf_pkg_software_image_info.py | 0 .../packages/serializers/vnf_pkg_subscription.py | 4 +- .../packages/tests/__init__.py | 0 {genericparser => catalog}/packages/tests/const.py | 0 .../packages/tests/test_health_check.py | 6 + .../packages/tests/test_ns_descriptor.py | 28 +- .../packages/tests/test_nsdm_subscription.py | 20 +- .../packages/tests/test_nspackage.py | 46 +- .../packages/tests/test_pnf_descriptor.py | 31 +- .../packages/tests/test_service_descriptor.py | 12 +- .../packages/tests/test_servicepackage.py | 26 +- .../packages/tests/test_vnf_package.py | 61 +- .../packages/tests/test_vnf_pkg_subscription.py | 2 +- .../packages/tests/test_vnfpackage.py | 109 +-- {genericparser => catalog}/packages/urls.py | 22 +- .../packages/views/__init__.py | 0 .../packages/views/catalog_views.py | 36 +- .../packages/views/common.py | 22 +- .../packages/views/health_check_views.py | 0 .../packages/views/ns_descriptor_views.py | 22 +- .../packages/views/nsdm_subscription_views.py | 16 +- .../packages/views/pnf_descriptor_views.py | 30 +- .../packages/views/vnf_package_artifact_views.py | 4 +- .../views/vnf_package_subscription_views.py | 21 +- .../packages/views/vnf_package_views.py | 29 +- {genericparser => catalog}/pub/__init__.py | 0 {genericparser => catalog}/pub/config/__init__.py | 0 {genericparser => catalog}/pub/config/config.py | 23 +- .../pub/database/__init__.py | 0 {genericparser => catalog}/pub/database/admin.py | 18 +- .../pub/database/migrations/0001_initial.py | 0 .../pub/database/migrations/__init__.py | 0 {genericparser => catalog}/pub/database/models.py | 16 +- {genericparser => catalog}/pub/exceptions.py | 22 +- {genericparser => catalog}/pub/msapi/__init__.py | 0 {genericparser => catalog}/pub/msapi/extsys.py | 22 +- {genericparser => catalog}/pub/msapi/sdc.py | 27 +- {genericparser => catalog}/pub/redisco/__init__.py | 0 .../pub/redisco/containers.py | 0 {genericparser => catalog}/pub/ssl/cert/foobar.crt | 0 {genericparser => catalog}/pub/ssl/cert/foobar.csr | 0 {genericparser => catalog}/pub/ssl/cert/foobar.key | 0 {genericparser => catalog}/pub/utils/__init__.py | 0 {genericparser => catalog}/pub/utils/fileutil.py | 0 {genericparser => catalog}/pub/utils/idutil.py | 2 +- {genericparser => catalog}/pub/utils/jobutil.py | 4 +- {genericparser => catalog}/pub/utils/restcall.py | 2 +- {genericparser => catalog}/pub/utils/syscomm.py | 0 {genericparser => catalog}/pub/utils/tests.py | 4 +- {genericparser => catalog}/pub/utils/timeutil.py | 0 .../pub/utils/toscaparser}/__init__.py | 8 +- .../pub/utils/toscaparser}/basemodel.py | 19 +- .../pub/utils/toscaparser}/const.py | 0 .../pub/utils/toscaparser}/dataentityext.py | 0 .../pub/utils/toscaparser}/graph.py | 0 .../pub/utils/toscaparser}/nsdmodel.py | 6 +- .../pub/utils/toscaparser}/pnfmodel.py | 2 +- .../pub/utils/toscaparser}/sdmodel.py | 4 +- .../pub/utils/toscaparser}/servicemodel.py | 4 +- .../pub/utils/toscaparser}/testdata/ns/ran.csar | Bin .../toscaparser}/testdata/ns/service-vIMS.csar | Bin .../utils/toscaparser}/testdata/pnf/ran-du.csar | Bin .../pub/utils/toscaparser}/testdata/vnf/vSBC.csar | Bin .../toscaparser}/testdata/vnf/vcpedpdk/infra.csar | Bin .../toscaparser}/testdata/vnf/vcpedpdk/vbng.csar | Bin .../testdata/vnf/vcpedpdk/vbrgemu.csar | Bin .../toscaparser}/testdata/vnf/vcpedpdk/vgmux.csar | Bin .../toscaparser}/testdata/vnf/vcpedpdk/vgw.csar | Bin .../toscaparser}/testdata/vnf/vcpesriov/infra.csar | Bin .../toscaparser}/testdata/vnf/vcpesriov/vbng.csar | Bin .../testdata/vnf/vcpesriov/vbrgemu.csar | Bin .../toscaparser}/testdata/vnf/vcpesriov/vgmux.csar | Bin .../toscaparser}/testdata/vnf/vcpesriov/vgw.csar | Bin .../pub/utils/toscaparser}/tests.py | 7 +- .../pub/utils/toscaparser}/vnfdmodel.py | 6 +- .../pub/utils/toscaparser}/vnfdparser/__init__.py | 5 +- .../utils/toscaparser}/vnfdparser/vnfd_sol_251.py | 46 +- .../utils/toscaparser}/vnfdparser/vnfd_sol_base.py | 0 {genericparser => catalog}/pub/utils/values.py | 0 {genericparser => catalog}/samples/__init__.py | 0 {genericparser => catalog}/samples/tests.py | 2 +- {genericparser => catalog}/samples/urls.py | 6 +- {genericparser => catalog}/samples/views.py | 0 {genericparser => catalog}/settings.py | 48 +- {genericparser => catalog}/swagger/__init__.py | 0 .../swagger/management/__init__.py | 0 .../swagger/management/commands/__init__.py | 0 .../swagger/management/commands/export_swagger.py | 2 +- {genericparser => catalog}/swagger/tests.py | 2 +- {genericparser => catalog}/swagger/urls.py | 18 +- catalog/swagger/vfc.catalog.swagger.json | 793 +++++++++++++++++++++ {genericparser => catalog}/swagger/views.py | 2 +- {genericparser => catalog}/urls.py | 19 +- {genericparser => catalog}/wsgi.py | 2 +- docker/Dockerfile | 2 +- docker/build_image.sh | 2 +- docker/docker-entrypoint.sh | 6 +- docker/docker-env-conf.sh | 10 +- docker/instance_config.sh | 16 +- docker/instance_init.sh | 4 +- docker/instance_run.sh | 6 +- .../database/migrations/0002_auto_20190422_1442.py | 47 -- manage.py | 2 +- pom.xml | 8 +- resources/bin/initDB.sh | 8 +- ...atedb.sql => modeling-etsicatalog-createdb.sql} | 8 +- run.sh | 8 +- static/{genericparser => catalog}/empty.txt | 0 .../{genericparser => catalog}/resource_test.csar | Bin tox.ini | 2 +- 157 files changed, 1486 insertions(+), 688 deletions(-) rename {genericparser => catalog}/__init__.py (100%) rename {genericparser => catalog}/jobs/__init__.py (100%) rename {genericparser => catalog}/jobs/job_get.py (97%) rename {genericparser => catalog}/jobs/tests/__init__.py (100%) rename {genericparser => catalog}/jobs/tests/tests.py (87%) rename {genericparser => catalog}/jobs/urls.py (83%) rename {genericparser => catalog}/jobs/views.py (90%) rename {genericparser => catalog}/log.yml (78%) rename {genericparser => catalog}/middleware.py (96%) rename {genericparser => catalog}/packages/__init__.py (100%) rename {genericparser => catalog}/packages/biz/__init__.py (100%) rename {genericparser => catalog}/packages/biz/common.py (89%) rename {genericparser => catalog}/packages/biz/ns_descriptor.py (87%) rename {genericparser => catalog}/packages/biz/nsdm_subscription.py (92%) rename {genericparser => catalog}/packages/biz/pnf_descriptor.py (84%) rename {genericparser => catalog}/packages/biz/sdc_ns_package.py (82%) rename {genericparser => catalog}/packages/biz/sdc_service_package.py (84%) rename {genericparser => catalog}/packages/biz/sdc_vnf_package.py (84%) rename {genericparser => catalog}/packages/biz/service_descriptor.py (84%) rename {genericparser => catalog}/packages/biz/vnf_package.py (84%) rename {genericparser => catalog}/packages/biz/vnf_pkg_artifacts.py (89%) rename {genericparser => catalog}/packages/biz/vnf_pkg_subscription.py (97%) rename {genericparser => catalog}/packages/const.py (97%) rename {genericparser => catalog}/packages/serializers/__init__.py (100%) rename genericparser/packages/serializers/genericparser_serializers.py => catalog/packages/serializers/catalog_serializers.py (98%) rename {genericparser => catalog}/packages/serializers/checksum.py (100%) rename {genericparser => catalog}/packages/serializers/create_nsd_info_request.py (100%) rename {genericparser => catalog}/packages/serializers/create_pnfd_info_request.py (100%) rename {genericparser => catalog}/packages/serializers/create_vnf_pkg_info_req.py (100%) rename {genericparser => catalog}/packages/serializers/link.py (100%) rename {genericparser => catalog}/packages/serializers/nsd_info.py (100%) rename {genericparser => catalog}/packages/serializers/nsd_infos.py (100%) rename {genericparser => catalog}/packages/serializers/nsdm_filter_data.py (98%) rename {genericparser => catalog}/packages/serializers/nsdm_subscription.py (100%) rename {genericparser => catalog}/packages/serializers/pnfd_info.py (100%) rename {genericparser => catalog}/packages/serializers/pnfd_infos.py (100%) rename {genericparser => catalog}/packages/serializers/problem_details.py (100%) rename {genericparser => catalog}/packages/serializers/response.py (100%) rename {genericparser => catalog}/packages/serializers/subscription_auth_data.py (98%) rename {genericparser => catalog}/packages/serializers/upload_vnf_pkg_from_uri_req.py (100%) rename {genericparser => catalog}/packages/serializers/vnf_pkg_artifact_info.py (100%) rename {genericparser => catalog}/packages/serializers/vnf_pkg_info.py (100%) rename {genericparser => catalog}/packages/serializers/vnf_pkg_infos.py (100%) rename {genericparser => catalog}/packages/serializers/vnf_pkg_notifications.py (98%) rename {genericparser => catalog}/packages/serializers/vnf_pkg_software_image_info.py (100%) rename {genericparser => catalog}/packages/serializers/vnf_pkg_subscription.py (95%) rename {genericparser => catalog}/packages/tests/__init__.py (100%) rename {genericparser => catalog}/packages/tests/const.py (100%) rename {genericparser => catalog}/packages/tests/test_health_check.py (84%) rename {genericparser => catalog}/packages/tests/test_ns_descriptor.py (92%) rename {genericparser => catalog}/packages/tests/test_nsdm_subscription.py (97%) rename {genericparser => catalog}/packages/tests/test_nspackage.py (86%) rename {genericparser => catalog}/packages/tests/test_pnf_descriptor.py (92%) rename {genericparser => catalog}/packages/tests/test_service_descriptor.py (90%) rename {genericparser => catalog}/packages/tests/test_servicepackage.py (95%) rename {genericparser => catalog}/packages/tests/test_vnf_package.py (87%) rename {genericparser => catalog}/packages/tests/test_vnf_pkg_subscription.py (99%) rename {genericparser => catalog}/packages/tests/test_vnfpackage.py (75%) rename {genericparser => catalog}/packages/urls.py (78%) rename {genericparser => catalog}/packages/views/__init__.py (100%) rename {genericparser => catalog}/packages/views/catalog_views.py (92%) rename {genericparser => catalog}/packages/views/common.py (84%) rename {genericparser => catalog}/packages/views/health_check_views.py (100%) rename {genericparser => catalog}/packages/views/ns_descriptor_views.py (85%) rename {genericparser => catalog}/packages/views/nsdm_subscription_views.py (87%) rename {genericparser => catalog}/packages/views/pnf_descriptor_views.py (82%) rename {genericparser => catalog}/packages/views/vnf_package_artifact_views.py (90%) rename {genericparser => catalog}/packages/views/vnf_package_subscription_views.py (83%) rename {genericparser => catalog}/packages/views/vnf_package_views.py (83%) rename {genericparser => catalog}/pub/__init__.py (100%) rename {genericparser => catalog}/pub/config/__init__.py (100%) rename {genericparser => catalog}/pub/config/config.py (79%) rename {genericparser => catalog}/pub/database/__init__.py (100%) rename {genericparser => catalog}/pub/database/admin.py (93%) rename {genericparser => catalog}/pub/database/migrations/0001_initial.py (100%) rename {genericparser => catalog}/pub/database/migrations/__init__.py (100%) rename {genericparser => catalog}/pub/database/models.py (97%) rename {genericparser => catalog}/pub/exceptions.py (52%) rename {genericparser => catalog}/pub/msapi/__init__.py (100%) rename {genericparser => catalog}/pub/msapi/extsys.py (88%) rename {genericparser => catalog}/pub/msapi/sdc.py (79%) rename {genericparser => catalog}/pub/redisco/__init__.py (100%) rename {genericparser => catalog}/pub/redisco/containers.py (100%) rename {genericparser => catalog}/pub/ssl/cert/foobar.crt (100%) rename {genericparser => catalog}/pub/ssl/cert/foobar.csr (100%) rename {genericparser => catalog}/pub/ssl/cert/foobar.key (100%) rename {genericparser => catalog}/pub/utils/__init__.py (100%) rename {genericparser => catalog}/pub/utils/fileutil.py (100%) rename {genericparser => catalog}/pub/utils/idutil.py (92%) rename {genericparser => catalog}/pub/utils/jobutil.py (98%) rename {genericparser => catalog}/pub/utils/restcall.py (98%) rename {genericparser => catalog}/pub/utils/syscomm.py (100%) rename {genericparser => catalog}/pub/utils/tests.py (98%) rename {genericparser => catalog}/pub/utils/timeutil.py (100%) rename {genericparser/pub/utils/toscaparsers => catalog/pub/utils/toscaparser}/__init__.py (85%) rename {genericparser/pub/utils/toscaparsers => catalog/pub/utils/toscaparser}/basemodel.py (98%) rename {genericparser/pub/utils/toscaparsers => catalog/pub/utils/toscaparser}/const.py (100%) rename {genericparser/pub/utils/toscaparsers => catalog/pub/utils/toscaparser}/dataentityext.py (100%) rename {genericparser/pub/utils/toscaparsers => catalog/pub/utils/toscaparser}/graph.py (100%) rename {genericparser/pub/utils/toscaparsers => catalog/pub/utils/toscaparser}/nsdmodel.py (97%) rename {genericparser/pub/utils/toscaparsers => catalog/pub/utils/toscaparser}/pnfmodel.py (96%) rename {genericparser/pub/utils/toscaparsers => catalog/pub/utils/toscaparser}/sdmodel.py (95%) rename {genericparser/pub/utils/toscaparsers => catalog/pub/utils/toscaparser}/servicemodel.py (97%) rename {genericparser/pub/utils/toscaparsers => catalog/pub/utils/toscaparser}/testdata/ns/ran.csar (100%) rename {genericparser/pub/utils/toscaparsers => catalog/pub/utils/toscaparser}/testdata/ns/service-vIMS.csar (100%) rename {genericparser/pub/utils/toscaparsers => catalog/pub/utils/toscaparser}/testdata/pnf/ran-du.csar (100%) rename {genericparser/pub/utils/toscaparsers => catalog/pub/utils/toscaparser}/testdata/vnf/vSBC.csar (100%) rename {genericparser/pub/utils/toscaparsers => catalog/pub/utils/toscaparser}/testdata/vnf/vcpedpdk/infra.csar (100%) rename {genericparser/pub/utils/toscaparsers => catalog/pub/utils/toscaparser}/testdata/vnf/vcpedpdk/vbng.csar (100%) rename {genericparser/pub/utils/toscaparsers => catalog/pub/utils/toscaparser}/testdata/vnf/vcpedpdk/vbrgemu.csar (100%) rename {genericparser/pub/utils/toscaparsers => catalog/pub/utils/toscaparser}/testdata/vnf/vcpedpdk/vgmux.csar (100%) rename {genericparser/pub/utils/toscaparsers => catalog/pub/utils/toscaparser}/testdata/vnf/vcpedpdk/vgw.csar (100%) rename {genericparser/pub/utils/toscaparsers => catalog/pub/utils/toscaparser}/testdata/vnf/vcpesriov/infra.csar (100%) rename {genericparser/pub/utils/toscaparsers => catalog/pub/utils/toscaparser}/testdata/vnf/vcpesriov/vbng.csar (100%) rename {genericparser/pub/utils/toscaparsers => catalog/pub/utils/toscaparser}/testdata/vnf/vcpesriov/vbrgemu.csar (100%) rename {genericparser/pub/utils/toscaparsers => catalog/pub/utils/toscaparser}/testdata/vnf/vcpesriov/vgmux.csar (100%) rename {genericparser/pub/utils/toscaparsers => catalog/pub/utils/toscaparser}/testdata/vnf/vcpesriov/vgw.csar (100%) rename {genericparser/pub/utils/toscaparsers => catalog/pub/utils/toscaparser}/tests.py (94%) rename {genericparser/pub/utils/toscaparsers => catalog/pub/utils/toscaparser}/vnfdmodel.py (90%) rename {genericparser/pub/utils/toscaparsers => catalog/pub/utils/toscaparser}/vnfdparser/__init__.py (82%) rename {genericparser/pub/utils/toscaparsers => catalog/pub/utils/toscaparser}/vnfdparser/vnfd_sol_251.py (79%) rename {genericparser/pub/utils/toscaparsers => catalog/pub/utils/toscaparser}/vnfdparser/vnfd_sol_base.py (100%) rename {genericparser => catalog}/pub/utils/values.py (100%) rename {genericparser => catalog}/samples/__init__.py (100%) rename {genericparser => catalog}/samples/tests.py (95%) rename {genericparser => catalog}/samples/urls.py (76%) rename {genericparser => catalog}/samples/views.py (100%) rename {genericparser => catalog}/settings.py (81%) rename {genericparser => catalog}/swagger/__init__.py (100%) rename {genericparser => catalog}/swagger/management/__init__.py (100%) rename {genericparser => catalog}/swagger/management/commands/__init__.py (100%) rename {genericparser => catalog}/swagger/management/commands/export_swagger.py (94%) rename {genericparser => catalog}/swagger/tests.py (92%) rename {genericparser => catalog}/swagger/urls.py (57%) create mode 100644 catalog/swagger/vfc.catalog.swagger.json rename {genericparser => catalog}/swagger/views.py (90%) rename {genericparser => catalog}/urls.py (59%) rename {genericparser => catalog}/wsgi.py (90%) delete mode 100644 genericparser/pub/database/migrations/0002_auto_20190422_1442.py rename resources/dbscripts/mysql/{modeling-gengricparser-createdb.sql => modeling-etsicatalog-createdb.sql} (63%) rename static/{genericparser => catalog}/empty.txt (100%) rename static/{genericparser => catalog}/resource_test.csar (100%) diff --git a/LICENSE b/LICENSE index 04ca53e..d740689 100644 --- a/LICENSE +++ b/LICENSE @@ -12,4 +12,4 @@ # See the License for the specific language governing permissions and # limitations under the License. -# Micro service of modeling genericparser. +# Micro service of modeling etsicatalog. diff --git a/README.md b/README.md index 5d50c54..8c60c05 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -# Micro service of generic parser. +# Micro service of etsicatalog. 1. Code structure guide ./ project files @@ -29,6 +29,6 @@ ./tests All the test case. At least each API should have a test case ./jobs Related job ./pub Common class, including database, external micro service API, utils, and config parameters. - ./samples generic parser micro service health check - ./swagger Auto-generate generic parser swagger json or yaml files - ./static/genericparser package storage + ./samples Catalog micro service health check + ./swagger Auto-generate catalog swagger json or yaml files + ./static/catalog package storage diff --git a/assembly.xml b/assembly.xml index b2ef1aa..0eb35f0 100644 --- a/assembly.xml +++ b/assembly.xml @@ -16,14 +16,14 @@ - genericparser + etsicatalog zip - genericparser - /genericparser + etsicatalog + /etsicatalog **/*.py **/*.json @@ -76,5 +76,5 @@ - modeling/genericparser + modeling/etsicatalog diff --git a/genericparser/__init__.py b/catalog/__init__.py similarity index 100% rename from genericparser/__init__.py rename to catalog/__init__.py diff --git a/genericparser/jobs/__init__.py b/catalog/jobs/__init__.py similarity index 100% rename from genericparser/jobs/__init__.py rename to catalog/jobs/__init__.py diff --git a/genericparser/jobs/job_get.py b/catalog/jobs/job_get.py similarity index 97% rename from genericparser/jobs/job_get.py rename to catalog/jobs/job_get.py index 56e20b6..32ee243 100644 --- a/genericparser/jobs/job_get.py +++ b/catalog/jobs/job_get.py @@ -13,7 +13,7 @@ # limitations under the License. import logging -from genericparser.pub.utils.jobutil import JobUtil +from catalog.pub.utils.jobutil import JobUtil logger = logging.getLogger(__name__) diff --git a/genericparser/jobs/tests/__init__.py b/catalog/jobs/tests/__init__.py similarity index 100% rename from genericparser/jobs/tests/__init__.py rename to catalog/jobs/tests/__init__.py diff --git a/genericparser/jobs/tests/tests.py b/catalog/jobs/tests/tests.py similarity index 87% rename from genericparser/jobs/tests/tests.py rename to catalog/jobs/tests/tests.py index 3cdcd72..460c854 100644 --- a/genericparser/jobs/tests/tests.py +++ b/catalog/jobs/tests/tests.py @@ -14,7 +14,7 @@ from django.test import TestCase, Client from rest_framework import status -from genericparser.pub.database.models import JobModel, JobStatusModel +from catalog.pub.database.models import JobModel, JobStatusModel class JobsViewTest(TestCase): @@ -28,13 +28,13 @@ class JobsViewTest(TestCase): def test_job_normal(self): JobModel(jobid=self.job_id, jobtype='VNF', jobaction='INST', resid='1').save() JobStatusModel(indexid=1, jobid=self.job_id, status='inst', errcode='0', progress=20, descp='inst').save() - response = self.client.get("/api/parser/v1/jobs/%s" % self.job_id) + response = self.client.get("/api/catalog/v1/jobs/%s" % self.job_id) self.assertEqual(status.HTTP_200_OK, response.status_code) def test_job_when_jobid_not_exist(self): job_id = 'test_new_job_id' JobModel(jobid=self.job_id, jobtype='VNF', jobaction='INST', resid='1').save() JobStatusModel(indexid=1, jobid=self.job_id, status='inst', progress=20, descp='inst').save() - response = self.client.get("/api/parser/v1/jobs/%s" % job_id) + response = self.client.get("/api/catalog/v1/jobs/%s" % job_id) self.assertIn('jobId', response.data) self.assertNotIn('responseDescriptor', response.data) diff --git a/genericparser/jobs/urls.py b/catalog/jobs/urls.py similarity index 83% rename from genericparser/jobs/urls.py rename to catalog/jobs/urls.py index 5cea865..ea1fcd6 100644 --- a/genericparser/jobs/urls.py +++ b/catalog/jobs/urls.py @@ -13,8 +13,8 @@ # limitations under the License. from django.conf.urls import url -from genericparser.jobs.views import JobView +from catalog.jobs.views import JobView urlpatterns = [ - url(r'^api/parser/v1/jobs/(?P[0-9a-zA-Z_-]+)$', JobView.as_view()), + url(r'^api/catalog/v1/jobs/(?P[0-9a-zA-Z_-]+)$', JobView.as_view()), ] diff --git a/genericparser/jobs/views.py b/catalog/jobs/views.py similarity index 90% rename from genericparser/jobs/views.py rename to catalog/jobs/views.py index b9c5121..123af00 100644 --- a/genericparser/jobs/views.py +++ b/catalog/jobs/views.py @@ -19,12 +19,12 @@ from rest_framework import status from rest_framework.response import Response from rest_framework.views import APIView -from genericparser.jobs.job_get import GetJobInfoService -from genericparser.packages.serializers.genericparser_serializers import GetJobResponseSerializer -from genericparser.packages.serializers.genericparser_serializers import PostJobRequestSerializer -from genericparser.packages.serializers.genericparser_serializers import PostJobResponseResultSerializer -from genericparser.pub.utils.jobutil import JobUtil -from genericparser.pub.utils.values import ignore_case_get +from catalog.jobs.job_get import GetJobInfoService +from catalog.packages.serializers.catalog_serializers import GetJobResponseSerializer +from catalog.packages.serializers.catalog_serializers import PostJobRequestSerializer +from catalog.packages.serializers.catalog_serializers import PostJobResponseResultSerializer +from catalog.pub.utils.jobutil import JobUtil +from catalog.pub.utils.values import ignore_case_get logger = logging.getLogger(__name__) diff --git a/genericparser/log.yml b/catalog/log.yml similarity index 78% rename from genericparser/log.yml rename to catalog/log.yml index 602cd40..5ac5fef 100644 --- a/genericparser/log.yml +++ b/catalog/log.yml @@ -2,8 +2,8 @@ version: 1 disable_existing_loggers: False loggers: - genericparser: - handlers: [genericparserlocal_handler, genericparser_handler] + catalog: + handlers: [cataloglocal_handler, catalog_handler] level: "DEBUG" propagate: False django: @@ -11,24 +11,24 @@ loggers: level: "DEBUG" propagate: False tosca: - handlers: [genericparserlocal_handler, genericparser_handler] + handlers: [cataloglocal_handler, catalog_handler] level: "DEBUG" propagate: False handlers: - genericparserlocal_handler: + cataloglocal_handler: level: "DEBUG" class: "logging.handlers.RotatingFileHandler" - filename: "logs/runtime_genericparser.log" + filename: "logs/runtime_catalog.log" formatter: "standard" maxBytes: 52428800 backupCount: 10 - genericparser_handler: + catalog_handler: level: "DEBUG" class: "logging.handlers.RotatingFileHandler" - filename: "/var/log/onap/modeling/genericparser/runtime_genericparser.log" + filename: "/var/log/onap/modeling/etsicatalog/runtime_catalog.log" formatter: "mdcFormat" maxBytes: 52428800 diff --git a/genericparser/middleware.py b/catalog/middleware.py similarity index 96% rename from genericparser/middleware.py rename to catalog/middleware.py index 8cb8f45..cd6aa8b 100644 --- a/genericparser/middleware.py +++ b/catalog/middleware.py @@ -13,7 +13,7 @@ import uuid from onaplogging.mdcContext import MDC -from genericparser.pub.config.config import FORWARDED_FOR_FIELDS, SERVICE_NAME +from catalog.pub.config.config import FORWARDED_FOR_FIELDS, SERVICE_NAME class LogContextMiddleware(object): diff --git a/genericparser/packages/__init__.py b/catalog/packages/__init__.py similarity index 100% rename from genericparser/packages/__init__.py rename to catalog/packages/__init__.py diff --git a/genericparser/packages/biz/__init__.py b/catalog/packages/biz/__init__.py similarity index 100% rename from genericparser/packages/biz/__init__.py rename to catalog/packages/biz/__init__.py diff --git a/genericparser/packages/biz/common.py b/catalog/packages/biz/common.py similarity index 89% rename from genericparser/packages/biz/common.py rename to catalog/packages/biz/common.py index 9b72b63..ce77a41 100644 --- a/genericparser/packages/biz/common.py +++ b/catalog/packages/biz/common.py @@ -14,15 +14,15 @@ import os -from genericparser.pub.config.config import GENERICPARSER_ROOT_PATH -from genericparser.pub.utils import fileutil +from catalog.pub.config.config import CATALOG_ROOT_PATH +from catalog.pub.utils import fileutil CHUNK_SIZE = 1024 * 8 def save(remote_file, vnf_pkg_id): local_file_name = remote_file.name - local_file_dir = os.path.join(GENERICPARSER_ROOT_PATH, vnf_pkg_id) + local_file_dir = os.path.join(CATALOG_ROOT_PATH, vnf_pkg_id) local_file_name = os.path.join(local_file_dir, local_file_name) if not os.path.exists(local_file_dir): fileutil.make_dirs(local_file_dir) diff --git a/genericparser/packages/biz/ns_descriptor.py b/catalog/packages/biz/ns_descriptor.py similarity index 87% rename from genericparser/packages/biz/ns_descriptor.py rename to catalog/packages/biz/ns_descriptor.py index 60d4a26..f0e0572 100644 --- a/genericparser/packages/biz/ns_descriptor.py +++ b/catalog/packages/biz/ns_descriptor.py @@ -18,13 +18,13 @@ import logging import os import uuid -from genericparser.packages.biz.common import parse_file_range, read, save -from genericparser.packages.const import PKG_STATUS -from genericparser.pub.config.config import GENERICPARSER_ROOT_PATH -from genericparser.pub.database.models import NSPackageModel, PnfPackageModel, VnfPackageModel -from genericparser.pub.exceptions import GenericparserException, ResourceNotFoundException -from genericparser.pub.utils import fileutil, toscaparsers -from genericparser.pub.utils.values import ignore_case_get +from catalog.packages.biz.common import parse_file_range, read, save +from catalog.packages.const import PKG_STATUS +from catalog.pub.config.config import CATALOG_ROOT_PATH +from catalog.pub.database.models import NSPackageModel, PnfPackageModel, VnfPackageModel +from catalog.pub.exceptions import CatalogException, ResourceNotFoundException +from catalog.pub.utils import fileutil, toscaparser +from catalog.pub.utils.values import ignore_case_get logger = logging.getLogger(__name__) @@ -84,13 +84,13 @@ class NsDescriptor(object): ''' if ns_pkgs[0].operationalState != PKG_STATUS.DISABLED: logger.error('NSD(%s) shall be DISABLED.' % nsd_info_id) - raise GenericparserException('NSD(%s) shall be DISABLED.' % nsd_info_id) + raise CatalogException('NSD(%s) shall be DISABLED.' % nsd_info_id) if ns_pkgs[0].usageState != PKG_STATUS.NOT_IN_USE: logger.error('NSD(%s) shall be NOT_IN_USE.' % nsd_info_id) - raise GenericparserException('NSD(%s) shall be NOT_IN_USE.' % nsd_info_id) + raise CatalogException('NSD(%s) shall be NOT_IN_USE.' % nsd_info_id) ''' ns_pkgs.delete() - ns_pkg_path = os.path.join(GENERICPARSER_ROOT_PATH, nsd_info_id) + ns_pkg_path = os.path.join(CATALOG_ROOT_PATH, nsd_info_id) fileutil.delete_dirs(ns_pkg_path) logger.info('NSD(%s) has been deleted.' % nsd_info_id) @@ -99,7 +99,7 @@ class NsDescriptor(object): ns_pkgs = NSPackageModel.objects.filter(nsPackageId=nsd_info_id) if not ns_pkgs.exists(): logger.error('NSD(%s) does not exist.' % nsd_info_id) - raise GenericparserException('NSD(%s) does not exist.' % nsd_info_id) + raise CatalogException('NSD(%s) does not exist.' % nsd_info_id) ns_pkgs.update(onboardingState=PKG_STATUS.UPLOADING) local_file_name = save(remote_file, nsd_info_id) @@ -114,7 +114,7 @@ class NsDescriptor(object): raise ResourceNotFoundException('NSD(%s) does not exist.' % nsd_info_id) if ns_pkgs[0].onboardingState != PKG_STATUS.ONBOARDED: logger.error('NSD(%s) is not ONBOARDED.' % nsd_info_id) - raise GenericparserException('NSD(%s) is not ONBOARDED.' % nsd_info_id) + raise CatalogException('NSD(%s) is not ONBOARDED.' % nsd_info_id) local_file_path = ns_pkgs[0].localFilePath start, end = parse_file_range(local_file_path, file_range) @@ -126,7 +126,7 @@ class NsDescriptor(object): ns_pkgs = NSPackageModel.objects.filter(nsPackageId=nsd_info_id) ns_pkgs.update(onboardingState=PKG_STATUS.PROCESSING) - nsd_json = toscaparsers.parse_nsd(local_file_name) + nsd_json = toscaparser.parse_nsd(local_file_name) logger.debug("%s", nsd_json) nsd = json.JSONDecoder().decode(nsd_json) @@ -136,11 +136,11 @@ class NsDescriptor(object): nsd_designer = nsd.get("ns", {}).get("properties", {}).get("designer", "") invariant_id = nsd.get("ns", {}).get("properties", {}).get("invariant_id", "") if nsd_id == "": - raise GenericparserException("nsd_id(%s) does not exist in metadata." % nsd_id) + raise CatalogException("nsd_id(%s) does not exist in metadata." % nsd_id) other_nspkg = NSPackageModel.objects.filter(nsdId=nsd_id) if other_nspkg and other_nspkg[0].nsPackageId != nsd_info_id: logger.warn("NSD(%s,%s) already exists.", nsd_id, other_nspkg[0].nsPackageId) - raise GenericparserException("NSD(%s) already exists." % nsd_id) + raise CatalogException("NSD(%s) already exists." % nsd_id) for vnf in nsd["vnfs"]: vnfd_id = vnf["properties"].get("descriptor_id", "undefined") @@ -152,7 +152,7 @@ class NsDescriptor(object): if not pkg: vnfd_name = vnf.get("vnf_id", "undefined") logger.error("[%s] is not distributed.", vnfd_name) - raise GenericparserException("VNF package(%s) is not distributed." % vnfd_id) + raise CatalogException("VNF package(%s) is not distributed." % vnfd_id) for pnf in nsd["pnfs"]: pnfd_id = pnf["properties"].get("descriptor_id", "undefined") @@ -164,7 +164,7 @@ class NsDescriptor(object): if not pkg: pnfd_name = pnf.get("pnf_id", "undefined") logger.error("[%s] is not distributed.", pnfd_name) - raise GenericparserException("PNF package(%s) is not distributed." % pnfd_name) + raise CatalogException("PNF package(%s) is not distributed." % pnfd_name) ns_pkgs.update( nsdId=nsd_id, diff --git a/genericparser/packages/biz/nsdm_subscription.py b/catalog/packages/biz/nsdm_subscription.py similarity index 92% rename from genericparser/packages/biz/nsdm_subscription.py rename to catalog/packages/biz/nsdm_subscription.py index dfcd2ec..e2af6e4 100644 --- a/genericparser/packages/biz/nsdm_subscription.py +++ b/catalog/packages/biz/nsdm_subscription.py @@ -22,12 +22,12 @@ from collections import Counter from rest_framework import status -from genericparser.packages import const -from genericparser.pub.database.models import NsdmSubscriptionModel -from genericparser.pub.exceptions import GenericparserException, \ +from catalog.packages import const +from catalog.pub.database.models import NsdmSubscriptionModel +from catalog.pub.exceptions import CatalogException, \ ResourceNotFoundException, \ NsdmBadRequestException, NsdmDuplicateSubscriptionException -from genericparser.pub.utils.values import ignore_case_get +from catalog.pub.utils.values import ignore_case_get logger = logging.getLogger(__name__) @@ -93,12 +93,12 @@ class NsdmSubscription: try: response = requests.get(self.callback_uri, timeout=2) if response.status_code != status.HTTP_204_NO_CONTENT: - raise GenericparserException("callbackUri %s returns %s status " - "code." % (self.callback_uri, - response.status_code)) + raise CatalogException("callbackUri %s returns %s status " + "code." % (self.callback_uri, + response.status_code)) except Exception: - raise GenericparserException("callbackUri %s didn't return 204 status" - "code." % self.callback_uri) + raise CatalogException("callbackUri %s didn't return 204 status" + "code." % self.callback_uri) def fill_resp_data(self, subscription): subscription_filter = dict() @@ -201,7 +201,7 @@ class NsdmSubscription: links = { "self": { "href": - const.NSDM_SUBSCRIPTION_ROOT_URI + self.subscription_id + const.NSDM_SUBSCRIPTION_ROOT_URI + self.subscription_id } } subscription_save_db = { diff --git a/genericparser/packages/biz/pnf_descriptor.py b/catalog/packages/biz/pnf_descriptor.py similarity index 84% rename from genericparser/packages/biz/pnf_descriptor.py rename to catalog/packages/biz/pnf_descriptor.py index 561c8fa..547c198 100644 --- a/genericparser/packages/biz/pnf_descriptor.py +++ b/catalog/packages/biz/pnf_descriptor.py @@ -18,13 +18,13 @@ import logging import os import uuid -from genericparser.packages.biz.common import read, save -from genericparser.packages.const import PKG_STATUS -from genericparser.pub.config.config import GENERICPARSER_ROOT_PATH -from genericparser.pub.database.models import NSPackageModel, PnfPackageModel -from genericparser.pub.exceptions import GenericparserException, ResourceNotFoundException -from genericparser.pub.utils import fileutil, toscaparsers -from genericparser.pub.utils.values import ignore_case_get +from catalog.packages.biz.common import read, save +from catalog.packages.const import PKG_STATUS +from catalog.pub.config.config import CATALOG_ROOT_PATH +from catalog.pub.database.models import NSPackageModel, PnfPackageModel +from catalog.pub.exceptions import CatalogException, ResourceNotFoundException +from catalog.pub.utils import fileutil, toscaparser +from catalog.pub.utils.values import ignore_case_get logger = logging.getLogger(__name__) @@ -77,7 +77,7 @@ class PnfDescriptor(object): pnf_pkgs = PnfPackageModel.objects.filter(pnfPackageId=pnfd_info_id) if not pnf_pkgs.exists(): logger.info('PNFD(%s) does not exist.' % pnfd_info_id) - raise GenericparserException('PNFD (%s) does not exist.' % pnfd_info_id) + raise CatalogException('PNFD (%s) does not exist.' % pnfd_info_id) pnf_pkgs.update(onboardingState=PKG_STATUS.UPLOADING) local_file_name = save(remote_file, pnfd_info_id) @@ -93,7 +93,7 @@ class PnfDescriptor(object): ''' if pnf_pkgs[0].usageState != PKG_STATUS.NOT_IN_USE: logger.info('PNFD(%s) shall be NOT_IN_USE.' % pnfd_info_id) - raise GenericparserException('PNFD(%s) shall be NOT_IN_USE.' % pnfd_info_id) + raise CatalogException('PNFD(%s) shall be NOT_IN_USE.' % pnfd_info_id) ''' del_pnfd_id = pnf_pkgs[0].pnfdId ns_pkgs = NSPackageModel.objects.all() @@ -106,9 +106,9 @@ class PnfDescriptor(object): for pnf in nsd_model['pnfs']: if del_pnfd_id == pnf["properties"]["id"]: logger.warn("PNFD(%s) is referenced in NSD", del_pnfd_id) - raise GenericparserException('PNFD(%s) is referenced.' % pnfd_info_id) + raise CatalogException('PNFD(%s) is referenced.' % pnfd_info_id) pnf_pkgs.delete() - pnf_pkg_path = os.path.join(GENERICPARSER_ROOT_PATH, pnfd_info_id) + pnf_pkg_path = os.path.join(CATALOG_ROOT_PATH, pnfd_info_id) fileutil.delete_dirs(pnf_pkg_path) logger.debug('PNFD(%s) has been deleted.' % pnfd_info_id) @@ -120,7 +120,7 @@ class PnfDescriptor(object): raise ResourceNotFoundException('PNFD(%s) does not exist.' % pnfd_info_id) if pnf_pkgs[0].onboardingState != PKG_STATUS.ONBOARDED: logger.error('PNFD(%s) is not ONBOARDED.' % pnfd_info_id) - raise GenericparserException('PNFD(%s) is not ONBOARDED.' % pnfd_info_id) + raise CatalogException('PNFD(%s) is not ONBOARDED.' % pnfd_info_id) local_file_path = pnf_pkgs[0].localFilePath start, end = 0, os.path.getsize(local_file_path) @@ -131,7 +131,7 @@ class PnfDescriptor(object): logger.info('Start to process PNFD(%s)...' % pnfd_info_id) pnf_pkgs = PnfPackageModel.objects.filter(pnfPackageId=pnfd_info_id) pnf_pkgs.update(onboardingState=PKG_STATUS.PROCESSING) - pnfd_json = toscaparsers.parse_pnfd(local_file_name) + pnfd_json = toscaparser.parse_pnfd(local_file_name) pnfd = json.JSONDecoder().decode(pnfd_json) logger.debug("pnfd_json is %s" % pnfd_json) @@ -152,7 +152,7 @@ class PnfDescriptor(object): if pnfd_id == "": pnfd_id = pnfd["metadata"].get("UUID", "") if pnfd_id == "": - raise GenericparserException('pnfd_id is Null.') + raise CatalogException('pnfd_id is Null.') if pnfdVersion == "": pnfdVersion = pnfd["metadata"].get("template_version", "") @@ -169,11 +169,10 @@ class PnfDescriptor(object): if pnfdVersion == "": pnfdName = pnfd["metadata"].get("name", "") - if pnfd_id: - other_pnf = PnfPackageModel.objects.filter(pnfdId=pnfd_id) - if other_pnf and other_pnf[0].pnfPackageId != pnfd_info_id: - logger.info('PNFD(%s) already exists.' % pnfd_id) - raise GenericparserException("PNFD(%s) already exists." % pnfd_id) + other_pnf = PnfPackageModel.objects.filter(pnfdId=pnfd_id) + if other_pnf and other_pnf[0].pnfPackageId != pnfd_info_id: + logger.info('PNFD(%s) already exists.' % pnfd_id) + raise CatalogException("PNFD(%s) already exists." % pnfd_id) pnf_pkgs.update( pnfdId=pnfd_id, @@ -213,14 +212,13 @@ class PnfDescriptor(object): pnf_pkg.update(onboardingState=PKG_STATUS.CREATED) def parse_pnfd(self, csar_id, inputs): - try: pnf_pkg = PnfPackageModel.objects.filter(pnfPackageId=csar_id) if not pnf_pkg: - raise GenericparserException("PNF CSAR(%s) does not exist." % csar_id) + raise CatalogException("PNF CSAR(%s) does not exist." % csar_id) csar_path = pnf_pkg[0].localFilePath - ret = {"model": toscaparsers.parse_pnfd(csar_path, inputs)} - except GenericparserException as e: + ret = {"model": toscaparser.parse_pnfd(csar_path, inputs)} + except CatalogException as e: return [1, e.args[0]] except Exception as e: logger.error(e.args[0]) diff --git a/genericparser/packages/biz/sdc_ns_package.py b/catalog/packages/biz/sdc_ns_package.py similarity index 82% rename from genericparser/packages/biz/sdc_ns_package.py rename to catalog/packages/biz/sdc_ns_package.py index 63a077f..4f9d460 100644 --- a/genericparser/packages/biz/sdc_ns_package.py +++ b/catalog/packages/biz/sdc_ns_package.py @@ -17,14 +17,14 @@ import os import sys import traceback -from genericparser.pub.config.config import GENERICPARSER_ROOT_PATH, GENERICPARSER_URL_PATH -from genericparser.pub.config.config import REG_TO_MSB_REG_PARAM -from genericparser.pub.database.models import NSPackageModel -from genericparser.pub.exceptions import GenericparserException -from genericparser.pub.msapi import sdc -from genericparser.pub.utils import toscaparsers -from genericparser.packages.biz.ns_descriptor import NsDescriptor -from genericparser.pub.utils import fileutil +from catalog.pub.config.config import CATALOG_ROOT_PATH, CATALOG_URL_PATH +from catalog.pub.config.config import REG_TO_MSB_REG_PARAM +from catalog.pub.database.models import NSPackageModel +from catalog.pub.exceptions import CatalogException +from catalog.pub.msapi import sdc +from catalog.pub.utils import toscaparser +from catalog.packages.biz.ns_descriptor import NsDescriptor +from catalog.pub.utils import fileutil logger = logging.getLogger(__name__) @@ -41,7 +41,7 @@ def ns_on_distribute(csar_id): ret = None try: ret = NsPackage().on_distribute(csar_id) - except GenericparserException as e: + except CatalogException as e: NsPackage().delete_csar(csar_id) return fmt_ns_pkg_rsp(STATUS_FAILED, e.args[0]) except: @@ -57,7 +57,7 @@ def ns_delete_csar(csar_id): ret = None try: ret = NsPackage().delete_csar(csar_id) - except GenericparserException as e: + except CatalogException as e: return fmt_ns_pkg_rsp(STATUS_FAILED, e.args[0]) except: logger.error(traceback.format_exc()) @@ -69,7 +69,7 @@ def ns_get_csars(): ret = None try: ret = NsPackage().get_csars() - except GenericparserException as e: + except CatalogException as e: return [1, e.args[0]] except: logger.error(traceback.format_exc()) @@ -81,7 +81,7 @@ def ns_get_csar(csar_id): ret = None try: ret = NsPackage().get_csar(csar_id) - except GenericparserException as e: + except CatalogException as e: return [1, e.args[0]] except Exception as e: logger.error(e.args[0]) @@ -95,10 +95,10 @@ def parse_nsd(csar_id, inputs): try: ns_pkg = NSPackageModel.objects.filter(nsPackageId=csar_id) if not ns_pkg: - raise GenericparserException("NS CSAR(%s) does not exist." % csar_id) + raise CatalogException("NS CSAR(%s) does not exist." % csar_id) csar_path = ns_pkg[0].localFilePath - ret = {"model": toscaparsers.parse_nsd(csar_path, inputs)} - except GenericparserException as e: + ret = {"model": toscaparser.parse_nsd(csar_path, inputs)} + except CatalogException as e: return [1, e.args[0]] except Exception as e: logger.error(e.args[0]) @@ -120,7 +120,7 @@ class NsPackage(object): return [1, "NS CSAR(%s) already exists." % csar_id] artifact = sdc.get_artifact(sdc.ASSETTYPE_SERVICES, csar_id) - local_path = os.path.join(GENERICPARSER_ROOT_PATH, csar_id) + local_path = os.path.join(CATALOG_ROOT_PATH, csar_id) csar_name = "%s.csar" % artifact.get("name", csar_id) local_file_name = sdc.download_artifacts(artifact["toscaModelURL"], local_path, csar_name) if local_file_name.endswith(".csar") or local_file_name.endswith(".zip"): @@ -163,10 +163,10 @@ class NsPackage(object): package_info["downloadUrl"] = "http://%s:%s/%s/%s/%s" % ( REG_TO_MSB_REG_PARAM[0]["nodes"][0]["ip"], REG_TO_MSB_REG_PARAM[0]["nodes"][0]["port"], - GENERICPARSER_URL_PATH, + CATALOG_URL_PATH, csar_id, csars[0].nsPackageUri) else: - raise GenericparserException("Ns package[%s] not Found." % csar_id) + raise CatalogException("Ns package[%s] not Found." % csar_id) return [0, {"csarId": csar_id, "packageInfo": package_info}] diff --git a/genericparser/packages/biz/sdc_service_package.py b/catalog/packages/biz/sdc_service_package.py similarity index 84% rename from genericparser/packages/biz/sdc_service_package.py rename to catalog/packages/biz/sdc_service_package.py index 0d57ceb..d0db6bf 100644 --- a/genericparser/packages/biz/sdc_service_package.py +++ b/catalog/packages/biz/sdc_service_package.py @@ -17,13 +17,13 @@ import traceback from coverage.xmlreport import os -from genericparser.packages.biz.service_descriptor import ServiceDescriptor -from genericparser.pub.config.config import GENERICPARSER_ROOT_PATH, REG_TO_MSB_REG_PARAM, GENERICPARSER_URL_PATH -from genericparser.pub.database.models import ServicePackageModel, VnfPackageModel, PnfPackageModel -from genericparser.pub.exceptions import GenericparserException, PackageNotFoundException, \ +from catalog.packages.biz.service_descriptor import ServiceDescriptor +from catalog.pub.config.config import CATALOG_ROOT_PATH, REG_TO_MSB_REG_PARAM, CATALOG_URL_PATH +from catalog.pub.database.models import ServicePackageModel, VnfPackageModel, PnfPackageModel +from catalog.pub.exceptions import CatalogException, PackageNotFoundException, \ PackageHasExistsException -from genericparser.pub.msapi import sdc -from genericparser.pub.utils import fileutil, toscaparsers +from catalog.pub.msapi import sdc +from catalog.pub.utils import fileutil, toscaparser logger = logging.getLogger(__name__) @@ -49,10 +49,10 @@ class ServicePackage(object): if not VnfPackageModel.objects.filter(vnfPackageId=resource['resourceUUID']) and \ not PnfPackageModel.objects.filter(pnfPackageId=resource['resourceUUID']): logger.error("Resource [%s] is not distributed.", resource['resourceUUID']) - raise GenericparserException("Resource (%s) is not distributed." % resource['resourceUUID']) + raise CatalogException("Resource (%s) is not distributed." % resource['resourceUUID']) # download csar package - local_path = os.path.join(GENERICPARSER_ROOT_PATH, csar_id) + local_path = os.path.join(CATALOG_ROOT_PATH, csar_id) csar_name = "%s.csar" % service.get("name", csar_id) local_file_name = sdc.download_artifacts(service["toscaModelURL"], local_path, csar_name) if local_file_name.endswith(".csar") or local_file_name.endswith(".zip"): @@ -96,7 +96,7 @@ class ServicePackage(object): package_info["downloadUrl"] = "http://%s:%s/%s/%s/%s" % ( REG_TO_MSB_REG_PARAM[0]["nodes"][0]["ip"], REG_TO_MSB_REG_PARAM[0]["nodes"][0]["port"], - GENERICPARSER_URL_PATH, + CATALOG_URL_PATH, csar_id, csars[0].servicePackageUri) else: @@ -113,9 +113,9 @@ class ServicePackage(object): try: csar_path = service_pkg[0].localFilePath - ret = {"model": toscaparsers.parse_sd(csar_path, inputs)} + ret = {"model": toscaparser.parse_sd(csar_path, inputs)} return ret - except GenericparserException as e: + except CatalogException as e: logger.error(e.args[0]) raise e except Exception as e: diff --git a/genericparser/packages/biz/sdc_vnf_package.py b/catalog/packages/biz/sdc_vnf_package.py similarity index 84% rename from genericparser/packages/biz/sdc_vnf_package.py rename to catalog/packages/biz/sdc_vnf_package.py index 3a271b7..571c3bb 100644 --- a/genericparser/packages/biz/sdc_vnf_package.py +++ b/catalog/packages/biz/sdc_vnf_package.py @@ -19,15 +19,15 @@ import sys import threading import traceback -from genericparser.packages.const import PKG_STATUS -from genericparser.pub.config.config import GENERICPARSER_ROOT_PATH, GENERICPARSER_URL_PATH -from genericparser.pub.config.config import REG_TO_MSB_REG_PARAM -from genericparser.pub.database.models import VnfPackageModel -from genericparser.pub.exceptions import GenericparserException -from genericparser.pub.msapi import sdc -from genericparser.pub.utils import fileutil -from genericparser.pub.utils import toscaparsers -from genericparser.pub.utils.jobutil import JobUtil +from catalog.packages.const import PKG_STATUS +from catalog.pub.config.config import CATALOG_ROOT_PATH, CATALOG_URL_PATH +from catalog.pub.config.config import REG_TO_MSB_REG_PARAM +from catalog.pub.database.models import VnfPackageModel +from catalog.pub.exceptions import CatalogException +from catalog.pub.msapi import sdc +from catalog.pub.utils import fileutil +from catalog.pub.utils import toscaparser +from catalog.pub.utils.jobutil import JobUtil logger = logging.getLogger(__name__) @@ -38,7 +38,7 @@ def nf_get_csars(): ret = None try: ret = NfPackage().get_csars() - except GenericparserException as e: + except CatalogException as e: return [1, e.args[0]] except Exception as e: logger.error(e.args[0]) @@ -51,7 +51,7 @@ def nf_get_csar(csar_id): ret = None try: ret = NfPackage().get_csar(csar_id) - except GenericparserException as e: + except CatalogException as e: return [1, e.args[0]] except Exception as e: logger.error(e.args[0]) @@ -65,10 +65,10 @@ def parse_vnfd(csar_id, inputs): try: nf_pkg = VnfPackageModel.objects.filter(vnfPackageId=csar_id) if not nf_pkg: - raise GenericparserException("VNF CSAR(%s) does not exist." % csar_id) + raise CatalogException("VNF CSAR(%s) does not exist." % csar_id) csar_path = nf_pkg[0].localFilePath - ret = {"model": toscaparsers.parse_vnfd(csar_path, inputs)} - except GenericparserException as e: + ret = {"model": toscaparser.parse_vnfd(csar_path, inputs)} + except CatalogException as e: return [1, e.args[0]] except Exception as e: logger.error(e.args[0]) @@ -89,12 +89,12 @@ class NfDistributeThread(threading.Thread): self.lab_vim_id = lab_vim_id self.job_id = job_id - self.csar_save_path = os.path.join(GENERICPARSER_ROOT_PATH, csar_id) + self.csar_save_path = os.path.join(CATALOG_ROOT_PATH, csar_id) def run(self): try: self.on_distribute() - except GenericparserException as e: + except CatalogException as e: self.rollback_distribute() JobUtil.add_job_status(self.job_id, JOB_ERROR, e.args[0]) except Exception as e: @@ -118,7 +118,7 @@ class NfDistributeThread(threading.Thread): return artifact = sdc.get_artifact(sdc.ASSETTYPE_RESOURCES, self.csar_id) - local_path = os.path.join(GENERICPARSER_ROOT_PATH, self.csar_id) + local_path = os.path.join(CATALOG_ROOT_PATH, self.csar_id) csar_name = "%s.csar" % artifact.get("name", self.csar_id) local_file_name = sdc.download_artifacts(artifact["toscaModelURL"], local_path, csar_name) if local_file_name.endswith(".csar") or local_file_name.endswith(".zip"): @@ -126,16 +126,16 @@ class NfDistributeThread(threading.Thread): if os.path.exists(artifact_vnf_file): local_file_name = artifact_vnf_file - vnfd_json = toscaparsers.parse_vnfd(local_file_name) + vnfd_json = toscaparser.parse_vnfd(local_file_name) vnfd = json.JSONDecoder().decode(vnfd_json) if not vnfd.get("vnf"): - raise GenericparserException("VNF properties and metadata in VNF Package(id=%s) are empty." % self.csar_id) + raise CatalogException("VNF properties and metadata in VNF Package(id=%s) are empty." % self.csar_id) vnfd_id = vnfd["vnf"]["properties"].get("descriptor_id", "") if VnfPackageModel.objects.filter(vnfdId=vnfd_id): logger.error("VNF package(%s) already exists.", vnfd_id) - raise GenericparserException("VNF package(%s) already exists." % vnfd_id) + raise CatalogException("VNF package(%s) already exists." % vnfd_id) JobUtil.add_job_status(self.job_id, 30, "Save CSAR(%s) to database." % self.csar_id) vnfd_ver = vnfd["vnf"]["properties"].get("descriptor_version", "") vnf_provider = vnfd["vnf"]["properties"].get("provider", "") @@ -180,7 +180,7 @@ class NfPkgDeleteThread(threading.Thread): def run(self): try: self.delete_csar() - except GenericparserException as e: + except CatalogException as e: JobUtil.add_job_status(self.job_id, JOB_ERROR, e.args[0]) except Exception as e: logger.error(e.args[0]) @@ -200,7 +200,7 @@ class NfPkgDeleteThread(threading.Thread): JobUtil.add_job_status(self.job_id, 50, "Delete local CSAR(%s) file." % self.csar_id) - csar_save_path = os.path.join(GENERICPARSER_ROOT_PATH, self.csar_id) + csar_save_path = os.path.join(CATALOG_ROOT_PATH, self.csar_id) fileutil.delete_dirs(csar_save_path) JobUtil.add_job_status(self.job_id, 100, "Delete CSAR(%s) successfully." % self.csar_id) @@ -240,11 +240,11 @@ class NfPackage(object): pkg_info["downloadUrl"] = "http://%s:%s/%s/%s/%s" % ( REG_TO_MSB_REG_PARAM[0]["nodes"][0]["ip"], REG_TO_MSB_REG_PARAM[0]["nodes"][0]["port"], - GENERICPARSER_URL_PATH, + CATALOG_URL_PATH, db_csar_id, nf_pkg[0].vnfPackageUri) else: - raise GenericparserException("Vnf package[%s] not Found." % csar_id) + raise CatalogException("Vnf package[%s] not Found." % csar_id) csar_info = { "csarId": db_csar_id, diff --git a/genericparser/packages/biz/service_descriptor.py b/catalog/packages/biz/service_descriptor.py similarity index 84% rename from genericparser/packages/biz/service_descriptor.py rename to catalog/packages/biz/service_descriptor.py index b8cba6d..11b6fb3 100644 --- a/genericparser/packages/biz/service_descriptor.py +++ b/catalog/packages/biz/service_descriptor.py @@ -17,13 +17,12 @@ import logging import os import uuid - -from genericparser.packages.const import PKG_STATUS -from genericparser.pub.config.config import GENERICPARSER_ROOT_PATH -from genericparser.pub.database.models import ServicePackageModel, VnfPackageModel, PnfPackageModel -from genericparser.pub.exceptions import GenericparserException, PackageNotFoundException -from genericparser.pub.utils import toscaparsers, fileutil -from genericparser.pub.utils.values import ignore_case_get +from catalog.packages.const import PKG_STATUS +from catalog.pub.config.config import CATALOG_ROOT_PATH +from catalog.pub.database.models import ServicePackageModel, VnfPackageModel, PnfPackageModel +from catalog.pub.exceptions import CatalogException, PackageNotFoundException +from catalog.pub.utils import toscaparser, fileutil +from catalog.pub.utils.values import ignore_case_get logger = logging.getLogger(__name__) @@ -62,7 +61,7 @@ class ServiceDescriptor(object): service_pkgs = ServicePackageModel.objects.filter(servicePackageId=serviced_info_id) service_pkgs.update(onboardingState=PKG_STATUS.PROCESSING) - serviced_json = toscaparsers.parse_sd(local_file_name) + serviced_json = toscaparser.parse_sd(local_file_name) serviced = json.JSONDecoder().decode(serviced_json) serviced_id = serviced.get("service", {}).get("properties", {}).get("descriptor_id", "") @@ -71,11 +70,11 @@ class ServiceDescriptor(object): serviced_designer = serviced.get("service", {}).get("properties", {}).get("designer", "") invariant_id = serviced.get("service", {}).get("properties", {}).get("invariant_id", "") if serviced_id == "": - raise GenericparserException("serviced_id(%s) does not exist in metadata." % serviced_id) + raise CatalogException("serviced_id(%s) does not exist in metadata." % serviced_id) other_nspkg = ServicePackageModel.objects.filter(servicedId=serviced_id) if other_nspkg and other_nspkg[0].servicePackageId != serviced_info_id: logger.warn("ServiceD(%s,%s) already exists.", serviced_id, other_nspkg[0].servicePackageId) - raise GenericparserException("ServiceD(%s) already exists." % serviced_id) + raise CatalogException("ServiceD(%s) already exists." % serviced_id) for vnf in serviced["vnfs"]: vnfd_id = vnf["properties"].get("descriptor_id", "undefined") @@ -87,7 +86,7 @@ class ServiceDescriptor(object): if not pkg: vnfd_name = vnf.get("vnf_id", "undefined") logger.error("[%s] is not distributed.", vnfd_name) - raise GenericparserException("VNF package(%s) is not distributed." % vnfd_id) + raise CatalogException("VNF package(%s) is not distributed." % vnfd_id) for pnf in serviced["pnfs"]: pnfd_id = pnf["properties"].get("descriptor_id", "undefined") @@ -99,7 +98,7 @@ class ServiceDescriptor(object): if not pkg: pnfd_name = pnf.get("pnf_id", "undefined") logger.error("[%s] is not distributed.", pnfd_name) - raise GenericparserException("PNF package(%s) is not distributed." % pnfd_name) + raise CatalogException("PNF package(%s) is not distributed." % pnfd_name) service_pkgs.update( servicedId=serviced_id, @@ -125,6 +124,6 @@ class ServiceDescriptor(object): logger.warn('ServiceD(%s) not found.' % serviced_info_id) raise PackageNotFoundException("Service package[%s] not Found." % serviced_info_id) service_pkgs.delete() - service_pkg_path = os.path.join(GENERICPARSER_ROOT_PATH, serviced_info_id) + service_pkg_path = os.path.join(CATALOG_ROOT_PATH, serviced_info_id) fileutil.delete_dirs(service_pkg_path) logger.info('ServiceD(%s) has been deleted.' % serviced_info_id) diff --git a/genericparser/packages/biz/vnf_package.py b/catalog/packages/biz/vnf_package.py similarity index 84% rename from genericparser/packages/biz/vnf_package.py rename to catalog/packages/biz/vnf_package.py index cf67a76..585a599 100644 --- a/genericparser/packages/biz/vnf_package.py +++ b/catalog/packages/biz/vnf_package.py @@ -21,13 +21,13 @@ import traceback import urllib import uuid -from genericparser.packages.biz.common import parse_file_range, read, save -from genericparser.pub.config.config import GENERICPARSER_ROOT_PATH -from genericparser.pub.database.models import VnfPackageModel, NSPackageModel -from genericparser.pub.exceptions import GenericparserException, ResourceNotFoundException -from genericparser.pub.utils.values import ignore_case_get -from genericparser.pub.utils import fileutil, toscaparsers -from genericparser.packages.const import PKG_STATUS +from catalog.packages.biz.common import parse_file_range, read, save +from catalog.pub.config.config import CATALOG_ROOT_PATH +from catalog.pub.database.models import VnfPackageModel, NSPackageModel +from catalog.pub.exceptions import CatalogException, ResourceNotFoundException +from catalog.pub.utils.values import ignore_case_get +from catalog.pub.utils import fileutil, toscaparser +from catalog.packages.const import PKG_STATUS logger = logging.getLogger(__name__) @@ -80,9 +80,9 @@ class VnfPackage(object): return ''' if vnf_pkg[0].operationalState != PKG_STATUS.DISABLED: - raise GenericparserException("The VNF package (%s) is not disabled" % vnf_pkg_id) + raise CatalogException("The VNF package (%s) is not disabled" % vnf_pkg_id) if vnf_pkg[0].usageState != PKG_STATUS.NOT_IN_USE: - raise GenericparserException("The VNF package (%s) is in use" % vnf_pkg_id) + raise CatalogException("The VNF package (%s) is in use" % vnf_pkg_id) ''' del_vnfd_id = vnf_pkg[0].vnfdId ns_pkgs = NSPackageModel.objects.all() @@ -94,9 +94,9 @@ class VnfPackage(object): continue for vnf in nsd_model['vnfs']: if del_vnfd_id == vnf["properties"]["descriptor_id"]: - raise GenericparserException('VNFD(%s) is referenced.' % del_vnfd_id) + raise CatalogException('VNFD(%s) is referenced.' % del_vnfd_id) vnf_pkg.delete() - vnf_pkg_path = os.path.join(GENERICPARSER_ROOT_PATH, vnf_pkg_id) + vnf_pkg_path = os.path.join(CATALOG_ROOT_PATH, vnf_pkg_id) fileutil.delete_dirs(vnf_pkg_path) logger.info('VNF package(%s) has been deleted.' % vnf_pkg_id) @@ -105,7 +105,7 @@ class VnfPackage(object): vnf_pkg = VnfPackageModel.objects.filter(vnfPackageId=vnf_pkg_id) # if vnf_pkg[0].onboardingState != PKG_STATUS.CREATED: # logger.error("VNF package(%s) is not CREATED" % vnf_pkg_id) - # raise GenericparserException("VNF package(%s) is not CREATED" % vnf_pkg_id) + # raise CatalogException("VNF package(%s) is not CREATED" % vnf_pkg_id) vnf_pkg.update(onboardingState=PKG_STATUS.UPLOADING) local_file_name = save(remote_file, vnf_pkg_id) @@ -119,7 +119,7 @@ class VnfPackage(object): logger.error('VNF package(%s) does not exist.' % vnf_pkg_id) raise ResourceNotFoundException('VNF package(%s) does not exist.' % vnf_pkg_id) if nf_pkg[0].onboardingState != PKG_STATUS.ONBOARDED: - raise GenericparserException("VNF package (%s) is not on-boarded" % vnf_pkg_id) + raise CatalogException("VNF package (%s) is not on-boarded" % vnf_pkg_id) local_file_path = nf_pkg[0].localFilePath start, end = parse_file_range(local_file_path, file_range) @@ -138,7 +138,7 @@ class VnfPkgUploadThread(threading.Thread): try: self.upload_vnf_pkg_from_uri() parse_vnfd_and_save(self.vnf_pkg_id, self.upload_file_name) - except GenericparserException as e: + except CatalogException as e: logger.error(e.args[0]) except Exception as e: logger.error(e.args[0]) @@ -150,13 +150,13 @@ class VnfPkgUploadThread(threading.Thread): vnf_pkg = VnfPackageModel.objects.filter(vnfPackageId=self.vnf_pkg_id) if vnf_pkg[0].onboardingState != PKG_STATUS.CREATED: logger.error("VNF package(%s) is not CREATED" % self.vnf_pkg_id) - raise GenericparserException("VNF package (%s) is not created" % self.vnf_pkg_id) + raise CatalogException("VNF package (%s) is not created" % self.vnf_pkg_id) vnf_pkg.update(onboardingState=PKG_STATUS.UPLOADING) uri = ignore_case_get(self.data, "addressInformation") response = urllib.request.urlopen(uri) - local_file_dir = os.path.join(GENERICPARSER_ROOT_PATH, self.vnf_pkg_id) + local_file_dir = os.path.join(CATALOG_ROOT_PATH, self.vnf_pkg_id) self.upload_file_name = os.path.join(local_file_dir, os.path.basename(uri)) if not os.path.exists(local_file_dir): fileutil.make_dirs(local_file_dir) @@ -190,7 +190,7 @@ def parse_vnfd_and_save(vnf_pkg_id, vnf_pkg_path): logger.info('Start to process VNF package(%s)...' % vnf_pkg_id) vnf_pkg = VnfPackageModel.objects.filter(vnfPackageId=vnf_pkg_id) vnf_pkg.update(onboardingState=PKG_STATUS.PROCESSING) - vnfd_json = toscaparsers.parse_vnfd(vnf_pkg_path) + vnfd_json = toscaparser.parse_vnfd(vnf_pkg_path) vnfd = json.JSONDecoder().decode(vnfd_json) if vnfd.get("vnf", "") != "": @@ -198,7 +198,7 @@ def parse_vnfd_and_save(vnf_pkg_id, vnf_pkg_path): other_pkg = VnfPackageModel.objects.filter(vnfdId=vnfd_id) if other_pkg and other_pkg[0].vnfPackageId != vnf_pkg_id: logger.error("VNF package(%s,%s) already exists.", other_pkg[0].vnfPackageId, vnfd_id) - raise GenericparserException("VNF package(%s) already exists." % vnfd_id) + raise CatalogException("VNF package(%s) already exists." % vnfd_id) vnf_provider = vnfd["vnf"]["properties"].get("provider", "") vnfd_ver = vnfd["vnf"]["properties"].get("descriptor_version", "") vnf_software_version = vnfd["vnf"]["properties"].get("software_version", "") @@ -218,7 +218,7 @@ def parse_vnfd_and_save(vnf_pkg_id, vnf_pkg_path): vnfPackageUri=os.path.split(vnf_pkg_path)[-1] ) else: - raise GenericparserException("VNF propeties and metadata in VNF Package(id=%s) are empty." % vnf_pkg_id) + raise CatalogException("VNF propeties and metadata in VNF Package(id=%s) are empty." % vnf_pkg_id) logger.info('VNF package(%s) has been processed(done).' % vnf_pkg_id) diff --git a/genericparser/packages/biz/vnf_pkg_artifacts.py b/catalog/packages/biz/vnf_pkg_artifacts.py similarity index 89% rename from genericparser/packages/biz/vnf_pkg_artifacts.py rename to catalog/packages/biz/vnf_pkg_artifacts.py index 0cec274..37021eb 100644 --- a/genericparser/packages/biz/vnf_pkg_artifacts.py +++ b/catalog/packages/biz/vnf_pkg_artifacts.py @@ -14,9 +14,9 @@ import logging -from genericparser.pub.database.models import VnfPackageModel -from genericparser.pub.exceptions import ResourceNotFoundException, ArtifactNotFoundException -from genericparser.pub.utils import fileutil +from catalog.pub.database.models import VnfPackageModel +from catalog.pub.exceptions import ResourceNotFoundException, ArtifactNotFoundException +from catalog.pub.utils import fileutil logger = logging.getLogger(__name__) diff --git a/genericparser/packages/biz/vnf_pkg_subscription.py b/catalog/packages/biz/vnf_pkg_subscription.py similarity index 97% rename from genericparser/packages/biz/vnf_pkg_subscription.py rename to catalog/packages/biz/vnf_pkg_subscription.py index 8da82ad..29ef92e 100644 --- a/genericparser/packages/biz/vnf_pkg_subscription.py +++ b/catalog/packages/biz/vnf_pkg_subscription.py @@ -22,11 +22,11 @@ import uuid from collections import Counter from rest_framework import status -from genericparser.packages import const -from genericparser.pub.database.models import VnfPkgSubscriptionModel -from genericparser.pub.exceptions import VnfPkgSubscriptionException,\ +from catalog.packages import const +from catalog.pub.database.models import VnfPkgSubscriptionModel +from catalog.pub.exceptions import VnfPkgSubscriptionException,\ VnfPkgDuplicateSubscriptionException, SubscriptionDoesNotExistsException -from genericparser.pub.utils.values import ignore_case_get +from catalog.pub.utils.values import ignore_case_get logger = logging.getLogger(__name__) diff --git a/genericparser/packages/const.py b/catalog/packages/const.py similarity index 97% rename from genericparser/packages/const.py rename to catalog/packages/const.py index 2b8778b..cd09b40 100644 --- a/genericparser/packages/const.py +++ b/catalog/packages/const.py @@ -12,7 +12,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -from genericparser.pub.utils.jobutil import enum +from catalog.pub.utils.jobutil import enum PKG_STATUS = enum( CREATED="CREATED", diff --git a/genericparser/packages/serializers/__init__.py b/catalog/packages/serializers/__init__.py similarity index 100% rename from genericparser/packages/serializers/__init__.py rename to catalog/packages/serializers/__init__.py diff --git a/genericparser/packages/serializers/genericparser_serializers.py b/catalog/packages/serializers/catalog_serializers.py similarity index 98% rename from genericparser/packages/serializers/genericparser_serializers.py rename to catalog/packages/serializers/catalog_serializers.py index 7bcb9ef..f53b06d 100644 --- a/genericparser/packages/serializers/genericparser_serializers.py +++ b/catalog/packages/serializers/catalog_serializers.py @@ -14,8 +14,8 @@ from rest_framework import serializers -from genericparser.pub.utils.toscaparsers.nsdmodel import EtsiNsdInfoModel -from genericparser.pub.utils.toscaparsers.vnfdmodel import EtsiVnfdInfoModel +from catalog.pub.utils.toscaparser.nsdmodel import EtsiNsdInfoModel +from catalog.pub.utils.toscaparser.vnfdmodel import EtsiVnfdInfoModel class PostJobRequestSerializer(serializers.Serializer): diff --git a/genericparser/packages/serializers/checksum.py b/catalog/packages/serializers/checksum.py similarity index 100% rename from genericparser/packages/serializers/checksum.py rename to catalog/packages/serializers/checksum.py diff --git a/genericparser/packages/serializers/create_nsd_info_request.py b/catalog/packages/serializers/create_nsd_info_request.py similarity index 100% rename from genericparser/packages/serializers/create_nsd_info_request.py rename to catalog/packages/serializers/create_nsd_info_request.py diff --git a/genericparser/packages/serializers/create_pnfd_info_request.py b/catalog/packages/serializers/create_pnfd_info_request.py similarity index 100% rename from genericparser/packages/serializers/create_pnfd_info_request.py rename to catalog/packages/serializers/create_pnfd_info_request.py diff --git a/genericparser/packages/serializers/create_vnf_pkg_info_req.py b/catalog/packages/serializers/create_vnf_pkg_info_req.py similarity index 100% rename from genericparser/packages/serializers/create_vnf_pkg_info_req.py rename to catalog/packages/serializers/create_vnf_pkg_info_req.py diff --git a/genericparser/packages/serializers/link.py b/catalog/packages/serializers/link.py similarity index 100% rename from genericparser/packages/serializers/link.py rename to catalog/packages/serializers/link.py diff --git a/genericparser/packages/serializers/nsd_info.py b/catalog/packages/serializers/nsd_info.py similarity index 100% rename from genericparser/packages/serializers/nsd_info.py rename to catalog/packages/serializers/nsd_info.py diff --git a/genericparser/packages/serializers/nsd_infos.py b/catalog/packages/serializers/nsd_infos.py similarity index 100% rename from genericparser/packages/serializers/nsd_infos.py rename to catalog/packages/serializers/nsd_infos.py diff --git a/genericparser/packages/serializers/nsdm_filter_data.py b/catalog/packages/serializers/nsdm_filter_data.py similarity index 98% rename from genericparser/packages/serializers/nsdm_filter_data.py rename to catalog/packages/serializers/nsdm_filter_data.py index 43213e0..47d7680 100644 --- a/genericparser/packages/serializers/nsdm_filter_data.py +++ b/catalog/packages/serializers/nsdm_filter_data.py @@ -14,7 +14,7 @@ from rest_framework import serializers -from genericparser.packages.const import NSDM_NOTIFICATION_TYPES +from catalog.packages.const import NSDM_NOTIFICATION_TYPES class NsdmNotificationsFilter(serializers.Serializer): diff --git a/genericparser/packages/serializers/nsdm_subscription.py b/catalog/packages/serializers/nsdm_subscription.py similarity index 100% rename from genericparser/packages/serializers/nsdm_subscription.py rename to catalog/packages/serializers/nsdm_subscription.py diff --git a/genericparser/packages/serializers/pnfd_info.py b/catalog/packages/serializers/pnfd_info.py similarity index 100% rename from genericparser/packages/serializers/pnfd_info.py rename to catalog/packages/serializers/pnfd_info.py diff --git a/genericparser/packages/serializers/pnfd_infos.py b/catalog/packages/serializers/pnfd_infos.py similarity index 100% rename from genericparser/packages/serializers/pnfd_infos.py rename to catalog/packages/serializers/pnfd_infos.py diff --git a/genericparser/packages/serializers/problem_details.py b/catalog/packages/serializers/problem_details.py similarity index 100% rename from genericparser/packages/serializers/problem_details.py rename to catalog/packages/serializers/problem_details.py diff --git a/genericparser/packages/serializers/response.py b/catalog/packages/serializers/response.py similarity index 100% rename from genericparser/packages/serializers/response.py rename to catalog/packages/serializers/response.py diff --git a/genericparser/packages/serializers/subscription_auth_data.py b/catalog/packages/serializers/subscription_auth_data.py similarity index 98% rename from genericparser/packages/serializers/subscription_auth_data.py rename to catalog/packages/serializers/subscription_auth_data.py index 9248fb1..bf512d6 100644 --- a/genericparser/packages/serializers/subscription_auth_data.py +++ b/catalog/packages/serializers/subscription_auth_data.py @@ -14,7 +14,7 @@ from rest_framework import serializers -from genericparser.packages import const +from catalog.packages import const class OAuthCredentialsSerializer(serializers.Serializer): diff --git a/genericparser/packages/serializers/upload_vnf_pkg_from_uri_req.py b/catalog/packages/serializers/upload_vnf_pkg_from_uri_req.py similarity index 100% rename from genericparser/packages/serializers/upload_vnf_pkg_from_uri_req.py rename to catalog/packages/serializers/upload_vnf_pkg_from_uri_req.py diff --git a/genericparser/packages/serializers/vnf_pkg_artifact_info.py b/catalog/packages/serializers/vnf_pkg_artifact_info.py similarity index 100% rename from genericparser/packages/serializers/vnf_pkg_artifact_info.py rename to catalog/packages/serializers/vnf_pkg_artifact_info.py diff --git a/genericparser/packages/serializers/vnf_pkg_info.py b/catalog/packages/serializers/vnf_pkg_info.py similarity index 100% rename from genericparser/packages/serializers/vnf_pkg_info.py rename to catalog/packages/serializers/vnf_pkg_info.py diff --git a/genericparser/packages/serializers/vnf_pkg_infos.py b/catalog/packages/serializers/vnf_pkg_infos.py similarity index 100% rename from genericparser/packages/serializers/vnf_pkg_infos.py rename to catalog/packages/serializers/vnf_pkg_infos.py diff --git a/genericparser/packages/serializers/vnf_pkg_notifications.py b/catalog/packages/serializers/vnf_pkg_notifications.py similarity index 98% rename from genericparser/packages/serializers/vnf_pkg_notifications.py rename to catalog/packages/serializers/vnf_pkg_notifications.py index 4bfdf84..5e023af 100644 --- a/genericparser/packages/serializers/vnf_pkg_notifications.py +++ b/catalog/packages/serializers/vnf_pkg_notifications.py @@ -14,7 +14,7 @@ from rest_framework import serializers -from genericparser.packages.const import NOTIFICATION_TYPES +from catalog.packages.const import NOTIFICATION_TYPES PackageOperationalStateType = ["ENABLED", "DISABLED"] PackageUsageStateType = ["IN_USE", "NOT_IN_USE"] diff --git a/genericparser/packages/serializers/vnf_pkg_software_image_info.py b/catalog/packages/serializers/vnf_pkg_software_image_info.py similarity index 100% rename from genericparser/packages/serializers/vnf_pkg_software_image_info.py rename to catalog/packages/serializers/vnf_pkg_software_image_info.py diff --git a/genericparser/packages/serializers/vnf_pkg_subscription.py b/catalog/packages/serializers/vnf_pkg_subscription.py similarity index 95% rename from genericparser/packages/serializers/vnf_pkg_subscription.py rename to catalog/packages/serializers/vnf_pkg_subscription.py index b5a0bc4..edcd6fe 100644 --- a/genericparser/packages/serializers/vnf_pkg_subscription.py +++ b/catalog/packages/serializers/vnf_pkg_subscription.py @@ -14,8 +14,8 @@ from rest_framework import serializers -from genericparser.packages.serializers import subscription_auth_data -from genericparser.packages.serializers import vnf_pkg_notifications +from catalog.packages.serializers import subscription_auth_data +from catalog.packages.serializers import vnf_pkg_notifications class LinkSerializer(serializers.Serializer): diff --git a/genericparser/packages/tests/__init__.py b/catalog/packages/tests/__init__.py similarity index 100% rename from genericparser/packages/tests/__init__.py rename to catalog/packages/tests/__init__.py diff --git a/genericparser/packages/tests/const.py b/catalog/packages/tests/const.py similarity index 100% rename from genericparser/packages/tests/const.py rename to catalog/packages/tests/const.py diff --git a/genericparser/packages/tests/test_health_check.py b/catalog/packages/tests/test_health_check.py similarity index 84% rename from genericparser/packages/tests/test_health_check.py rename to catalog/packages/tests/test_health_check.py index e074bba..f8c3b56 100644 --- a/genericparser/packages/tests/test_health_check.py +++ b/catalog/packages/tests/test_health_check.py @@ -37,6 +37,12 @@ class TestHealthCheck(TestCase): resp_data = json.loads(response.content) self.assertEqual({"status": "active"}, resp_data) + def test_catalog_health_check(self): + response = self.client.get("/api/catalog/v1/health_check") + self.assertEqual(status.HTTP_200_OK, response.status_code, response.content) + resp_data = json.loads(response.content) + self.assertEqual({"status": "active"}, resp_data) + def test_parser_health_check(self): response = self.client.get("/api/parser/v1/health_check") self.assertEqual(status.HTTP_200_OK, response.status_code, response.content) diff --git a/genericparser/packages/tests/test_ns_descriptor.py b/catalog/packages/tests/test_ns_descriptor.py similarity index 92% rename from genericparser/packages/tests/test_ns_descriptor.py rename to catalog/packages/tests/test_ns_descriptor.py index 36933ac..473786e 100644 --- a/genericparser/packages/tests/test_ns_descriptor.py +++ b/catalog/packages/tests/test_ns_descriptor.py @@ -20,12 +20,12 @@ import os from django.test import TestCase from rest_framework import status from rest_framework.test import APIClient -from genericparser.packages.biz.ns_descriptor import NsDescriptor -from genericparser.packages.const import PKG_STATUS -from genericparser.packages.tests.const import nsd_data -from genericparser.pub.config.config import GENERICPARSER_ROOT_PATH -from genericparser.pub.database.models import NSPackageModel, VnfPackageModel, PnfPackageModel -from genericparser.pub.utils import toscaparsers +from catalog.packages.biz.ns_descriptor import NsDescriptor +from catalog.packages.const import PKG_STATUS +from catalog.packages.tests.const import nsd_data +from catalog.pub.config.config import CATALOG_ROOT_PATH +from catalog.pub.database.models import NSPackageModel, VnfPackageModel, PnfPackageModel +from catalog.pub.utils import toscaparser class TestNsDescriptor(TestCase): @@ -78,9 +78,7 @@ class TestNsDescriptor(TestCase): ) response.data.pop('id') self.assertEqual(response.status_code, status.HTTP_201_CREATED) - # self.assertEqual(expected_reponse_data, response.data) - for key, value in expected_reponse_data.items(): - self.assertEqual(response.data[key], value) + self.assertEqual(expected_reponse_data, response.data) def test_query_multiple_nsds_normal(self): expected_reponse_data = [ @@ -156,7 +154,7 @@ class TestNsDescriptor(TestCase): response = self.client.delete("/api/nsd/v1/ns_descriptors/21", format='json') self.assertEqual(response.status_code, status.HTTP_204_NO_CONTENT) - @mock.patch.object(toscaparsers, 'parse_nsd') + @mock.patch.object(toscaparser, 'parse_nsd') def test_nsd_content_upload_normal(self, mock_parse_nsd): user_defined_data_json = json.JSONEncoder().encode(self.user_defined_data) mock_parse_nsd.return_value = json.JSONEncoder().encode(nsd_data) @@ -185,7 +183,7 @@ class TestNsDescriptor(TestCase): {'file': fp}, ) file_content = '' - with open(os.path.join(GENERICPARSER_ROOT_PATH, '22/nsd_content.txt')) as fp: + with open(os.path.join(CATALOG_ROOT_PATH, '22/nsd_content.txt')) as fp: data = fp.read() file_content = '%s%s' % (file_content, data) ns_pkg = NSPackageModel.objects.filter(nsPackageId="22") @@ -220,9 +218,9 @@ class TestNsDescriptor(TestCase): ) file_content = "" for data in response.streaming_content: - file_content = '%s%s' % (file_content, data) + file_content = '%s%s' % (file_content, data.decode()) self.assertEqual(response.status_code, status.HTTP_200_OK) - self.assertEqual("b'test1test2'", file_content) + self.assertEqual("test1test2", file_content) os.remove('nsd_content.txt') def test_nsd_content_download_when_ns_not_exist(self): @@ -255,9 +253,9 @@ class TestNsDescriptor(TestCase): ) partial_file_content = '' for data in response.streaming_content: - partial_file_content = '%s%s' % (partial_file_content, data) + partial_file_content = '%s%s' % (partial_file_content, data.decode()) self.assertEqual(response.status_code, status.HTTP_200_OK) - self.assertEqual("b'test2'", partial_file_content) + self.assertEqual("test2", partial_file_content) os.remove('nsd_content.txt') @mock.patch.object(NsDescriptor, 'create') diff --git a/genericparser/packages/tests/test_nsdm_subscription.py b/catalog/packages/tests/test_nsdm_subscription.py similarity index 97% rename from genericparser/packages/tests/test_nsdm_subscription.py rename to catalog/packages/tests/test_nsdm_subscription.py index c6c194e..f73c416 100644 --- a/genericparser/packages/tests/test_nsdm_subscription.py +++ b/catalog/packages/tests/test_nsdm_subscription.py @@ -19,8 +19,8 @@ from django.test import TestCase from rest_framework.test import APIClient from rest_framework import status -from genericparser.packages.biz.nsdm_subscription import NsdmSubscription -from genericparser.pub.database.models import NsdmSubscriptionModel +from catalog.packages.biz.nsdm_subscription import NsdmSubscription +from catalog.pub.database.models import NsdmSubscriptionModel class TestNsdmSubscription(TestCase): @@ -150,7 +150,7 @@ class TestNsdmSubscription(TestCase): expected_data = { 'status': 303, 'detail': 'Already Subscription exists with' - ' the same callbackUri and filter', + ' the same callbackUri and filter' } response = self.client.post("/api/nsd/v1/subscriptions", data=self.subscription, format='json') @@ -192,7 +192,7 @@ class TestNsdmSubscription(TestCase): mock_requests.get.return_value.status_code = 204 expected_data = { 'status': 400, - 'detail': 'Auth type should be BASIC', + 'detail': 'Auth type should be BASIC' } response = self.client.post("/api/nsd/v1/subscriptions", data=dummy_subscription, format='json') @@ -217,7 +217,7 @@ class TestNsdmSubscription(TestCase): mock_requests.get.return_value.status_code = 204 expected_data = { 'status': 400, - 'detail': 'Auth type should be OAUTH2_CLIENT_CREDENTIALS', + 'detail': 'Auth type should be OAUTH2_CLIENT_CREDENTIALS' } response = self.client.post("/api/nsd/v1/subscriptions", data=dummy_subscription, format='json') @@ -239,7 +239,7 @@ class TestNsdmSubscription(TestCase): mock_requests.get.return_value.status_code = 204 expected_data = { 'status': 400, - 'detail': 'userName and password needed for BASIC', + 'detail': 'userName and password needed for BASIC' } response = self.client.post("/api/nsd/v1/subscriptions", data=dummy_subscription, format='json') @@ -264,7 +264,7 @@ class TestNsdmSubscription(TestCase): expected_data = { 'status': 400, 'detail': 'clientId, clientPassword and tokenEndpoint' - ' required for OAUTH2_CLIENT_CREDENTIALS', + ' required for OAUTH2_CLIENT_CREDENTIALS' } response = self.client.post("/api/nsd/v1/subscriptions", data=dummy_subscription, format='json') @@ -292,7 +292,7 @@ class TestNsdmSubscription(TestCase): expected_data = { 'status': 400, 'detail': 'Notification Filter should contain' - ' either nsdId or nsdInfoId', + ' either nsdId or nsdInfoId' } response = self.client.post("/api/nsd/v1/subscriptions", data=dummy_subscription, format='json') @@ -320,7 +320,7 @@ class TestNsdmSubscription(TestCase): expected_data = { 'status': 400, 'detail': 'Notification Filter should contain' - ' either pnfdId or pnfdInfoIds', + ' either pnfdId or pnfdInfoIds' } response = self.client.post("/api/nsd/v1/subscriptions", data=dummy_subscription, format='json') @@ -456,7 +456,7 @@ class TestNsdmSubscription(TestCase): expected_data = { "status": 404, "detail": "Subscription(" + self.subscription_id + ") " - "doesn't exists" + "doesn't exists" } response = self.client.get('/api/nsd/v1/' 'subscriptions/' + self.subscription_id, diff --git a/genericparser/packages/tests/test_nspackage.py b/catalog/packages/tests/test_nspackage.py similarity index 86% rename from genericparser/packages/tests/test_nspackage.py rename to catalog/packages/tests/test_nspackage.py index 393e0f7..91f3503 100644 --- a/genericparser/packages/tests/test_nspackage.py +++ b/catalog/packages/tests/test_nspackage.py @@ -18,9 +18,9 @@ from rest_framework import status from django.test import TestCase from django.test import Client -from genericparser.pub.utils import restcall, toscaparsers -from genericparser.pub.database.models import NSPackageModel, VnfPackageModel, PnfPackageModel -from genericparser.pub.msapi import sdc +from catalog.pub.utils import restcall, toscaparser +from catalog.pub.database.models import NSPackageModel, VnfPackageModel, PnfPackageModel +from catalog.pub.msapi import sdc from .const import nsd_data @@ -37,7 +37,7 @@ class TestNsPackage(TestCase): def test_ns_pkg_distribute_when_ns_exists(self): NSPackageModel(nsPackageId="1", nsdId="2").save() resp = self.client.post( - "/api/parser/v1/nspackages", {"csarId": "1"}, format='json') + "/api/catalog/v1/nspackages", {"csarId": "1"}, format='json') self.assertEqual(resp.status_code, status.HTTP_202_ACCEPTED) self.assertEqual("failed", resp.data["status"]) self.assertEqual( @@ -48,7 +48,7 @@ class TestNsPackage(TestCase): def test_ns_pkg_distribute_when_csar_not_exist(self, mock_call_req): mock_call_req.return_value = [0, "[]", '200'] resp = self.client.post( - "/api/parser/v1/nspackages", {"csarId": "1"}, format='json') + "/api/catalog/v1/nspackages", {"csarId": "1"}, format='json') self.assertEqual(resp.status_code, status.HTTP_202_ACCEPTED) self.assertEqual("failed", resp.data["status"]) self.assertEqual( @@ -57,7 +57,7 @@ class TestNsPackage(TestCase): @mock.patch.object(restcall, 'call_req') @mock.patch.object(sdc, 'download_artifacts') - @mock.patch.object(toscaparsers, 'parse_nsd') + @mock.patch.object(toscaparser, 'parse_nsd') def test_ns_pkg_distribute_when_nsd_already_exists( self, mock_parse_nsd, mock_download_artifacts, mock_call_req): mock_parse_nsd.return_value = json.JSONEncoder().encode(self.nsd_data) @@ -69,7 +69,7 @@ class TestNsPackage(TestCase): }]), '200'] NSPackageModel(nsPackageId="2", nsdId="VCPE_NS").save() resp = self.client.post( - "/api/parser/v1/nspackages", {"csarId": "1"}, format='json') + "/api/catalog/v1/nspackages", {"csarId": "1"}, format='json') self.assertEqual(resp.status_code, status.HTTP_202_ACCEPTED) self.assertEqual("failed", resp.data["status"]) self.assertEqual( @@ -78,7 +78,7 @@ class TestNsPackage(TestCase): @mock.patch.object(restcall, 'call_req') @mock.patch.object(sdc, 'download_artifacts') - @mock.patch.object(toscaparsers, 'parse_nsd') + @mock.patch.object(toscaparser, 'parse_nsd') def test_ns_pkg_distribute_when_nf_not_distributed( self, mock_parse_nsd, mock_download_artifacts, mock_call_req): mock_parse_nsd.return_value = json.JSONEncoder().encode(self.nsd_data) @@ -89,7 +89,7 @@ class TestNsPackage(TestCase): "distributionStatus": "DISTRIBUTED", }]), '200'] resp = self.client.post( - "/api/parser/v1/nspackages", {"csarId": "1"}, format='json') + "/api/catalog/v1/nspackages", {"csarId": "1"}, format='json') self.assertEqual(resp.status_code, status.HTTP_202_ACCEPTED) self.assertEqual("failed", resp.data["status"]) self.assertEqual( @@ -98,7 +98,7 @@ class TestNsPackage(TestCase): @mock.patch.object(restcall, 'call_req') @mock.patch.object(sdc, 'download_artifacts') - @mock.patch.object(toscaparsers, 'parse_nsd') + @mock.patch.object(toscaparser, 'parse_nsd') def test_ns_pkg_distribute_when_successfully( self, mock_parse_nsd, mock_download_artifacts, mock_call_req): mock_parse_nsd.return_value = json.JSONEncoder().encode(self.nsd_data) @@ -111,7 +111,7 @@ class TestNsPackage(TestCase): VnfPackageModel(vnfPackageId="1", vnfdId="vcpe_vfw_zte_1_0").save() PnfPackageModel(pnfPackageId="1", pnfdId="m6000_s").save() resp = self.client.post( - "/api/parser/v1/nspackages", {"csarId": "1"}, format='json') + "/api/catalog/v1/nspackages", {"csarId": "1"}, format='json') self.assertEqual(resp.status_code, status.HTTP_202_ACCEPTED) self.assertEqual("success", resp.data["status"]) self.assertEqual( @@ -125,7 +125,7 @@ class TestNsPackage(TestCase): "invariantUUID": "63eaec39-ffbe-411c-a838-448f2c73f7eb", "name": "underlayvpn", "version": "2.0", - "toscaModelURL": "/sdc/v1/genericparser/resources/c94490a0-f7ef-48be-b3f8-8d8662a37236/toscaModel", + "toscaModelURL": "/sdc/v1/catalog/resources/c94490a0-f7ef-48be-b3f8-8d8662a37236/toscaModel", "category": "Volte", "subCategory": "VolteVNF", "resourceType": "VF", @@ -134,7 +134,7 @@ class TestNsPackage(TestCase): "lastUpdaterUserId": "jh0003" }] resp = self.client.post( - "/api/parser/v1/nspackages", {"csarId": "1"}, format='json') + "/api/catalog/v1/nspackages", {"csarId": "1"}, format='json') self.assertEqual(resp.status_code, status.HTTP_202_ACCEPTED) self.assertEqual("failed", resp.data["status"]) self.assertEqual( @@ -145,7 +145,7 @@ class TestNsPackage(TestCase): def test_ns_pkg_normal_delete(self): NSPackageModel(nsPackageId="8", nsdId="2").save() - resp = self.client.delete("/api/parser/v1/nspackages/8") + resp = self.client.delete("/api/catalog/v1/nspackages/8") self.assertEqual(resp.status_code, status.HTTP_200_OK) self.assertEqual("success", resp.data["status"]) self.assertEqual( @@ -167,14 +167,14 @@ class TestNsPackage(TestCase): nsdVersion="3", nsPackageUri="14.csar", nsdModel="").save() - resp = self.client.get("/api/parser/v1/nspackages") + resp = self.client.get("/api/catalog/v1/nspackages") self.assertEqual(resp.status_code, status.HTTP_200_OK) expect_data = [{"csarId": "13", "packageInfo": {"csarName": "13.csar", "nsdProvider": "2", "nsdId": "2", "nsPackageId": "13", - "downloadUrl": "http://127.0.0.1:8806/static/genericparser/13/13.csar", + "downloadUrl": "http://127.0.0.1:8806/static/catalog/13/13.csar", "nsdModel": "", "nsdVersion": "2", "nsdInvariantId": None @@ -184,7 +184,7 @@ class TestNsPackage(TestCase): "nsdProvider": "3", "nsdId": "3", "nsPackageId": "14", - "downloadUrl": "http://127.0.0.1:8806/static/genericparser/14/14.csar", + "downloadUrl": "http://127.0.0.1:8806/static/catalog/14/14.csar", "nsdModel": "", "nsdVersion": "3", "nsdInvariantId": None}}] @@ -198,7 +198,7 @@ class TestNsPackage(TestCase): nsdVersion="4", nsPackageUri="14.csar", nsdModel="").save() - resp = self.client.get("/api/parser/v1/nspackages/14") + resp = self.client.get("/api/catalog/v1/nspackages/14") self.assertEqual(resp.status_code, status.HTTP_200_OK) expect_data = { "csarId": "14", @@ -209,12 +209,12 @@ class TestNsPackage(TestCase): "nsdVersion": "4", "csarName": "14.csar", "nsdModel": "", - "downloadUrl": "http://127.0.0.1:8806/static/genericparser/14/14.csar", + "downloadUrl": "http://127.0.0.1:8806/static/catalog/14/14.csar", "nsdInvariantId": None}} self.assertEqual(expect_data, resp.data) def test_ns_pkg_get_one_not_found(self): - resp = self.client.get("/api/parser/v1/nspackages/22") + resp = self.client.get("/api/catalog/v1/nspackages/22") self.assertEqual(resp.status_code, status.HTTP_500_INTERNAL_SERVER_ERROR) self.assertEqual( {"error": "Ns package[22] not Found."}, @@ -222,13 +222,13 @@ class TestNsPackage(TestCase): ########################################################################## - @mock.patch.object(toscaparsers, 'parse_nsd') + @mock.patch.object(toscaparser, 'parse_nsd') def test_nsd_parse_normal(self, mock_parse_nsd): NSPackageModel(nsPackageId="18", nsdId="12").save() mock_parse_nsd.return_value = json.JSONEncoder().encode({"a": "b"}) req_data = {"csarId": "18", "inputs": []} resp = self.client.post( - "/api/parser/v1/parsernsd", + "/api/catalog/v1/parsernsd", req_data, format='json') self.assertEqual(resp.status_code, status.HTTP_202_ACCEPTED) @@ -237,7 +237,7 @@ class TestNsPackage(TestCase): def test_nsd_parse_when_csar_not_exist(self): req_data = {"csarId": "1", "inputs": []} resp = self.client.post( - "/api/parser/v1/parsernsd", + "/api/catalog/v1/parsernsd", req_data, format='json') self.assertEqual( diff --git a/genericparser/packages/tests/test_pnf_descriptor.py b/catalog/packages/tests/test_pnf_descriptor.py similarity index 92% rename from genericparser/packages/tests/test_pnf_descriptor.py rename to catalog/packages/tests/test_pnf_descriptor.py index 770d74b..8af8614 100644 --- a/genericparser/packages/tests/test_pnf_descriptor.py +++ b/catalog/packages/tests/test_pnf_descriptor.py @@ -19,15 +19,16 @@ import mock import os import shutil + from django.test import TestCase from rest_framework import status from rest_framework.test import APIClient -from genericparser.packages.biz.pnf_descriptor import PnfDescriptor -from genericparser.packages.const import PKG_STATUS -from genericparser.packages.tests.const import pnfd_data -from genericparser.pub.config.config import GENERICPARSER_ROOT_PATH -from genericparser.pub.database.models import PnfPackageModel, NSPackageModel -from genericparser.pub.utils import toscaparsers +from catalog.packages.biz.pnf_descriptor import PnfDescriptor +from catalog.packages.const import PKG_STATUS +from catalog.packages.tests.const import pnfd_data +from catalog.pub.config.config import CATALOG_ROOT_PATH +from catalog.pub.database.models import PnfPackageModel, NSPackageModel +from catalog.pub.utils import toscaparser class TestPnfDescriptor(TestCase): @@ -56,7 +57,7 @@ class TestPnfDescriptor(TestCase): } def tearDown(self): - file_path = os.path.join(GENERICPARSER_ROOT_PATH, "22") + file_path = os.path.join(CATALOG_ROOT_PATH, "22") if os.path.exists(file_path): shutil.rmtree(file_path) @@ -76,9 +77,7 @@ class TestPnfDescriptor(TestCase): ) response.data.pop('id') self.assertEqual(response.status_code, status.HTTP_201_CREATED) - # self.assertEqual(expected_reponse_data, response.data) - for key, value in expected_reponse_data.items(): - self.assertEqual(response.data[key], value) + self.assertEqual(expected_reponse_data, response.data) def test_query_multiple_pnfds_normal(self): expected_reponse_data = [ @@ -141,7 +140,7 @@ class TestPnfDescriptor(TestCase): self.assertEqual(resp.status_code, status.HTTP_204_NO_CONTENT) self.assertEqual(None, resp.data) - @mock.patch.object(toscaparsers, "parse_pnfd") + @mock.patch.object(toscaparser, "parse_pnfd") def test_pnfd_content_upload_normal(self, mock_parse_pnfd): user_defined_data_json = json.JSONEncoder().encode(self.user_defined_data) PnfPackageModel( @@ -176,7 +175,7 @@ class TestPnfDescriptor(TestCase): ) self.assertEqual(resp.status_code, status.HTTP_500_INTERNAL_SERVER_ERROR) - @mock.patch.object(toscaparsers, "parse_pnfd") + @mock.patch.object(toscaparser, "parse_pnfd") def test_pnfd_content_upload_when_pnfd_exist(self, mock_parse_pnfd): with open('pnfd_content.txt', 'wt') as fp: fp.write('test') @@ -214,9 +213,9 @@ class TestPnfDescriptor(TestCase): resp = self.client.get("/api/nsd/v1/pnf_descriptors/22/pnfd_content") file_content = "" for data in resp.streaming_content: - file_content = '%s%s' % (file_content, data) + file_content = '%s%s' % (file_content, data.decode()) self.assertEqual(resp.status_code, status.HTTP_200_OK) - self.assertEqual("b'test1test2'", file_content) + self.assertEqual("test1test2", file_content) os.remove('pnfd_content.txt') def test_pnfd_download_failed(self): @@ -277,11 +276,11 @@ class TestPnfDescriptor(TestCase): response = self.client.get("/api/nsd/v1/pnf_descriptors/22/pnfd_content") self.assertEqual(response.status_code, status.HTTP_500_INTERNAL_SERVER_ERROR) - @mock.patch.object(toscaparsers, 'parse_pnfd') + @mock.patch.object(toscaparser, 'parse_pnfd') def test_pnfd_parse_normal(self, mock_parse_pnfd): PnfPackageModel(pnfPackageId="8", pnfdId="10").save() mock_parse_pnfd.return_value = json.JSONEncoder().encode({"c": "d"}) req_data = {"csarId": "8", "inputs": []} - resp = self.client.post("/api/parser/v1/parserpnfd", req_data, format='json') + resp = self.client.post("/api/catalog/v1/parserpnfd", req_data, format='json') self.assertEqual(resp.status_code, status.HTTP_202_ACCEPTED) self.assertEqual({"model": '{"c": "d"}'}, resp.data) diff --git a/genericparser/packages/tests/test_service_descriptor.py b/catalog/packages/tests/test_service_descriptor.py similarity index 90% rename from genericparser/packages/tests/test_service_descriptor.py rename to catalog/packages/tests/test_service_descriptor.py index 59bffa8..08a6f03 100644 --- a/genericparser/packages/tests/test_service_descriptor.py +++ b/catalog/packages/tests/test_service_descriptor.py @@ -17,11 +17,11 @@ import logging from django.test import TestCase from mock import mock -from genericparser.packages.biz.service_descriptor import ServiceDescriptor -from genericparser.packages.const import PKG_STATUS -from genericparser.pub.database.models import ServicePackageModel, VnfPackageModel, PnfPackageModel -from genericparser.pub.exceptions import PackageNotFoundException -from genericparser.pub.utils import toscaparsers +from catalog.packages.biz.service_descriptor import ServiceDescriptor +from catalog.packages.const import PKG_STATUS +from catalog.pub.database.models import ServicePackageModel, VnfPackageModel, PnfPackageModel +from catalog.pub.exceptions import PackageNotFoundException +from catalog.pub.utils import toscaparser from .const import sd_data logger = logging.getLogger(__name__) @@ -63,7 +63,7 @@ class TestServiceDescription(TestCase): self.assertEqual(PKG_STATUS.CREATED, service_package.onboardingState) self.assertEqual(PKG_STATUS.NOT_IN_USE, service_package.usageState) - @mock.patch.object(toscaparsers, 'parse_sd') + @mock.patch.object(toscaparser, 'parse_sd') def test_parse_serviced_and_save(self, mock_parse_sd): mock_parse_sd.return_value = json.JSONEncoder().encode(self.sd_data) servcie_desc = ServiceDescriptor() diff --git a/genericparser/packages/tests/test_servicepackage.py b/catalog/packages/tests/test_servicepackage.py similarity index 95% rename from genericparser/packages/tests/test_servicepackage.py rename to catalog/packages/tests/test_servicepackage.py index 786e34c..241d80d 100644 --- a/genericparser/packages/tests/test_servicepackage.py +++ b/catalog/packages/tests/test_servicepackage.py @@ -17,12 +17,12 @@ from django.test import TestCase, Client from mock import mock from rest_framework import status -from genericparser.packages.biz.sdc_service_package import ServicePackage -from genericparser.packages.const import PKG_STATUS -from genericparser.pub.database.models import ServicePackageModel, VnfPackageModel, PnfPackageModel -from genericparser.pub.exceptions import PackageNotFoundException, PackageHasExistsException, GenericparserException -from genericparser.pub.msapi import sdc -from genericparser.pub.utils import toscaparsers +from catalog.packages.biz.sdc_service_package import ServicePackage +from catalog.packages.const import PKG_STATUS +from catalog.pub.database.models import ServicePackageModel, VnfPackageModel, PnfPackageModel +from catalog.pub.exceptions import PackageNotFoundException, PackageHasExistsException, CatalogException +from catalog.pub.msapi import sdc +from catalog.pub.utils import toscaparser PARSER_BASE_URL = "/api/parser/v1" @@ -296,12 +296,12 @@ class TestServicePackage(TestCase): @mock.patch.object(sdc, 'get_asset') def test_service_pkg_distribute_when_fail_get_artifacts(self, mock_get_asset): - mock_get_asset.side_effect = GenericparserException("Failed to query artifact(services,1) from sdc.") + mock_get_asset.side_effect = CatalogException("Failed to query artifact(services,1) from sdc.") csar_id = "1" try: ServicePackage().on_distribute(csar_id) except Exception as e: - self.assertTrue(isinstance(e, GenericparserException)) + self.assertTrue(isinstance(e, CatalogException)) self.assertEqual("Failed to query artifact(services,1) from sdc.", e.args[0]) @mock.patch.object(sdc, 'get_asset') @@ -311,14 +311,14 @@ class TestServicePackage(TestCase): try: ServicePackage().on_distribute(csar_id) except Exception as e: - self.assertTrue(isinstance(e, GenericparserException)) + self.assertTrue(isinstance(e, CatalogException)) self.assertEqual("Resource (cd557883-ac4b-462d-aa01-421b5fa606b1) is not distributed.", e.args[0]) @mock.patch.object(sdc, 'get_asset') @mock.patch.object(sdc, 'download_artifacts') def test_service_pkg_distribute_when_fail_download_artifacts(self, mock_get_asset, mock_download_artifacts): mock_get_asset.return_value = self.asset_data - mock_download_artifacts.side_effect = GenericparserException("Failed to download 1 from sdc.") + mock_download_artifacts.side_effect = CatalogException("Failed to download 1 from sdc.") csar_id = "1" VnfPackageModel(vnfPackageId="cd557883-ac4b-462d-aa01-421b5fa606b1", vnfdId="cd557883-ac4b-462d-aa01-421b5fa606b1").save() @@ -327,12 +327,12 @@ class TestServicePackage(TestCase): try: ServicePackage().on_distribute(csar_id) except Exception as e: - self.assertTrue(isinstance(e, GenericparserException)) + self.assertTrue(isinstance(e, CatalogException)) self.assertEqual("Failed to download 1 from sdc.", e.args[0]) @mock.patch.object(sdc, 'get_asset') @mock.patch.object(sdc, 'download_artifacts') - @mock.patch.object(toscaparsers, 'parse_sd') + @mock.patch.object(toscaparser, 'parse_sd') def test_service_pkg_distribute(self, mock_parse_sd, mock_download_artifacts, mock_get_asset): mock_parse_sd.return_value = json.JSONEncoder().encode(self.sd_data) mock_download_artifacts.return_value = "/test.csar" @@ -454,7 +454,7 @@ class TestServicePackage(TestCase): ############################################################### - @mock.patch.object(toscaparsers, 'parse_sd') + @mock.patch.object(toscaparser, 'parse_sd') def test_service_pkg_parser(self, mock_parse_sd): ServicePackageModel(servicePackageId="8", servicedId="2").save() mock_parse_sd.return_value = json.JSONEncoder().encode({"a": "b"}) diff --git a/genericparser/packages/tests/test_vnf_package.py b/catalog/packages/tests/test_vnf_package.py similarity index 87% rename from genericparser/packages/tests/test_vnf_package.py rename to catalog/packages/tests/test_vnf_package.py index 9b8d7fe..b83268a 100644 --- a/genericparser/packages/tests/test_vnf_package.py +++ b/catalog/packages/tests/test_vnf_package.py @@ -22,12 +22,12 @@ from django.test import TestCase from rest_framework import status from rest_framework.test import APIClient -from genericparser.packages.biz.vnf_package import VnfPackage, VnfPkgUploadThread -from genericparser.packages.const import PKG_STATUS -from genericparser.packages.tests.const import vnfd_data -from genericparser.pub.config.config import GENERICPARSER_ROOT_PATH -from genericparser.pub.database.models import VnfPackageModel -from genericparser.pub.utils import toscaparsers +from catalog.packages.biz.vnf_package import VnfPackage, VnfPkgUploadThread +from catalog.packages.const import PKG_STATUS +from catalog.packages.tests.const import vnfd_data +from catalog.pub.config.config import CATALOG_ROOT_PATH +from catalog.pub.database.models import VnfPackageModel +from catalog.pub.utils import toscaparser class MockReq(): @@ -43,13 +43,13 @@ class TestVnfPackage(TestCase): self.client = APIClient() def tearDown(self): - file_path = os.path.join(GENERICPARSER_ROOT_PATH, "222") + file_path = os.path.join(CATALOG_ROOT_PATH, "222") if os.path.exists(file_path): shutil.rmtree(file_path) - @mock.patch.object(toscaparsers, 'parse_vnfd') + @mock.patch.object(toscaparser, 'parse_vnfd') def test_upload_vnf_pkg(self, mock_parse_vnfd): - data = {'file': open(os.path.join(GENERICPARSER_ROOT_PATH, "empty.txt"), "rt")} + data = {'file': open(os.path.join(CATALOG_ROOT_PATH, "empty.txt"), "rt")} VnfPackageModel.objects.create( vnfPackageId="222", onboardingState="CREATED" @@ -62,14 +62,14 @@ class TestVnfPackage(TestCase): self.assertEqual(response.status_code, status.HTTP_202_ACCEPTED) def test_upload_vnf_pkg_failed(self): - data = {'file': open(os.path.join(GENERICPARSER_ROOT_PATH, "empty.txt"), "rb")} + data = {'file': open(os.path.join(CATALOG_ROOT_PATH, "empty.txt"), "rb")} VnfPackageModel.objects.create( vnfPackageId="222", ) response = self.client.put("/api/vnfpkgm/v1/vnf_packages/222/package_content", data=data) self.assertEqual(response.status_code, status.HTTP_500_INTERNAL_SERVER_ERROR) - @mock.patch.object(toscaparsers, 'parse_vnfd') + @mock.patch.object(toscaparser, 'parse_vnfd') @mock.patch.object(urllib.request, 'urlopen') def test_upload_nf_pkg_from_uri(self, mock_urlopen, mock_parse_vnfd): vnf_pkg = VnfPackageModel.objects.create( @@ -103,9 +103,7 @@ class TestVnfPackage(TestCase): "userDefinedData": {"a": "A"}, "_links": None # TODO } - # self.assertEqual(expect_resp_data, resp_data) - for key, value in expect_resp_data.items(): - self.assertEqual(resp_data[key], value) + self.assertEqual(expect_resp_data, resp_data) self.assertEqual(response.status_code, status.HTTP_201_CREATED) def test_query_single_vnf(self): @@ -138,9 +136,7 @@ class TestVnfPackage(TestCase): "userDefinedData": {"a": "A"}, "_links": None } - for key, value in expect_data.items(): - self.assertEqual(response.data[key], value) - # self.assertEqual(response.data, expect_data) + self.assertEqual(response.data, expect_data) self.assertEqual(response.status_code, status.HTTP_200_OK) def test_query_single_vnf_failed(self): @@ -207,12 +203,7 @@ class TestVnfPackage(TestCase): "_links": None } ] - # self.assertEqual(response.data, expect_data) - self.assertEqual(len(response.data), len(expect_data)) - for i in range(0, len(expect_data)): - for key, value in expect_data[i].items(): - self.assertEqual(response.data[i][key], value) - + self.assertEqual(response.data, expect_data) self.assertEqual(response.status_code, status.HTTP_200_OK) def test_delete_single_vnf_pkg(self): @@ -265,9 +256,9 @@ class TestVnfPackage(TestCase): response = self.client.get("/api/vnfpkgm/v1/vnf_packages/222/package_content", HTTP_RANGE="4-7") partial_file_content = '' for data in response.streaming_content: - partial_file_content = partial_file_content.encode() + data + partial_file_content = partial_file_content + data.decode() self.assertEqual(response.status_code, status.HTTP_200_OK) - self.assertEqual(b'BBB', partial_file_content) + self.assertEqual('BBB', partial_file_content) os.remove("vnfPackage.csar") def test_fetch_last_partical_vnf_pkg(self): @@ -281,9 +272,9 @@ class TestVnfPackage(TestCase): response = self.client.get("/api/vnfpkgm/v1/vnf_packages/222/package_content", HTTP_RANGE=" 4-") partial_file_content = '' for data in response.streaming_content: - partial_file_content = partial_file_content.encode() + data + partial_file_content = partial_file_content + data.decode() self.assertEqual(response.status_code, status.HTTP_200_OK) - self.assertEqual(b'BBBBCCCCDDDD', partial_file_content) + self.assertEqual('BBBBCCCCDDDD', partial_file_content) os.remove("vnfPackage.csar") def test_fetch_vnf_pkg_when_pkg_not_exist(self): @@ -326,9 +317,9 @@ class TestVnfPackage(TestCase): response = self.client.get("/api/vnfpkgm/v1/vnf_packages") self.assertEqual(response.status_code, status.HTTP_500_INTERNAL_SERVER_ERROR) - @mock.patch.object(toscaparsers, 'parse_vnfd') + @mock.patch.object(toscaparser, 'parse_vnfd') def test_upload_when_catch_exception(self, mock_parse_vnfd): - data = {'file': open(os.path.join(GENERICPARSER_ROOT_PATH, "empty.txt"), "rb")} + data = {'file': open(os.path.join(CATALOG_ROOT_PATH, "empty.txt"), "rb")} VnfPackageModel.objects.create( vnfPackageId="222", onboardingState="CREATED" @@ -350,9 +341,9 @@ class TestVnfPackage(TestCase): response = self.client.get("/api/vnfpkgm/v1/vnf_packages/222/package_content") self.assertEqual(response.status_code, status.HTTP_500_INTERNAL_SERVER_ERROR) - @mock.patch.object(toscaparsers, 'parse_vnfd') + @mock.patch.object(toscaparser, 'parse_vnfd') def test_fetch_vnf_artifact(self, mock_parse_vnfd): - data = {'file': open(os.path.join(GENERICPARSER_ROOT_PATH, "resource_test.csar"), "rb")} + data = {'file': open(os.path.join(CATALOG_ROOT_PATH, "resource_test.csar"), "rb")} VnfPackageModel.objects.create( vnfPackageId="222", onboardingState="CREATED" @@ -364,9 +355,9 @@ class TestVnfPackage(TestCase): self.assertEqual(response.status_code, status.HTTP_200_OK) self.assertEqual(response.getvalue(), b"ubuntu_16.04\n") - @mock.patch.object(toscaparsers, 'parse_vnfd') + @mock.patch.object(toscaparser, 'parse_vnfd') def test_fetch_vnf_artifact_not_exists(self, mock_parse_vnfd): - data = {'file': open(os.path.join(GENERICPARSER_ROOT_PATH, "resource_test.csar"), "rb")} + data = {'file': open(os.path.join(CATALOG_ROOT_PATH, "resource_test.csar"), "rb")} VnfPackageModel.objects.create( vnfPackageId="222", onboardingState="CREATED" @@ -377,9 +368,9 @@ class TestVnfPackage(TestCase): response = self.client.get("/api/vnfpkgm/v1/vnf_packages/1451/artifacts/image") self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND) - @mock.patch.object(toscaparsers, 'parse_vnfd') + @mock.patch.object(toscaparser, 'parse_vnfd') def test_fetch_vnf_artifact_vnf_not_exists(self, mock_parse_vnfd): - data = {'file': open(os.path.join(GENERICPARSER_ROOT_PATH, "resource_test.csar"), "rb")} + data = {'file': open(os.path.join(CATALOG_ROOT_PATH, "resource_test.csar"), "rb")} VnfPackageModel.objects.create( vnfPackageId="222", onboardingState="CREATED" diff --git a/genericparser/packages/tests/test_vnf_pkg_subscription.py b/catalog/packages/tests/test_vnf_pkg_subscription.py similarity index 99% rename from genericparser/packages/tests/test_vnf_pkg_subscription.py rename to catalog/packages/tests/test_vnf_pkg_subscription.py index e35f195..635b137 100644 --- a/genericparser/packages/tests/test_vnf_pkg_subscription.py +++ b/catalog/packages/tests/test_vnf_pkg_subscription.py @@ -18,7 +18,7 @@ import mock from rest_framework.test import APIClient from django.test import TestCase -from genericparser.pub.database.models import VnfPkgSubscriptionModel +from catalog.pub.database.models import VnfPkgSubscriptionModel from .const import vnf_subscription_data diff --git a/genericparser/packages/tests/test_vnfpackage.py b/catalog/packages/tests/test_vnfpackage.py similarity index 75% rename from genericparser/packages/tests/test_vnfpackage.py rename to catalog/packages/tests/test_vnfpackage.py index 70f7021..0d8cbad 100644 --- a/genericparser/packages/tests/test_vnfpackage.py +++ b/catalog/packages/tests/test_vnfpackage.py @@ -17,11 +17,11 @@ import mock from rest_framework.test import APIClient from django.test import TestCase from rest_framework import status -from genericparser.packages.biz.sdc_vnf_package import NfDistributeThread, NfPkgDeleteThread -from genericparser.pub.database.models import JobStatusModel, JobModel -from genericparser.pub.database.models import VnfPackageModel -from genericparser.pub.msapi import sdc -from genericparser.pub.utils import restcall, toscaparsers +from catalog.packages.biz.sdc_vnf_package import NfDistributeThread, NfPkgDeleteThread +from catalog.pub.database.models import JobStatusModel, JobModel +from catalog.pub.database.models import VnfPackageModel +from catalog.pub.msapi import sdc +from catalog.pub.utils import restcall, toscaparser from .const import vnfd_data @@ -46,7 +46,7 @@ class TestNfPackage(TestCase): @mock.patch.object(NfDistributeThread, 'run') def test_nf_pkg_distribute_normal(self, mock_run): resp = self.client.post( - "/api/parser/v1/vnfpackages", + "/api/catalog/v1/vnfpackages", { "csarId": "1", "vimIds": ["1"] @@ -70,7 +70,7 @@ class TestNfPackage(TestCase): @mock.patch.object(restcall, 'call_req') @mock.patch.object(sdc, 'download_artifacts') - @mock.patch.object(toscaparsers, 'parse_vnfd') + @mock.patch.object(toscaparser, 'parse_vnfd') def test_nf_pkg_distribute_when_vnfd_already_exist(self, mock_parse_vnfd, mock_download_artifacts, @@ -81,41 +81,52 @@ class TestNfPackage(TestCase): "uuid": "1", "toscaModelURL": "https://127.0.0.1:1234/sdc/v1/hss.csar" }]), '200'] - VnfPackageModel(vnfPackageId="2", - vnfdId="zte-hss-1.0").save() - NfDistributeThread(csar_id="1", - vim_ids=["1"], - lab_vim_id="", - job_id="2").run() + VnfPackageModel(vnfPackageId="2", vnfdId="zte-hss-1.0").save() + NfDistributeThread( + csar_id="1", + vim_ids=["1"], + lab_vim_id="", + job_id="2" + ).run() self.assert_job_result("2", 255, "VNF package(zte-hss-1.0) already exists.") @mock.patch.object(restcall, 'call_req') @mock.patch.object(sdc, 'download_artifacts') - @mock.patch.object(toscaparsers, 'parse_vnfd') + @mock.patch.object(toscaparser, 'parse_vnfd') def test_nf_pkg_distribute_successfully(self, - mock_parse_vnfd, mock_download_artifacts, mock_call_req): + mock_parse_vnfd, + mock_download_artifacts, + mock_call_req): mock_parse_vnfd.return_value = json.JSONEncoder().encode(self.vnfd_data) mock_download_artifacts.return_value = "/home/hss.csar" mock_call_req.return_value = [0, json.JSONEncoder().encode([{ "uuid": "1", "toscaModelURL": "https://127.0.0.1:1234/sdc/v1/hss.csar" }]), '200'] - NfDistributeThread(csar_id="1", - vim_ids=["1"], - lab_vim_id="", - job_id="4").run() + NfDistributeThread( + csar_id="1", + vim_ids=["1"], + lab_vim_id="", + job_id="4" + ).run() self.assert_job_result("4", 100, "CSAR(1) distribute successfully.") ############################################################################################################### @mock.patch.object(NfPkgDeleteThread, 'run') def test_nf_pkg_delete_normal(self, mock_run): - resp = self.client.delete("/api/parser/v1/vnfpackages/1") + resp = self.client.delete("/api/catalog/v1/vnfpackages/1") self.assertEqual(resp.status_code, status.HTTP_202_ACCEPTED) def test_nf_pkg_normal_delete(self): - VnfPackageModel(vnfPackageId="2", vnfdId="vcpe_vfw_zte_1_0").save() - NfPkgDeleteThread(csar_id="2", job_id="2").run() + VnfPackageModel( + vnfPackageId="2", + vnfdId="vcpe_vfw_zte_1_0" + ).save() + NfPkgDeleteThread( + csar_id="2", + job_id="2" + ).run() self.assert_job_result("2", 100, "Delete CSAR(2) successfully.") def test_nf_pkg_get_all(self): @@ -137,7 +148,7 @@ class TestNfPackage(TestCase): vnfPackageUri='', vnfdModel='' ).save() - resp = self.client.get("/api/parser/v1/vnfpackages") + resp = self.client.get("/api/catalog/v1/vnfpackages") self.assertEqual(resp.status_code, status.HTTP_200_OK) expect_data = [ { @@ -148,7 +159,7 @@ class TestNfPackage(TestCase): "vnfdModel": "", "vnfdProvider": "3", "vnfdId": "3", - "downloadUrl": "http://127.0.0.1:8806/static/genericparser/3/", + "downloadUrl": "http://127.0.0.1:8806/static/catalog/3/", "vnfVersion": "", "vnfdVersion": "3", "vnfPackageId": "3" @@ -162,7 +173,7 @@ class TestNfPackage(TestCase): "vnfdModel": "", "vnfdProvider": "4", "vnfdId": "4", - "downloadUrl": "http://127.0.0.1:8806/static/genericparser/4/", + "downloadUrl": "http://127.0.0.1:8806/static/catalog/4/", "vnfVersion": "", "vnfdVersion": "4", "vnfPackageId": "4" @@ -182,7 +193,7 @@ class TestNfPackage(TestCase): vnfdModel='' ).save() - resp = self.client.get("/api/parser/v1/vnfpackages/4") + resp = self.client.get("/api/catalog/v1/vnfpackages/4") self.assertEqual(resp.status_code, status.HTTP_200_OK) expect_data = { "imageInfo": [], @@ -192,7 +203,7 @@ class TestNfPackage(TestCase): "vnfdModel": "", "vnfdProvider": "4", "vnfdId": "4", - "downloadUrl": "http://127.0.0.1:8806/static/genericparser/4/", + "downloadUrl": "http://127.0.0.1:8806/static/catalog/4/", "vnfVersion": "", "vnfdVersion": "4", "vnfPackageId": "4" @@ -201,31 +212,47 @@ class TestNfPackage(TestCase): self.assertEqual(expect_data, resp.data) def test_nf_pkg_get_one_failed(self): - VnfPackageModel(vnfPackageId="4", - vnfdId="4", - vnfVendor='4', - vnfdVersion='4', - vnfSoftwareVersion='', - vnfPackageUri='', - vnfdModel='').save() - - resp = self.client.get("/api/parser/v1/vnfpackages/2") + VnfPackageModel( + vnfPackageId="4", + vnfdId="4", + vnfVendor='4', + vnfdVersion='4', + vnfSoftwareVersion='', + vnfPackageUri='', + vnfdModel='' + ).save() + + resp = self.client.get("/api/catalog/v1/vnfpackages/2") self.assertEqual(resp.status_code, status.HTTP_500_INTERNAL_SERVER_ERROR) self.assertEqual({'error': 'Vnf package[2] not Found.'}, resp.data) ############################################################################################################### - @mock.patch.object(toscaparsers, 'parse_vnfd') + @mock.patch.object(toscaparser, 'parse_vnfd') def test_vnfd_parse_normal(self, mock_parse_vnfd): - VnfPackageModel(vnfPackageId="8", vnfdId="10").save() + VnfPackageModel( + vnfPackageId="8", + vnfdId="10" + ).save() mock_parse_vnfd.return_value = json.JSONEncoder().encode({"c": "d"}) - req_data = {"csarId": "8", "inputs": []} - resp = self.client.post("/api/parser/v1/parservnfd", req_data, format='json') + req_data = { + "csarId": "8", + "inputs": [] + } + resp = self.client.post( + "/api/catalog/v1/parservnfd", + req_data, + format='json' + ) self.assertEqual(resp.status_code, status.HTTP_202_ACCEPTED) self.assertEqual({"model": '{"c": "d"}'}, resp.data) def test_vnfd_parse_when_csar_not_exist(self): req_data = {"csarId": "1", "inputs": []} - resp = self.client.post("/api/parser/v1/parservnfd", req_data, format='json') + resp = self.client.post( + "/api/catalog/v1/parservnfd", + req_data, + format='json' + ) self.assertEqual(resp.status_code, status.HTTP_500_INTERNAL_SERVER_ERROR) self.assertEqual(resp.data, {"error": "VNF CSAR(1) does not exist."}) diff --git a/genericparser/packages/urls.py b/catalog/packages/urls.py similarity index 78% rename from genericparser/packages/urls.py rename to catalog/packages/urls.py index 49199ac..776e940 100644 --- a/genericparser/packages/urls.py +++ b/catalog/packages/urls.py @@ -14,21 +14,21 @@ from django.conf.urls import url -from genericparser.packages.views import vnf_package_views -from genericparser.packages.views.vnf_package_subscription_views import CreateQuerySubscriptionView,\ +from catalog.packages.views import vnf_package_views +from catalog.packages.views.vnf_package_subscription_views import CreateQuerySubscriptionView,\ QueryTerminateSubscriptionView -from genericparser.packages.views.vnf_package_artifact_views import FetchVnfPkgmArtifactsView -from genericparser.packages.views import catalog_views, ns_descriptor_views, pnf_descriptor_views, nsdm_subscription_views -from genericparser.packages.views.health_check_views import HealthCheckView +from catalog.packages.views.vnf_package_artifact_views import FetchVnfPkgmArtifactsView +from catalog.packages.views import catalog_views, ns_descriptor_views, pnf_descriptor_views, nsdm_subscription_views +from catalog.packages.views.health_check_views import HealthCheckView urlpatterns = [ # Sync package from SDC - url(r'^api/parser/v1/nspackages$', catalog_views.nspackages_rc, name='nspackages_rc'), - url(r'^api/parser/v1/nspackages/(?P[0-9a-zA-Z\-\_]+)$', catalog_views.ns_rd_csar, name='nspackage_rd'), - url(r'^api/parser/v1/vnfpackages$', catalog_views.nfpackages_rc, name='nfpackages_rc'), - url(r'^api/parser/v1/vnfpackages/(?P[0-9a-zA-Z\-\_]+)$', catalog_views.nf_rd_csar, name='nfpackage_rd'), + url(r'^api/catalog/v1/nspackages$', catalog_views.nspackages_rc, name='nspackages_rc'), + url(r'^api/catalog/v1/nspackages/(?P[0-9a-zA-Z\-\_]+)$', catalog_views.ns_rd_csar, name='nspackage_rd'), + url(r'^api/catalog/v1/vnfpackages$', catalog_views.nfpackages_rc, name='nfpackages_rc'), + url(r'^api/catalog/v1/vnfpackages/(?P[0-9a-zA-Z\-\_]+)$', catalog_views.nf_rd_csar, name='nfpackage_rd'), url(r'^api/parser/v1/service_packages$', catalog_views.servicepackages_rc, name='servicepackages_rc'), url(r'^api/parser/v1/service_packages/(?P[0-9a-zA-Z\-\_]+)$', catalog_views.service_rd_csar, name='servicepackage_rd'), @@ -37,6 +37,9 @@ urlpatterns = [ url(r'^api/parser/v1/parsernsd$', catalog_views.ns_model_parser, name='nsmodelparser_rc'), url(r'^api/parser/v1/parservnfd$', catalog_views.vnf_model_parser, name='vnfmodelparser_rc'), url(r'^api/parser/v1/parserpnfd$', pnf_descriptor_views.pnf_model_parser, name='pnfmodelparser_rc'), + url(r'^api/catalog/v1/parsernsd$', catalog_views.ns_model_parser, name='nsmodelparser_rc'), + url(r'^api/catalog/v1/parservnfd$', catalog_views.vnf_model_parser, name='vnfmodelparser_rc'), + url(r'^api/catalog/v1/parserpnfd$', pnf_descriptor_views.pnf_model_parser, name='pnfmodelparser_rc'), # ETSI SOL005 NSD API url(r'^api/nsd/v1/ns_descriptors$', ns_descriptor_views.ns_descriptors_rc, name='ns_descriptors_rc'), @@ -68,5 +71,6 @@ urlpatterns = [ # health check url(r'^api/vnfpkgm/v1/health_check$', HealthCheckView.as_view()), url(r'^api/nsd/v1/health_check$', HealthCheckView.as_view()), + url(r'^api/catalog/v1/health_check$', HealthCheckView.as_view()), url(r'^api/parser/v1/health_check$', HealthCheckView.as_view()), ] diff --git a/genericparser/packages/views/__init__.py b/catalog/packages/views/__init__.py similarity index 100% rename from genericparser/packages/views/__init__.py rename to catalog/packages/views/__init__.py diff --git a/genericparser/packages/views/catalog_views.py b/catalog/packages/views/catalog_views.py similarity index 92% rename from genericparser/packages/views/catalog_views.py rename to catalog/packages/views/catalog_views.py index df3dfca..6ed9fb9 100644 --- a/genericparser/packages/views/catalog_views.py +++ b/catalog/packages/views/catalog_views.py @@ -20,25 +20,25 @@ from drf_yasg.utils import no_body, swagger_auto_schema from rest_framework import status from rest_framework.decorators import api_view from rest_framework.response import Response -from genericparser.packages.biz import sdc_vnf_package, sdc_ns_package -from genericparser.packages.biz.pnf_descriptor import PnfDescriptor -from genericparser.packages.biz.sdc_service_package import ServicePackage -from genericparser.packages.serializers.genericparser_serializers import InternalErrorRequestSerializer, \ +from catalog.packages.biz import sdc_vnf_package, sdc_ns_package +from catalog.packages.biz.pnf_descriptor import PnfDescriptor +from catalog.packages.biz.sdc_service_package import ServicePackage +from catalog.packages.serializers.catalog_serializers import InternalErrorRequestSerializer, \ ServicePackageDistributeRequestSerializer, ServicePackagesSerializer, ServicePackageSerializer -from genericparser.packages.serializers.genericparser_serializers import NfPackageDistributeRequestSerializer -from genericparser.packages.serializers.genericparser_serializers import NfPackageSerializer -from genericparser.packages.serializers.genericparser_serializers import NfPackagesSerializer -from genericparser.packages.serializers.genericparser_serializers import NsPackageDistributeRequestSerializer -from genericparser.packages.serializers.genericparser_serializers import NsPackageDistributeResponseSerializer -from genericparser.packages.serializers.genericparser_serializers import NsPackageSerializer -from genericparser.packages.serializers.genericparser_serializers import NsPackagesSerializer -from genericparser.packages.serializers.genericparser_serializers import ParseModelRequestSerializer -from genericparser.packages.serializers.genericparser_serializers import ParseModelResponseSerializer -from genericparser.packages.serializers.genericparser_serializers import PostJobResponseSerializer -from genericparser.packages.views.common import fmt_error_rsp -from genericparser.pub.exceptions import PackageNotFoundException, PackageHasExistsException -from genericparser.pub.utils.syscomm import fun_name -from genericparser.pub.utils.values import ignore_case_get +from catalog.packages.serializers.catalog_serializers import NfPackageDistributeRequestSerializer +from catalog.packages.serializers.catalog_serializers import NfPackageSerializer +from catalog.packages.serializers.catalog_serializers import NfPackagesSerializer +from catalog.packages.serializers.catalog_serializers import NsPackageDistributeRequestSerializer +from catalog.packages.serializers.catalog_serializers import NsPackageDistributeResponseSerializer +from catalog.packages.serializers.catalog_serializers import NsPackageSerializer +from catalog.packages.serializers.catalog_serializers import NsPackagesSerializer +from catalog.packages.serializers.catalog_serializers import ParseModelRequestSerializer +from catalog.packages.serializers.catalog_serializers import ParseModelResponseSerializer +from catalog.packages.serializers.catalog_serializers import PostJobResponseSerializer +from catalog.packages.views.common import fmt_error_rsp +from catalog.pub.exceptions import PackageNotFoundException, PackageHasExistsException +from catalog.pub.utils.syscomm import fun_name +from catalog.pub.utils.values import ignore_case_get logger = logging.getLogger(__name__) diff --git a/genericparser/packages/views/common.py b/catalog/packages/views/common.py similarity index 84% rename from genericparser/packages/views/common.py rename to catalog/packages/views/common.py index efd045b..6285cb9 100644 --- a/genericparser/packages/views/common.py +++ b/catalog/packages/views/common.py @@ -18,15 +18,15 @@ import logging from rest_framework import status from rest_framework.response import Response -from genericparser.pub.exceptions import GenericparserException -from genericparser.pub.exceptions import BadRequestException -from genericparser.pub.exceptions import NsdmBadRequestException -from genericparser.pub.exceptions import PackageNotFoundException -from genericparser.pub.exceptions import ResourceNotFoundException -from genericparser.pub.exceptions import ArtifactNotFoundException -from genericparser.pub.exceptions import NsdmDuplicateSubscriptionException -from genericparser.pub.exceptions import VnfPkgDuplicateSubscriptionException -from genericparser.pub.exceptions import VnfPkgSubscriptionException +from catalog.pub.exceptions import CatalogException +from catalog.pub.exceptions import BadRequestException +from catalog.pub.exceptions import NsdmBadRequestException +from catalog.pub.exceptions import PackageNotFoundException +from catalog.pub.exceptions import ResourceNotFoundException +from catalog.pub.exceptions import ArtifactNotFoundException +from catalog.pub.exceptions import NsdmDuplicateSubscriptionException +from catalog.pub.exceptions import VnfPkgDuplicateSubscriptionException +from catalog.pub.exceptions import VnfPkgSubscriptionException logger = logging.getLogger(__name__) @@ -35,7 +35,7 @@ def validate_data(data, serializer): serialized_data = serializer(data=data) if not serialized_data.is_valid(): logger.error('Data validation failed.') - raise GenericparserException(serialized_data.errors) + raise CatalogException(serialized_data.errors) return serialized_data @@ -106,7 +106,7 @@ def view_safe_call_with_log(logger): detail=e.args[0], status=status.HTTP_500_INTERNAL_SERVER_ERROR ) - except GenericparserException as e: + except CatalogException as e: logger.error(e.args[0]) return make_error_resp( detail=e.args[0], diff --git a/genericparser/packages/views/health_check_views.py b/catalog/packages/views/health_check_views.py similarity index 100% rename from genericparser/packages/views/health_check_views.py rename to catalog/packages/views/health_check_views.py diff --git a/genericparser/packages/views/ns_descriptor_views.py b/catalog/packages/views/ns_descriptor_views.py similarity index 85% rename from genericparser/packages/views/ns_descriptor_views.py rename to catalog/packages/views/ns_descriptor_views.py index bbe51ea..3b8c1f9 100644 --- a/genericparser/packages/views/ns_descriptor_views.py +++ b/catalog/packages/views/ns_descriptor_views.py @@ -20,12 +20,12 @@ from rest_framework import status from rest_framework.decorators import api_view from rest_framework.response import Response -from genericparser.packages.biz.ns_descriptor import NsDescriptor -from genericparser.packages.serializers.create_nsd_info_request import CreateNsdInfoRequestSerializer -from genericparser.packages.serializers.nsd_info import NsdInfoSerializer -from genericparser.packages.serializers.nsd_infos import NsdInfosSerializer -from genericparser.packages.views.common import validate_data -from genericparser.pub.exceptions import GenericparserException +from catalog.packages.biz.ns_descriptor import NsDescriptor +from catalog.packages.serializers.create_nsd_info_request import CreateNsdInfoRequestSerializer +from catalog.packages.serializers.nsd_info import NsdInfoSerializer +from catalog.packages.serializers.nsd_infos import NsdInfosSerializer +from catalog.packages.views.common import validate_data +from catalog.pub.exceptions import CatalogException from .common import view_safe_call_with_log logger = logging.getLogger(__name__) @@ -87,14 +87,14 @@ def ns_descriptors_rc(request): if request.method == 'POST': create_nsd_info_request = validate_data(request.data, CreateNsdInfoRequestSerializer) data = NsDescriptor().create(create_nsd_info_request.data) - nsd_info = validate_data(data, NsdInfoSerializer) - return Response(data=nsd_info.data, status=status.HTTP_201_CREATED) + validate_data(data, NsdInfoSerializer) + return Response(data=data, status=status.HTTP_201_CREATED) if request.method == 'GET': nsdId = request.query_params.get("nsdId", None) data = NsDescriptor().query_multiple(nsdId) - nsd_infos = validate_data(data, NsdInfosSerializer) - return Response(data=nsd_infos.data, status=status.HTTP_200_OK) + validate_data(data, NsdInfosSerializer) + return Response(data=data, status=status.HTTP_200_OK) @swagger_auto_schema( @@ -126,7 +126,7 @@ def nsd_content_ru(request, **kwargs): local_file_name = NsDescriptor().upload(nsd_info_id, files[0]) NsDescriptor().parse_nsd_and_save(nsd_info_id, local_file_name) return Response(data=None, status=status.HTTP_204_NO_CONTENT) - except GenericparserException as e: + except CatalogException as e: NsDescriptor().handle_upload_failed(nsd_info_id) raise e except Exception as e: diff --git a/genericparser/packages/views/nsdm_subscription_views.py b/catalog/packages/views/nsdm_subscription_views.py similarity index 87% rename from genericparser/packages/views/nsdm_subscription_views.py rename to catalog/packages/views/nsdm_subscription_views.py index e0576c3..5e6394e 100644 --- a/genericparser/packages/views/nsdm_subscription_views.py +++ b/catalog/packages/views/nsdm_subscription_views.py @@ -19,16 +19,16 @@ from rest_framework import status from rest_framework.decorators import api_view from rest_framework.response import Response -from genericparser.packages.serializers.nsdm_filter_data import NsdmNotificationsFilter -from genericparser.packages.serializers.nsdm_subscription import NsdmSubscriptionsSerializer -from genericparser.packages.serializers.nsdm_subscription import NsdmSubscriptionIdSerializer -from genericparser.packages.serializers.nsdm_subscription import NsdmSubscriptionSerializer -from genericparser.packages.serializers.nsdm_subscription import NsdmSubscriptionRequestSerializer +from catalog.packages.serializers.nsdm_filter_data import NsdmNotificationsFilter +from catalog.packages.serializers.nsdm_subscription import NsdmSubscriptionsSerializer +from catalog.packages.serializers.nsdm_subscription import NsdmSubscriptionIdSerializer +from catalog.packages.serializers.nsdm_subscription import NsdmSubscriptionSerializer +from catalog.packages.serializers.nsdm_subscription import NsdmSubscriptionRequestSerializer +from catalog.packages.serializers.response import ProblemDetailsSerializer -from genericparser.packages.serializers.response import ProblemDetailsSerializer -from genericparser.pub.exceptions import NsdmBadRequestException +from catalog.pub.exceptions import NsdmBadRequestException +from catalog.packages.biz.nsdm_subscription import NsdmSubscription from .common import view_safe_call_with_log -from genericparser.packages.biz.nsdm_subscription import NsdmSubscription logger = logging.getLogger(__name__) diff --git a/genericparser/packages/views/pnf_descriptor_views.py b/catalog/packages/views/pnf_descriptor_views.py similarity index 82% rename from genericparser/packages/views/pnf_descriptor_views.py rename to catalog/packages/views/pnf_descriptor_views.py index 7abd8ad..9120980 100644 --- a/genericparser/packages/views/pnf_descriptor_views.py +++ b/catalog/packages/views/pnf_descriptor_views.py @@ -20,17 +20,17 @@ from rest_framework import status from rest_framework.decorators import api_view from rest_framework.response import Response -from genericparser.packages.biz.pnf_descriptor import PnfDescriptor -from genericparser.packages.serializers.create_pnfd_info_request import CreatePnfdInfoRequestSerializer -from genericparser.packages.serializers.pnfd_info import PnfdInfoSerializer -from genericparser.packages.serializers.pnfd_infos import PnfdInfosSerializer -from genericparser.packages.views.common import validate_data -from genericparser.packages.serializers.genericparser_serializers import ParseModelRequestSerializer -from genericparser.packages.serializers.genericparser_serializers import ParseModelResponseSerializer -from genericparser.packages.serializers.genericparser_serializers import InternalErrorRequestSerializer -from genericparser.packages.serializers.response import ProblemDetailsSerializer -from genericparser.pub.utils.syscomm import fun_name -from genericparser.pub.utils.values import ignore_case_get +from catalog.packages.biz.pnf_descriptor import PnfDescriptor +from catalog.packages.serializers.create_pnfd_info_request import CreatePnfdInfoRequestSerializer +from catalog.packages.serializers.pnfd_info import PnfdInfoSerializer +from catalog.packages.serializers.pnfd_infos import PnfdInfosSerializer +from catalog.packages.views.common import validate_data +from catalog.packages.serializers.catalog_serializers import ParseModelRequestSerializer +from catalog.packages.serializers.catalog_serializers import ParseModelResponseSerializer +from catalog.packages.serializers.catalog_serializers import InternalErrorRequestSerializer +from catalog.packages.serializers.response import ProblemDetailsSerializer +from catalog.pub.utils.syscomm import fun_name +from catalog.pub.utils.values import ignore_case_get from .common import view_safe_call_with_log logger = logging.getLogger(__name__) @@ -95,13 +95,13 @@ def pnf_descriptors_rc(request): if request.method == 'POST': create_pnfd_info_request = validate_data(request.data, CreatePnfdInfoRequestSerializer) data = PnfDescriptor().create(create_pnfd_info_request.data) - pnfd_info = validate_data(data, PnfdInfoSerializer) - return Response(data=pnfd_info.data, status=status.HTTP_201_CREATED) + validate_data(data, PnfdInfoSerializer) + return Response(data=data, status=status.HTTP_201_CREATED) if request.method == 'GET': data = PnfDescriptor().query_multiple(request) - pnfd_infos = validate_data(data, PnfdInfosSerializer) - return Response(data=pnfd_infos.data, status=status.HTTP_200_OK) + validate_data(data, PnfdInfosSerializer) + return Response(data=data, status=status.HTTP_200_OK) @swagger_auto_schema( diff --git a/genericparser/packages/views/vnf_package_artifact_views.py b/catalog/packages/views/vnf_package_artifact_views.py similarity index 90% rename from genericparser/packages/views/vnf_package_artifact_views.py rename to catalog/packages/views/vnf_package_artifact_views.py index 164db6c..0de9682 100644 --- a/genericparser/packages/views/vnf_package_artifact_views.py +++ b/catalog/packages/views/vnf_package_artifact_views.py @@ -19,8 +19,8 @@ from rest_framework import status from rest_framework.views import APIView from django.http import FileResponse -from genericparser.packages.serializers.response import ProblemDetailsSerializer -from genericparser.packages.biz.vnf_pkg_artifacts import FetchVnfPkgArtifact +from catalog.packages.serializers.response import ProblemDetailsSerializer +from catalog.packages.biz.vnf_pkg_artifacts import FetchVnfPkgArtifact from .common import view_safe_call_with_log logger = logging.getLogger(__name__) diff --git a/genericparser/packages/views/vnf_package_subscription_views.py b/catalog/packages/views/vnf_package_subscription_views.py similarity index 83% rename from genericparser/packages/views/vnf_package_subscription_views.py rename to catalog/packages/views/vnf_package_subscription_views.py index 135b625..32904e3 100644 --- a/genericparser/packages/views/vnf_package_subscription_views.py +++ b/catalog/packages/views/vnf_package_subscription_views.py @@ -19,17 +19,16 @@ from rest_framework import status from rest_framework.views import APIView from rest_framework.response import Response -from genericparser.packages.serializers.vnf_pkg_subscription import PkgmSubscriptionRequestSerializer -from genericparser.packages.serializers.vnf_pkg_subscription import PkgmSubscriptionSerializer -from genericparser.packages.serializers.vnf_pkg_subscription import PkgmSubscriptionsSerializer -from genericparser.packages.serializers.response import ProblemDetailsSerializer -from genericparser.packages.biz.vnf_pkg_subscription import CreateSubscription -from genericparser.packages.biz.vnf_pkg_subscription import QuerySubscription -from genericparser.packages.biz.vnf_pkg_subscription import TerminateSubscription -from genericparser.packages.views.common import validate_data -from genericparser.pub.exceptions import VnfPkgSubscriptionException -from genericparser.pub.exceptions import BadRequestException - +from catalog.packages.serializers.vnf_pkg_subscription import PkgmSubscriptionRequestSerializer +from catalog.packages.serializers.vnf_pkg_subscription import PkgmSubscriptionSerializer +from catalog.packages.serializers.vnf_pkg_subscription import PkgmSubscriptionsSerializer +from catalog.packages.serializers.response import ProblemDetailsSerializer +from catalog.packages.biz.vnf_pkg_subscription import CreateSubscription +from catalog.packages.biz.vnf_pkg_subscription import QuerySubscription +from catalog.packages.biz.vnf_pkg_subscription import TerminateSubscription +from catalog.packages.views.common import validate_data +from catalog.pub.exceptions import VnfPkgSubscriptionException +from catalog.pub.exceptions import BadRequestException from .common import view_safe_call_with_log logger = logging.getLogger(__name__) diff --git a/genericparser/packages/views/vnf_package_views.py b/catalog/packages/views/vnf_package_views.py similarity index 83% rename from genericparser/packages/views/vnf_package_views.py rename to catalog/packages/views/vnf_package_views.py index bfb1224..9fc143b 100644 --- a/genericparser/packages/views/vnf_package_views.py +++ b/catalog/packages/views/vnf_package_views.py @@ -19,14 +19,15 @@ from drf_yasg.utils import swagger_auto_schema, no_body from rest_framework import status from rest_framework.decorators import api_view from rest_framework.response import Response -from genericparser.packages.serializers.upload_vnf_pkg_from_uri_req import UploadVnfPackageFromUriRequestSerializer -from genericparser.packages.serializers.create_vnf_pkg_info_req import CreateVnfPkgInfoRequestSerializer -from genericparser.packages.serializers.vnf_pkg_info import VnfPkgInfoSerializer -from genericparser.packages.serializers.vnf_pkg_infos import VnfPkgInfosSerializer -from genericparser.packages.biz.vnf_package import VnfPackage -from genericparser.packages.biz.vnf_package import VnfPkgUploadThread -from genericparser.packages.biz.vnf_package import parse_vnfd_and_save -from genericparser.packages.biz.vnf_package import handle_upload_failed + +from catalog.packages.serializers.upload_vnf_pkg_from_uri_req import UploadVnfPackageFromUriRequestSerializer +from catalog.packages.serializers.create_vnf_pkg_info_req import CreateVnfPkgInfoRequestSerializer +from catalog.packages.serializers.vnf_pkg_info import VnfPkgInfoSerializer +from catalog.packages.serializers.vnf_pkg_infos import VnfPkgInfosSerializer +from catalog.packages.biz.vnf_package import VnfPackage +from catalog.packages.biz.vnf_package import VnfPkgUploadThread +from catalog.packages.biz.vnf_package import parse_vnfd_and_save +from catalog.packages.biz.vnf_package import handle_upload_failed from .common import validate_data from .common import view_safe_call_with_log @@ -57,16 +58,16 @@ def vnf_packages_rc(request): if request.method == 'GET': logger.debug("Query VNF packages> %s" % request.data) data = VnfPackage().query_multiple() - vnf_pkg_infos = validate_data(data, VnfPkgInfosSerializer) - return Response(data=vnf_pkg_infos.data, status=status.HTTP_200_OK) + validate_data(data, VnfPkgInfosSerializer) + return Response(data=data, status=status.HTTP_200_OK) if request.method == 'POST': logger.debug("Create VNF package> %s" % request.data) create_vnf_pkg_info_request = validate_data(request.data, CreateVnfPkgInfoRequestSerializer) data = VnfPackage().create_vnf_pkg(create_vnf_pkg_info_request.data) - vnf_pkg_info = validate_data(data, VnfPkgInfoSerializer) - return Response(data=vnf_pkg_info.data, status=status.HTTP_201_CREATED) + validate_data(data, VnfPkgInfoSerializer) + return Response(data=data, status=status.HTTP_201_CREATED) @swagger_auto_schema( @@ -158,8 +159,8 @@ def vnf_package_rd(request, **kwargs): if request.method == 'GET': logger.debug("Query an individual VNF package> %s" % request.data) data = VnfPackage().query_single(vnf_pkg_id) - vnf_pkg_info = validate_data(data, VnfPkgInfoSerializer) - return Response(data=vnf_pkg_info.data, status=status.HTTP_200_OK) + validate_data(data, VnfPkgInfoSerializer) + return Response(data=data, status=status.HTTP_200_OK) if request.method == 'DELETE': logger.debug("Delete an individual VNF package> %s" % request.data) diff --git a/genericparser/pub/__init__.py b/catalog/pub/__init__.py similarity index 100% rename from genericparser/pub/__init__.py rename to catalog/pub/__init__.py diff --git a/genericparser/pub/config/__init__.py b/catalog/pub/config/__init__.py similarity index 100% rename from genericparser/pub/config/__init__.py rename to catalog/pub/config/__init__.py diff --git a/genericparser/pub/config/config.py b/catalog/pub/config/config.py similarity index 79% rename from genericparser/pub/config/config.py rename to catalog/pub/config/config.py index 24f4fca..b8a5141 100644 --- a/genericparser/pub/config/config.py +++ b/catalog/pub/config/config.py @@ -24,12 +24,12 @@ REDIS_PASSWD = '' # [mysql] DB_IP = "127.0.0.1" DB_PORT = 3306 -DB_NAME = "genericparser" -DB_USER = "genericparser" -DB_PASSWD = "genericparser" +DB_NAME = "nfvocatalog" +DB_USER = "nfvocatalog" +DB_PASSWD = "nfvocatalog" # [MDC] -SERVICE_NAME = "genericparser" +SERVICE_NAME = "catalog" FORWARDED_FOR_FIELDS = ["HTTP_X_FORWARDED_FOR", "HTTP_X_FORWARDED_HOST", "HTTP_X_FORWARDED_SERVER"] @@ -37,9 +37,9 @@ FORWARDED_FOR_FIELDS = ["HTTP_X_FORWARDED_FOR", "HTTP_X_FORWARDED_HOST", REG_TO_MSB_WHEN_START = True REG_TO_MSB_REG_URL = "/api/microservices/v1/services" REG_TO_MSB_REG_PARAM = [{ - "serviceName": "parser", + "serviceName": "catalog", "version": "v1", - "url": "/api/parser/v1", + "url": "/api/catalog/v1", "protocol": "REST", "visualRange": "1", "nodes": [{ @@ -70,12 +70,13 @@ REG_TO_MSB_REG_PARAM = [{ "ttl": 0 }] }] +MSB_SVC_CALALOG_URL = "/api/microservices/v1/services/catalog/version/v1" +MSB_SVC_NSD_URL = "/api/microservices/v1/services/nsd/version/v1" +MSB_SVC_VNFPKGM_URL = "/api/microservices/v1/services/vnfpkgm/version/v1" -# genericparser path(values is defined in settings.py) -# CATALOG_ROOT_PATH = None -# CATALOG_URL_PATH = None -GENERICPARSER_ROOT_PATH = None -GENERICPARSER_URL_PATH = None +# catalog path(values is defined in settings.py) +CATALOG_ROOT_PATH = None +CATALOG_URL_PATH = None # [sdc config] SDC_BASE_URL = "http://msb-iag/api" diff --git a/genericparser/pub/database/__init__.py b/catalog/pub/database/__init__.py similarity index 100% rename from genericparser/pub/database/__init__.py rename to catalog/pub/database/__init__.py diff --git a/genericparser/pub/database/admin.py b/catalog/pub/database/admin.py similarity index 93% rename from genericparser/pub/database/admin.py rename to catalog/pub/database/admin.py index ec7a92a..bff70cb 100644 --- a/genericparser/pub/database/admin.py +++ b/catalog/pub/database/admin.py @@ -14,15 +14,15 @@ from django.contrib import admin -from genericparser.pub.database.models import NSPackageModel -from genericparser.pub.database.models import ServicePackageModel -from genericparser.pub.database.models import VnfPackageModel -from genericparser.pub.database.models import PnfPackageModel -from genericparser.pub.database.models import SoftwareImageModel -from genericparser.pub.database.models import JobModel -from genericparser.pub.database.models import JobStatusModel -from genericparser.pub.database.models import NsdmSubscriptionModel -from genericparser.pub.database.models import VnfPkgSubscriptionModel +from catalog.pub.database.models import NSPackageModel +from catalog.pub.database.models import ServicePackageModel +from catalog.pub.database.models import VnfPackageModel +from catalog.pub.database.models import PnfPackageModel +from catalog.pub.database.models import SoftwareImageModel +from catalog.pub.database.models import JobModel +from catalog.pub.database.models import JobStatusModel +from catalog.pub.database.models import NsdmSubscriptionModel +from catalog.pub.database.models import VnfPkgSubscriptionModel @admin.register(NSPackageModel) diff --git a/genericparser/pub/database/migrations/0001_initial.py b/catalog/pub/database/migrations/0001_initial.py similarity index 100% rename from genericparser/pub/database/migrations/0001_initial.py rename to catalog/pub/database/migrations/0001_initial.py diff --git a/genericparser/pub/database/migrations/__init__.py b/catalog/pub/database/migrations/__init__.py similarity index 100% rename from genericparser/pub/database/migrations/__init__.py rename to catalog/pub/database/migrations/__init__.py diff --git a/genericparser/pub/database/models.py b/catalog/pub/database/models.py similarity index 97% rename from genericparser/pub/database/models.py rename to catalog/pub/database/models.py index ffbd6d0..9f0b498 100644 --- a/genericparser/pub/database/models.py +++ b/catalog/pub/database/models.py @@ -35,7 +35,7 @@ class NSPackageModel(models.Model): nsdModel = models.TextField(db_column='NSDMODEL', max_length=65535, null=True, blank=True) class Meta: - db_table = 'GENERICPARSER_NSPACKAGE' + db_table = 'CATALOG_NSPACKAGE' class ServicePackageModel(models.Model): @@ -58,7 +58,7 @@ class ServicePackageModel(models.Model): servicedModel = models.TextField(db_column='SERVICEDMODEL', max_length=65535, null=True, blank=True) class Meta: - db_table = 'GENERICPARSER_SERVICEPACKAGE' + db_table = 'CATALOG_SERVICEPACKAGE' class VnfPackageModel(models.Model): @@ -81,7 +81,7 @@ class VnfPackageModel(models.Model): vnfdModel = models.TextField(db_column='VNFDMODEL', max_length=65535, blank=True, null=True) # vnfd class Meta: - db_table = 'GENERICPARSER_VNFPACKAGE' + db_table = 'CATALOG_VNFPACKAGE' class PnfPackageModel(models.Model): @@ -104,7 +104,7 @@ class PnfPackageModel(models.Model): pnfdName = models.TextField(db_column='PNFDNAME', max_length=65535, blank=True, null=True) # pnfd_name class Meta: - db_table = 'GENERICPARSER_PNFPACKAGE' + db_table = 'CATALOG_PNFPACKAGE' class SoftwareImageModel(models.Model): @@ -124,7 +124,7 @@ class SoftwareImageModel(models.Model): # purpose = models.CharField(db_column='PURPOSE', max_length=1000) class Meta: - db_table = 'GENERICPARSER_SOFTWAREIMAGEMODEL' + db_table = 'CATALOG_SOFTWAREIMAGEMODEL' class JobModel(models.Model): @@ -141,7 +141,7 @@ class JobModel(models.Model): resname = models.CharField(db_column='RESNAME', max_length=255, null=True, blank=True) class Meta: - db_table = 'GENERICPARSER_JOB' + db_table = 'CATALOG_JOB' def toJSON(self): import json @@ -158,7 +158,7 @@ class JobStatusModel(models.Model): addtime = models.CharField(db_column='ADDTIME', max_length=255, null=True, blank=True) class Meta: - db_table = 'GENERICPARSER_JOB_STATUS' + db_table = 'CATALOG_JOB_STATUS' def toJSON(self): import json @@ -192,7 +192,7 @@ class NsdmSubscriptionModel(models.Model): links = models.TextField(db_column='LINKS') class Meta: - db_table = 'GENERICPARSER_NSDM_SUBSCRIPTION' + db_table = 'CATALOG_NSDM_SUBSCRIPTION' def toJSON(self): import json diff --git a/genericparser/pub/exceptions.py b/catalog/pub/exceptions.py similarity index 52% rename from genericparser/pub/exceptions.py rename to catalog/pub/exceptions.py index b3c797d..e0dac0e 100644 --- a/genericparser/pub/exceptions.py +++ b/catalog/pub/exceptions.py @@ -13,45 +13,45 @@ # limitations under the License. -class GenericparserException(Exception): +class CatalogException(Exception): pass -class ResourceNotFoundException(GenericparserException): +class BadRequestException(CatalogException): pass -class PackageNotFoundException(GenericparserException): +class ResourceNotFoundException(CatalogException): pass -class PackageHasExistsException(GenericparserException): +class PackageNotFoundException(CatalogException): pass -class VnfPkgSubscriptionException(GenericparserException): +class PackageHasExistsException(CatalogException): pass -class VnfPkgDuplicateSubscriptionException(GenericparserException): +class VnfPkgSubscriptionException(CatalogException): pass -class SubscriptionDoesNotExistsException(GenericparserException): +class VnfPkgDuplicateSubscriptionException(CatalogException): pass -class NsdmBadRequestException(GenericparserException): +class SubscriptionDoesNotExistsException(CatalogException): pass -class NsdmDuplicateSubscriptionException(GenericparserException): +class NsdmBadRequestException(CatalogException): pass -class BadRequestException(GenericparserException): +class NsdmDuplicateSubscriptionException(CatalogException): pass -class ArtifactNotFoundException(GenericparserException): +class ArtifactNotFoundException(CatalogException): pass diff --git a/genericparser/pub/msapi/__init__.py b/catalog/pub/msapi/__init__.py similarity index 100% rename from genericparser/pub/msapi/__init__.py rename to catalog/pub/msapi/__init__.py diff --git a/genericparser/pub/msapi/extsys.py b/catalog/pub/msapi/extsys.py similarity index 88% rename from genericparser/pub/msapi/extsys.py rename to catalog/pub/msapi/extsys.py index 639513f..e038f26 100644 --- a/genericparser/pub/msapi/extsys.py +++ b/catalog/pub/msapi/extsys.py @@ -16,17 +16,17 @@ import json import logging import uuid -from genericparser.pub.config.config import AAI_BASE_URL, AAI_USER, AAI_PASSWD -from genericparser.pub.exceptions import GenericparserException -from genericparser.pub.utils import restcall -from genericparser.pub.utils.values import ignore_case_get +from catalog.pub.config.config import AAI_BASE_URL, AAI_USER, AAI_PASSWD +from catalog.pub.exceptions import CatalogException +from catalog.pub.utils import restcall +from catalog.pub.utils.values import ignore_case_get logger = logging.getLogger(__name__) def call_aai(resource, method, content=''): additional_headers = { - 'X-FromAppId': 'MODEL-GENERICPARSER', + 'X-FromAppId': 'VFC-CATALOG', 'X-TransactionId': str(uuid.uuid1()) } return restcall.call_req(AAI_BASE_URL, @@ -43,7 +43,7 @@ def get_vims(): ret = call_aai("/cloud-infrastructure/cloud-regions?depth=all", "GET") if ret[0] != 0: logger.error("Status code is %s, detail is %s.", ret[2], ret[1]) - raise GenericparserException("Failed to query vims from extsys.") + raise CatalogException("Failed to query vims from extsys.") # convert vim_info_aai to internal vim_info vims_aai = json.JSONDecoder().decode(ret[1]) vims_aai = ignore_case_get(vims_aai, "cloud-region") @@ -60,7 +60,7 @@ def get_vim_by_id(vim_id): % (cloud_owner, cloud_region), "GET") if ret[0] != 0: logger.error("Status code is %s, detail is %s.", ret[2], ret[1]) - raise GenericparserException("Failed to query vim(%s) from extsys." % vim_id) + raise CatalogException("Failed to query vim(%s) from extsys." % vim_id) # convert vim_info_aai to internal vim_info vim_info_aai = json.JSONDecoder().decode(ret[1]) vim_info = convert_vim_info(vim_info_aai) @@ -99,7 +99,7 @@ def get_sdn_controller_by_id(sdn_ontroller_id): % sdn_ontroller_id, "GET") if ret[0] != 0: logger.error("Failed to query sdn ontroller(%s) from extsys. detail is %s.", sdn_ontroller_id, ret[1]) - raise GenericparserException("Failed to query sdn ontroller(%s) from extsys." % sdn_ontroller_id) + raise CatalogException("Failed to query sdn ontroller(%s) from extsys." % sdn_ontroller_id) # convert vim_info_aai to internal vim_info sdnc_info_aai = json.JSONDecoder().decode(ret[1]) sdnc_info = convert_sdnc_info(sdnc_info_aai) @@ -130,7 +130,7 @@ def get_vnfm_by_id(vnfm_inst_id): ret = call_aai(uri, "GET") if ret[0] > 0: logger.error('Send get VNFM information request to extsys failed.') - raise GenericparserException('Send get VNFM information request to extsys failed.') + raise CatalogException('Send get VNFM information request to extsys failed.') # convert vnfm_info_aai to internal vnfm_info vnfm_info_aai = json.JSONDecoder().decode(ret[1]) vnfm_info = convert_vnfm_info(vnfm_info_aai) @@ -161,7 +161,7 @@ def select_vnfm(vnfm_type, vim_id): ret = call_aai(uri, "GET") if ret[0] > 0: logger.error("Failed to call %s: %s", uri, ret[1]) - raise GenericparserException('Failed to get vnfms from extsys.') + raise CatalogException('Failed to get vnfms from extsys.') vnfms = json.JSONDecoder().decode(ret[1]) vnfms = ignore_case_get(vnfms, "esr-vnfm") for vnfm in vnfms: @@ -172,4 +172,4 @@ def select_vnfm(vnfm_type, vim_id): # convert vnfm_info_aai to internal vnfm_info vnfm = convert_vnfm_info(vnfm) return vnfm - raise GenericparserException('No vnfm found with %s in vim(%s)' % (vnfm_type, vim_id)) + raise CatalogException('No vnfm found with %s in vim(%s)' % (vnfm_type, vim_id)) diff --git a/genericparser/pub/msapi/sdc.py b/catalog/pub/msapi/sdc.py similarity index 79% rename from genericparser/pub/msapi/sdc.py rename to catalog/pub/msapi/sdc.py index 81715de..bb473cc 100644 --- a/genericparser/pub/msapi/sdc.py +++ b/catalog/pub/msapi/sdc.py @@ -16,10 +16,10 @@ import json import logging import os -from genericparser.pub.config.config import SDC_BASE_URL, SDC_USER, SDC_PASSWD -from genericparser.pub.exceptions import GenericparserException -from genericparser.pub.utils import fileutil -from genericparser.pub.utils import restcall +from catalog.pub.config.config import SDC_BASE_URL, SDC_USER, SDC_PASSWD +from catalog.pub.exceptions import CatalogException +from catalog.pub.utils import fileutil +from catalog.pub.utils import restcall logger = logging.getLogger(__name__) @@ -30,7 +30,7 @@ DISTRIBUTED = "DISTRIBUTED" def call_sdc(resource, method, content=''): additional_headers = { - 'X-ECOMP-InstanceID': 'Modeling', + 'X-ECOMP-InstanceID': 'VFC', } return restcall.call_req(base_url=SDC_BASE_URL, user=SDC_USER, @@ -67,7 +67,7 @@ def get_artifacts(asset_type): ret = call_sdc(resource, "GET") if ret[0] != 0: logger.error("Status code is %s, detail is %s.", ret[2], ret[1]) - raise GenericparserException("Failed to query artifacts(%s) from sdc." % asset_type) + raise CatalogException("Failed to query artifacts(%s) from sdc." % asset_type) return json.JSONDecoder().decode(ret[1]) @@ -77,11 +77,10 @@ def get_artifact(asset_type, csar_id): if artifact["uuid"] == csar_id: if asset_type == ASSETTYPE_SERVICES and \ artifact.get("distributionStatus", None) != DISTRIBUTED: - raise GenericparserException( - "The artifact (%s,%s) is not distributed from sdc." % (asset_type, csar_id)) + raise CatalogException("The artifact (%s,%s) is not distributed from sdc." % (asset_type, csar_id)) else: return artifact - raise GenericparserException("Failed to query artifact(%s,%s) from sdc." % (asset_type, csar_id)) + raise CatalogException("Failed to query artifact(%s,%s) from sdc." % (asset_type, csar_id)) def get_asset(asset_type, uuid): @@ -89,10 +88,10 @@ def get_asset(asset_type, uuid): ret = call_sdc(resource, "GET") if ret[0] != 0: logger.error("Status code is %s, detail is %s.", ret[2], ret[1]) - raise GenericparserException("Failed to get asset(%s, %s) from sdc." % (asset_type, uuid)) + raise CatalogException("Failed to get asset(%s, %s) from sdc." % (asset_type, uuid)) asset = json.JSONDecoder().decode(ret[1]) if asset.get("distributionStatus", None) != DISTRIBUTED: - raise GenericparserException("The asset (%s,%s) is not distributed from sdc." % (asset_type, uuid)) + raise CatalogException("The asset (%s,%s) is not distributed from sdc." % (asset_type, uuid)) else: return asset @@ -103,13 +102,13 @@ def delete_artifact(asset_type, asset_id, artifact_id): ret = call_sdc(resource, "DELETE") if ret[0] != 0: logger.error("Status code is %s, detail is %s.", ret[2], ret[1]) - raise GenericparserException("Failed to delete artifacts(%s) from sdc." % artifact_id) + raise CatalogException("Failed to delete artifacts(%s) from sdc." % artifact_id) return json.JSONDecoder().decode(ret[1]) def download_artifacts(download_url, local_path, file_name): additional_headers = { - 'X-ECOMP-InstanceID': 'Modeling', + 'X-ECOMP-InstanceID': 'VFC', 'accept': 'application/octet-stream' } ret = restcall.call_req(base_url=SDC_BASE_URL, @@ -121,7 +120,7 @@ def download_artifacts(download_url, local_path, file_name): additional_headers=additional_headers) if ret[0] != 0: logger.error("Status code is %s, detail is %s.", ret[2], ret[1]) - raise GenericparserException("Failed to download %s from sdc." % download_url) + raise CatalogException("Failed to download %s from sdc." % download_url) fileutil.make_dirs(local_path) local_file_name = os.path.join(local_path, file_name) local_file = open(local_file_name, 'wb') diff --git a/genericparser/pub/redisco/__init__.py b/catalog/pub/redisco/__init__.py similarity index 100% rename from genericparser/pub/redisco/__init__.py rename to catalog/pub/redisco/__init__.py diff --git a/genericparser/pub/redisco/containers.py b/catalog/pub/redisco/containers.py similarity index 100% rename from genericparser/pub/redisco/containers.py rename to catalog/pub/redisco/containers.py diff --git a/genericparser/pub/ssl/cert/foobar.crt b/catalog/pub/ssl/cert/foobar.crt similarity index 100% rename from genericparser/pub/ssl/cert/foobar.crt rename to catalog/pub/ssl/cert/foobar.crt diff --git a/genericparser/pub/ssl/cert/foobar.csr b/catalog/pub/ssl/cert/foobar.csr similarity index 100% rename from genericparser/pub/ssl/cert/foobar.csr rename to catalog/pub/ssl/cert/foobar.csr diff --git a/genericparser/pub/ssl/cert/foobar.key b/catalog/pub/ssl/cert/foobar.key similarity index 100% rename from genericparser/pub/ssl/cert/foobar.key rename to catalog/pub/ssl/cert/foobar.key diff --git a/genericparser/pub/utils/__init__.py b/catalog/pub/utils/__init__.py similarity index 100% rename from genericparser/pub/utils/__init__.py rename to catalog/pub/utils/__init__.py diff --git a/genericparser/pub/utils/fileutil.py b/catalog/pub/utils/fileutil.py similarity index 100% rename from genericparser/pub/utils/fileutil.py rename to catalog/pub/utils/fileutil.py diff --git a/genericparser/pub/utils/idutil.py b/catalog/pub/utils/idutil.py similarity index 92% rename from genericparser/pub/utils/idutil.py rename to catalog/pub/utils/idutil.py index 768416c..c2347c1 100644 --- a/genericparser/pub/utils/idutil.py +++ b/catalog/pub/utils/idutil.py @@ -11,7 +11,7 @@ # 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 genericparser.pub.redisco import containers as cont +from catalog.pub.redisco import containers as cont def get_auto_id(id_type, id_group="auto_id_hash"): diff --git a/genericparser/pub/utils/jobutil.py b/catalog/pub/utils/jobutil.py similarity index 98% rename from genericparser/pub/utils/jobutil.py rename to catalog/pub/utils/jobutil.py index abe5227..3d79c7a 100644 --- a/genericparser/pub/utils/jobutil.py +++ b/catalog/pub/utils/jobutil.py @@ -17,8 +17,8 @@ import uuid import traceback from functools import reduce -from genericparser.pub.database.models import JobStatusModel, JobModel -from genericparser.pub.utils import idutil +from catalog.pub.database.models import JobStatusModel, JobModel +from catalog.pub.utils import idutil logger = logging.getLogger(__name__) diff --git a/genericparser/pub/utils/restcall.py b/catalog/pub/utils/restcall.py similarity index 98% rename from genericparser/pub/utils/restcall.py rename to catalog/pub/utils/restcall.py index 5efa0cb..8f03259 100644 --- a/genericparser/pub/utils/restcall.py +++ b/catalog/pub/utils/restcall.py @@ -20,7 +20,7 @@ import uuid import httplib2 import base64 -from genericparser.pub.config.config import MSB_SERVICE_IP, MSB_SERVICE_PORT +from catalog.pub.config.config import MSB_SERVICE_IP, MSB_SERVICE_PORT rest_no_auth, rest_oneway_auth, rest_bothway_auth = 0, 1, 2 HTTP_200_OK, HTTP_201_CREATED, HTTP_204_NO_CONTENT, HTTP_202_ACCEPTED = '200', '201', '204', '202' diff --git a/genericparser/pub/utils/syscomm.py b/catalog/pub/utils/syscomm.py similarity index 100% rename from genericparser/pub/utils/syscomm.py rename to catalog/pub/utils/syscomm.py diff --git a/genericparser/pub/utils/tests.py b/catalog/pub/utils/tests.py similarity index 98% rename from genericparser/pub/utils/tests.py rename to catalog/pub/utils/tests.py index 8390ce7..0f02467 100644 --- a/genericparser/pub/utils/tests.py +++ b/catalog/pub/utils/tests.py @@ -21,8 +21,8 @@ from . import syscomm from . import timeutil from . import values -from genericparser.pub.database.models import JobStatusModel, JobModel -from genericparser.pub.utils.jobutil import JobUtil +from catalog.pub.database.models import JobStatusModel, JobModel +from catalog.pub.utils.jobutil import JobUtil class MockReq(): diff --git a/genericparser/pub/utils/timeutil.py b/catalog/pub/utils/timeutil.py similarity index 100% rename from genericparser/pub/utils/timeutil.py rename to catalog/pub/utils/timeutil.py diff --git a/genericparser/pub/utils/toscaparsers/__init__.py b/catalog/pub/utils/toscaparser/__init__.py similarity index 85% rename from genericparser/pub/utils/toscaparsers/__init__.py rename to catalog/pub/utils/toscaparser/__init__.py index 4b73f48..62ead96 100644 --- a/genericparser/pub/utils/toscaparsers/__init__.py +++ b/catalog/pub/utils/toscaparser/__init__.py @@ -14,10 +14,10 @@ import json -from genericparser.pub.utils.toscaparsers.nsdmodel import NsdInfoModel -from genericparser.pub.utils.toscaparsers.pnfmodel import PnfdInfoModel -from genericparser.pub.utils.toscaparsers.sdmodel import SdInfoModel -from genericparser.pub.utils.toscaparsers.vnfdmodel import EtsiVnfdInfoModel +from catalog.pub.utils.toscaparser.nsdmodel import NsdInfoModel +from catalog.pub.utils.toscaparser.pnfmodel import PnfdInfoModel +from catalog.pub.utils.toscaparser.sdmodel import SdInfoModel +from catalog.pub.utils.toscaparser.vnfdmodel import EtsiVnfdInfoModel def parse_nsd(path, input_parameters=[]): diff --git a/genericparser/pub/utils/toscaparsers/basemodel.py b/catalog/pub/utils/toscaparser/basemodel.py similarity index 98% rename from genericparser/pub/utils/toscaparsers/basemodel.py rename to catalog/pub/utils/toscaparser/basemodel.py index 643041d..6ed26aa 100644 --- a/genericparser/pub/utils/toscaparsers/basemodel.py +++ b/catalog/pub/utils/toscaparser/basemodel.py @@ -24,9 +24,9 @@ import urllib from toscaparser.tosca_template import ToscaTemplate from toscaparser.properties import Property from toscaparser.functions import Function, Concat, GetInput, get_function, function_mappings -from genericparser.pub.utils.toscaparsers.graph import Graph +from catalog.pub.utils.toscaparser.graph import Graph -from genericparser.pub.utils.toscaparsers.dataentityext import DataEntityExt +from catalog.pub.utils.toscaparser.dataentityext import DataEntityExt logger = logging.getLogger(__name__) @@ -517,15 +517,6 @@ class BaseInfoModel(object): if substitution_mappings: nodeType = substitution_mappings['node_type'] logger.debug("nodeType %s", nodeType) - if "node_types" in tosca.tpl: - node_types = tosca.tpl['node_types'].get(nodeType, None) - derivedFrom = node_types.get('derived_from', "") - node['type'] = derivedFrom - node['properties'] = node_types.get('properties', {}) - node['requirements'] = node_types.get('requirements', {}) - node['capabilities'] = node_types.get('capabilities', {}) - metadata = node_types.get('metadata', {}) - if "type" not in node or node['type'] == "": node['type'] = nodeType node['properties'] = substitution_mappings.get('properties', {}) @@ -533,5 +524,11 @@ class BaseInfoModel(object): node['capabilities'] = substitution_mappings.get('capabilities', {}) metadata = substitution_mappings.get('metadata', {}) + if "node_types" in tosca.tpl: + node_types = tosca.tpl['node_types'].get(nodeType, None) + derivedFrom = node_types.get('derived_from', "") + node['type'] = derivedFrom + node['properties'] = node_types.get('properties', {}) + node['metadata'] = metadata if metadata and metadata != {} else self.buildMetadata(tosca) return node diff --git a/genericparser/pub/utils/toscaparsers/const.py b/catalog/pub/utils/toscaparser/const.py similarity index 100% rename from genericparser/pub/utils/toscaparsers/const.py rename to catalog/pub/utils/toscaparser/const.py diff --git a/genericparser/pub/utils/toscaparsers/dataentityext.py b/catalog/pub/utils/toscaparser/dataentityext.py similarity index 100% rename from genericparser/pub/utils/toscaparsers/dataentityext.py rename to catalog/pub/utils/toscaparser/dataentityext.py diff --git a/genericparser/pub/utils/toscaparsers/graph.py b/catalog/pub/utils/toscaparser/graph.py similarity index 100% rename from genericparser/pub/utils/toscaparsers/graph.py rename to catalog/pub/utils/toscaparser/graph.py diff --git a/genericparser/pub/utils/toscaparsers/nsdmodel.py b/catalog/pub/utils/toscaparser/nsdmodel.py similarity index 97% rename from genericparser/pub/utils/toscaparsers/nsdmodel.py rename to catalog/pub/utils/toscaparser/nsdmodel.py index 9cc706f..f742640 100644 --- a/genericparser/pub/utils/toscaparsers/nsdmodel.py +++ b/catalog/pub/utils/toscaparser/nsdmodel.py @@ -14,9 +14,9 @@ import functools import logging -from genericparser.pub.utils.toscaparsers.basemodel import BaseInfoModel -from genericparser.pub.utils.toscaparsers.const import SDC_SERVICE_METADATA_SECTIONS -from genericparser.pub.utils.toscaparsers.servicemodel import SdcServiceModel +from catalog.pub.utils.toscaparser.basemodel import BaseInfoModel +from catalog.pub.utils.toscaparser.const import SDC_SERVICE_METADATA_SECTIONS +from catalog.pub.utils.toscaparser.servicemodel import SdcServiceModel logger = logging.getLogger(__name__) diff --git a/genericparser/pub/utils/toscaparsers/pnfmodel.py b/catalog/pub/utils/toscaparser/pnfmodel.py similarity index 96% rename from genericparser/pub/utils/toscaparsers/pnfmodel.py rename to catalog/pub/utils/toscaparser/pnfmodel.py index 546861b..9ad8686 100644 --- a/genericparser/pub/utils/toscaparsers/pnfmodel.py +++ b/catalog/pub/utils/toscaparser/pnfmodel.py @@ -14,7 +14,7 @@ import functools import logging -from genericparser.pub.utils.toscaparsers.basemodel import BaseInfoModel +from catalog.pub.utils.toscaparser.basemodel import BaseInfoModel logger = logging.getLogger(__name__) diff --git a/genericparser/pub/utils/toscaparsers/sdmodel.py b/catalog/pub/utils/toscaparser/sdmodel.py similarity index 95% rename from genericparser/pub/utils/toscaparsers/sdmodel.py rename to catalog/pub/utils/toscaparser/sdmodel.py index 7635ab3..05e0caf 100644 --- a/genericparser/pub/utils/toscaparsers/sdmodel.py +++ b/catalog/pub/utils/toscaparser/sdmodel.py @@ -13,8 +13,8 @@ # limitations under the License. import logging -from genericparser.pub.utils.toscaparsers.basemodel import BaseInfoModel -from genericparser.pub.utils.toscaparsers.servicemodel import SdcServiceModel +from catalog.pub.utils.toscaparser.basemodel import BaseInfoModel +from catalog.pub.utils.toscaparser.servicemodel import SdcServiceModel logger = logging.getLogger(__name__) diff --git a/genericparser/pub/utils/toscaparsers/servicemodel.py b/catalog/pub/utils/toscaparser/servicemodel.py similarity index 97% rename from genericparser/pub/utils/toscaparsers/servicemodel.py rename to catalog/pub/utils/toscaparser/servicemodel.py index 6321e04..47d6630 100644 --- a/genericparser/pub/utils/toscaparsers/servicemodel.py +++ b/catalog/pub/utils/toscaparser/servicemodel.py @@ -14,8 +14,8 @@ import functools import logging -from genericparser.pub.utils.toscaparsers.const import NS_METADATA_SECTIONS, PNF_METADATA_SECTIONS, VNF_SECTIONS, PNF_SECTIONS, VL_SECTIONS -from genericparser.pub.utils.toscaparsers.basemodel import BaseInfoModel +from catalog.pub.utils.toscaparser.const import NS_METADATA_SECTIONS, PNF_METADATA_SECTIONS, VNF_SECTIONS, PNF_SECTIONS, VL_SECTIONS +from catalog.pub.utils.toscaparser.basemodel import BaseInfoModel logger = logging.getLogger(__name__) diff --git a/genericparser/pub/utils/toscaparsers/testdata/ns/ran.csar b/catalog/pub/utils/toscaparser/testdata/ns/ran.csar similarity index 100% rename from genericparser/pub/utils/toscaparsers/testdata/ns/ran.csar rename to catalog/pub/utils/toscaparser/testdata/ns/ran.csar diff --git a/genericparser/pub/utils/toscaparsers/testdata/ns/service-vIMS.csar b/catalog/pub/utils/toscaparser/testdata/ns/service-vIMS.csar similarity index 100% rename from genericparser/pub/utils/toscaparsers/testdata/ns/service-vIMS.csar rename to catalog/pub/utils/toscaparser/testdata/ns/service-vIMS.csar diff --git a/genericparser/pub/utils/toscaparsers/testdata/pnf/ran-du.csar b/catalog/pub/utils/toscaparser/testdata/pnf/ran-du.csar similarity index 100% rename from genericparser/pub/utils/toscaparsers/testdata/pnf/ran-du.csar rename to catalog/pub/utils/toscaparser/testdata/pnf/ran-du.csar diff --git a/genericparser/pub/utils/toscaparsers/testdata/vnf/vSBC.csar b/catalog/pub/utils/toscaparser/testdata/vnf/vSBC.csar similarity index 100% rename from genericparser/pub/utils/toscaparsers/testdata/vnf/vSBC.csar rename to catalog/pub/utils/toscaparser/testdata/vnf/vSBC.csar diff --git a/genericparser/pub/utils/toscaparsers/testdata/vnf/vcpedpdk/infra.csar b/catalog/pub/utils/toscaparser/testdata/vnf/vcpedpdk/infra.csar similarity index 100% rename from genericparser/pub/utils/toscaparsers/testdata/vnf/vcpedpdk/infra.csar rename to catalog/pub/utils/toscaparser/testdata/vnf/vcpedpdk/infra.csar diff --git a/genericparser/pub/utils/toscaparsers/testdata/vnf/vcpedpdk/vbng.csar b/catalog/pub/utils/toscaparser/testdata/vnf/vcpedpdk/vbng.csar similarity index 100% rename from genericparser/pub/utils/toscaparsers/testdata/vnf/vcpedpdk/vbng.csar rename to catalog/pub/utils/toscaparser/testdata/vnf/vcpedpdk/vbng.csar diff --git a/genericparser/pub/utils/toscaparsers/testdata/vnf/vcpedpdk/vbrgemu.csar b/catalog/pub/utils/toscaparser/testdata/vnf/vcpedpdk/vbrgemu.csar similarity index 100% rename from genericparser/pub/utils/toscaparsers/testdata/vnf/vcpedpdk/vbrgemu.csar rename to catalog/pub/utils/toscaparser/testdata/vnf/vcpedpdk/vbrgemu.csar diff --git a/genericparser/pub/utils/toscaparsers/testdata/vnf/vcpedpdk/vgmux.csar b/catalog/pub/utils/toscaparser/testdata/vnf/vcpedpdk/vgmux.csar similarity index 100% rename from genericparser/pub/utils/toscaparsers/testdata/vnf/vcpedpdk/vgmux.csar rename to catalog/pub/utils/toscaparser/testdata/vnf/vcpedpdk/vgmux.csar diff --git a/genericparser/pub/utils/toscaparsers/testdata/vnf/vcpedpdk/vgw.csar b/catalog/pub/utils/toscaparser/testdata/vnf/vcpedpdk/vgw.csar similarity index 100% rename from genericparser/pub/utils/toscaparsers/testdata/vnf/vcpedpdk/vgw.csar rename to catalog/pub/utils/toscaparser/testdata/vnf/vcpedpdk/vgw.csar diff --git a/genericparser/pub/utils/toscaparsers/testdata/vnf/vcpesriov/infra.csar b/catalog/pub/utils/toscaparser/testdata/vnf/vcpesriov/infra.csar similarity index 100% rename from genericparser/pub/utils/toscaparsers/testdata/vnf/vcpesriov/infra.csar rename to catalog/pub/utils/toscaparser/testdata/vnf/vcpesriov/infra.csar diff --git a/genericparser/pub/utils/toscaparsers/testdata/vnf/vcpesriov/vbng.csar b/catalog/pub/utils/toscaparser/testdata/vnf/vcpesriov/vbng.csar similarity index 100% rename from genericparser/pub/utils/toscaparsers/testdata/vnf/vcpesriov/vbng.csar rename to catalog/pub/utils/toscaparser/testdata/vnf/vcpesriov/vbng.csar diff --git a/genericparser/pub/utils/toscaparsers/testdata/vnf/vcpesriov/vbrgemu.csar b/catalog/pub/utils/toscaparser/testdata/vnf/vcpesriov/vbrgemu.csar similarity index 100% rename from genericparser/pub/utils/toscaparsers/testdata/vnf/vcpesriov/vbrgemu.csar rename to catalog/pub/utils/toscaparser/testdata/vnf/vcpesriov/vbrgemu.csar diff --git a/genericparser/pub/utils/toscaparsers/testdata/vnf/vcpesriov/vgmux.csar b/catalog/pub/utils/toscaparser/testdata/vnf/vcpesriov/vgmux.csar similarity index 100% rename from genericparser/pub/utils/toscaparsers/testdata/vnf/vcpesriov/vgmux.csar rename to catalog/pub/utils/toscaparser/testdata/vnf/vcpesriov/vgmux.csar diff --git a/genericparser/pub/utils/toscaparsers/testdata/vnf/vcpesriov/vgw.csar b/catalog/pub/utils/toscaparser/testdata/vnf/vcpesriov/vgw.csar similarity index 100% rename from genericparser/pub/utils/toscaparsers/testdata/vnf/vcpesriov/vgw.csar rename to catalog/pub/utils/toscaparser/testdata/vnf/vcpesriov/vgw.csar diff --git a/genericparser/pub/utils/toscaparsers/tests.py b/catalog/pub/utils/toscaparser/tests.py similarity index 94% rename from genericparser/pub/utils/toscaparsers/tests.py rename to catalog/pub/utils/toscaparser/tests.py index e28f712..285d970 100644 --- a/genericparser/pub/utils/toscaparsers/tests.py +++ b/catalog/pub/utils/toscaparser/tests.py @@ -19,8 +19,8 @@ import shutil from django.test import TestCase -from genericparser.pub.utils.toscaparsers import parse_vnfd, parse_pnfd, parse_nsd -from genericparser.pub.utils.toscaparsers.graph import Graph +from catalog.pub.utils.toscaparser import parse_vnfd, parse_pnfd, parse_nsd +from catalog.pub.utils.toscaparser.graph import Graph logger = logging.getLogger(__name__) @@ -45,8 +45,7 @@ class TestToscaparser(TestCase): logger.debug("sriov metadata:%s", metadata) self.assertEqual(("vCPE_%s" % vcpe_part), metadata.get("template_name", "")) if vcpe_part == "infra": - self.assertEqual("b1bb0ce7-1111-4fa7-95ed-4840d70a1177", - json.loads(vnfd_json)["vnf"]["properties"]["descriptor_id"]) + self.assertEqual("b1bb0ce7-1111-4fa7-95ed-4840d70a1177", json.loads(vnfd_json)["vnf"]["properties"]["descriptor_id"]) dpdk_path = os.path.dirname(os.path.abspath(__file__)) + "/testdata/vnf/vcpedpdk" csar_file = ("%s/%s.csar" % (dpdk_path, vcpe_part)) diff --git a/genericparser/pub/utils/toscaparsers/vnfdmodel.py b/catalog/pub/utils/toscaparser/vnfdmodel.py similarity index 90% rename from genericparser/pub/utils/toscaparsers/vnfdmodel.py rename to catalog/pub/utils/toscaparser/vnfdmodel.py index 2e48b4d..1ed0659 100644 --- a/genericparser/pub/utils/toscaparsers/vnfdmodel.py +++ b/catalog/pub/utils/toscaparser/vnfdmodel.py @@ -14,9 +14,9 @@ import functools import logging -from genericparser.pub.config.config import VNFD_SCHEMA_VERSION_DEFAULT -from genericparser.pub.utils.toscaparsers.basemodel import BaseInfoModel -from genericparser.pub.utils.toscaparsers.vnfdparser import CreateVnfdSOLParser +from catalog.pub.config.config import VNFD_SCHEMA_VERSION_DEFAULT +from catalog.pub.utils.toscaparser.basemodel import BaseInfoModel +from catalog.pub.utils.toscaparser.vnfdparser import CreateVnfdSOLParser logger = logging.getLogger(__name__) diff --git a/genericparser/pub/utils/toscaparsers/vnfdparser/__init__.py b/catalog/pub/utils/toscaparser/vnfdparser/__init__.py similarity index 82% rename from genericparser/pub/utils/toscaparsers/vnfdparser/__init__.py rename to catalog/pub/utils/toscaparser/vnfdparser/__init__.py index 179fb4c..911de2c 100644 --- a/genericparser/pub/utils/toscaparsers/vnfdparser/__init__.py +++ b/catalog/pub/utils/toscaparser/vnfdparser/__init__.py @@ -11,9 +11,8 @@ # 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 genericparser.pub.utils.toscaparsers.vnfdparser.vnfd_sol_base import VnfdSOLBase -from genericparser.pub.utils.toscaparsers.vnfdparser.vnfd_sol_251 import VnfdSOL251 +from catalog.pub.utils.toscaparser.vnfdparser.vnfd_sol_base import VnfdSOLBase +from catalog.pub.utils.toscaparser.vnfdparser.vnfd_sol_251 import VnfdSOL251 def CreateVnfdSOLParser(sol_version, etsi_vnfd_model): diff --git a/genericparser/pub/utils/toscaparsers/vnfdparser/vnfd_sol_251.py b/catalog/pub/utils/toscaparser/vnfdparser/vnfd_sol_251.py similarity index 79% rename from genericparser/pub/utils/toscaparsers/vnfdparser/vnfd_sol_251.py rename to catalog/pub/utils/toscaparser/vnfdparser/vnfd_sol_251.py index e71623a..d1b0d14 100644 --- a/genericparser/pub/utils/toscaparsers/vnfdparser/vnfd_sol_251.py +++ b/catalog/pub/utils/toscaparser/vnfdparser/vnfd_sol_251.py @@ -12,7 +12,6 @@ # See the License for the specific language governing permissions and # limitations under the License. -import functools import logging import os import base64 @@ -90,6 +89,23 @@ class VnfdSOL251(): vl['vl_id'] = node['name'] vl['description'] = node['description'] vl['properties'] = node['properties'] + vlp = vl['properties'] + nodep = node['properties'] + vlp['connectivity_type']['layer_protocol'] = nodep['connectivity_type']['layer_protocols'][0] + vlp['vl_profile']['max_bit_rate_requirements'] = nodep['vl_profile']['max_bitrate_requirements'] + vlp['vl_profile']['min_bit_rate_requirements'] = nodep['vl_profile']['min_bitrate_requirements'] + if 'virtual_link_protocol_data' in nodep['vl_profile']: + protocol_data = nodep['vl_profile']['virtual_link_protocol_data'][0] + vlp['vl_profile']['associated_layer_protocol'] = protocol_data['associated_layer_protocol'] + if 'l3_protocol_data' in protocol_data: + l3 = protocol_data['l3_protocol_data'] + vlp['vl_profile']['networkName'] = l3.get("name", "") + vlp['vl_profile']['cidr'] = l3.get("cidr", "") + vlp['vl_profile']['dhcpEnabled'] = l3.get("dhcp_enabled", "") + vlp['vl_profile']['ip_version'] = l3.get("ip_version", "") + if 'l2_protocol_data' in protocol_data: + l2 = protocol_data['l2_protocol_data'] + vlp['vl_profile']['physicalNetwork'] = l2.get("physical_network", "") vls.append(vl) return vls @@ -101,7 +117,22 @@ class VnfdSOL251(): cp['cp_id'] = node['name'] cp['cpd_id'] = node['name'] cp['description'] = node['description'] - cp['properties'] = node['properties'] + cp['properties'] = {} + nodep = node['properties'] + cp['properties']['trunk_mode'] = nodep.get("trunk_mode", "") + cp['properties']['layer_protocol'] = nodep.get("layer_protocols", "") + if 'vnic_type' in nodep: + cp['properties']['vnic_type'] = nodep.get("vnic_type", "normal") + if 'virtual_network_interface_requirements' in nodep: + cp['properties']['virtual_network_interface_requirements'] = nodep.get("virtual_network_interface_requirements", "") + if "protocol" in nodep: + node_protocol = nodep['protocol'][0] + cp['properties']['protocol_data'] = nodep['protocol'] + cp_protocol = cp['properties']['protocol_data'][0] + cp_protocol['asscociated_layer_protocol'] = node_protocol['associated_layer_protocol'] + if "address_data" in node_protocol: + cp_protocol['address_data'] = node_protocol['address_data'][0] + cp['vl_id'] = self._get_node_vl_id(node) cp['vdu_id'] = self._get_node_vdu_id(node) vls = self._buil_cp_vls(node) @@ -134,6 +165,9 @@ class VnfdSOL251(): if 'description' in node: ret['description'] = node['description'] ret['properties'] = node['properties'] + if 'boot_data' in node['properties']: + ret['properties']['user_data'] = node['properties']['boot_data'] + del ret['properties']['boot_data'] if 'inject_files' in node['properties']: inject_files = node['properties']['inject_files'] if inject_files is not None: @@ -150,12 +184,14 @@ class VnfdSOL251(): source_data = f.read() source_data_base64 = base64.b64encode(source_data) inject_files["source_data_base64"] = source_data_base64.decode() - virtual_storages = self.model.getRequirementByName(node, 'virtual_storage') - ret['virtual_storages'] = list(map(functools.partial(self._trans_virtual_storage), virtual_storages)) ret['dependencies'] = [self.model.get_requirement_node_name(x) for x in self.model.getNodeDependencys(node)] virtual_compute = self.model.getCapabilityByName(node, 'virtual_compute') if virtual_compute is not None and 'properties' in virtual_compute: - ret['virtual_compute'] = virtual_compute['properties'] + vc = {} + vc['virtual_cpu'] = virtual_compute['properties']['virtual_cpu'] + vc['virtual_memory'] = virtual_compute['properties']['virtual_memory'] + vc['virtual_storages'] = virtual_compute['properties'].get("virtual_local_storage", {}) + ret['virtual_compute'] = vc ret['vls'] = self._get_linked_vl_ids(node, nodeTemplates) ret['cps'] = self._get_virtal_binding_cp_ids(node, nodeTemplates) ret['artifacts'] = self.model.build_artifacts(node) diff --git a/genericparser/pub/utils/toscaparsers/vnfdparser/vnfd_sol_base.py b/catalog/pub/utils/toscaparser/vnfdparser/vnfd_sol_base.py similarity index 100% rename from genericparser/pub/utils/toscaparsers/vnfdparser/vnfd_sol_base.py rename to catalog/pub/utils/toscaparser/vnfdparser/vnfd_sol_base.py diff --git a/genericparser/pub/utils/values.py b/catalog/pub/utils/values.py similarity index 100% rename from genericparser/pub/utils/values.py rename to catalog/pub/utils/values.py diff --git a/genericparser/samples/__init__.py b/catalog/samples/__init__.py similarity index 100% rename from genericparser/samples/__init__.py rename to catalog/samples/__init__.py diff --git a/genericparser/samples/tests.py b/catalog/samples/tests.py similarity index 95% rename from genericparser/samples/tests.py rename to catalog/samples/tests.py index 53d7a10..2be964a 100644 --- a/genericparser/samples/tests.py +++ b/catalog/samples/tests.py @@ -41,5 +41,5 @@ class CallbackSampleTest(unittest.TestCase): pass def test_callback(self): - response = self.client.get("/api/parser/v1/callback_sample") + response = self.client.get("/api/catalog/v1/callback_sample") self.assertEqual(status.HTTP_204_NO_CONTENT, response.status_code, response.content) diff --git a/genericparser/samples/urls.py b/catalog/samples/urls.py similarity index 76% rename from genericparser/samples/urls.py rename to catalog/samples/urls.py index 853a124..8e3483c 100644 --- a/genericparser/samples/urls.py +++ b/catalog/samples/urls.py @@ -13,10 +13,10 @@ # limitations under the License. from django.conf.urls import url -from genericparser.samples import views +from catalog.samples import views urlpatterns = [ - url(r'^api/parser/v1/mandb/(?P[a-zA-Z\-]+)$', views.TablesList.as_view()), - url(r'^api/parser/v1/callback_sample$', views.CallbackSample.as_view()), + url(r'^api/catalog/v1/mandb/(?P[a-zA-Z\-]+)$', views.TablesList.as_view()), + url(r'^api/catalog/v1/callback_sample$', views.CallbackSample.as_view()), url(r'^samples/$', views.SampleList.as_view()) ] diff --git a/genericparser/samples/views.py b/catalog/samples/views.py similarity index 100% rename from genericparser/samples/views.py rename to catalog/samples/views.py diff --git a/genericparser/settings.py b/catalog/settings.py similarity index 81% rename from genericparser/settings.py rename to catalog/settings.py index 6044c13..51c9a88 100644 --- a/genericparser/settings.py +++ b/catalog/settings.py @@ -16,14 +16,13 @@ import os import sys import platform -import genericparser.pub.redisco +import catalog.pub.redisco -from genericparser.pub.config.config import REDIS_HOST, REDIS_PORT, REDIS_PASSWD -from genericparser.pub.config.config import DB_NAME, DB_IP, DB_USER, DB_PASSWD, DB_PORT -from genericparser.pub.config import config as pub_config +from catalog.pub.config.config import REDIS_HOST, REDIS_PORT, REDIS_PASSWD +from catalog.pub.config.config import DB_NAME, DB_IP, DB_USER, DB_PASSWD, DB_PORT +from catalog.pub.config import config as pub_config from logging import config as log_config from onaplogging import monkey - monkey.patch_all() # Build paths inside the project like this: os.path.join(BASE_DIR, ...) @@ -50,9 +49,9 @@ INSTALLED_APPS = [ 'django.contrib.staticfiles', 'django.contrib.admin', 'rest_framework', - 'genericparser.pub.database', - 'genericparser.samples', - 'genericparser.swagger', + 'catalog.pub.database', + 'catalog.samples', + 'catalog.swagger', 'drf_yasg', ] @@ -60,7 +59,7 @@ INSTALLED_APPS = [ SWAGGER_SETTINGS = { 'LOGIN_URL': '/admin/login', 'LOGOUT_URL': '/admin/logout', - 'DEFAULT_INFO': 'genericparser.swagger.urls.swagger_info' + 'DEFAULT_INFO': 'catalog.swagger.urls.swagger_info' } TEMPLATES = [ @@ -88,12 +87,12 @@ MIDDLEWARE_CLASSES = [ 'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 'django.contrib.messages.middleware.MessageMiddleware', 'django.middleware.clickjacking.XFrameOptionsMiddleware', - 'genericparser.middleware.LogContextMiddleware', + 'catalog.middleware.LogContextMiddleware', ] -ROOT_URLCONF = 'genericparser.urls' +ROOT_URLCONF = 'catalog.urls' -WSGI_APPLICATION = 'genericparser.wsgi.application' +WSGI_APPLICATION = 'catalog.wsgi.application' REST_FRAMEWORK = { 'DEFAULT_RENDERER_CLASSES': ( @@ -117,7 +116,7 @@ DATABASES = { }, } -genericparser.pub.redisco.connection_setup(host=REDIS_HOST, port=REDIS_PORT, password=REDIS_PASSWD, db=0) +catalog.pub.redisco.connection_setup(host=REDIS_HOST, port=REDIS_PORT, password=REDIS_PASSWD, db=0) # CACHE_BACKEND = 'redis_cache.cache://%s@%s:%s' % (REDIS_PASSWD, REDIS_HOST, REDIS_PORT) TIME_ZONE = 'UTC' @@ -130,9 +129,9 @@ STATIC_URL = '/static/' STATICFILES_DIRS = [ os.path.join(BASE_DIR, "static") ] -# change -pub_config.GENERICPARSER_ROOT_PATH = os.path.join(STATICFILES_DIRS[0], "genericparser") -pub_config.GENERICPARSER_URL_PATH = "static/genericparser" + +pub_config.CATALOG_ROOT_PATH = os.path.join(STATICFILES_DIRS[0], "catalog") +pub_config.CATALOG_URL_PATH = "static/catalog" pub_config.SDC_BASE_URL = "http://%s:%s/api" % (pub_config.MSB_SERVICE_IP, pub_config.MSB_SERVICE_PORT) if platform.system() == 'Windows' or 'test' in sys.argv: @@ -146,12 +145,11 @@ if platform.system() == 'Windows' or 'test' in sys.argv: }, 'filters': { }, - # change 'handlers': { - 'genericparser_handler': { + 'catalog_handler': { 'level': 'DEBUG', 'class': 'logging.handlers.RotatingFileHandler', - 'filename': os.path.join(BASE_DIR, 'logs/runtime_genericparser.log'), + 'filename': os.path.join(BASE_DIR, 'logs/runtime_catalog.log'), 'formatter': 'standard', 'maxBytes': 1024 * 1024 * 50, 'backupCount': 5, @@ -159,14 +157,13 @@ if platform.system() == 'Windows' or 'test' in sys.argv: }, 'loggers': { - # change - 'genericparser': { - 'handlers': ['genericparser_handler'], + 'catalog': { + 'handlers': ['catalog_handler'], 'level': 'DEBUG', 'propagate': False }, 'tosca': { - 'handlers': ['genericparser_handler'], + 'handlers': ['catalog_handler'], 'level': 'DEBUG', 'propagate': False }, @@ -175,7 +172,7 @@ if platform.system() == 'Windows' or 'test' in sys.argv: else: LOGGING_CONFIG = None # yaml configuration of logging - LOGGING_FILE = os.path.join(BASE_DIR, 'genericparser/log.yml') + LOGGING_FILE = os.path.join(BASE_DIR, 'catalog/log.yml') log_config.yamlConfig(filepath=LOGGING_FILE, watchDog=True) if 'test' in sys.argv: @@ -195,7 +192,6 @@ if 'test' in sys.argv: TEST_OUTPUT_DIR = 'test-reports' import mock - from genericparser.pub.utils import idutil - + from catalog.pub.utils import idutil idutil.get_auto_id = mock.Mock() idutil.get_auto_id.return_value = 1 diff --git a/genericparser/swagger/__init__.py b/catalog/swagger/__init__.py similarity index 100% rename from genericparser/swagger/__init__.py rename to catalog/swagger/__init__.py diff --git a/genericparser/swagger/management/__init__.py b/catalog/swagger/management/__init__.py similarity index 100% rename from genericparser/swagger/management/__init__.py rename to catalog/swagger/management/__init__.py diff --git a/genericparser/swagger/management/commands/__init__.py b/catalog/swagger/management/commands/__init__.py similarity index 100% rename from genericparser/swagger/management/commands/__init__.py rename to catalog/swagger/management/commands/__init__.py diff --git a/genericparser/swagger/management/commands/export_swagger.py b/catalog/swagger/management/commands/export_swagger.py similarity index 94% rename from genericparser/swagger/management/commands/export_swagger.py rename to catalog/swagger/management/commands/export_swagger.py index d3c46b1..bc5fd1a 100644 --- a/genericparser/swagger/management/commands/export_swagger.py +++ b/catalog/swagger/management/commands/export_swagger.py @@ -30,7 +30,7 @@ class Command(BaseCommand): def handle(self, *args, **options): self.client = Client() - response = self.client.get("/api/parser/v1/swagger.json") + response = self.client.get("/api/catalog/v1/swagger.json") with open(options['name'], 'w') as swagger_file: swagger_file.write(json.dumps(response.data)) print("swagger api is written to %s" % options['name']) diff --git a/genericparser/swagger/tests.py b/catalog/swagger/tests.py similarity index 92% rename from genericparser/swagger/tests.py rename to catalog/swagger/tests.py index 43ea97c..fc51b62 100644 --- a/genericparser/swagger/tests.py +++ b/catalog/swagger/tests.py @@ -23,6 +23,6 @@ class SwaggerViewTest(unittest.TestCase): pass def test_swagger(self): - response = self.client.get("/api/parser/v1/swagger.json") + response = self.client.get("/api/catalog/v1/swagger.json") self.assertEqual(status.HTTP_200_OK, response.status_code, response.content) self.assertEqual("2.0", response.data.get("swagger")) diff --git a/genericparser/swagger/urls.py b/catalog/swagger/urls.py similarity index 57% rename from genericparser/swagger/urls.py rename to catalog/swagger/urls.py index 2ace5ef..5437ee5 100644 --- a/genericparser/swagger/urls.py +++ b/catalog/swagger/urls.py @@ -19,14 +19,14 @@ from rest_framework import permissions # Add code for generating swagger automatically. swagger_info = openapi.Info( - title="MODELING GENERICPARSER API", + title="VFC Catalog API", default_version='v1', description=""" -The `swagger-ui` view can be found [here](/api/parser/v1/swagger). -The `ReDoc` view can be found [here](/api/parser/v1/redoc). -The swagger YAML document can be found [here](/api/parser/v1/swagger.yaml). -The swagger JSON document can be found [here](/api/parser/v1/swagger.json).""" +The `swagger-ui` view can be found [here](/api/catalog/v1/swagger). +The `ReDoc` view can be found [here](/api/catalog/v1/redoc). +The swagger YAML document can be found [here](/api/catalog/v1/swagger.yaml). +The swagger JSON document can be found [here](/api/catalog/v1/swagger.json).""" ) SchemaView = get_schema_view( @@ -36,8 +36,8 @@ SchemaView = get_schema_view( ) urlpatterns = [ - # url(r'^api/genericparser/v1/swagger.json$', SwaggerJsonView.as_view()), - url(r'^api/parser/v1/swagger(?P.json|.yaml)$', SchemaView.without_ui(cache_timeout=0), name='schema-json'), - url(r'^api/parser/v1/swagger$', SchemaView.with_ui('swagger', cache_timeout=0), name='schema-swagger-ui'), - url(r'^api/parser/v1/redoc$', SchemaView.with_ui('redoc', cache_timeout=0), name='schema-redoc'), + # url(r'^api/catalog/v1/swagger.json$', SwaggerJsonView.as_view()), + url(r'^api/catalog/v1/swagger(?P.json|.yaml)$', SchemaView.without_ui(cache_timeout=0), name='schema-json'), + url(r'^api/catalog/v1/swagger$', SchemaView.with_ui('swagger', cache_timeout=0), name='schema-swagger-ui'), + url(r'^api/catalog/v1/redoc$', SchemaView.with_ui('redoc', cache_timeout=0), name='schema-redoc'), ] diff --git a/catalog/swagger/vfc.catalog.swagger.json b/catalog/swagger/vfc.catalog.swagger.json new file mode 100644 index 0000000..1327462 --- /dev/null +++ b/catalog/swagger/vfc.catalog.swagger.json @@ -0,0 +1,793 @@ +{ + "swagger": "2.0", + "info": { + "version": "1.0.0", + "title": "ONAP VFC Catalog Rest API", + "description": "VFC Catalog Management API.", + "contact": { + "name": "ONAP VFC team", + "email": "onap-discuss@lists.onap.org", + "url": "https://gerrit.onap.org/r/#/admin/projects/vfc/nfvo/catalog" + } + }, + "basePath": "/api/catalog/v1", + "schemes": [ + "http", + "https" + ], + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "paths": { + "/nspackages": { + "get": { + "tags": [ + "nspackage" + ], + "summary": "query ns packages info", + "description": "query ns packages info", + "operationId": "query_ns_packages", + "parameters": [], + "responses": { + "200": { + "description": "successful operation", + "schema": { + "$ref": "#/definitions/NsPkgListInfo" + } + }, + "404": { + "description": "URL not found" + }, + "500": { + "description": "internal error" + } + } + }, + "post": { + "tags": [ + "nspackage" + ], + "summary": "ns package distribute", + "description": "ns package distribute", + "operationId": "ns_pkg_distribute", + "parameters": [ + { + "in": "body", + "name": "body", + "description": "distribute request param", + "required": true, + "schema": { + "$ref": "#/definitions/NsPkgDistributeRequest" + } + } + ], + "responses": { + "202": { + "description": "", + "schema": { + "$ref": "#/definitions/NsPkgDistributeResponse" + } + }, + "404": { + "description": "URL not found" + }, + "500": { + "description": "internal error" + } + } + } + }, + "/nspackages/{csarId}": { + "get": { + "tags": [ + "nspackage" + ], + "summary": "query ns package info", + "description": "query ns package info via ns package csarId", + "operationId": "query_ns_package", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "parameters": [ + { + "name": "csarId", + "in": "path", + "description": "csar id of ns package", + "required": true, + "type": "string" + } + ], + "responses": { + "200": { + "description": "successful operation", + "schema": { + "$ref": "#/definitions/NsPkgDetailInfo" + } + }, + "404": { + "description": "URL not found" + }, + "500": { + "description": "internal error" + } + } + }, + "delete": { + "tags": [ + "nspackage" + ], + "summary": "delete ns pkg", + "description": "delete ns pkg", + "operationId": "delete_ns_pkg", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "parameters": [ + { + "name": "csarId", + "in": "path", + "description": "csar id of ns package", + "required": true, + "type": "string" + } + ], + "responses": { + "200": { + "description": "Delete NS Package Response", + "schema": { + "$ref": "#/definitions/NsPkgDelResponse" + } + }, + "404": { + "description": "URL not found" + }, + "500": { + "description": "internal error" + } + } + } + }, + "/parsernsd": { + "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" + } + }, + "404": { + "description": "URL not found" + }, + "500": { + "description": "internal error" + } + } + } + }, + "/vnfpackages": { + "get": { + "tags": [ + "vnfpackage" + ], + "summary": "query vnf packages info", + "description": "query vnf packages info", + "operationId": "query_vnf_packages", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "parameters": [], + "responses": { + "200": { + "description": "successful operation", + "schema": { + "$ref": "#/definitions/VnfPkgListInfo" + } + }, + "404": { + "description": "URL not found" + }, + "500": { + "description": "internal error" + } + } + }, + "post": { + "tags": [ + "vnfpackage" + ], + "summary": "vnf package distribute", + "description": "vnf package distribute", + "operationId": "vnf_pkg_distribute", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "parameters": [ + { + "in": "body", + "name": "body", + "description": "distribute request param", + "required": true, + "schema": { + "$ref": "#/definitions/VnfPkgDistributeRequest" + } + } + ], + "responses": { + "202": { + "description": "", + "schema": { + "$ref": "#/definitions/VnfPkgDistributeResponse" + } + }, + "404": { + "description": "URL not found" + }, + "500": { + "description": "internal error" + } + } + } + }, + "/vnfpackages/{csarId}": { + "get": { + "tags": [ + "vnfpackage" + ], + "summary": "query vnf package info", + "description": "query one vnf package info via vnf package csarId", + "operationId": "query_vnf_package", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "parameters": [ + { + "name": "csarId", + "in": "path", + "description": "csar id of vnf package", + "required": true, + "type": "string" + } + ], + "responses": { + "200": { + "description": "successful operation", + "schema": { + "$ref": "#/definitions/VnfPkgDetailInfo" + } + }, + "404": { + "description": "URL not found" + }, + "500": { + "description": "internal error" + } + } + }, + "delete": { + "tags": [ + "vnfpackage" + ], + "summary": "delete vnf package", + "description": "delete vnf package", + "operationId": "delete_vnf_package", + "consumes": [ + "application/json" + ], + "produces": [ + "application/json" + ], + "parameters": [ + { + "name": "csarId", + "in": "path", + "description": "csar id of vnf package", + "required": true, + "type": "string" + } + ], + "responses": { + "202": { + "description": "Delete VNF Pakcage Response", + "schema": { + "$ref": "#/definitions/VnfPkgDelResponse" + } + }, + "404": { + "description": "URL not found" + }, + "500": { + "description": "internal error" + } + } + } + }, + "/parservnfd": { + "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" + } + }, + "404": { + "description": "URL not found" + }, + "500": { + "description": "internal error" + } + } + } + }, + "/jobs/{jobId}": { + "get": { + "tags": [ + "job" + ], + "summary": "jobstatus", + "description": "Get Job Status", + "operationId": "get_jobstatus", + "parameters": [ + { + "required": true, + "type": "string", + "description": "job Id", + "name": "jobId", + "in": "path" + }, + { + "required": true, + "type": "string", + "description": "job response message id", + "name": "responseId", + "in": "query" + } + ], + "responses": { + "200": { + "description": "", + "schema": { + "$ref": "#/definitions/JobDetailInfo" + } + } + } + }, + "post": { + "tags": [ + "job" + ], + "summary": "Update Job Status", + "description": "Update Job Status", + "operationId": "post_jobstatus", + "parameters": [ + { + "required": true, + "type": "string", + "description": "job Id", + "name": "jobId", + "in": "path" + }, + { + "required": true, + "schema": { + "$ref": "#/definitions/PostJobRequest" + }, + "description": "job status", + "name": "responseId", + "in": "body" + } + ], + "responses": { + "200": { + "description": "", + "schema": { + "$ref": "#/definitions/JobDetailInfo" + } + } + } + } + } + }, + "definitions": { + "NsPkgDistributeRequest": { + "type": "object", + "properties": { + "csarId": { + "type": "string", + "description": "network service package id, UUID" + } + } + }, + "NsPkgDistributeResponse": { + "type": "object", + "properties": { + "status": { + "type": "string", + "description": "Operation status. value is success or failed" + }, + "statusDescription": { + "type": "string", + "description": "description about the operation result" + }, + "errorCode": { + "type": "string", + "description": "If the status is failed, the errorcode will be returned" + } + } + }, + "NsPkgDelResponse": { + "type": "object", + "properties": { + "status": { + "type": "string", + "description": "Operation status. value is success or failed" + }, + "statusDescription": { + "type": "string", + "description": "description about the operation result" + }, + "errorCode": { + "type": "string", + "description": "If the status is failed, the errorcode will be returned" + } + } + }, + "NsPkgListInfo": { + "type": "array", + "items": { + "$ref": "#/definitions/NsPkgDetailInfo" + } + }, + "NsPkgDetailInfo": { + "type": "object", + "properties": { + "csarId": { + "type": "string" + }, + "packageInfo": { + "$ref": "#/definitions/NsPkgInfo" + } + } + }, + "NsPkgInfo": { + "type": "object", + "properties": { + "nsPackageId": { + "type": "string", + "description": "network service package id, UUID, csarId" + }, + "nsdId": { + "type": "string", + "description": "network service descriptor ID" + }, + "nsdProvider": { + "type": "string", + "description": "network service designer name" + }, + "nsdVersion": { + "type": "string", + "description": "network service descriptor version" + }, + "csarName": { + "type": "string", + "description": "network service package name" + }, + "nsdModel": { + "type": "string", + "description": "ns JSON string parsed and transformed by parser" + }, + "downloadUrl": { + "type": "string", + "description": "download url of network service package" + } + } + }, + "NsInstListInfo": { + "type": "array", + "items": { + "$ref": "#/definitions/NsInstInfo" + } + }, + "NsInstInfo": { + "type": "object", + "properties": { + "nsInstanceId": { + "type": "string", + "description": "network service instance ID" + }, + "nsInstanceName": { + "type": "string", + "description": "network service instance name" + } + } + }, + "VnfPkgDistributeRequest": { + "type": "object", + "properties": { + "csarId": { + "type": "string", + "description": "vnf package id, UUID" + } + } + }, + "VnfPkgDistributeResponse": { + "type": "object", + "properties": { + "jobId": { + "type": "string", + "description": "VNF package distribute job ID" + } + } + }, + "VnfPkgDelResponse": { + "type": "object", + "properties": { + "status": { + "type": "string", + "description": "Operation status. value is success or failed" + }, + "statusDescription": { + "type": "string", + "description": "description about the operation result" + }, + "errorCode": { + "type": "string", + "description": "If the status is failed, the errorcode will be returned" + } + } + }, + "VnfPkgListInfo": { + "type": "array", + "items": { + "$ref": "#/definitions/VnfPkgDetailInfo" + } + }, + "VnfPkgDetailInfo": { + "type": "object", + "properties": { + "csarId": { + "type": "string", + "description": "vnf package id, UUID" + }, + "packageInfo": { + "$ref": "#/definitions/VnfPkgInfo" + }, + "imageInfo": { + "$ref": "#/definitions/VnfPkgImgListInfo" + } + } + }, + "VnfPkgInfo": { + "type": "object", + "description": "vnf package infomation", + "properties": { + "vnfPackageId": { + "type": "string", + "description": "vnf package id (csarId)" + }, + "csarName": { + "type": "string", + "description": "The name of the csar" + }, + "vnfdId": { + "type": "string", + "description": "VNF descriptor ID" + }, + "vnfdProvider": { + "type": "string", + "description": "VNF descriptor vendor ID" + }, + "vnfdModel": { + "type": "string", + "description": "The model of the VNF (JSON) encoded to string" + }, + "vnfdVersion": { + "type": "string", + "description": "VNF descriptor version" + }, + "vnfVersion": { + "type": "string", + "description": "VNF Software version" + }, + "downloadUrl":{ + "type": "string", + "description": "The URL from which the VNF package can be downloaded" + } + } + }, + "VnfInstListInfo": { + "type": "array", + "items": { + "$ref": "#/definitions/VnfInstInfo" + } + }, + "VnfInstInfo": { + "type": "object", + "properties": { + "vnfInstanceId": { + "type": "string", + "description": "VNF instance ID" + }, + "vnfInstanceName": { + "type": "string", + "description": "VNF instance name" + } + } + }, + "VnfPkgImgListInfo": { + "type": "array", + "items": { + "$ref": "#/definitions/VnfPkgImgInfo" + } + }, + "VnfPkgImgInfo": { + "type": "object", + "properties": { + "fileName": { + "type": "string", + "description": "image file name" + }, + "imageUrl": { + "type": "string", + "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": "object", + "description": "csar package json inputs" + } + } + }, + "modelParserResponse":{ + "type": "object", + "properties": { + "model": { + "type": "object", + "description": "csar model json data" + } + } + }, + "jobResponseInfo": { + "type": "object", + "properties": { + "status": { + "type": "string" + }, + "progress":{ + "type": "string" + }, + "statusDescription": { + "type": "string" + }, + "errorCode": { + "type": "string" + }, + "responseId": { + "type": "string" + } + } + }, + "PostJobRequest": { + "type": "object", + "properties": { + "progress": { + "type": "string" + }, + "desc": { + "type": "string" + }, + "errcode": { + "type": "string" + } + } + }, + "JobDetailInfo":{ + "type": "object", + "properties": { + "jobId": { + "type": "string" + }, + "responseDescriptor": + { + "type":"object", + "properties": { + "status": { + "type": "string" + }, + "progress":{ + "type": "string" + }, + "statusDescription": { + "type": "string" + }, + "errorCode": { + "type": "string" + }, + "responseId": { + "type": "string" + }, + "responseHistoryList": { + "type": "array", + "items": { + "$ref": "#/definitions/jobResponseInfo" + } + } + } + } + } + } + } +} \ No newline at end of file diff --git a/genericparser/swagger/views.py b/catalog/swagger/views.py similarity index 90% rename from genericparser/swagger/views.py rename to catalog/swagger/views.py index e99262b..33d0edb 100644 --- a/genericparser/swagger/views.py +++ b/catalog/swagger/views.py @@ -21,7 +21,7 @@ from rest_framework.views import APIView class SwaggerJsonView(APIView): def get(self, request): - json_file = os.path.join(os.path.dirname(__file__), 'modeling.genericparser.swagger.json') + json_file = os.path.join(os.path.dirname(__file__), 'vfc.catalog.swagger.json') f = open(json_file) json_data = json.JSONDecoder().decode(f.read()) f.close() diff --git a/genericparser/urls.py b/catalog/urls.py similarity index 59% rename from genericparser/urls.py rename to catalog/urls.py index 4cf58c8..76c972b 100644 --- a/genericparser/urls.py +++ b/catalog/urls.py @@ -15,20 +15,23 @@ from django.conf.urls import include, url from django.contrib import admin - -from genericparser.pub.config.config import REG_TO_MSB_WHEN_START, REG_TO_MSB_REG_URL, REG_TO_MSB_REG_PARAM +from catalog.pub.config.config import REG_TO_MSB_WHEN_START, REG_TO_MSB_REG_URL, REG_TO_MSB_REG_PARAM, \ + MSB_SVC_CALALOG_URL, MSB_SVC_NSD_URL, MSB_SVC_VNFPKGM_URL urlpatterns = [ - url(r'^api/parser/v1/admin', admin.site.urls), - url(r'^', include('genericparser.samples.urls')), - url(r'^', include('genericparser.packages.urls')), - url(r'^', include('genericparser.jobs.urls')), - url(r'^', include('genericparser.swagger.urls')), + url(r'^api/catalog/v1/admin', admin.site.urls), + url(r'^', include('catalog.samples.urls')), + url(r'^', include('catalog.packages.urls')), + url(r'^', include('catalog.jobs.urls')), + url(r'^', include('catalog.swagger.urls')), ] # regist to MSB when startup if REG_TO_MSB_WHEN_START: import json - from genericparser.pub.utils.restcall import req_by_msb + from catalog.pub.utils.restcall import req_by_msb + req_by_msb(MSB_SVC_CALALOG_URL, "DELETE") + req_by_msb(MSB_SVC_NSD_URL, "DELETE") + req_by_msb(MSB_SVC_VNFPKGM_URL, "DELETE") for reg_param in REG_TO_MSB_REG_PARAM: req_by_msb(REG_TO_MSB_REG_URL, "POST", json.JSONEncoder().encode(reg_param)) diff --git a/genericparser/wsgi.py b/catalog/wsgi.py similarity index 90% rename from genericparser/wsgi.py rename to catalog/wsgi.py index ed4bd0f..a0b4d5d 100644 --- a/genericparser/wsgi.py +++ b/catalog/wsgi.py @@ -16,6 +16,6 @@ import os from django.core.wsgi import get_wsgi_application -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "genericparser.settings") +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "catalog.settings") application = get_wsgi_application() diff --git a/docker/Dockerfile b/docker/Dockerfile index 03a9ffb..b76da98 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -15,4 +15,4 @@ EXPOSE 8806 USER onap WORKDIR /service -ENTRYPOINT modeling/genericparser/docker/docker-entrypoint.sh +ENTRYPOINT modeling/etsicatalog/docker/docker-entrypoint.sh diff --git a/docker/build_image.sh b/docker/build_image.sh index c0164fd..98550cd 100755 --- a/docker/build_image.sh +++ b/docker/build_image.sh @@ -8,7 +8,7 @@ BUILD_ARGS="--no-cache" ORG="onap" VERSION="1.0.3" PROJECT="modeling" -IMAGE="genericparser" +IMAGE="etsicatalog" DOCKER_REPOSITORY="nexus3.onap.org:10003" IMAGE_NAME="${DOCKER_REPOSITORY}/${ORG}/${PROJECT}/${IMAGE}" TIMESTAMP=$(date +"%Y%m%dT%H%M%S") diff --git a/docker/docker-entrypoint.sh b/docker/docker-entrypoint.sh index 1e2e16a..8666f69 100755 --- a/docker/docker-entrypoint.sh +++ b/docker/docker-entrypoint.sh @@ -35,12 +35,12 @@ for i in {1..5}; do done # Configure service based on docker environment variables -modeling/genericparser/docker/instance_config.sh +modeling/etsicatalog/docker/instance_config.sh # microservice-specific one-time initialization -modeling/genericparser/docker/instance_init.sh +modeling/etsicatalog/docker/instance_init.sh date > init.log # Start the microservice -modeling/genericparser/docker/instance_run.sh +modeling/etsicatalog/docker/instance_run.sh diff --git a/docker/docker-env-conf.sh b/docker/docker-env-conf.sh index 953867e..aa79088 100755 --- a/docker/docker-env-conf.sh +++ b/docker/docker-env-conf.sh @@ -6,13 +6,13 @@ install_sf(){ apk --no-cache add bash curl gcc wget mysql-client openssl-dev apk --no-cache add python36-dev libffi-dev musl-dev py3-virtualenv - # get binary zip from nexus - vfc-nfvo-genericparser + # get binary zip from nexus - modeling-etsicatalog - wget -q -O modeling-genericparser.zip "https://nexus.onap.org/service/local/artifact/maven/redirect?r=snapshots&g=org.onap.modeling.genericparser&a=modeling-genericparser&e=zip&v=${pkg_version}-SNAPSHOT&e=zip" && \ - unzip modeling-genericparser.zip && \ - rm -rf modeling-genericparser.zip && \ + wget -q -O modeling-etsicatalog.zip "https://nexus.onap.org/service/local/artifact/maven/redirect?r=snapshots&g=org.onap.modeling.genericparser&a=modeling-genericparser&e=zip&v=${pkg_version}-SNAPSHOT&e=zip" && \ + unzip modeling-etsicatalog.zip && \ + rm -rf modeling-etsicatalog.zip && \ pip install --upgrade setuptools pip && \ - pip install --no-cache-dir --pre -r /service/modeling/genericparser/requirements.txt + pip install --no-cache-dir --pre -r /service/modeling/etsicatalog/requirements.txt } add_user(){ diff --git a/docker/instance_config.sh b/docker/instance_config.sh index 80a278f..ebc785a 100755 --- a/docker/instance_config.sh +++ b/docker/instance_config.sh @@ -2,18 +2,18 @@ MSB_IP=`echo $MSB_ADDR | cut -d: -f 1` MSB_PORT=`echo $MSB_ADDR | cut -d: -f 2` -# modeling/genericparser +# modeling/etsicatalog if [ $MSB_IP ]; then - sed -i "s|MSB_SERVICE_IP.*|MSB_SERVICE_IP = '$MSB_IP'|" modeling/genericparser/genericparser/pub/config/config.py + sed -i "s|MSB_SERVICE_IP.*|MSB_SERVICE_IP = '$MSB_IP'|" modeling/etsicatalog/catalog/pub/config/config.py fi if [ $MSB_PORT ]; then - sed -i "s|MSB_SERVICE_PORT.*|MSB_SERVICE_PORT = '$MSB_PORT'|" modeling/genericparser/genericparser/pub/config/config.py + sed -i "s|MSB_SERVICE_PORT.*|MSB_SERVICE_PORT = '$MSB_PORT'|" modeling/etsicatalog/catalog/pub/config/config.py fi if [ $SERVICE_IP ]; then - sed -i "s|\"ip\": \".*\"|\"ip\": \"$SERVICE_IP\"|" modeling/genericparser/genericparser/pub/config/config.py + sed -i "s|\"ip\": \".*\"|\"ip\": \"$SERVICE_IP\"|" modeling/etsicatalog/catalog/pub/config/config.py fi MYSQL_IP=`echo $MYSQL_ADDR | cut -d: -f 1` @@ -27,8 +27,8 @@ else fi -sed -i "s|DB_IP.*|DB_IP = '$MYSQL_IP'|" modeling/genericparser/genericparser/pub/config/config.py -sed -i "s|DB_PORT.*|DB_PORT = $MYSQL_PORT|" modeling/genericparser/genericparser/pub/config/config.py -sed -i "s|REDIS_HOST.*|REDIS_HOST = '$REDIS_IP'|"modeling/genericparser/genericparser/pub/config/config.py +sed -i "s|DB_IP.*|DB_IP = '$MYSQL_IP'|" modeling/etsicatalog/catalog/pub/config/config.py +sed -i "s|DB_PORT.*|DB_PORT = $MYSQL_PORT|" modeling/etsicatalog/catalog/pub/config/config.py +sed -i "s|REDIS_HOST.*|REDIS_HOST = '$REDIS_IP'|"modeling/etsicatalog/catalog/pub/config/config.py -cat modeling/genericparser/genericparser/pub/config/config.py +cat modeling/etsicatalog/catalog/pub/config/config.py diff --git a/docker/instance_init.sh b/docker/instance_init.sh index 0c25203..3b6ca8c 100755 --- a/docker/instance_init.sh +++ b/docker/instance_init.sh @@ -13,13 +13,13 @@ fi function create_database { - cd /service/modeling/genericparser/resources/bin + cd /service/modeling/catalog/resources/bin bash initDB.sh $MYSQL_ROOT_USER $MYSQL_ROOT_PASSWORD $MYSQL_PORT $MYSQL_IP } function migrate_database { - cd /service/modeling/genericparser + cd /service/modeling/catalog python manage.py migrate } diff --git a/docker/instance_run.sh b/docker/instance_run.sh index c451190..ad20163 100755 --- a/docker/instance_run.sh +++ b/docker/instance_run.sh @@ -1,10 +1,10 @@ #!/bin/bash -cd /service/modeling/genericparser +cd /service/modeling/etsicatalog ./run.sh -while [ ! -f logs/runtime_genericparser.log ]; do +while [ ! -f logs/runtime_etsicatalog.log ]; do sleep 1 done -tail -F logs/runtime_genericparser.log +tail -F logs/runtime_etsicatalog.log diff --git a/genericparser/pub/database/migrations/0002_auto_20190422_1442.py b/genericparser/pub/database/migrations/0002_auto_20190422_1442.py deleted file mode 100644 index da23582..0000000 --- a/genericparser/pub/database/migrations/0002_auto_20190422_1442.py +++ /dev/null @@ -1,47 +0,0 @@ -# -*- coding: utf-8 -*- -# Generated by Django 1.11.9 on 2019-04-22 14:42 -from __future__ import unicode_literals - -from django.db import migrations - - -class Migration(migrations.Migration): - - dependencies = [ - ('database', '0001_initial'), - ] - - operations = [ - migrations.AlterModelTable( - name='jobmodel', - table='GENERICPARSER_JOB', - ), - migrations.AlterModelTable( - name='jobstatusmodel', - table='GENERICPARSER_JOB_STATUS', - ), - migrations.AlterModelTable( - name='nsdmsubscriptionmodel', - table='GENERICPARSER_NSDM_SUBSCRIPTION', - ), - migrations.AlterModelTable( - name='nspackagemodel', - table='GENERICPARSER_NSPACKAGE', - ), - migrations.AlterModelTable( - name='pnfpackagemodel', - table='GENERICPARSER_PNFPACKAGE', - ), - migrations.AlterModelTable( - name='servicepackagemodel', - table='GENERICPARSER_SERVICEPACKAGE', - ), - migrations.AlterModelTable( - name='softwareimagemodel', - table='GENERICPARSER_SOFTWAREIMAGEMODEL', - ), - migrations.AlterModelTable( - name='vnfpackagemodel', - table='GENERICPARSER_VNFPACKAGE', - ), - ] diff --git a/manage.py b/manage.py index e8de882..74b0361 100644 --- a/manage.py +++ b/manage.py @@ -15,7 +15,7 @@ import os import sys -os.environ.setdefault("DJANGO_SETTINGS_MODULE", "genericparser.settings") +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "catalog.settings") if __name__ == "__main__": from django.core.management import execute_from_command_line diff --git a/pom.xml b/pom.xml index 8d1b77f..a765be6 100644 --- a/pom.xml +++ b/pom.xml @@ -21,12 +21,12 @@ 2.0.0 4.0.0 - org.onap.modeling.genericparser - modeling-genericparser + org.onap.modeling.etsicatalog + modeling-etsicatalog 1.0.3-SNAPSHOT pom - modeling-genericparser - modeling genericparser + modeling-etsicatalog + modeling etsicatalog UTF-8 . diff --git a/resources/bin/initDB.sh b/resources/bin/initDB.sh index 7d87e5d..85b61d9 100755 --- a/resources/bin/initDB.sh +++ b/resources/bin/initDB.sh @@ -20,15 +20,15 @@ MYSQL_USER=$1 MYSQL_PASSWORD=$2 MYSQL_PORT=$3 MYSQL_IP=$4 -echo "start create gengricparser db" +echo "start create etsicatalog db" sql_path=$HOME/../ -mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -P$MYSQL_PORT -h$MYSQL_IP <$sql_path/dbscripts/mysql/modeling-gengricparser-createdb.sql +mysql -u$MYSQL_USER -p$MYSQL_PASSWORD -P$MYSQL_PORT -h$MYSQL_IP <$sql_path/dbscripts/mysql/modeling-etsicatalog-createdb.sql sql_result=$? if [ $sql_result -ne 0 ] ; then - echo "Failed to create gengricparser database" + echo "Failed to create etsicatalog database" exit 1 else - echo "Create gengricparser database successfully" + echo "Create etsicatalog database successfully" exit 0 fi diff --git a/resources/dbscripts/mysql/modeling-gengricparser-createdb.sql b/resources/dbscripts/mysql/modeling-etsicatalog-createdb.sql similarity index 63% rename from resources/dbscripts/mysql/modeling-gengricparser-createdb.sql rename to resources/dbscripts/mysql/modeling-etsicatalog-createdb.sql index d868899..e3fc2ba 100644 --- a/resources/dbscripts/mysql/modeling-gengricparser-createdb.sql +++ b/resources/dbscripts/mysql/modeling-etsicatalog-createdb.sql @@ -20,9 +20,9 @@ use mysql; create database if not exists genericparser CHARACTER SET utf8; -GRANT ALL PRIVILEGES ON genericparser.* TO 'genericparser'@'%' IDENTIFIED BY 'genericparser' WITH GRANT OPTION; -GRANT ALL PRIVILEGES ON mysql.* TO 'genericparser'@'%' IDENTIFIED BY 'genericparser' WITH GRANT OPTION; +GRANT ALL PRIVILEGES ON etsicatalog.* TO 'etsicatalog'@'%' IDENTIFIED BY 'etsicatalog' WITH GRANT OPTION; +GRANT ALL PRIVILEGES ON mysql.* TO 'etsicatalog'@'%' IDENTIFIED BY 'etsicatalog' WITH GRANT OPTION; -GRANT ALL PRIVILEGES ON genericparser.* TO 'genericparser'@'localhost' IDENTIFIED BY 'genericparser' WITH GRANT OPTION; -GRANT ALL PRIVILEGES ON mysql.* TO 'genericparser'@'localhost' IDENTIFIED BY 'genericparser' WITH GRANT OPTION; +GRANT ALL PRIVILEGES ON etsicatalog.* TO 'etsicatalog'@'localhost' IDENTIFIED BY 'etsicatalog' WITH GRANT OPTION; +GRANT ALL PRIVILEGES ON mysql.* TO 'etsicatalog'@'localhost' IDENTIFIED BY 'etsicatalog' WITH GRANT OPTION; FLUSH PRIVILEGES; diff --git a/run.sh b/run.sh index a0bbe64..04b3052 100755 --- a/run.sh +++ b/run.sh @@ -13,17 +13,17 @@ # See the License for the specific language governing permissions and # limitations under the License. -logDir="/var/log/onap/modeling/genericparser/" +logDir="/var/log/onap/modeling/etsicatalog/" if [ ! -x $logDir ]; then mkdir -p $logDir fi nohup python manage.py runserver 0.0.0.0:8806 > /dev/null & -# nohup uwsgi --http :8806 -t 120 --module genericparser.wsgi --master --processes 4 & +# nohup uwsgi --http :8806 -t 120 --module catalog.wsgi --master --processes 4 & # if [ "${SSL_ENABLED}" = "true" ]; then -# nohup uwsgi --https :8806,genericparser/pub/ssl/cert/foobar.crt,genericparser/pub/ssl/cert/foobar.key, -t 120 --module genericparser.wsgi --master --processes 4 & +# nohup uwsgi --https :8806,catalog/pub/ssl/cert/foobar.crt,catalog/pub/ssl/cert/foobar.key, -t 120 --enable-threads --module catalog.wsgi --master --processes 4 & # else -# nohup uwsgi --http :8806 -t 120 --module genericparser.wsgi --master --processes 4 & +# nohup uwsgi --http :8806 -t 120 --enable-threads --module catalog.wsgi --master --processes 4 & # fi diff --git a/static/genericparser/empty.txt b/static/catalog/empty.txt similarity index 100% rename from static/genericparser/empty.txt rename to static/catalog/empty.txt diff --git a/static/genericparser/resource_test.csar b/static/catalog/resource_test.csar similarity index 100% rename from static/genericparser/resource_test.csar rename to static/catalog/resource_test.csar diff --git a/tox.ini b/tox.ini index 87cc182..3745940 100644 --- a/tox.ini +++ b/tox.ini @@ -11,7 +11,7 @@ exclude = ./venv-tox,./.tox [testenv] deps = -r{toxinidir}/requirements.txt -commands = coverage run --branch manage.py test genericparser +commands = coverage run --branch manage.py test catalog [testenv:pep8] deps = flake8 -- 2.16.6