From 9df81b14e7203d6c3911f5f36881cb5170afdccc Mon Sep 17 00:00:00 2001 From: "stark, steven" Date: Tue, 21 Jul 2020 15:14:27 -0700 Subject: [VVP] onap-client refactoring removing create hook from _init_ for resources removing _init_ for non-abstract resources refactor validation logic enhancing error catch for resource failure adding _on_failure hook Issue-ID: VVP-441 Signed-off-by: stark, steven Change-Id: Ia627fc7fd35fe6e112d6f89399701c70b5888077 --- onap-client/onap_client/exceptions.py | 4 + onap-client/onap_client/resource.py | 153 +++++++++++---------- onap-client/onap_client/sdc/license_model.py | 30 +--- onap-client/onap_client/sdc/service.py | 62 ++------- .../onap_client/sdc/tests/test_license_model.py | 16 +-- onap-client/onap_client/sdc/tests/test_service.py | 23 ++-- onap-client/onap_client/sdc/tests/test_vnf.py | 8 +- onap-client/onap_client/sdc/tests/test_vsp.py | 17 +-- onap-client/onap_client/sdc/vnf.py | 99 +++++-------- onap-client/onap_client/sdc/vsp.py | 93 +++++-------- onap-client/onap_client/sdnc/preload.py | 26 ---- onap-client/onap_client/so/module_instance.py | 56 ++------ onap-client/onap_client/so/service_instance.py | 48 +------ .../onap_client/so/tests/test_module_instance.py | 21 +-- .../onap_client/so/tests/test_service_instance.py | 25 ++-- .../onap_client/so/tests/test_vnf_instance.py | 21 +-- onap-client/onap_client/so/vnf_instance.py | 41 +----- onap-client/onap_client/tests/test_resource.py | 20 ++- onap-client/onap_client/tests/testdata.py | 8 -- onap-client/setup.py | 2 +- 20 files changed, 265 insertions(+), 508 deletions(-) diff --git a/onap-client/onap_client/exceptions.py b/onap-client/onap_client/exceptions.py index 76bb77e..8e3b843 100644 --- a/onap-client/onap_client/exceptions.py +++ b/onap-client/onap_client/exceptions.py @@ -142,3 +142,7 @@ class DistributionTimeout(Exception): class TenantNotFound(Exception): pass + + +class ResourceCreationFailure(Exception): + pass diff --git a/onap-client/onap_client/resource.py b/onap-client/onap_client/resource.py index 0af0fad..ca5d675 100644 --- a/onap-client/onap_client/resource.py +++ b/onap-client/onap_client/resource.py @@ -34,40 +34,62 @@ # limitations under the License. # # ============LICENSE_END============================================ - -import inspect - -from abc import ABC, abstractmethod -from onap_client.exceptions import InvalidSpecException +from abc import ABC +from onap_client.exceptions import InvalidSpecException, ResourceAlreadyExistsException, ResourceCreationFailure +from onap_client.client.clients import Client class Resource(ABC): resource_name = "abstract" spec = {} - def __init__(self, input): + def __init__(self, **kwargs): self.attributes = {} - - attributes = self._create(input) - self.resolve_attributes(attributes) - - self._post_create() + self.oc = Client() + self.input_spec = self.validate(kwargs, spec=self.spec) def __getattr__(self, attr): return self.attributes.get(attr, None) - @abstractmethod + def create(self): + attributes = self._create(self.input_spec) + self.resolve_attributes(attributes) + self._post_create() + def _create(self, input): pass - @abstractmethod def _post_create(self): pass - @abstractmethod def _submit(self): pass + def _on_failure(self): + pass + + @classmethod + def create_from_spec(cls, spec, submit=True): + instance = cls(**spec) + + try: + instance.create() + if submit: + instance._submit() + except ResourceAlreadyExistsException: + raise + except Exception as e: + instance._on_failure() + raise ResourceCreationFailure( + "Failed to create resource {}: {}".format(instance.resource_name, str(e)) + ) + + return instance + + def resolve_attributes(self, attributes): + for key, val in attributes.items(): + self.attributes[key] = val + @classmethod def validate(cls, input, spec=None): """Validates that an input dictionary spec @@ -79,82 +101,65 @@ class Resource(ABC): Returns complete spec with all attributes. """ valid_spec = {} - - if not isinstance(input, dict): - raise InvalidSpecException("input spec was not a dictionary") - if not spec: spec = cls.spec - for k, v in input.items(): - if not spec.get(k): - raise InvalidSpecException("Unknown property found: {}".format(k)) - - for k, v in spec.items(): - property_name = k - property_type = v.get("type") - property_required = v.get("required") - property_default = v.get("default", default_empty_value(property_type)) - - input_property = validate_property( - input, property_name, property_required, property_default, property_type - ) - - if ( - property_type == dict - and input_property != property_default - and v.get("nested") - ): - property_value = cls.validate(input_property, v.get("nested")) - elif property_type == list: - list_property_type = v.get("list_item") - list_spec = [] - for item in input_property: - if type(item) != list_property_type: - raise InvalidSpecException( - "list item {} not match type {}".format( - item, list_property_type - ) - ) - if list_property_type == str: - list_spec.insert(0, item) - else: - list_spec.insert(0, cls.validate(item, v.get("nested", {}))) - - property_value = list_spec - else: - property_value = input_property + validate_spec_type(input) + validate_spec_properties(input, spec) + for property_name, v in spec.items(): + property_value = cls.validate_spec_item(property_name, v, input, spec) valid_spec[property_name] = property_value return valid_spec @classmethod - def create_from_spec(cls, spec, submit=True): - input_args = [] + def validate_spec_item(cls, property_name, property_item, input, spec): + property_type = property_item.get("type") + property_required = property_item.get("required") + property_default = property_item.get("default", default_empty_value(property_type)) - arguments = inspect.getfullargspec(cls).args - arguments.pop(0) + input_property = validate_property( + input, property_name, property_required, property_default, property_type + ) - for argument in arguments: - input_args.append(spec.get(argument)) + if ( + property_type == dict + and input_property != property_default + and property_item.get("nested") + ): + property_value = cls.validate(input_property, property_item.get("nested")) + elif property_type == list: + list_property_type = property_item.get("list_item") + list_spec = [] + for item in input_property: + if type(item) != list_property_type: + raise InvalidSpecException( + "list item {} not match type {}".format( + item, list_property_type + ) + ) + if list_property_type == str: + list_spec.insert(0, item) + else: + list_spec.insert(0, cls.validate(item, property_item.get("nested", {}))) - instance = cls(*input_args) + property_value = list_spec + else: + property_value = input_property - if submit: - instance._submit() + return property_value - return instance - def resolve_attributes(self, attributes): - for key, val in attributes.items(): - self.attributes[key] = val +def validate_spec_type(input_spec): + if not isinstance(input_spec, dict): + raise InvalidSpecException("input spec was not a dictionary") + - def print(self): - for k, v in self.attributes.items(): - val = str(v) - value = val[:50] + "..." if len(val) > 50 else val - print("{}: {}".format(k, value)) +def validate_spec_properties(input_spec, spec): + for k, v in input_spec.items(): + if not spec.get(k): + raise InvalidSpecException("Unknown property found: {}".format(k)) def validate_property( diff --git a/onap-client/onap_client/sdc/license_model.py b/onap-client/onap_client/sdc/license_model.py index 591509e..52846c1 100644 --- a/onap-client/onap_client/sdc/license_model.py +++ b/onap-client/onap_client/sdc/license_model.py @@ -48,7 +48,7 @@ class LicenseModel(Resource): "required": False, "default": generate_dummy_string("test_vendor_"), }, - "mfr_ref_number": { + "manufacturer_reference_number": { "type": str, "required": False, "default": generate_dummy_string("mfref"), @@ -85,38 +85,10 @@ class LicenseModel(Resource): }, } - def __init__( - self, - vendor_name, - mfr_ref_number, - entitlement_pool_name, - key_group_name, - feature_group_name, - license_agreement_name, - license_start_date, - license_end_date, - ): - self.oc = Client() - - license_input = {} - license_input["vendor_name"] = vendor_name - license_input["manufacturer_reference_number"] = mfr_ref_number - license_input["entitlement_pool_name"] = entitlement_pool_name - license_input["key_group_name"] = key_group_name - license_input["feature_group_name"] = feature_group_name - license_input["license_agreement_name"] = license_agreement_name - license_input["license_start_date"] = license_start_date - license_input["license_end_date"] = license_end_date - - super().__init__(license_input) - def _create(self, license_input): """Creates a license model object in SDC""" return create_license_model(license_input) - def _post_create(self): - pass - def _submit(self): """Submits the license model in SDC""" diff --git a/onap-client/onap_client/sdc/service.py b/onap-client/onap_client/sdc/service.py index 8b9c68b..8eec31a 100644 --- a/onap-client/onap_client/sdc/service.py +++ b/onap-client/onap_client/sdc/service.py @@ -117,53 +117,6 @@ class Service(Resource): "wait_for_distribution": {"type": bool, "required": False, "default": False}, } - def __init__( - self, - instantiation_type, - service_name, - contact_id, - category_name, - tag, - project_code, - environment_context, - ecomp_generated_naming, - description, - service_type, - service_role, - naming_policy, - resources=[], - wait_for_distribution=False, - allow_update=False, - ): - self.oc = Client() - - service_input = {} - - category_name_lower = category_name.lower() - category_name_icon = normalize_category_icon(category_name) - category_id = "serviceNewCategory.{}".format(category_name_lower) - - service_input["service_name"] = service_name - service_input["instantiation_type"] = instantiation_type - service_input["contact_id"] = contact_id - service_input["category_name"] = category_name - service_input["category_id"] = category_id - service_input["category_name_lower"] = category_name_lower - service_input["category_name_icon"] = category_name_icon - service_input["tag"] = tag - service_input["project_code"] = project_code - service_input["environment_context"] = environment_context - service_input["ecomp_generated_naming"] = ecomp_generated_naming - service_input["description"] = description - service_input["service_type"] = service_type - service_input["service_role"] = service_role - service_input["naming_policy"] = naming_policy - service_input["resources"] = resources - service_input["wait_for_distribution"] = wait_for_distribution - service_input["allow_update"] = allow_update - - super().__init__(service_input) - def _create(self, service_input): """Creates a service object in SDC""" service = None @@ -372,14 +325,19 @@ def create_service(service_input): """ oc = Client() - kwargs = service_input + category_name_lower = service_input.get("category_name").lower() + category_name_icon = normalize_category_icon(service_input.get("category_name")) + category_id = "serviceNewCategory.{}".format(category_name_lower) + service_input["category_id"] = category_id + service_input["category_name_lower"] = category_name_lower + service_input["category_name_icon"] = category_name_icon - service = oc.sdc.service.add_catalog_service(**kwargs) + service = oc.sdc.service.add_catalog_service(**service_input) - kwargs["catalog_service_id"] = service.catalog_service_id - kwargs["tosca"] = service.response_data + service_input["catalog_service_id"] = service.catalog_service_id + service_input["tosca"] = service.response_data - return kwargs + return service_input @utility 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 8da7d07..e9ca735 100644 --- a/onap-client/onap_client/sdc/tests/test_license_model.py +++ b/onap-client/onap_client/sdc/tests/test_license_model.py @@ -110,14 +110,14 @@ def test_license_model_create(): ) lm = LicenseModel( - VENDOR_NAME, - "abc123", - "entitlement_pool_name", - "key_group_name", - "feature_group_name", - "license_agreement_name", - "license_start_date", - "license_end_date", + vendor_name=VENDOR_NAME, + entitlement_pool_name="entitlement_pool_name", + key_group_name="key_group_name", + feature_group_name="feature_group_name", + license_agreement_name="license_agreement_name", + license_start_date="license_start_date", + license_end_date="license_end_date", ) + lm.create() assert lm.tosca == return_data diff --git a/onap-client/onap_client/sdc/tests/test_service.py b/onap-client/onap_client/sdc/tests/test_service.py index e4789a5..77eadbd 100644 --- a/onap-client/onap_client/sdc/tests/test_service.py +++ b/onap-client/onap_client/sdc/tests/test_service.py @@ -104,18 +104,15 @@ def test_vnf_create(): ) service = Service( - "A-la-carte", - SERVICE_NAME, - "cs0008", - "Network L1-3", - "robot", - "123456", - "General_Revenue-Bearing", - "true", - "This is a test", - "", - "", - "", + instantiation_type="A-la-carte", + service_name=SERVICE_NAME, + contact_id="cs0008", + category_name="Network L1-3", + tag="robot", + project_code="123456", + environment_context="General_Revenue-Bearing", + ecomp_generated_naming="true", + description="This is a test", resources=[{ "resource_name": VNF_NAME, "resource_id": VNF_RESOURCE_ID, @@ -126,7 +123,7 @@ def test_vnf_create(): allow_update=False, wait_for_distribution=False ) - + service.create() 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 dfa5af1..da3dd86 100644 --- a/onap-client/onap_client/sdc/tests/test_vnf.py +++ b/onap-client/onap_client/sdc/tests/test_vnf.py @@ -145,12 +145,12 @@ def test_vnf_create(): ) vnf = VNF( - SOFTWARE_PRODUCT_NAME, - VNF_NAME, - RESOURCE_TYPE, + software_product_name=SOFTWARE_PRODUCT_NAME, + vnf_name=VNF_NAME, + resource_type=RESOURCE_TYPE, vm_types=[{"vm_type": "red", "properties": {"nf_role": "blue"}}], ) - + vnf.create() vnf._submit() assert "componentInstancesInputs" in vnf.tosca diff --git a/onap-client/onap_client/sdc/tests/test_vsp.py b/onap-client/onap_client/sdc/tests/test_vsp.py index f14e16e..cd35a90 100644 --- a/onap-client/onap_client/sdc/tests/test_vsp.py +++ b/onap-client/onap_client/sdc/tests/test_vsp.py @@ -102,15 +102,16 @@ def test_vsp_create(): mockup_client(oc.sdc.vsp) vsp = sdc.vsp.VSP( - "vendor_name", - LICENSE_MODEL_NAME, - "{}/test.zip".format(THIS_DIR), - "application/zip", - VSP_NAME, - "description", - "category", - "sub_category", + vendor_name="vendor_name", + license_model_name=LICENSE_MODEL_NAME, + file_path="{}/test.zip".format(THIS_DIR), + file_type="application/zip", + software_product_name=VSP_NAME, + description="description", + category="category", + sub_category="sub_category", contributers=["test123"], ) + vsp.create() assert vsp.tosca == {"name": VSP_NAME} diff --git a/onap-client/onap_client/sdc/vnf.py b/onap-client/onap_client/sdc/vnf.py index f1ccb51..03b5c54 100644 --- a/onap-client/onap_client/sdc/vnf.py +++ b/onap-client/onap_client/sdc/vnf.py @@ -122,45 +122,6 @@ class VNF(Resource): "allow_update": {"type": bool, "required": False, "default": False}, } - def __init__( - self, - software_product_name, - vnf_name, - resource_type, - inputs={}, - vm_types=[], - network_roles=[], - policies=[], - allow_update=False, - description="VNF", - ): - 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) - - 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 - vnf_input["inputs"] = inputs - vnf_input["vm_types"] = vm_types - vnf_input["network_roles"] = network_roles - vnf_input["policies"] = policies - vnf_input["allow_update"] = allow_update - vnf_input["vnf_description"] = description - - super().__init__(vnf_input) - def _create(self, vnf_input): """Creates a vnf object in SDC""" vnf = None @@ -208,6 +169,18 @@ class VNF(Resource): for k, v in inputs.items(): self.add_input_value(k, v) + def _submit(self): + """Submits the vnf in SDC""" + certification = self.oc.sdc.vnf.certify_catalog_resource( + **self.attributes, user_remarks="Ready!" + ) + self.attributes["catalog_resource_id"] = certification.catalog_resource_id + + 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 + def _add_instance_properties(self, instance_id, properties_dict): for k, v in properties_dict.items(): # updating vm_type properties @@ -322,18 +295,6 @@ class VNF(Resource): return False - def _submit(self): - """Submits the vnf in SDC""" - certification = self.oc.sdc.vnf.certify_catalog_resource( - **self.attributes, user_remarks="Ready!" - ) - self.attributes["catalog_resource_id"] = certification.catalog_resource_id - - 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 - def add_input_value(self, input_name, input_default_value): """Updates an input value on a VNF @@ -548,24 +509,36 @@ def create_vnf(vnf_input): """ oc = Client() - kwargs = vnf_input + software_product_id = vsp.get_vsp_id(vnf_input.get("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) - category = get_resource_category(kwargs.get("vsp_category")) - vsp_sub_category = [] + 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_description"] = vnf_input.get("description") + + category = get_resource_category(vsp_category) + vsp_sub_categories = [] for subcategory in category.get("subcategories", []): - if subcategory.get("uniqueId") == kwargs.get("vsp_sub_category"): - vsp_sub_category.append(subcategory) + if subcategory.get("uniqueId").lower() == vsp_sub_category.lower(): + vsp_sub_categories.append(subcategory) break - category["subcategories"] = vsp_sub_category - kwargs["contact_id"] = vsp.get_vsp_owner(kwargs.get("software_product_id")) + category["subcategories"] = vsp_sub_categories + vnf_input["contact_id"] = vsp.get_vsp_owner(software_product_id) - vnf = oc.sdc.vnf.add_catalog_resource(**kwargs, categories=[category]) + vnf = oc.sdc.vnf.add_catalog_resource(**vnf_input, categories=[category]) - kwargs["catalog_resource_id"] = vnf.catalog_resource_id - kwargs["tosca"] = vnf.response_data + vnf_input["catalog_resource_id"] = vnf.catalog_resource_id + vnf_input["tosca"] = vnf.response_data - return kwargs + return vnf_input def instance_ids_for_property(vnf_model, property_name, property_value): @@ -657,7 +630,7 @@ 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: + if category.get("uniqueId").lower() == category_name.lower(): return category return None diff --git a/onap-client/onap_client/sdc/vsp.py b/onap-client/onap_client/sdc/vsp.py index cd478e1..de47277 100644 --- a/onap-client/onap_client/sdc/vsp.py +++ b/onap-client/onap_client/sdc/vsp.py @@ -72,64 +72,19 @@ class VSP(Resource): "allow_update": {"type": bool, "required": False, "default": False}, } - def __init__( - self, - vendor_name, - license_model_name, - file_path, - file_type, - software_product_name, - description, - category, - sub_category, - contributers=[], - allow_update=False, - owner="", - ): - self.oc = Client() - 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 - vsp_input["allow_update"] = allow_update - vsp_input["owner"] = owner - - super().__init__(vsp_input) - - def _create(self, kwargs): + def _create(self, vsp_input): """Creates a vsp object in SDC""" vsp = None - existing = get_vsp(kwargs.get("software_product_name")) + existing = get_vsp(vsp_input.get("software_product_name")) if not existing: - vsp = create_vsp(kwargs) - elif kwargs.get("allow_update"): - vsp = update_vsp(existing, kwargs) + vsp = create_vsp(vsp_input) + elif vsp_input.get("allow_update"): + vsp = update_vsp(existing, vsp_input) else: raise ResourceAlreadyExistsException( "VSP resource {} already exists".format( - kwargs.get("software_product_name") + vsp_input.get("software_product_name") ) ) @@ -199,19 +154,37 @@ def create_vsp(vsp_input): """ oc = Client() - kwargs = vsp_input - vsp = oc.sdc.vsp.add_software_product(**kwargs) + license_model_id = sdc.license_model.get_license_model_id(vsp_input.get("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" + ) - kwargs["software_product_id"] = vsp.software_product_id - kwargs["software_product_version_id"] = vsp.software_product_version_id + vsp_input["license_model_id"] = license_model_id + vsp_input["license_model_version_id"] = license_model_version_id + vsp_input["feature_group_id"] = feature_group["id"] + vsp_input["license_agreement_id"] = license_agreement["id"] - oc.sdc.vsp.upload_heat_package(**kwargs) - oc.sdc.vsp.validate_software_product(**kwargs) + vsp = oc.sdc.vsp.add_software_product(**vsp_input) - vsp = oc.sdc.vsp.get_software_product(**kwargs) - kwargs["tosca"] = vsp.response_data + vsp_input["software_product_id"] = vsp.software_product_id + vsp_input["software_product_version_id"] = vsp.software_product_version_id - return kwargs + oc.sdc.vsp.upload_heat_package(**vsp_input) + oc.sdc.vsp.validate_software_product(**vsp_input) + + vsp = oc.sdc.vsp.get_software_product(**vsp_input) + vsp_input["tosca"] = vsp.response_data + + return vsp_input def get_vsp_id(vsp_name): diff --git a/onap-client/onap_client/sdnc/preload.py b/onap-client/onap_client/sdnc/preload.py index a8e4a77..8f67feb 100644 --- a/onap-client/onap_client/sdnc/preload.py +++ b/onap-client/onap_client/sdnc/preload.py @@ -56,26 +56,6 @@ class Preload(Resource): "heat_template_name": {"type": str, "required": True}, } - def __init__( - self, - preload_path, - vnf_instance_name, - service_instance_name, - module_instance_name, - heat_template_name, - api_type, - ): - instance_input = {} - - instance_input["preload_path"] = preload_path - instance_input["vnf_instance_name"] = vnf_instance_name - instance_input["service_instance_name"] = service_instance_name - instance_input["module_instance_name"] = module_instance_name - instance_input["heat_template_name"] = heat_template_name - instance_input["api_type"] = api_type - - super().__init__(instance_input) - def _create(self, instance_input): service_instance = so.vnf_instance.get_service_instance( instance_input.get("service_instance_name") @@ -132,12 +112,6 @@ class Preload(Resource): return instance_input - def _post_create(self): - pass - - def _submit(self): - pass - def create_preload(preload_path, api_type): oc = Client() diff --git a/onap-client/onap_client/so/module_instance.py b/onap-client/onap_client/so/module_instance.py index 75105ed..51c9bc2 100644 --- a/onap-client/onap_client/so/module_instance.py +++ b/onap-client/onap_client/so/module_instance.py @@ -59,37 +59,14 @@ class ModuleInstance(Resource): "api_type": {"type": str, "required": False, "default": "GR_API"}, } - def __init__( - self, - module_instance_name, - vnf_instance_name, - service_instance_name, - requestor_id, - heat_template_name, - preload_path, - tenant_name, - cloud_owner, - cloud_region, - api_type, - ): - instance_input = {} - - tenant_id = so.service_instance.get_tenant_id(cloud_region, cloud_owner, tenant_name) - - instance_input["module_instance_name"] = module_instance_name - instance_input["vnf_instance_name"] = vnf_instance_name - instance_input["service_instance_name"] = service_instance_name - instance_input["requestor_id"] = requestor_id - instance_input["heat_template_name"] = heat_template_name - instance_input["preload_path"] = preload_path + def _create(self, instance_input): + tenant_id = so.service_instance.get_tenant_id( + instance_input.get("cloud_region"), + instance_input.get("cloud_owner"), + instance_input.get("tenant_name") + ) instance_input["tenant_id"] = tenant_id - instance_input["cloud_owner"] = cloud_owner - instance_input["cloud_region"] = cloud_region - instance_input["api_type"] = api_type - - super().__init__(instance_input) - def _create(self, instance_input): service_instance = so.vnf_instance.get_service_instance( instance_input.get("service_instance_name") ) @@ -169,24 +146,19 @@ class ModuleInstance(Resource): return create_module_instance(instance_input) - def _post_create(self): - pass - - def _submit(self): - pass - def create_module_instance(instance_input): oc = Client() - sdnc.preload.Preload( - instance_input.get("preload_path"), - instance_input.get("vnf_instance_name"), - instance_input.get("service_instance_name"), - instance_input.get("module_instance_name"), - instance_input.get("heat_template_name"), - instance_input.get("api_type") + preload = sdnc.preload.Preload( + preload_path=instance_input.get("preload_path"), + vnf_instance_name=instance_input.get("vnf_instance_name"), + service_instance_name=instance_input.get("service_instance_name"), + module_instance_name=instance_input.get("module_instance_name"), + heat_template_name=instance_input.get("heat_template_name"), + api_type=instance_input.get("api_type") ) + preload.create() headers = {"X-TransactionId": str(uuid.uuid4())} module_instance = oc.so.service_instantiation.create_module_instance( diff --git a/onap-client/onap_client/so/service_instance.py b/onap-client/onap_client/so/service_instance.py index 6398ac8..10271fa 100644 --- a/onap-client/onap_client/so/service_instance.py +++ b/onap-client/onap_client/so/service_instance.py @@ -74,43 +74,15 @@ class ServiceInstance(Resource): "owning_entity_name": {"type": str, "required": True}, } - def __init__( - self, - service_instance_name, - requestor_id, - model_name, - model_version, - tenant_name, - cloud_owner, - cloud_region, - api_type, - service_type, - customer_name, - project_name, - owning_entity_name, - ): - self.oc = Client() - - instance_input = {} - - tenant_id = get_tenant_id(cloud_region, cloud_owner, tenant_name) - - instance_input["service_instance_name"] = service_instance_name - instance_input["requestor_id"] = requestor_id - instance_input["model_name"] = model_name - instance_input["model_version"] = model_version + def _create(self, instance_input): + tenant_id = get_tenant_id( + instance_input.get("cloud_region"), + instance_input.get("cloud_owner"), + instance_input.get("tenant_name") + ) instance_input["tenant_id"] = tenant_id - instance_input["cloud_owner"] = cloud_owner - instance_input["cloud_region"] = cloud_region - instance_input["api_type"] = api_type - instance_input["service_type"] = service_type - instance_input["customer_id"] = customer_name - instance_input["project_name"] = project_name - instance_input["owning_entity_name"] = owning_entity_name - - super().__init__(instance_input) + instance_input["customer_id"] = instance_input.get("customer_name") - def _create(self, instance_input): service_model = self.oc.sdc.service.get_sdc_service( catalog_service_id=sdc.service.get_service_id( instance_input.get("model_name") @@ -128,12 +100,6 @@ class ServiceInstance(Resource): return create_service_instance(instance_input) - def _post_create(self): - pass - - def _submit(self): - pass - @utility def get_service_instance(instance_name): diff --git a/onap-client/onap_client/so/tests/test_module_instance.py b/onap-client/onap_client/so/tests/test_module_instance.py index 297fdea..e102702 100644 --- a/onap-client/onap_client/so/tests/test_module_instance.py +++ b/onap-client/onap_client/so/tests/test_module_instance.py @@ -212,16 +212,17 @@ def test_module_instance(): ) mi = ModuleInstance( - MODULE_INSTANCE_NAME, - VNF_INSTANCE_NAME, - SERVICE_INSTANCE_NAME, - "cs0008", - HEAT_TEMPLATE_NAME, - "{}/base_preload.json".format(THIS_DIR), - TENANT_NAME, - CLOUD_OWNER, - CLOUD_REGION, - "GR_API" + module_instance_name=MODULE_INSTANCE_NAME, + vnf_instance_name=VNF_INSTANCE_NAME, + service_instance_name=SERVICE_INSTANCE_NAME, + requestor_id="cs0008", + heat_template_name=HEAT_TEMPLATE_NAME, + preload_path="{}/base_preload.json".format(THIS_DIR), + tenant_name=TENANT_NAME, + cloud_owner=CLOUD_OWNER, + cloud_region=CLOUD_REGION, + api_type="GR_API" ) + mi.create() assert mi.module_instance_name == MODULE_INSTANCE_NAME diff --git a/onap-client/onap_client/so/tests/test_service_instance.py b/onap-client/onap_client/so/tests/test_service_instance.py index e0afccc..b215fbf 100644 --- a/onap-client/onap_client/so/tests/test_service_instance.py +++ b/onap-client/onap_client/so/tests/test_service_instance.py @@ -119,18 +119,19 @@ def test_service_instance(): ) si = ServiceInstance( - SERVICE_INSTANCE_NAME, - "cs0008", - SERVICE_MODEL_NAME, - "1.0", - TENANT_NAME, - CLOUD_OWNER, - CLOUD_REGION, - "GR_API", - "ONAPSERVICE", - "ONAPCUSTOMER", - "ONAPPROJECT", - OWNING_ENTITY_NAME + service_instance_name=SERVICE_INSTANCE_NAME, + requestor_id="cs0008", + model_name=SERVICE_MODEL_NAME, + model_version="1.0", + tenant_name=TENANT_NAME, + cloud_owner=CLOUD_OWNER, + cloud_region=CLOUD_REGION, + api_type="GR_API", + service_type="ONAPSERVICE", + customer_name="ONAPCUSTOMER", + project_name="ONAPPROJECT", + owning_entity_name=OWNING_ENTITY_NAME ) + si.create() assert si.service_instance_name == SERVICE_INSTANCE_NAME diff --git a/onap-client/onap_client/so/tests/test_vnf_instance.py b/onap-client/onap_client/so/tests/test_vnf_instance.py index 3805da8..cecdb39 100644 --- a/onap-client/onap_client/so/tests/test_vnf_instance.py +++ b/onap-client/onap_client/so/tests/test_vnf_instance.py @@ -159,16 +159,17 @@ def test_vnf_instance(): ) vnfi = VNFInstance( - VNF_INSTANCE_NAME, - SERVICE_INSTANCE_NAME, - "cs0008", - VNF_MODEL_NAME, - TENANT_NAME, - CLOUD_OWNER, - CLOUD_REGION, - "GR_API", - "platform", - "lob" + vnf_instance_name=VNF_INSTANCE_NAME, + service_instance_name=SERVICE_INSTANCE_NAME, + requestor_id="cs0008", + model_name=VNF_MODEL_NAME, + tenant_name=TENANT_NAME, + cloud_owner=CLOUD_OWNER, + cloud_region=CLOUD_REGION, + api_type="GR_API", + platform="platform", + line_of_business="lob" ) + vnfi.create() assert vnfi.vnf_instance_name == VNF_INSTANCE_NAME diff --git a/onap-client/onap_client/so/vnf_instance.py b/onap-client/onap_client/so/vnf_instance.py index 4d289a0..abb26c3 100644 --- a/onap-client/onap_client/so/vnf_instance.py +++ b/onap-client/onap_client/so/vnf_instance.py @@ -77,37 +77,14 @@ class VNFInstance(Resource): "line_of_business": {"type": str, "required": True}, } - def __init__( - self, - vnf_instance_name, - service_instance_name, - requestor_id, - model_name, - tenant_name, - cloud_owner, - cloud_region, - api_type, - platform, - line_of_business, - ): - instance_input = {} - - tenant_id = so.service_instance.get_tenant_id(cloud_region, cloud_owner, tenant_name) - - instance_input["vnf_instance_name"] = vnf_instance_name - instance_input["service_instance_name"] = service_instance_name - instance_input["requestor_id"] = requestor_id - instance_input["model_name"] = model_name + def _create(self, instance_input): + tenant_id = so.service_instance.get_tenant_id( + instance_input.get("cloud_region"), + instance_input.get("cloud_owner"), + instance_input.get("tenant_name") + ) instance_input["tenant_id"] = tenant_id - instance_input["cloud_owner"] = cloud_owner - instance_input["cloud_region"] = cloud_region - instance_input["api_type"] = api_type - instance_input["platform"] = platform - instance_input["line_of_business"] = line_of_business - super().__init__(instance_input) - - def _create(self, instance_input): service_instance = get_service_instance( instance_input.get("service_instance_name") ) @@ -156,12 +133,6 @@ class VNFInstance(Resource): return create_vnf_instance(instance_input) - def _post_create(self): - pass - - def _submit(self): - pass - def get_vnf_model_component(service_model_name, vnf_model_name): service_model = sdc_client.service.get_sdc_service( diff --git a/onap-client/onap_client/tests/test_resource.py b/onap-client/onap_client/tests/test_resource.py index 5b4124a..6f7a014 100644 --- a/onap-client/onap_client/tests/test_resource.py +++ b/onap-client/onap_client/tests/test_resource.py @@ -34,20 +34,16 @@ # limitations under the License. # # ============LICENSE_END============================================ - from onap_client.resource import Resource -from onap_client.lib import generate_dummy_string, generate_dummy_date class TestResource(Resource): - def __init__(self, test_param): - test_input = {} - - test_input["param1"] = test_param - test_input["param2"] = generate_dummy_string() - test_input["param3"] = generate_dummy_date() - - super().__init__(test_input) + spec = { + "param1": { + "type": str, + "required": True, + }, + } def _create(self, create_input): return create_input @@ -62,7 +58,7 @@ class TestResource(Resource): def test_resource(): test_param = "abc" - r = TestResource(test_param) - r.print() + r = TestResource(param1=test_param) + r.create() assert hasattr(r, "param1") and r.param1 == test_param diff --git a/onap-client/onap_client/tests/testdata.py b/onap-client/onap_client/tests/testdata.py index c5cb235..14f15c7 100644 --- a/onap-client/onap_client/tests/testdata.py +++ b/onap-client/onap_client/tests/testdata.py @@ -70,14 +70,6 @@ class TestResource(Resource): }, } - def __init__(self, test1, test2): - instance_input = {} - - instance_input["test1"] = test1 - instance_input["test2"] = test2 - - super().__init__(instance_input) - def _create(self, instance_input): print("creating test instance {}".format(instance_input)) diff --git a/onap-client/setup.py b/onap-client/setup.py index bf1caaa..a9adbb4 100644 --- a/onap-client/setup.py +++ b/onap-client/setup.py @@ -47,7 +47,7 @@ for file in os.listdir("etc/payloads"): setuptools.setup( name="onap-client", - version="0.7.1", + version="0.8.0", author="Steven Stark", author_email="steven.stark@att.com", description="Python API wrapper for ONAP applications", -- cgit 1.2.3-korg