aboutsummaryrefslogtreecommitdiffstats
path: root/src/onapsdk
diff options
context:
space:
mode:
authorpeukerl@telekom.de <peukerl@telekom.de>2023-06-16 09:05:05 +0200
committerpeukerl@telekom.de <peukerl@telekom.de>2023-06-19 11:02:25 +0200
commitbb7533ad0175979f893724eed272148ff65f438c (patch)
tree6de9e642b0366d7f86d9556b3c2585a0480e163d /src/onapsdk
parenta13ff9ac968ddced994205539a494ecbdb2d6b34 (diff)
pnf-functionalities added, parameters for service-instantiation added
Issue-ID: INT-2250 Signed-off-by: peukerl@telekom.de <peukerl@telekom.de> Change-Id: I71d7ea0e05be0571a195c093a59fe3d08a138493
Diffstat (limited to 'src/onapsdk')
-rw-r--r--src/onapsdk/aai/business/pnf.py18
-rw-r--r--src/onapsdk/so/deletion.py31
-rw-r--r--src/onapsdk/so/instantiation.py28
-rw-r--r--src/onapsdk/so/templates/deletion_pnf.json.j227
-rwxr-xr-xsrc/onapsdk/so/templates/instantiate_pnf_macro_so_pnf.json.j213
-rw-r--r--src/onapsdk/so/templates/instantiate_service_macro.json.j210
6 files changed, 118 insertions, 9 deletions
diff --git a/src/onapsdk/aai/business/pnf.py b/src/onapsdk/aai/business/pnf.py
index 9061ebf..9f5394f 100644
--- a/src/onapsdk/aai/business/pnf.py
+++ b/src/onapsdk/aai/business/pnf.py
@@ -16,6 +16,7 @@
from typing import Iterator, Optional, TYPE_CHECKING
from onapsdk.exceptions import ResourceNotFound
+from onapsdk.so.deletion import PnfDeletionRequest
from .instance import Instance
if TYPE_CHECKING:
@@ -254,14 +255,17 @@ class PnfInstance(Instance): # pylint: disable=too-many-instance-attributes
pnf_ipv4_address=api_response.get("pnf-ipv4-address"),
pnf_ipv6_address=api_response.get("pnf-ipv6-address"))
- def delete(self, a_la_carte: bool = True) -> None:
- """Delete Pnf instance.
+ def delete(self, a_la_carte: bool = True) -> "PnfDeletionRequest":
+ """Create PNF deletion request.
- PNF deletion it's just A&AI resource deletion. That's difference between another instances.
- You don't have to wait for that task finish, because it's not async task.
+ Send request to delete PNF instance
+
+ Args:
+ a_la_carte (boolean): deletion mode
+
+ Returns:
+ PnfDeletionRequest: Deletion request
"""
self._logger.debug("Delete %s pnf", self.pnf_name)
- self.send_message("DELETE",
- f"Delete {self.pnf_name} PNF",
- f"{self.url}?resource-version={self.resource_version}")
+ return PnfDeletionRequest.send_request(self, a_la_carte)
diff --git a/src/onapsdk/so/deletion.py b/src/onapsdk/so/deletion.py
index 35ff0ee..5b299f8 100644
--- a/src/onapsdk/so/deletion.py
+++ b/src/onapsdk/so/deletion.py
@@ -102,6 +102,37 @@ class VnfDeletionRequest(DeletionRequest): # pytest: disable=too-many-ancestors
headers=headers_so_creator(OnapService.headers))
return cls(request_id=response["requestReferences"]["requestId"])
+class PnfDeletionRequest(DeletionRequest): # pytest: disable=too-many-ancestors
+ """PNF deletion class."""
+
+ @classmethod
+ def send_request(cls,
+ instance: "PnfInstance",
+ a_la_carte: bool = True) -> "PnfDeletionRequest":
+ """Send request to SO to delete PNF instance.
+
+ Args:
+ instance (PnfInstance): PNF instance to delete
+ a_la_carte (boolean): deletion mode
+
+ Returns:
+ PnfDeletionRequest: Deletion request object
+
+ """
+ cls._logger.debug("PNF %s deletion request", instance.pnf_id)
+ response = cls.send_message_json("DELETE",
+ f"Create {instance.pnf_id} PNF deletion request",
+ (f"{cls.base_url}/onap/so/infra/"
+ f"serviceInstantiation/{cls.api_version}/"
+ "serviceInstances/"
+ f"{instance.service_instance.instance_id}/"
+ f"pnfs/{instance.pnf_id}"),
+ data=jinja_env().
+ get_template("deletion_pnf.json.j2").
+ render(pnf_instance=instance,
+ a_la_carte=a_la_carte),
+ headers=headers_so_creator(OnapService.headers))
+ return cls(request_id=response["requestReferences"]["requestId"])
class ServiceDeletionRequest(DeletionRequest): # pytest: disable=too-many-ancestors
"""Service deletion request class."""
diff --git a/src/onapsdk/so/instantiation.py b/src/onapsdk/so/instantiation.py
index 8130b00..a6781de 100644
--- a/src/onapsdk/so/instantiation.py
+++ b/src/onapsdk/so/instantiation.py
@@ -97,6 +97,7 @@ class SoServiceVnf(SoServiceXnf):
class SoServicePnf(SoServiceXnf):
"""Class to store a Pnf instance parameters."""
+ registration_parameters: Optional["PnfRegistrationParameters"] = None
@dataclass
class SoService:
@@ -109,6 +110,7 @@ class SoService:
subscription_service_type: str
vnfs: List[SoServiceVnf] = field(default_factory=list)
pnfs: List[SoServicePnf] = field(default_factory=list)
+ parameters: Dict[str, Any] = field(default_factory=dict)
instance_name: Optional[str] = None
@classmethod
@@ -149,6 +151,32 @@ class VfmoduleParameters:
@dataclass
+class PnfRegistrationParameters:
+ """Class to store parameters required for pnf-instantiation without pnf-registration-event.
+
+ Contains required parameters for instantiation request
+ """
+
+ model_number: str
+ oam_v4_ip_address: str
+ oam_v6_ip_address: str
+ serial_number: str
+ software_version: str
+ unit_type: str
+ vendor_name: str
+
+ @classmethod
+ def load(cls, data: Dict[str, Any]) -> "PnfRegistrationParameters":
+ """Create a PnfRegistrationParameters object from the dict.
+
+ Returns:
+ PnfRegistrationParameters: PnfRegistrationParameters object created from the dictionary
+
+ """
+ return from_dict(data_class=cls, data=data)
+
+
+@dataclass
class InstantiationParameter:
"""Class to store instantiation parameters used for preload or macro instantiation.
diff --git a/src/onapsdk/so/templates/deletion_pnf.json.j2 b/src/onapsdk/so/templates/deletion_pnf.json.j2
new file mode 100644
index 0000000..852432a
--- /dev/null
+++ b/src/onapsdk/so/templates/deletion_pnf.json.j2
@@ -0,0 +1,27 @@
+{
+ "requestDetails": {
+ "requestInfo": {
+ "source": "VID",
+ "requestorId": "demo"
+ },
+ "modelInfo": {
+ "modelType": "pnf",
+ "modelName": "{{ pnf_instance.pnf.model_name }}",
+ "modelInvariantId": "{{ pnf_instance.pnf.model_invariant_id }}",
+ "modelVersion": "{{ pnf_instance.pnf.model_version }}",
+ "modelVersionId": "{{ pnf_instance.pnf.model_version_id }}",
+ "modelCustomizationId": "{{ pnf_instance.pnf.model_customization_id }}",
+ "modelCustomizationName": "{{ pnf_instance.pnf.name }}"
+ },
+ "requestParameters": {
+ "testApi": "GR_API",
+ "aLaCarte": {{ a_la_carte | tojson }}
+ },
+ {# the code below is needed to be refactored #
+ }
+ {# https: //gitlab.com/Orange-OpenSource/lfn/onap/python-onapsdk/-/issues/133 #} "cloudConfiguration": { "cloudOwner": "{{ pnf_instance.service_instance.service_subscription.cloud_region.cloud_owner }}",
+ "lcpCloudRegionId": "{{ pnf_instance.service_instance.service_subscription.cloud_region.cloud_region_id }}",
+ "tenantId": "{{ pnf_instance.service_instance.service_subscription.tenant.tenant_id }}"
+ }
+ }
+} \ No newline at end of file
diff --git a/src/onapsdk/so/templates/instantiate_pnf_macro_so_pnf.json.j2 b/src/onapsdk/so/templates/instantiate_pnf_macro_so_pnf.json.j2
index a6571bd..5f1f22c 100755
--- a/src/onapsdk/so/templates/instantiate_pnf_macro_so_pnf.json.j2
+++ b/src/onapsdk/so/templates/instantiate_pnf_macro_so_pnf.json.j2
@@ -64,6 +64,17 @@
"lineOfBusiness": {
"lineOfBusinessName": "{{ line_of_business }}"
},
+ {% if so_pnf.registration_parameters %}
+ "pnfRegistrationFields": {
+ "modelNumber": "{{ so_pnf.registration_parameters.model_number }}",
+ "oamV4IpAddress": "{{ so_pnf.registration_parameters.oam_v4_ip_address }}",
+ "oamV6IpAddress": "{{ so_pnf.registration_parameters.oam_v6_ip_address }}",
+ "serialNumber": "{{ so_pnf.registration_parameters.serial_number }}",
+ "softwareVersion": "{{ so_pnf.registration_parameters.software_version }}",
+ "unitType": "{{ so_pnf.registration_parameters.unit_type }}",
+ "vendorName": "{{ so_pnf.registration_parameters.vendor_name }}"
+ },
+ {% endif %}
"productFamilyId": "1234",
"instanceName": "{{ instance_name }}",
"instanceParams": [
@@ -72,7 +83,7 @@
"{{ key }}": "{{ value }}"{% if not loop.last %},{% endif %}
{% endfor %}
}
- ],
+ ]
}
]
{% endblock %}
diff --git a/src/onapsdk/so/templates/instantiate_service_macro.json.j2 b/src/onapsdk/so/templates/instantiate_service_macro.json.j2
index 43b92ee..b00a043 100644
--- a/src/onapsdk/so/templates/instantiate_service_macro.json.j2
+++ b/src/onapsdk/so/templates/instantiate_service_macro.json.j2
@@ -44,7 +44,15 @@
{% endif %}
{
"service": {
- "instanceParams": [],
+ "instanceParams": [
+ {% if so_service %}
+ {
+ {% for key, value in so_service.parameters.items() %}
+ "{{ key }}": "{{ value }}"{% if not loop.last %},{% endif %}
+ {% endfor %}
+ }
+ {% endif %}
+ ],
"instanceName": "{{ service_instance_name }}",
"resources": {
{% block pnfs %}