diff options
Diffstat (limited to 'onap-client/onap_client/sdc')
-rw-r--r-- | onap-client/onap_client/sdc/catalog/vnf_catalog.py | 2 | ||||
-rw-r--r-- | onap-client/onap_client/sdc/catalog/vsp_catalog.py | 23 | ||||
-rw-r--r-- | onap-client/onap_client/sdc/client.py | 19 | ||||
-rw-r--r-- | onap-client/onap_client/sdc/license_model.py | 35 | ||||
-rw-r--r-- | onap-client/onap_client/sdc/service.py | 58 | ||||
-rw-r--r-- | onap-client/onap_client/sdc/tests/test_license_model.py | 20 | ||||
-rw-r--r-- | onap-client/onap_client/sdc/tests/test_service.py | 132 | ||||
-rw-r--r-- | onap-client/onap_client/sdc/tests/test_vnf.py | 58 | ||||
-rw-r--r-- | onap-client/onap_client/sdc/tests/test_vsp.py | 22 | ||||
-rw-r--r-- | onap-client/onap_client/sdc/vnf.py | 78 | ||||
-rw-r--r-- | onap-client/onap_client/sdc/vsp.py | 55 |
11 files changed, 384 insertions, 118 deletions
diff --git a/onap-client/onap_client/sdc/catalog/vnf_catalog.py b/onap-client/onap_client/sdc/catalog/vnf_catalog.py index cd08dad..6cf2207 100644 --- a/onap-client/onap_client/sdc/catalog/vnf_catalog.py +++ b/onap-client/onap_client/sdc/catalog/vnf_catalog.py @@ -72,6 +72,8 @@ CATALOG_RESOURCES = { "vnf_name", "vendor_name", "resource_type", + "categories", + "contact_id", ], "success_code": 201, "headers": { diff --git a/onap-client/onap_client/sdc/catalog/vsp_catalog.py b/onap-client/onap_client/sdc/catalog/vsp_catalog.py index 574149e..7070032 100644 --- a/onap-client/onap_client/sdc/catalog/vsp_catalog.py +++ b/onap-client/onap_client/sdc/catalog/vsp_catalog.py @@ -237,6 +237,29 @@ CATALOG_RESOURCES = { sdc_properties.GLOBAL_SDC_PASSWORD, ), }, + "GET_SOFTWARE_PRODUCT_INFORMATION": { + "verb": "GET", + "description": "Gets Information for a VSP from Catalog", + "uri": partial( + "{endpoint}{service_path}/{software_product_id}/versions/{software_product_version_id}/questionnaire".format, + endpoint=sdc_properties.SDC_BE_ONBOARD_ENDPOINT, + service_path=sdc_properties.SDC_VENDOR_SOFTWARE_PRODUCT_PATH, + ), + "uri-parameters": ["software_product_id", "software_product_version_id"], + "success_code": 200, + "headers": { + "Accept": "application/json", + "Content-Type": "application/json", + "USER_ID": sdc_properties.SDC_DESIGNER_USER_ID, + "X-TransactionId": str(uuid.uuid4()), + "X-FromAppId": application_id, + }, + "return_data": {"name": ("name",)}, + "auth": ( + sdc_properties.GLOBAL_SDC_USERNAME, + sdc_properties.GLOBAL_SDC_PASSWORD, + ), + }, "GET_SOFTWARE_PRODUCT_VERSIONS": { "verb": "GET", "description": "Returns a list of vsp versions", diff --git a/onap-client/onap_client/sdc/client.py b/onap-client/onap_client/sdc/client.py index 8863e07..c1923da 100644 --- a/onap-client/onap_client/sdc/client.py +++ b/onap-client/onap_client/sdc/client.py @@ -78,4 +78,23 @@ CATALOG_RESOURCES = { sdc_properties.SDC_DESIGNER_PASSWORD, ), }, + "GET_RESOURCE_CATEGORIES": { + "verb": "GET", + "description": "Queries SDC for resource categories", + "uri": partial( + "{endpoint}{service_path}".format, + endpoint=sdc_properties.SDC_BE_ENDPOINT, + service_path=sdc_properties.SDC_RESOURCE_CATEGORIES_PATH, + ), + "success_code": 200, + "headers": { + "Accept": "application/json", + "Content-Type": "application/json", + "USER_ID": sdc_properties.SDC_DESIGNER_USER_ID, + }, + "auth": ( + sdc_properties.GLOBAL_SDC_USERNAME, + sdc_properties.GLOBAL_SDC_PASSWORD, + ), + }, } diff --git a/onap-client/onap_client/sdc/license_model.py b/onap-client/onap_client/sdc/license_model.py index e5ae740..591509e 100644 --- a/onap-client/onap_client/sdc/license_model.py +++ b/onap-client/onap_client/sdc/license_model.py @@ -37,9 +37,7 @@ from onap_client.lib import generate_dummy_string, generate_dummy_date from onap_client.resource import Resource -from onap_client.client.clients import Client as SDCClient - -license_model_client = SDCClient().sdc.license_model +from onap_client.client.clients import Client class LicenseModel(Resource): @@ -98,6 +96,7 @@ class LicenseModel(Resource): license_start_date, license_end_date, ): + self.oc = Client() license_input = {} license_input["vendor_name"] = vendor_name @@ -121,9 +120,9 @@ class LicenseModel(Resource): def _submit(self): """Submits the license model in SDC""" - license_model_client.submit_license_model(**self.attributes, action="Submit") + self.oc.sdc.license_model.submit_license_model(**self.attributes, action="Submit") - license_model = license_model_client.get_license_model(**self.attributes) + license_model = self.oc.sdc.license_model.get_license_model(**self.attributes) self.attributes["tosca"] = license_model.response_data @@ -136,30 +135,32 @@ def create_license_model(license_input): :return: dictionary of updated values for created lm """ + oc = Client() + kwargs = license_input - license_model = license_model_client.add_license_model(**kwargs) + license_model = oc.sdc.license_model.add_license_model(**kwargs) kwargs["license_model_id"] = license_model.license_model_id kwargs["license_model_version_id"] = license_model.license_model_version_id - key_group = license_model_client.add_key_group(**kwargs) + key_group = oc.sdc.license_model.add_key_group(**kwargs) key_group_id = key_group.key_group_id - entitlement_pool = license_model_client.add_entitlement_pool(**kwargs) + entitlement_pool = oc.sdc.license_model.add_entitlement_pool(**kwargs) entitlement_pool_id = entitlement_pool.entitlement_pool_id kwargs["entitlement_pool_id"] = entitlement_pool_id kwargs["key_group_id"] = key_group_id - feature_group = license_model_client.add_feature_group(**kwargs) + feature_group = oc.sdc.license_model.add_feature_group(**kwargs) feature_group_id = feature_group.feature_group_id kwargs["feature_group_id"] = feature_group_id - license_agreement = license_model_client.add_license_agreement(**kwargs) + license_agreement = oc.sdc.license_model.add_license_agreement(**kwargs) kwargs["license_agreement_id"] = license_agreement.license_agreement_id - license_model = license_model_client.get_license_model(**kwargs) + license_model = oc.sdc.license_model.get_license_model(**kwargs) kwargs["tosca"] = license_model.response_data return kwargs @@ -172,7 +173,9 @@ def get_license_model_id(license_model_name): :return: uuid of lm or None """ - response = license_model_client.get_license_models() + oc = Client() + + response = oc.sdc.license_model.get_license_models() results = response.response_data.get("results") for license_model in results: if license_model.get("name") == license_model_name: @@ -187,9 +190,11 @@ def get_license_model_version_id(license_model_id): :return: uuid of lm version id or None """ + oc = Client() + license_model_version_id = None creation_time = -1 - response = license_model_client.get_license_model_versions( + response = oc.sdc.license_model.get_license_model_versions( license_model_id=license_model_id ) results = response.response_data.get("results") @@ -210,7 +215,9 @@ def get_license_model_attribute(license_model_id, license_model_version_id, attr :return: uuid of attribute of license-model """ - response = license_model_client.get_license_model_version_attribute( + oc = Client() + + response = oc.sdc.license_model.get_license_model_version_attribute( license_model_id=license_model_id, license_model_version_id=license_model_version_id, attribute=attribute, diff --git a/onap-client/onap_client/sdc/service.py b/onap-client/onap_client/sdc/service.py index 55c8f5c..5da6bb5 100644 --- a/onap-client/onap_client/sdc/service.py +++ b/onap-client/onap_client/sdc/service.py @@ -38,9 +38,8 @@ from onap_client.lib import generate_dummy_string from onap_client.resource import Resource from onap_client import exceptions -from onap_client.client.clients import Client as SDCClient +from onap_client.client.clients import Client from onap_client.sdc.vnf import get_vnf_id -from onap_client import sdc from onap_client.sdc import SDC_PROPERTIES from onap_client.util import utility @@ -49,9 +48,6 @@ import json import random import uuid -service_client = SDCClient().sdc.service -sdc_properties = sdc.SDC_PROPERTIES - def normalize_category_icon(category_name): if category_name == "Network L1-3": @@ -138,6 +134,8 @@ class Service(Resource): wait_for_distribution=False, allow_update=False, ): + self.oc = Client() + service_input = {} category_name_lower = category_name.lower() @@ -208,15 +206,15 @@ class Service(Resource): def _submit(self): """Submits the service in SDC and distributes the model""" - DISTRIBUTION_STEPS = sdc_properties.SERVICE_DISTRIBUTION or [] + DISTRIBUTION_STEPS = SDC_PROPERTIES.SERVICE_DISTRIBUTION or [] - service_client.checkin_service(**self.attributes, user_remarks="checking in") + self.oc.sdc.service.checkin_service(**self.attributes, user_remarks="checking in") if ( not DISTRIBUTION_STEPS or "request_service_certification" in DISTRIBUTION_STEPS ): - service_client.request_service_certification( + self.oc.sdc.service.request_service_certification( **self.attributes, user_remarks="requesting certification" ) @@ -224,7 +222,7 @@ class Service(Resource): not DISTRIBUTION_STEPS or "start_service_certification" in DISTRIBUTION_STEPS ): - service_client.start_service_certification( + self.oc.sdc.service.start_service_certification( **self.attributes, user_remarks="certifying" ) @@ -232,7 +230,7 @@ class Service(Resource): not DISTRIBUTION_STEPS or "finish_service_certification" in DISTRIBUTION_STEPS ): - catalog_service = service_client.finish_service_certification( + catalog_service = self.oc.sdc.service.finish_service_certification( **self.attributes, user_remarks="certified" ) self.attributes["catalog_service_id"] = catalog_service.catalog_service_id @@ -241,11 +239,11 @@ class Service(Resource): not DISTRIBUTION_STEPS or "approve_service_certification" in DISTRIBUTION_STEPS ): - service_client.approve_service_certification( + self.oc.sdc.service.approve_service_certification( **self.attributes, user_remarks="approved" ) headers = {"X-TransactionId": str(uuid.uuid4())} - service_client.distribute_sdc_service(**self.attributes, **headers) + self.oc.sdc.service.distribute_sdc_service(**self.attributes, **headers) if self.wait_for_distribution: poll_distribution(self.service_name) @@ -267,13 +265,13 @@ class Service(Resource): if component_instances: for component in component_instances: if component.get("componentName") == catalog_resource_name: - service_client.delete_resource_from_service( + self.oc.sdc.service.delete_resource_from_service( catalog_service_id=self.catalog_service_id, resource_instance_id=component.get("uniqueId") ) break - resource_instance = service_client.add_resource_instance( + resource_instance = self.oc.sdc.service.add_resource_instance( **self.attributes, posX=random.randrange(150, 550), # nosec posY=random.randrange(150, 450), # nosec @@ -318,7 +316,7 @@ class Service(Resource): owner_id = prop.get("ownerId") schemaType = prop.get("schemaType", "") property_type = prop.get("type") - return service_client.add_catalog_service_property( + return self.oc.sdc.service.add_catalog_service_property( **self.attributes, unique_id=unique_id, parent_unique_id=parent_unique_id, @@ -337,27 +335,29 @@ class Service(Resource): ) def _refresh(self): - self.tosca = service_client.get_sdc_service( + self.tosca = self.oc.sdc.service.get_sdc_service( catalog_service_id=self.catalog_service_id ).response_data def update_service(existing_service_id, service_input): + oc = Client() + kwargs = service_input - existing_service = service_client.get_sdc_service( + existing_service = oc.sdc.service.get_sdc_service( catalog_service_id=existing_service_id ).response_data if existing_service.get("lifecycleState") != "NOT_CERTIFIED_CHECKOUT": - service = service_client.checkout_catalog_service(catalog_service_id=existing_service_id).response_data + service = oc.sdc.service.checkout_catalog_service(catalog_service_id=existing_service_id).response_data else: service = existing_service new_service_id = service.get("uniqueId") kwargs["catalog_service_id"] = new_service_id - kwargs["tosca"] = service_client.get_sdc_service(catalog_service_id=new_service_id).response_data + kwargs["tosca"] = oc.sdc.service.get_sdc_service(catalog_service_id=new_service_id).response_data return kwargs @@ -369,9 +369,11 @@ def create_service(service_input): :return: dictionary of updated values for created service """ + oc = Client() + kwargs = service_input - service = service_client.add_catalog_service(**kwargs) + service = oc.sdc.service.add_catalog_service(**kwargs) kwargs["catalog_service_id"] = service.catalog_service_id kwargs["tosca"] = service.response_data @@ -382,7 +384,9 @@ def create_service(service_input): @utility def get_service(service_name): """Queries SDC for the TOSCA model for a service""" - return service_client.get_sdc_service( + oc = Client() + + return oc.sdc.service.get_sdc_service( catalog_service_id=get_service_id(service_name) ).response_data @@ -390,7 +394,9 @@ def get_service(service_name): @utility def get_service_id(service_name): """Queries SDC for the uniqueId of a service model""" - response = service_client.get_services() + oc = Client() + + response = oc.sdc.service.get_services() results = response.response_data.get("services", []) update_time = -1 catalog_service = {} @@ -407,10 +413,12 @@ def get_service_uuid(service_name): def get_service_distribution(service_name): + oc = Client() + distribution_id = get_distribution_id(service_name) if distribution_id: - return service_client.get_service_distribution_details( + return oc.sdc.service.get_service_distribution_details( distribution_id=distribution_id ).response_data @@ -418,7 +426,9 @@ def get_service_distribution(service_name): def get_distribution_id(service_name): - distribution = service_client.get_service_distribution( + oc = Client() + + distribution = oc.sdc.service.get_service_distribution( distribution_service_id=get_service_uuid(service_name) ).response_data if distribution: diff --git a/onap-client/onap_client/sdc/tests/test_license_model.py b/onap-client/onap_client/sdc/tests/test_license_model.py index 459c2e0..8da7d07 100644 --- a/onap-client/onap_client/sdc/tests/test_license_model.py +++ b/onap-client/onap_client/sdc/tests/test_license_model.py @@ -38,13 +38,13 @@ import responses from onap_client.client.clients import Client from onap_client.sdc.license_model import LicenseModel -from onap_client.tests.utils import mockup_client, mockup_catalog_item - -license_model_client = Client().sdc.license_model +from onap_client.tests.utils import mockup_catalog_item @responses.activate def test_license_model_create(): + oc = Client() + LICENSE_MODEL_ID = "license_model_id" LICENSE_MODEL_VERSION_ID = "license_model_version_id" FEATURE_GROUP_ID = "feature_group_id" @@ -56,7 +56,7 @@ def test_license_model_create(): DESCRIPTION = "description" mockup_catalog_item( - license_model_client.catalog_items["ADD_LICENSE_MODEL"], + oc.sdc.license_model.catalog_items["ADD_LICENSE_MODEL"], override_return_data={ "itemId": LICENSE_MODEL_ID, "version": {"id": LICENSE_MODEL_VERSION_ID}, @@ -64,7 +64,7 @@ def test_license_model_create(): ) mockup_catalog_item( - license_model_client.catalog_items["ADD_KEY_GROUP"], + oc.sdc.license_model.catalog_items["ADD_KEY_GROUP"], override_return_data={"value": KEYGROUP_ID}, override_uri_params={ "license_model_id": LICENSE_MODEL_ID, @@ -73,7 +73,7 @@ def test_license_model_create(): ) mockup_catalog_item( - license_model_client.catalog_items["ADD_ENTITLEMENT_POOL"], + oc.sdc.license_model.catalog_items["ADD_ENTITLEMENT_POOL"], override_return_data={"value": ENTITLEMENT_POOL_ID}, override_uri_params={ "license_model_id": LICENSE_MODEL_ID, @@ -82,7 +82,7 @@ def test_license_model_create(): ) mockup_catalog_item( - license_model_client.catalog_items["ADD_FEATURE_GROUP"], + oc.sdc.license_model.catalog_items["ADD_FEATURE_GROUP"], override_return_data={"value": FEATURE_GROUP_ID}, override_uri_params={ "license_model_id": LICENSE_MODEL_ID, @@ -91,7 +91,7 @@ def test_license_model_create(): ) mockup_catalog_item( - license_model_client.catalog_items["ADD_LICENSE_AGREEMENT"], + oc.sdc.license_model.catalog_items["ADD_LICENSE_AGREEMENT"], override_return_data={"value": LICENSE_AGREEMENT_ID}, override_uri_params={ "license_model_id": LICENSE_MODEL_ID, @@ -101,7 +101,7 @@ def test_license_model_create(): return_data = {"vendorName": VENDOR_NAME, "id": ID, "description": DESCRIPTION} mockup_catalog_item( - license_model_client.catalog_items["GET_LICENSE_MODEL"], + oc.sdc.license_model.catalog_items["GET_LICENSE_MODEL"], override_return_data=return_data, override_uri_params={ "license_model_id": LICENSE_MODEL_ID, @@ -109,8 +109,6 @@ def test_license_model_create(): }, ) - mockup_client(license_model_client) - lm = LicenseModel( VENDOR_NAME, "abc123", diff --git a/onap-client/onap_client/sdc/tests/test_service.py b/onap-client/onap_client/sdc/tests/test_service.py new file mode 100644 index 0000000..e4789a5 --- /dev/null +++ b/onap-client/onap_client/sdc/tests/test_service.py @@ -0,0 +1,132 @@ +# -*- coding: utf8 -*- +# ============LICENSE_START======================================================= +# org.onap.vvp/validation-scripts +# =================================================================== +# Copyright © 2020 AT&T Intellectual Property. All rights reserved. +# =================================================================== +# +# Unless otherwise specified, all software contained herein is licensed +# under the Apache License, Version 2.0 (the "License"); +# you may not use this software except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# +# +# Unless otherwise specified, all documentation contained herein is licensed +# under the Creative Commons License, Attribution 4.0 Intl. (the "License"); +# you may not use this documentation except in compliance with the License. +# You may obtain a copy of the License at +# +# https://creativecommons.org/licenses/by/4.0/ +# +# Unless required by applicable law or agreed to in writing, documentation +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# +# ============LICENSE_END============================================ + +import responses + +from onap_client.tests.utils import mockup_catalog_item +from onap_client.client.clients import Client +from onap_client.sdc.service import Service + + +@responses.activate +def test_vnf_create(): + oc = Client() + + VNF_NAME = "vnf_name" + SERVICE_MODEL_ID = "service_model_id" + VNF_RESOURCE_ID = "vnf_resource_id" + SERVICE_NAME = "service_name" + + mockup_catalog_item( + oc.sdc.service.catalog_items["GET_SERVICES"], + override_return_data={ + "services": [] + }, + ) + mockup_catalog_item( + oc.sdc.service.catalog_items["ADD_CATALOG_SERVICE"], + override_return_data={ + "uniqueId": SERVICE_MODEL_ID + }, + ) + mockup_catalog_item( + oc.sdc.service.catalog_items["ADD_RESOURCE_INSTANCE"], + override_uri_params={"catalog_service_id": SERVICE_MODEL_ID}, + override_return_data={ + "uniqueId": VNF_RESOURCE_ID + }, + ) + mockup_catalog_item( + oc.sdc.service.catalog_items["CHECKIN_SERVICE"], + override_uri_params={"catalog_service_id": SERVICE_MODEL_ID}, + ) + mockup_catalog_item( + oc.sdc.service.catalog_items["REQUEST_SERVICE_CERTIFICATION"], + override_uri_params={"catalog_service_id": SERVICE_MODEL_ID}, + ) + mockup_catalog_item( + oc.sdc.service.catalog_items["START_SERVICE_CERTIFICATION"], + override_uri_params={"catalog_service_id": SERVICE_MODEL_ID}, + ) + mockup_catalog_item( + oc.sdc.service.catalog_items["FINISH_SERVICE_CERTIFICATION"], + override_uri_params={"catalog_service_id": SERVICE_MODEL_ID}, + override_return_data={"uniqueId": SERVICE_MODEL_ID} + ) + mockup_catalog_item( + oc.sdc.service.catalog_items["APPROVE_SERVICE_CERTIFICATION"], + override_uri_params={"catalog_service_id": SERVICE_MODEL_ID}, + ) + mockup_catalog_item( + oc.sdc.service.catalog_items["DISTRIBUTE_SDC_SERVICE"], + override_uri_params={"catalog_service_id": SERVICE_MODEL_ID}, + ) + mockup_catalog_item( + oc.sdc.service.catalog_items["GET_SDC_SERVICE"], + override_uri_params={"catalog_service_id": SERVICE_MODEL_ID}, + override_return_data={ + "uniqueId": SERVICE_MODEL_ID, + } + ) + + service = Service( + "A-la-carte", + SERVICE_NAME, + "cs0008", + "Network L1-3", + "robot", + "123456", + "General_Revenue-Bearing", + "true", + "This is a test", + "", + "", + "", + resources=[{ + "resource_name": VNF_NAME, + "resource_id": VNF_RESOURCE_ID, + "catalog_resource_name": VNF_NAME, + "origin_type": "VF", + "properties": {} + }], + allow_update=False, + wait_for_distribution=False + ) + + service._submit() + + assert service.service_name == SERVICE_NAME diff --git a/onap-client/onap_client/sdc/tests/test_vnf.py b/onap-client/onap_client/sdc/tests/test_vnf.py index 025a2d8..f72043e 100644 --- a/onap-client/onap_client/sdc/tests/test_vnf.py +++ b/onap-client/onap_client/sdc/tests/test_vnf.py @@ -36,7 +36,8 @@ # ============LICENSE_END============================================ import responses -from onap_client.tests.utils import mockup_client, mockup_catalog_item + +from onap_client.tests.utils import mockup_catalog_item from onap_client.client.clients import Client from onap_client.sdc.vnf import VNF from onap_client.sdc.vnf import ( @@ -44,12 +45,11 @@ from onap_client.sdc.vnf import ( network_role_property_for_instance, ) -vnf_client = Client().sdc.vnf -vsp_client = Client().sdc.vsp - @responses.activate def test_vnf_create(): + oc = Client() + SOFTWARE_PRODUCT_NAME = "software_product_name" SOFTWARE_PRODUCT_ID = "software_product_id" SOFTWARE_PRODUCT_VERSION_ID = "software_product_version_id" @@ -68,13 +68,13 @@ def test_vnf_create(): "name": VNF_NAME, } mockup_catalog_item( - vsp_client.catalog_items["GET_SOFTWARE_PRODUCTS"], + oc.sdc.vsp.catalog_items["GET_SOFTWARE_PRODUCTS"], override_return_data={ "results": [{"name": SOFTWARE_PRODUCT_NAME, "id": SOFTWARE_PRODUCT_ID}] }, ) mockup_catalog_item( - vsp_client.catalog_items["GET_SOFTWARE_PRODUCT_VERSIONS"], + oc.sdc.vsp.catalog_items["GET_SOFTWARE_PRODUCT_VERSIONS"], override_return_data={ "results": [ {"name": SOFTWARE_PRODUCT_NAME, "id": SOFTWARE_PRODUCT_VERSION_ID} @@ -83,40 +83,66 @@ def test_vnf_create(): override_uri_params={"software_product_id": SOFTWARE_PRODUCT_ID}, ) mockup_catalog_item( - vsp_client.catalog_items["GET_SOFTWARE_PRODUCT"], - override_return_data={"vendorName": "vendor_name"}, + oc.sdc.vsp.catalog_items["GET_SOFTWARE_PRODUCT"], + override_return_data={ + "vendorName": "vendor_name", + "category": "resourceNewCategory.application l4+", + "subCategory": "resourceNewCategory.application l4+.web server", + }, override_uri_params={ "software_product_id": SOFTWARE_PRODUCT_ID, "software_product_version_id": SOFTWARE_PRODUCT_VERSION_ID, }, ) mockup_catalog_item( - vnf_client.catalog_items["GET_RESOURCES"], + oc.sdc.vnf.catalog_items["GET_RESOURCES"], override_return_data={"resources": []}, ) mockup_catalog_item( - vnf_client.catalog_items["ADD_CATALOG_RESOURCE"], + oc.sdc.vnf.catalog_items["ADD_CATALOG_RESOURCE"], override_return_data=return_data, ) mockup_catalog_item( - vnf_client.catalog_items["GET_CATALOG_RESOURCE"], + oc.sdc.vnf.catalog_items["GET_CATALOG_RESOURCE"], override_return_data=return_data, override_uri_params={"catalog_resource_id": CATALOG_RESOURCE_ID}, ) mockup_catalog_item( - vnf_client.catalog_items["CERTIFY_CATALOG_RESOURCE"], + oc.sdc.vnf.catalog_items["CERTIFY_CATALOG_RESOURCE"], override_return_data=return_data, override_uri_params={"catalog_resource_id": CATALOG_RESOURCE_ID}, ) mockup_catalog_item( - vnf_client.catalog_items["ADD_CATALOG_RESOURCE_PROPERTY"], + oc.sdc.vnf.catalog_items["ADD_CATALOG_RESOURCE_PROPERTY"], override_uri_params={ "catalog_resource_id": CATALOG_RESOURCE_ID, "catalog_resource_instance_id": "instance_id1", }, ) - - mockup_client(vnf_client) + mockup_catalog_item( + oc.sdc.catalog_items["GET_RESOURCE_CATEGORIES"], + override_return_data=[ + { + "name": "Application L4+", + "normalizedName": "application l4+", + "uniqueId": "resourceNewCategory.application l4+", + "icons": False, + "subcategories": [ + { + "name": "Call Control", + "normalizedName": "call control", + "uniqueId": "resourceNewCategory.application l4+.call control", + "icons": ["call_controll"], + "groupings": False, + "version": False, + "ownerId": False, + "empty": False, + "type": False + } + ] + } + ], + ) vnf = VNF( SOFTWARE_PRODUCT_NAME, @@ -127,7 +153,7 @@ def test_vnf_create(): vnf._submit() - assert "catalog_resource_name" in vnf.tosca + assert "componentInstancesInputs" in vnf.tosca def test_instance_ids_for_property(): diff --git a/onap-client/onap_client/sdc/tests/test_vsp.py b/onap-client/onap_client/sdc/tests/test_vsp.py index 4d71a81..f14e16e 100644 --- a/onap-client/onap_client/sdc/tests/test_vsp.py +++ b/onap-client/onap_client/sdc/tests/test_vsp.py @@ -43,12 +43,11 @@ from os.path import dirname, abspath THIS_DIR = dirname(abspath(__file__)) -license_model_client = Client().sdc.license_model -vsp_client = Client().sdc.vsp - @responses.activate def test_vsp_create(): + oc = Client() + LICENSE_MODEL_ID = "license_model_id" LICENSE_MODEL_VERSION_ID = "license_model_version_id" FEATURE_GROUP_ID = "feature_group_id" @@ -59,49 +58,48 @@ def test_vsp_create(): VSP_NAME = "software_product_name" mockup_catalog_item( - license_model_client.catalog_items["GET_LICENSE_MODELS"], + oc.sdc.license_model.catalog_items["GET_LICENSE_MODELS"], override_return_data={ "results": [{"name": LICENSE_MODEL_NAME, "id": LICENSE_MODEL_ID}] }, ) mockup_catalog_item( - license_model_client.catalog_items["GET_LICENSE_MODEL_VERSIONS"], + oc.sdc.license_model.catalog_items["GET_LICENSE_MODEL_VERSIONS"], override_return_data={ "results": [{"name": LICENSE_MODEL_NAME, "id": LICENSE_MODEL_VERSION_ID}] }, ) mockup_catalog_item( - license_model_client.catalog_items["GET_LICENSE_MODEL_VERSION_ATTRIBUTE"], + oc.sdc.license_model.catalog_items["GET_LICENSE_MODEL_VERSION_ATTRIBUTE"], override_return_data={ "results": [{"name": LICENSE_MODEL_NAME, "id": FEATURE_GROUP_ID}] }, override_uri_params={"attribute": "feature-groups"}, ) mockup_catalog_item( - license_model_client.catalog_items["GET_LICENSE_MODEL_VERSION_ATTRIBUTE"], + oc.sdc.license_model.catalog_items["GET_LICENSE_MODEL_VERSION_ATTRIBUTE"], override_return_data={ "results": [{"name": LICENSE_MODEL_NAME, "id": LICENSE_AGREEMENT_ID}] }, override_uri_params={"attribute": "license-agreements"}, ) - mockup_client(license_model_client) mockup_catalog_item( - vsp_client.catalog_items["GET_SOFTWARE_PRODUCTS"], + oc.sdc.vsp.catalog_items["GET_SOFTWARE_PRODUCTS"], override_return_data={"results": []}, ) mockup_catalog_item( - vsp_client.catalog_items["ADD_SOFTWARE_PRODUCT"], + oc.sdc.vsp.catalog_items["ADD_SOFTWARE_PRODUCT"], override_return_data={ "itemId": VSP_MODEL_ID, "version": {"id": VSP_MODEL_VERSION_ID}, }, ) mockup_catalog_item( - vsp_client.catalog_items["GET_SOFTWARE_PRODUCT"], + oc.sdc.vsp.catalog_items["GET_SOFTWARE_PRODUCT"], override_return_data={"name": VSP_NAME}, ) - mockup_client(vsp_client) + mockup_client(oc.sdc.vsp) vsp = sdc.vsp.VSP( "vendor_name", diff --git a/onap-client/onap_client/sdc/vnf.py b/onap-client/onap_client/sdc/vnf.py index 1d2989a..d772675 100644 --- a/onap-client/onap_client/sdc/vnf.py +++ b/onap-client/onap_client/sdc/vnf.py @@ -38,7 +38,7 @@ from onap_client.lib import generate_dummy_string from onap_client.resource import Resource from onap_client import exceptions, sdc -from onap_client.client.clients import Client as SDCClient +from onap_client.client.clients import Client from onap_client.sdc import vsp from onap_client.util import utility @@ -46,8 +46,6 @@ import time import random import json -vnf_client = SDCClient().sdc.vnf - class VNF(Resource): resource_name = "VNF" @@ -134,15 +132,21 @@ class VNF(Resource): policies=[], allow_update=False, ): + self.oc = Client() vnf_input = {} software_product_id = vsp.get_vsp_id(software_product_name) software_product_version_id = vsp.get_vsp_version_id(software_product_id) vsp_model = vsp.get_vsp_model(software_product_id, software_product_version_id) + print(vsp_model) vsp_vendor = vsp_model.get("vendorName") + vsp_category = vsp_model.get("category") + vsp_sub_category = vsp_model.get("subCategory") vnf_input["software_product_id"] = software_product_id + vnf_input["vsp_category"] = vsp_category + vnf_input["vsp_sub_category"] = vsp_sub_category vnf_input["vendor_name"] = vsp_vendor vnf_input["vnf_name"] = vnf_name vnf_input["resource_type"] = resource_type @@ -246,7 +250,7 @@ class VNF(Resource): capability_name = capability.get("name") capability_uid = capability.get("uniqueId") - return vnf_client.add_resource_relationship( + return self.oc.sdc.vnf.add_resource_relationship( **self.attributes, from_node_resource_id=from_node, to_node_resource_id=to_node, @@ -317,12 +321,12 @@ class VNF(Resource): def _submit(self): """Submits the vnf in SDC""" - certification = vnf_client.certify_catalog_resource( + certification = self.oc.sdc.vnf.certify_catalog_resource( **self.attributes, user_remarks="Ready!" ) self.attributes["catalog_resource_id"] = certification.catalog_resource_id - vnf = vnf_client.get_catalog_resource(**self.attributes) + vnf = self.oc.sdc.vnf.get_catalog_resource(**self.attributes) self.attributes["catalog_resource_name"] = vnf.catalog_resource_name self.attributes["tosca"] = vnf.response_data @@ -342,7 +346,7 @@ class VNF(Resource): unique_id = item["uniqueId"] parent_unique_id = item["parentUniqueId"] owner_id = item["ownerId"] - return vnf_client.add_catalog_resource_input( + return self.oc.sdc.vnf.add_catalog_resource_input( **self.attributes, input_default_value=input_default_value, input_name=input_name, @@ -380,7 +384,7 @@ class VNF(Resource): owner_id = prop.get("ownerId") schemaType = prop.get("schemaType", "") property_type = prop.get("type") - return vnf_client.add_catalog_resource_property( + return self.oc.sdc.vnf.add_catalog_resource_property( **self.attributes, unique_id=unique_id, parent_unique_id=parent_unique_id, @@ -419,7 +423,7 @@ class VNF(Resource): owner_id = prop.get("ownerId") schemaType = prop.get("schemaType", "") property_type = prop.get("type") - return vnf_client.add_catalog_resource_property_non_vf( + return self.oc.sdc.vnf.add_catalog_resource_property_non_vf( **self.attributes, unique_id=unique_id, parent_unique_id=parent_unique_id, @@ -456,7 +460,7 @@ class VNF(Resource): unique_id = prop.get("uniqueId") property_type = prop.get("type") description = prop.get("description") - return vnf_client.add_catalog_policy_property( + return self.oc.sdc.vnf.add_catalog_policy_property( **self.attributes, unique_id=unique_id, catalog_policy_id=policy_id, @@ -483,7 +487,7 @@ class VNF(Resource): "Policy {} was not found in configuration file".format(policy_name) ) - return vnf_client.add_catalog_resource_policy( + return self.oc.sdc.vnf.add_catalog_resource_policy( **self.attributes, catalog_policy_name=policy ) @@ -495,34 +499,36 @@ class VNF(Resource): """ - return vnf_client.add_policy_to_instance( + return self.oc.sdc.vnf.add_policy_to_instance( **self.attributes, catalog_policy_id=policy_id, instance_ids=instance_ids ) def _refresh(self): """GETs the VNF model from SDC and updates the VNF object""" - vnf = vnf_client.get_catalog_resource(**self.attributes) + vnf = self.oc.sdc.vnf.get_catalog_resource(**self.attributes) self.attributes["tosca"] = vnf.response_data def update_vnf(catalog_resource_id, vnf_input): - existing_vnf = vnf_client.get_catalog_resource( + oc = Client() + + existing_vnf = oc.sdc.vnf.get_catalog_resource( catalog_resource_id=catalog_resource_id ).response_data if existing_vnf.get("lifecycleState") != "NOT_CERTIFIED_CHECKOUT": - vnf = vnf_client.checkout_catalog_resource(catalog_resource_id=catalog_resource_id).response_data + vnf = oc.sdc.vnf.checkout_catalog_resource(catalog_resource_id=catalog_resource_id).response_data else: - vnf = vnf_client.get_catalog_resource_metadata(catalog_resource_id=catalog_resource_id).response_data.get("metadata", {}) + vnf = oc.sdc.vnf.get_catalog_resource_metadata(catalog_resource_id=catalog_resource_id).response_data.get("metadata", {}) - new_vnf_metadata = vnf_client.get_catalog_resource_metadata(catalog_resource_id=vnf.get("uniqueId")).response_data.get("metadata", {}) + new_vnf_metadata = oc.sdc.vnf.get_catalog_resource_metadata(catalog_resource_id=vnf.get("uniqueId")).response_data.get("metadata", {}) csar_version = vsp.get_vsp_version_id(vnf.get("csarUUID"), search_key="name") vnf["csarVersion"] = csar_version vnf["componentMetadata"] = new_vnf_metadata - updated_vnf = vnf_client.update_catalog_resource(catalog_resource_id=vnf.get("uniqueId"), payload_data=json.dumps(vnf)).response_data + updated_vnf = oc.sdc.vnf.update_catalog_resource(catalog_resource_id=vnf.get("uniqueId"), payload_data=json.dumps(vnf)).response_data vnf_input["catalog_resource_id"] = updated_vnf.get("uniqueId") vnf_input["tosca"] = updated_vnf @@ -537,8 +543,21 @@ def create_vnf(vnf_input): :return: dictionary of updated values for created vnf """ + oc = Client() + kwargs = vnf_input - vnf = vnf_client.add_catalog_resource(**kwargs) + + category = get_resource_category(kwargs.get("vsp_category")) + vsp_sub_category = [] + for subcategory in category.get("subcategories", []): + if subcategory.get("uniqueId") == kwargs.get("vsp_sub_category"): + vsp_sub_category.append(subcategory) + break + + category["subcategories"] = vsp_sub_category + kwargs["contact_id"] = vsp.get_vsp_owner(kwargs.get("software_product_id")) + + vnf = oc.sdc.vnf.add_catalog_resource(**kwargs, categories=[category]) kwargs["catalog_resource_id"] = vnf.catalog_resource_id kwargs["tosca"] = vnf.response_data @@ -599,9 +618,11 @@ def add_resource(parent_resource_id, catalog_resource_id, catalog_resource_name, :origin_type: specifies the origin of the attached resource """ + oc = Client() + milli_timestamp = int(time.time() * 1000) - resource_instance = vnf_client.add_resource_instance( + resource_instance = oc.sdc.vnf.add_resource_instance( catalog_resource_id=parent_resource_id, posX=random.randrange(150, 550), # nosec posY=random.randrange(150, 450), # nosec @@ -621,13 +642,26 @@ def add_resource(parent_resource_id, catalog_resource_id, catalog_resource_name, @utility def get_vnf(vnf_name): """Queries SDC for the TOSCA model for a VNF""" - return vnf_client.get_catalog_resource( + oc = Client() + + return oc.sdc.vnf.get_catalog_resource( catalog_resource_id=get_vnf_id(vnf_name) ).response_data +def get_resource_category(category_name): + oc = Client() + resource_categories = oc.sdc.get_resource_categories().response_data + for category in resource_categories: + if category.get("uniqueId") == category_name: + return category + return None + + def get_vnf_id(vnf_name): - response = vnf_client.get_resources() + oc = Client() + + response = oc.sdc.vnf.get_resources() results = response.response_data.get("resources", []) catalog_resource = {} update_time = -1 diff --git a/onap-client/onap_client/sdc/vsp.py b/onap-client/onap_client/sdc/vsp.py index 781f6eb..25b3170 100644 --- a/onap-client/onap_client/sdc/vsp.py +++ b/onap-client/onap_client/sdc/vsp.py @@ -37,13 +37,11 @@ from onap_client.lib import generate_dummy_string from onap_client.resource import Resource -from onap_client.client.clients import Client as SDCClient +from onap_client.client.clients import Client from onap_client import sdc from onap_client.util import utility from onap_client.exceptions import ResourceAlreadyExistsException -vsp_client = SDCClient().sdc.vsp - class VSP(Resource): resource_name = "VSP" @@ -86,7 +84,7 @@ class VSP(Resource): contributers=[], allow_update=False, ): - + self.oc = Client() vsp_input = {} license_model_id = sdc.license_model.get_license_model_id(license_model_name) @@ -136,25 +134,27 @@ class VSP(Resource): def _post_create(self): for contributer in self.contributers: - vsp_client.add_vsp_contributer( + self.oc.sdc.vsp.add_vsp_contributer( user_id=contributer, software_product_id=self.software_product_id ) def _submit(self): """Submits the vsp in SDC""" - vsp_client.submit_software_product(**self.attributes, action="Submit") - vsp_client.package_software_product(**self.attributes, action="Create_Package") + self.oc.sdc.vsp.submit_software_product(**self.attributes, action="Submit") + self.oc.sdc.vsp.package_software_product(**self.attributes, action="Create_Package") - vsp = vsp_client.get_software_product(**self.attributes) + vsp = self.oc.sdc.vsp.get_software_product(**self.attributes) self.attributes["tosca"] = vsp.response_data def update_vsp(existing_vsp, vsp_input): + oc = Client() + existing_vsp_id = existing_vsp.get("id") existing_vsp_version_id = existing_vsp.get("version") if get_vsp_version_id(existing_vsp_id, search_key="status") == "Certified": - vsp_client.update_software_product( + oc.sdc.vsp.update_software_product( software_product_id=existing_vsp_id, software_product_version_id=existing_vsp_version_id, description=vsp_input.get("description", "New VSP Version") @@ -163,10 +163,10 @@ def update_vsp(existing_vsp, vsp_input): vsp_input["software_product_id"] = existing_vsp_id vsp_input["software_product_version_id"] = get_vsp_version_id(existing_vsp_id) - vsp_client.upload_heat_package(**vsp_input) - vsp_client.validate_software_product(**vsp_input) + oc.sdc.vsp.upload_heat_package(**vsp_input) + oc.sdc.vsp.validate_software_product(**vsp_input) - vsp = vsp_client.get_software_product(**vsp_input) + vsp = oc.sdc.vsp.get_software_product(**vsp_input) vsp_input["tosca"] = vsp.response_data return vsp_input @@ -179,16 +179,18 @@ def create_vsp(vsp_input): :return: dictionary of updated values for created vsp """ + oc = Client() + kwargs = vsp_input - vsp = vsp_client.add_software_product(**kwargs) + vsp = oc.sdc.vsp.add_software_product(**kwargs) kwargs["software_product_id"] = vsp.software_product_id kwargs["software_product_version_id"] = vsp.software_product_version_id - vsp_client.upload_heat_package(**kwargs) - vsp_client.validate_software_product(**kwargs) + oc.sdc.vsp.upload_heat_package(**kwargs) + oc.sdc.vsp.validate_software_product(**kwargs) - vsp = vsp_client.get_software_product(**kwargs) + vsp = oc.sdc.vsp.get_software_product(**kwargs) kwargs["tosca"] = vsp.response_data return kwargs @@ -201,7 +203,9 @@ def get_vsp_id(vsp_name): :return: id of vsp or None """ - response = vsp_client.get_software_products() + oc = Client() + + response = oc.sdc.vsp.get_software_products() results = response.response_data.get("results", {}) for vsp in results: if vsp.get("name") == vsp_name: @@ -216,9 +220,11 @@ def get_vsp_version_id(vsp_id, search_key="id"): :return: uuid of vsp version id or None """ + oc = Client() + vsp_version_id = None creation_time = -1 - response = vsp_client.get_software_product_versions(software_product_id=vsp_id) + response = oc.sdc.vsp.get_software_product_versions(software_product_id=vsp_id) results = response.response_data.get("results") for version in results: if version.get("creationTime", 0) > creation_time: @@ -229,11 +235,22 @@ def get_vsp_version_id(vsp_id, search_key="id"): def get_vsp_model(vsp_id, vsp_version_id): - return vsp_client.get_software_product( + oc = Client() + + return oc.sdc.vsp.get_software_product( software_product_id=vsp_id, software_product_version_id=vsp_version_id, ).response_data +def get_vsp_owner(vsp_id): + oc = Client() + vsps = oc.sdc.vsp.get_software_products().response_data.get("results", []) + for vsp in vsps: + if vsp.get("id") == vsp_id: + return vsp.get("owner") + return None + + @utility def get_vsp(vsp_name): """Queries SDC for the tosca model for a VSP""" |