diff options
Diffstat (limited to 'onap-client/onap_client/sdc/vsp.py')
-rw-r--r-- | onap-client/onap_client/sdc/vsp.py | 213 |
1 files changed, 213 insertions, 0 deletions
diff --git a/onap-client/onap_client/sdc/vsp.py b/onap-client/onap_client/sdc/vsp.py new file mode 100644 index 0000000..fc9258b --- /dev/null +++ b/onap-client/onap_client/sdc/vsp.py @@ -0,0 +1,213 @@ +# -*- 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============================================ + +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 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" + spec = { + "vendor_name": {"type": str, "required": True}, + "license_model_name": {"type": str, "required": True}, + "file_path": {"type": str, "required": True}, + "file_type": {"type": str, "required": False, "default": "application/zip"}, + "software_product_name": { + "type": str, + "required": False, + "default": generate_dummy_string("test_vsp_"), + }, + "description": { + "type": str, + "required": False, + "default": "new software product", + }, + "category": {"type": str, "required": False, "default": "generic"}, + "sub_category": {"type": str, "required": False, "default": "abstract"}, + "contributers": { + "type": list, + "list_item": str, + "required": False, + "default": [], + }, + } + + def __init__( + self, + vendor_name, + license_model_name, + file_path, + file_type, + software_product_name, + description, + category, + sub_category, + contributers=[], + ): + + vsp_input = {} + + license_model_id = sdc.license_model.get_license_model_id(license_model_name) + license_model_version_id = sdc.license_model.get_license_model_version_id( + license_model_id + ) + feature_group = sdc.license_model.get_license_model_attribute( + license_model_id, license_model_version_id, "feature-groups" + ) + license_agreement = sdc.license_model.get_license_model_attribute( + license_model_id, license_model_version_id, "license-agreements" + ) + + vsp_input["software_product_name"] = software_product_name + vsp_input["feature_group_id"] = feature_group["id"] + vsp_input["license_agreement_id"] = license_agreement["id"] + vsp_input["vendor_name"] = vendor_name + vsp_input["license_model_id"] = license_model_id + vsp_input["license_model_version_id"] = license_model_version_id + vsp_input["file_path"] = file_path + vsp_input["file_type"] = file_type + vsp_input["description"] = description + vsp_input["category"] = category.lower() + vsp_input["sub_category"] = sub_category.lower() + vsp_input["contributers"] = contributers + + super().__init__(vsp_input) + + def _create(self, kwargs): + """Creates a vsp object in SDC""" + vsp = None + + if get_vsp_id(kwargs.get("software_product_name")) is None: + vsp = create_vsp(kwargs) + else: + raise ResourceAlreadyExistsException( + "VSP resource {} already exists".format( + kwargs.get("software_product_name") + ) + ) + + return vsp + + def _post_create(self): + for contributer in self.contributers: + vsp_client.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") + + vsp = vsp_client.get_software_product(**self.attributes) + self.attributes["tosca"] = vsp.response_data + + +def create_vsp(vsp_input): + """Creates a VSP object in SDC + + :vsp_input: dictionary with values to input for vsp creation + + :return: dictionary of updated values for created vsp + """ + kwargs = vsp_input + vsp = vsp_client.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) + + vsp = vsp_client.get_software_product(**kwargs) + kwargs["tosca"] = vsp.response_data + + return kwargs + + +def get_vsp_id(vsp_name): + """GETs vsp model ID from SDC + + :vsp_name: name of vsp model in SDC + + :return: id of vsp or None + """ + response = vsp_client.get_software_products() + results = response.response_data.get("results", {}) + for vsp in results: + if vsp.get("name") == vsp_name: + return vsp["id"] + return None + + +def get_vsp_version_id(vsp_id): + """GETs vsp model version UUID from SDC + + :vsp_id: uuid of vsp model in SDC + + :return: uuid of vsp version id or None + """ + vsp_version_id = None + creation_time = -1 + response = vsp_client.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: + creation_time = version.get("creationTime") + vsp_version_id = version.get("id") + + return vsp_version_id + + +def get_vsp_model(vsp_id, vsp_version_id): + return vsp_client.get_software_product( + software_product_id=vsp_id, software_product_version_id=vsp_version_id, + ).response_data + + +@utility +def get_vsp(vsp_name): + """Queries SDC for the tosca model for a VSP""" + vsp_id = get_vsp_id(vsp_name) + vsp_version_id = get_vsp_version_id(vsp_id) + return get_vsp_model(vsp_id, vsp_version_id) |