aboutsummaryrefslogtreecommitdiffstats
path: root/src/onapsdk/so/modification.py
blob: 0eb725ebbf4c57d7171f714c36cc956ddfe473a9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
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"])