From a02a458f87329d4d5240b98fdc35f603077948e7 Mon Sep 17 00:00:00 2001 From: sheetal ghadge Date: Tue, 17 Oct 2023 14:44:49 +0530 Subject: modify pnf in service(so) patch update Issue-ID: TEST-410 Change-Id: I3488088b2068ca084cedd705627b5c454bfb8cae Signed-off-by: sheetal ghadge --- src/onapsdk/so/modification.py | 70 +++++++++++++++++++++ src/onapsdk/so/templates/modify_pnf.json.j2 | 94 +++++++++++++++++++++++++++++ 2 files changed, 164 insertions(+) create mode 100644 src/onapsdk/so/modification.py create mode 100644 src/onapsdk/so/templates/modify_pnf.json.j2 (limited to 'src/onapsdk') diff --git a/src/onapsdk/so/modification.py b/src/onapsdk/so/modification.py new file mode 100644 index 0000000..0eb725e --- /dev/null +++ b/src/onapsdk/so/modification.py @@ -0,0 +1,70 @@ +"""Modification of the PNF module.""" + +from abc import ABC +from typing import TYPE_CHECKING +from onapsdk.aai.business.owning_entity import OwningEntity +from onapsdk.onap_service import OnapService +from onapsdk.so.so_element import OrchestrationRequest +from onapsdk.utils.headers_creator import headers_so_creator +from onapsdk.utils.jinja import jinja_env +from onapsdk.configuration import settings + +if TYPE_CHECKING: + from onapsdk.aai.business.service import ServiceInstance + from onapsdk.aai.business import PnfInstance as Pnf + + +class PnfModificationRequest(OrchestrationRequest, ABC): + """PNF Modification class.""" + + @classmethod + def send_request(cls, + pnf_object: "Pnf", + sdc_service: "Service", + aai_service_instance: "ServiceInstance") -> "PnfModificationRequest": + """Send request to SO to modify PNF instance. + + Args: + pnf_object: pnf object for pnf id + sdc_service: service for modify pnf + aai_service_instance: Service object from aai sdc + + Returns: + PnfModificationRequest: modify request object + + """ + owning_entity_id = None + project = settings.PROJECT + line_of_business = settings.LOB + platform = settings.PLATFORM + + for rel in aai_service_instance.relationships: + if rel.related_to == "owning-entity": + owning_entity_id = rel.relationship_data.pop().get("relationship-value") + if rel.related_to == "project": + project = rel.relationship_data.pop().get("relationship-value") + + owning_entity = OwningEntity.get_by_owning_entity_id( + owning_entity_id=owning_entity_id) + + cls._logger.debug("PNF %s modify request", pnf_object.pnf_id) + response = cls.send_message_json("PUT", + f"Create {pnf_object.pnf_id} PNF modification request", + (f"{cls.base_url}/onap/so/infra/" + f"serviceInstantiation/{cls.api_version}/" + "serviceInstances/" + f"{aai_service_instance.instance_id}/" + f"pnfs/{pnf_object.pnf_id}"), + data=jinja_env(). + get_template("modify_pnf.json.j2"). + render( + platform_name=platform, + service=sdc_service, + project=project, + owning_entity=owning_entity, + line_of_business=line_of_business, + service_instance=aai_service_instance + ), + headers=headers_so_creator(OnapService.headers)) + + return cls(request_id=response["requestReferences"]["requestId"]) diff --git a/src/onapsdk/so/templates/modify_pnf.json.j2 b/src/onapsdk/so/templates/modify_pnf.json.j2 new file mode 100644 index 0000000..898e549 --- /dev/null +++ b/src/onapsdk/so/templates/modify_pnf.json.j2 @@ -0,0 +1,94 @@ +{ + "requestDetails": { + "modelInfo": { + "modelInvariantId": "{{ service.unique_uuid }}", + "modelType": "service", + "modelName": "{{ service.name }}", + "modelVersion": "1.0", + "modelVersionId": "{{ service.identifier }}", + "modelUuid": "{{ service.identifier }}" + }, + "requestInfo": { + "productFamilyId": "5G", + "source": "VID", + "instanceName": "{{ service_instance.instance_name }}", + "suppressRollback": false, + "requestorId": "NBI" + }, + "subscriberInfo": { + "globalSubscriberId": "{{ service_instance.service_subscription.customer.global_customer_id }}" + }, + "requestParameters": { + "subscriptionServiceType": "{{ service.name }}", + "userParams": [ + { + "service": { + "modelInfo": { + "modelVersionId": "{{ service.identifier }}", + "modelName": "{{ service.name }}", + "modelType": "service" + }, + "instanceName": "{{ service_instance.instance_name }}", + "instanceParams": [], + "resources": { + {% block pnfs %} + {% if service.pnfs %} + "pnfs": [ + {% for pnf in service.pnfs %} + { + "modelInfo": { + "modelType": "pnf", + "modelInvariantId": "{{ pnf.model_invariant_id }}", + "modelVersionId": "{{ pnf.model_version_id }}", + "modelName": "{{ service.name }}", + "modelVersion": "1.0", + "modelCustomizationId": "{{ pnf.model_customization_id }}", + "modelCustomizationName": "{{ pnf.name }}" + }, + "platform": { + "platformName": "{{ platform_name }}" + }, + "lineOfBusiness": { + "lineOfBusinessName": "{{ line_of_business }}" + }, + "pnfRegistrationFields": { + "modelNumber": "Simulated Device Melacon", + "oamV4IpAddress": "10.42.6.245", + "oamV6IpAddress": "0:0:0:0:0:ffff:a0a:011", + "serialNumber": "ORAN_SIM-172.30.1.6-400600927-Simulated Device Melacon", + "softwareVersion": "2.3.5", + "unitType": "ntsim_oran", + "vendorName": "Melacon" + }, + "productFamilyId": "5G", + "instanceParams": [ + { + "text": "test-pnf-level" + } + ], + "instanceName": "{{ service_instance.instance_name }}", + "processingPriority": 1 + } + {% endfor %} + ] + {% endif %} + {% endblock %} + } + } + }, + { + "Homing_Solution": "none" + } + ], + "aLaCarte": false, + "usePreload": false + }, + "project": { + "projectName": "{{ project }}" + }, + "owningEntity": { + "owningEntityId": "{{ owning_entity.owning_entity_id }}", + "owningEntityName": "{{ owning_entity.name }}" + } + } +} -- cgit 1.2.3-korg