aboutsummaryrefslogtreecommitdiffstats
path: root/src/onapsdk
diff options
context:
space:
mode:
authorAbhishek Patil <abhishek.patil@t-systems.com>2023-07-27 16:32:17 +0530
committerAbhishek Patil <abhishek.patil@t-systems.com>2023-07-27 19:17:15 +0530
commit3d3d3574f1012a7faa6cf86d55884cf0884decbf (patch)
tree2e74807f6258f496cd02ef0d9ca3915a23294953 /src/onapsdk
parent48f63ef8e43f789cc6d364d387df289094edfc25 (diff)
ONAP SDK to add new PNF functionality
Issue-ID: TEST-401 Change-Id: Ib603b9aaad43bb8c55ff5c2c23cd9a1a36475de9 Signed-off-by: Abhishek Patil <abhishek.patil@t-systems.com>
Diffstat (limited to 'src/onapsdk')
-rw-r--r--src/onapsdk/aai/business/service.py45
-rw-r--r--src/onapsdk/so/instantiation.py16
-rw-r--r--src/onapsdk/so/templates/deletion_pnf.json.j26
-rwxr-xr-xsrc/onapsdk/so/templates/instantiate_pnf_macro.json.j210
-rw-r--r--src/onapsdk/so/templates/instantiate_pnf_macro_in_service.json.j2109
-rwxr-xr-xsrc/onapsdk/so/templates/instantiate_pnf_macro_so_pnf.json.j210
-rw-r--r--src/onapsdk/so/templates/instantiate_service_macro_skip_pnf_registration_event.json.j2181
7 files changed, 342 insertions, 35 deletions
diff --git a/src/onapsdk/aai/business/service.py b/src/onapsdk/aai/business/service.py
index fe3b34d..4351a26 100644
--- a/src/onapsdk/aai/business/service.py
+++ b/src/onapsdk/aai/business/service.py
@@ -18,7 +18,7 @@ from typing import Iterator, Type, Union, Iterable, Optional
from onapsdk.exceptions import StatusError, ParameterError
from onapsdk.sdc.service import Service
from onapsdk.so.deletion import ServiceDeletionRequest
-from onapsdk.so.instantiation import NetworkInstantiation, VnfInstantiation
+from onapsdk.so.instantiation import NetworkInstantiation, VnfInstantiation, PnfInstantiation
from onapsdk.utils.jinja import jinja_env
from .instance import Instance
@@ -417,6 +417,49 @@ class ServiceInstance(Instance): # pylint: disable=too-many-instance-attributes
sdc_service=self.sdc_service
)
+ def add_pnf(self, # pylint: disable=too-many-arguments
+ pnf: "Pnf",
+ line_of_business: "LineOfBusiness",
+ platform: "Platform",
+ pnf_instance_name: str = None,
+ customer: "Customer" = None,
+ service_subscription: "ServiceSubscription" = None,
+ sdc_service: "SdcService" = None,
+ ) -> "PnfInstantiation":
+ """Add pnf into service instance.
+
+ Instantiate PNF.
+
+ Args:
+ pnf (Pnf): Pnf from service configuration to instantiate
+ line_of_business (LineOfBusiness): LineOfBusiness to use in instantiation request
+ platform (Platform): Platform to use in instantiation request
+ customer (Customer): Customer to use in instantiation request
+ service_subscription(ServiceSubscription): ServiceSubscription
+ pnf_instance_name (str): PNF instantiation name
+ sdc_service (SdcService): service model from sdc
+
+ Raises:
+ StatusError: Service orchestration status is not "Active".
+
+ Returns:
+ PnfInstantiation: PnfInstantiation request object
+
+ """
+ if not self.active:
+ raise StatusError('Service orchestration status must be "Active"')
+
+ return PnfInstantiation.instantiate_macro(
+ self,
+ pnf,
+ line_of_business,
+ customer,
+ service_subscription,
+ platform,
+ pnf_instance_name,
+ sdc_service
+ )
+
def add_network(self, # pylint: disable=too-many-arguments
network: "Network",
line_of_business: "LineOfBusiness",
diff --git a/src/onapsdk/so/instantiation.py b/src/onapsdk/so/instantiation.py
index a6781de..2ca25c2 100644
--- a/src/onapsdk/so/instantiation.py
+++ b/src/onapsdk/so/instantiation.py
@@ -789,8 +789,6 @@ class PnfInstantiation(NodeTemplateInstantiation): # pylint: disable=too-many-a
pnf_object: "Pnf",
line_of_business: str,
platform: str,
- cloud_region: "CloudRegion",
- tenant: "Tenant",
sdc_service: "SdcService",
pnf_instance_name: str = None,
pnf_parameters: Iterable["InstantiationParameter"] = None,
@@ -803,8 +801,7 @@ class PnfInstantiation(NodeTemplateInstantiation): # pylint: disable=too-many-a
pnf_object (Pnf): Pnf to instantiate
line_of_business (LineOfBusiness): LineOfBusiness to use in instantiation request
platform (Platform): Platform to use in instantiation request
- cloud_region (CloudRegion): Cloud region to use in instantiation request.
- tenant (Tenant): Tenant to use in instantiation request.
+ sdc_service(SdcService): service model to instantiate
pnf_instance_name (str, optional): Pnf instance name. Defaults to None.
pnf_parameters (Iterable[InstantiationParameter], optional): Instantiation parameters
that are sent in the request. Defaults to None
@@ -847,9 +844,6 @@ class PnfInstantiation(NodeTemplateInstantiation): # pylint: disable=too-many-a
instance_name=pnf_instance_name,
pnf=pnf_object,
service=sdc_service,
- cloud_region=cloud_region or \
- next(aai_service_instance.service_subscription.cloud_regions),
- tenant=tenant or next(aai_service_instance.service_subscription.tenants),
project=project,
owning_entity=owning_entity,
line_of_business=line_of_business,
@@ -989,7 +983,8 @@ class ServiceInstantiation(Instantiation): # pylint: disable=too-many-ancestors
vnf_parameters: Iterable["VnfParameters"] = None,
enable_multicloud: bool = False,
so_service: "SoService" = None,
- service_subscription: "ServiceSubscription" = None
+ service_subscription: "ServiceSubscription" = None,
+ skip_pnf_registration_event: "skip_event" = False
) -> "ServiceInstantiation":
"""Instantiate service using SO macro request.
@@ -1012,6 +1007,8 @@ class ServiceInstantiation(Instantiation): # pylint: disable=too-many-ancestors
so_service (SoService, optional): SO values to use in instantiation request
service_subscription(ServiceSubscription, optional): Customer service subscription
for the instantiated service. Required if so_service is not provided.
+ skip_pnf_registration_event(skip_event, optional) Required to skip
+ WaitForPnfReadyEvent.
Raises:
StatusError: if a service is not distributed.
@@ -1035,6 +1032,9 @@ class ServiceInstantiation(Instantiation): # pylint: disable=too-many-ancestors
msg = f"Service {sdc_service.name} is not distributed."
raise StatusError(msg)
+ if skip_pnf_registration_event:
+ template_file = "instantiate_service_macro_skip_pnf_registration_event.json.j2"
+
response: dict = cls.send_message_json(
"POST",
f"Instantiate {sdc_service.name} service macro",
diff --git a/src/onapsdk/so/templates/deletion_pnf.json.j2 b/src/onapsdk/so/templates/deletion_pnf.json.j2
index 852432a..4e8770d 100644
--- a/src/onapsdk/so/templates/deletion_pnf.json.j2
+++ b/src/onapsdk/so/templates/deletion_pnf.json.j2
@@ -16,12 +16,6 @@
"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.json.j2 b/src/onapsdk/so/templates/instantiate_pnf_macro.json.j2
index 6abfe84..1f9b3a2 100755
--- a/src/onapsdk/so/templates/instantiate_pnf_macro.json.j2
+++ b/src/onapsdk/so/templates/instantiate_pnf_macro.json.j2
@@ -16,11 +16,6 @@
"modelCustomizationId": "{{ pnf.model_customization_id }}",
"modelInstanceName": "{{ pnf.name }}"
},
- "cloudConfiguration": {
- "tenantId": "{{ tenant.tenant_id }}",
- "cloudOwner": "{{ cloud_region.cloud_owner }}",
- "lcpCloudRegionId": "{{ cloud_region.cloud_region_id }}"
- },
"platform": {
"platformName": "{{ platform }}"
},
@@ -53,11 +48,6 @@
"modelCustomizationId": "{{ pnf.model_customization_id }}",
"modelInstanceName": "{{ pnf.name }}"
},
- "cloudConfiguration": {
- "tenantId": "{{ tenant.tenant_id }}",
- "cloudOwner": "{{ cloud_region.cloud_owner }}",
- "lcpCloudRegionId": "{{ cloud_region.cloud_region_id }}"
- },
"platform": {
"platformName": "{{ platform }}"
},
diff --git a/src/onapsdk/so/templates/instantiate_pnf_macro_in_service.json.j2 b/src/onapsdk/so/templates/instantiate_pnf_macro_in_service.json.j2
new file mode 100644
index 0000000..b38c985
--- /dev/null
+++ b/src/onapsdk/so/templates/instantiate_pnf_macro_in_service.json.j2
@@ -0,0 +1,109 @@
+instantiate_service_macro_skip_pnf_registration_event.json.j2{
+ "requestDetails": {
+ "requestInfo": {
+ "instanceName": "{{ service_instance.instance_name }}",
+ "source": "VID",
+ "suppressRollback": false,
+ "requestorId": "demo",
+ "productFamilyId": "1234"
+ },
+ "modelInfo": {
+ "modelType": "pnf",
+ "modelInvariantId": "{{ pnf.model_invariant_id }}",
+ "modelVersionId": "{{ pnf.model_version_id }}",
+ "modelName": "{{ pnf.model_name }}",
+ "modelVersion": "{{ pnf.model_version }}",
+ "modelCustomizationId": "{{ pnf.model_customization_id }}",
+ "modelInstanceName": "{{ pnf.name }}"
+ },
+ "platform": {
+ "platformName": "{{ platform }}"
+ },
+ "lineOfBusiness": {
+ "lineOfBusinessName": "{{ line_of_business }}"
+ },
+ "subscriberInfo": {
+ "globalSubscriberId": "{{ service_instance.service_subscription.customer.global_customer_id }}"
+ },
+ "requestParameters": {
+ {% block subscriptionServiceType %}
+ "subscriptionServiceType": "{{ service.name }}",
+ {% endblock %}
+ "userParams": [
+ {
+ "Homing_Solution": "none"
+ },
+ {
+ "service": {
+ "instanceParams": [],
+ "resources": {
+ {% block pnfs %}
+ "pnfs": [
+ {
+ "modelInfo": {
+ "modelName": "{{ pnf.model_name }}",
+ "modelVersionId": "{{ pnf.model_version_id }}",
+ "modelInvariantUuid": "{{ pnf.model_invariant_id }}",
+ "modelVersion": "{{ pnf.model_version }}",
+ "modelCustomizationId": "{{ pnf.model_customization_id }}",
+ "modelInstanceName": "{{ pnf.name }}"
+ },
+ "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"
+ },
+ "platform": {
+ "platformName": "{{ platform }}"
+ },
+ "lineOfBusiness": {
+ "lineOfBusinessName": "{{ line_of_business }}"
+ },
+ "productFamilyId": "1234",
+ "instanceName": "{{ instance_name }}"
+ }
+ ]
+ {% endblock %}
+ },
+ "modelInfo": {
+ "modelType": "pnf",
+ "modelInvariantId": "{{ pnf.model_invariant_id }}",
+ "modelVersionId": "{{ pnf.model_version_id }}",
+ "modelName": "{{ pnf.model_name }}",
+ "modelVersion": "{{ pnf.model_version }}",
+ "modelCustomizationId": "{{ pnf.model_customization_id }}",
+ "modelCustomizationName": "{{ pnf.name }}"
+ }
+ }
+ }
+ ],
+ "aLaCarte": false
+ },
+ "project": {
+ "projectName": "{{ project }}"
+ },
+ "owningEntity": {
+ "owningEntityId": "{{ owning_entity.owning_entity_id }}",
+ "owningEntityName": "{{ owning_entity.name }}"
+ },
+ "relatedInstanceList": [
+ {
+ "relatedInstance": {
+ "instanceId": "{{ service_instance.instance_id }}",
+ "modelInfo": {
+ "modelType": "service",
+ "modelInvariantId": "{{ service.unique_uuid }}",
+ "modelVersionId": "{{ service.identifier }}",
+ "modelName": "{{ service.name }}",
+ "modelVersion": "1.0"
+ }
+ }
+ }
+ ]
+ },
+ "serviceInstanceId": "{{ service_instance.instance_id }}"
+}
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 5f1f22c..630d95e 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
@@ -16,11 +16,6 @@
"modelCustomizationId": "{{ pnf.model_customization_id }}",
"modelInstanceName": "{{ pnf.name }}"
},
- "cloudConfiguration": {
- "tenantId": "{{ tenant.tenant_id }}",
- "cloudOwner": "{{ cloud_region.cloud_owner }}",
- "lcpCloudRegionId": "{{ cloud_region.cloud_region_id }}"
- },
"platform": {
"platformName": "{{ platform }}"
},
@@ -53,11 +48,6 @@
"modelCustomizationId": "{{ pnf.model_customization_id }}",
"modelInstanceName": "{{ pnf.name }}"
},
- "cloudConfiguration": {
- "tenantId": "{{ tenant.tenant_id }}",
- "cloudOwner": "{{ cloud_region.cloud_owner }}",
- "lcpCloudRegionId": "{{ cloud_region.cloud_region_id }}"
- },
"platform": {
"platformName": "{{ platform }}"
},
diff --git a/src/onapsdk/so/templates/instantiate_service_macro_skip_pnf_registration_event.json.j2 b/src/onapsdk/so/templates/instantiate_service_macro_skip_pnf_registration_event.json.j2
new file mode 100644
index 0000000..caa0ab4
--- /dev/null
+++ b/src/onapsdk/so/templates/instantiate_service_macro_skip_pnf_registration_event.json.j2
@@ -0,0 +1,181 @@
+{
+ "requestDetails": {
+ "requestInfo": {
+ "suppressRollback": false,
+ {% if aai_service %}
+ "productFamilyId":"{{ aai_service.service_id }}",
+ {% else %}
+ "productFamilyId": "1234",
+ {% endif %}
+ "requestorId": "demo",
+ "instanceName": "{{ service_instance_name }}",
+ "source": "VID"
+ },
+ "modelInfo": {
+ "modelType": "service",
+ "modelInvariantId": "{{ sdc_service.unique_uuid }}",
+ "modelVersionId": "{{ sdc_service.identifier }}",
+ "modelName": "{{ sdc_service.name }}",
+ "modelVersion": "1.0"
+ },
+ {% if sdc_service.has_vnfs %}
+ "cloudConfiguration": {
+ "tenantId": "{{ tenant.tenant_id }}",
+ "cloudOwner": "{{ cloud_region.cloud_owner }}",
+ "lcpCloudRegionId": "{{ cloud_region.cloud_region_id }}"
+ },
+ {% endif %}
+ "subscriberInfo": {
+ "globalSubscriberId": "{{ customer.global_customer_id }}"
+ },
+ "requestParameters": {
+ {% block subscriptionServiceType %}
+ "subscriptionServiceType": "{{ service_subscription.service_type }}",
+ {% endblock %}
+ "userParams": [
+ {
+ "Homing_Solution": "none"
+ },
+ {% if enable_multicloud %}
+ {
+ "name":"orchestrator",
+ "value":"multicloud"
+ },
+ {% endif %}
+ {
+ "service": {
+ "instanceParams": [],
+ "instanceName": "{{ service_instance_name }}",
+ "resources": {
+ {% block pnfs %}
+ {% if sdc_service.pnfs %}
+ "pnfs":[
+ {% for pnf in sdc_service.pnfs %}
+ {
+ "modelInfo":{
+ "modelCustomizationName":"{{ pnf.name }}",
+ "modelCustomizationId":"{{ pnf.model_customization_id }}",
+ "modelInvariantId":"{{ sdc_service.unique_uuid }}",
+ "modelVersionId":"{{ sdc_service.identifier }}",
+ "modelName":"{{ sdc_service.name }}",
+ "modelType":"pnf",
+ "modelVersion":"1.0"
+ },"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"
+ },
+ "platform":{
+ "platformName":"{{ platform }}"
+ },
+ "lineOfBusiness":{
+ "lineOfBusinessName":"{{ line_of_business }}"
+ },
+ "productFamilyId":"{{ aai_service.service_id }}",
+ "instanceParams":[],
+ "instanceName":"{{ service_instance_name }}"
+ }{% if not loop.last %},{% endif %}
+ {% endfor %}
+ ]
+ {% if sdc_service.vnfs %},{% endif %}
+ {% endif %}
+ {% endblock %}
+ {% block vnfs %}
+ {% if sdc_service.vnfs %}
+ "vnfs": [
+ {% for vnf in sdc_service.vnfs %}
+ {
+ "modelInfo": {
+ "modelName": "{{ vnf.model_name }}",
+ "modelVersionId": "{{ vnf.model_version_id }}",
+ "modelInvariantUuid": "{{ vnf.model_invariant_id }}",
+ "modelVersion": "{{ vnf.model_version }}",
+ "modelCustomizationId": "{{ vnf.model_customization_id }}",
+ "modelInstanceName": "{{ vnf.model_name }}"
+ },
+ "cloudConfiguration": {
+ "tenantId": "{{ tenant.tenant_id }}",
+ "cloudOwner": "{{ cloud_region.cloud_owner }}",
+ "lcpCloudRegionId": "{{ cloud_region.cloud_region_id }}"
+ },
+ "platform": {
+ "platformName": "{{ platform }}"
+ },
+ "lineOfBusiness": {
+ "lineOfBusinessName": "{{ line_of_business }}"
+ },
+ "productFamilyId": "1234",
+ "instanceName": "{{ vnf.model_name }}",
+ "instanceParams": [
+ {
+ {% for vnf_parameter in vnf_parameters %}
+ {% if vnf_parameter.name == vnf.model_name %}
+ {% for parameter in vnf_parameter.vnf_parameters %}
+ "{{ parameter.name }}": "{{ parameter.value }}"{% if not loop.last %},{% endif %}
+ {% endfor %}
+ {% endif %}
+ {% endfor %}
+ }
+ ],
+ "vfModules": [
+ {% for vf_module in vnf.vf_modules %}
+ {
+ "modelInfo": {
+ "modelName": "{{ vf_module.model_name }}",
+ "modelVersionId": "{{ vf_module.model_version_id }}",
+ "modelInvariantUuid": "{{ vf_module.model_invariant_uuid }}",
+ "modelVersion": "{{ vf_module.model_version }}",
+ "modelCustomizationId": "{{ vf_module.model_customization_id }}"
+ },
+ "instanceName": "{{ service_instance_name }}_{{ vf_module.name }}",
+ "instanceParams": [
+ {
+ {% for vnf_parameter in vnf_parameters %}
+ {% if vnf_parameter.name == vnf.model_name %}
+ {% set mylist = vf_module.name.split('..') %}
+ {% set item = mylist|length-2 %}
+ {% for vf_module_parameter in vnf_parameter.vfmodule_parameters %}
+ {% if vf_module_parameter.name == mylist[item] %}
+ {% for parameter in vf_module_parameter.vfmodule_parameters %}
+ "{{ parameter.name }}": "{{ parameter.value }}"{% if not loop.last %},{% endif %}
+ {% endfor %}
+ {% endif %}
+ {% endfor %}
+ {% endif %}
+ {% endfor %}
+ }
+ ]
+ }{% if not loop.last %},{% endif %}
+ {% endfor %}
+ ]
+ }{% if not loop.last %},{% endif %}
+ {% endfor %}
+ ]
+ {% endif %}
+ {% endblock %}
+ },
+ "modelInfo": {
+ "modelVersion": "1.0",
+ "modelVersionId": "{{ sdc_service.identifier }}",
+ "modelInvariantId": "{{ sdc_service.unique_uuid }}",
+ "modelName": "{{ sdc_service.name }}",
+ "modelType": "service"
+ }
+ }
+ }
+ ],
+ "aLaCarte": false
+ },
+ "project": {
+ "projectName": "{{ project }}"
+ },
+ "owningEntity": {
+ "owningEntityId": "{{ owning_entity.owning_entity_id }}",
+ "owningEntityName": "{{ owning_entity.name }}"
+ }
+ }
+}