diff options
Diffstat (limited to 'src/onapsdk/so/modification.py')
-rw-r--r-- | src/onapsdk/so/modification.py | 70 |
1 files changed, 70 insertions, 0 deletions
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"]) |