diff options
author | peukerl@telekom.de <peukerl@telekom.de> | 2023-06-16 09:05:05 +0200 |
---|---|---|
committer | peukerl@telekom.de <peukerl@telekom.de> | 2023-06-19 11:02:25 +0200 |
commit | bb7533ad0175979f893724eed272148ff65f438c (patch) | |
tree | 6de9e642b0366d7f86d9556b3c2585a0480e163d /src/onapsdk/so | |
parent | a13ff9ac968ddced994205539a494ecbdb2d6b34 (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/so')
-rw-r--r-- | src/onapsdk/so/deletion.py | 31 | ||||
-rw-r--r-- | src/onapsdk/so/instantiation.py | 28 | ||||
-rw-r--r-- | src/onapsdk/so/templates/deletion_pnf.json.j2 | 27 | ||||
-rwxr-xr-x | src/onapsdk/so/templates/instantiate_pnf_macro_so_pnf.json.j2 | 13 | ||||
-rw-r--r-- | src/onapsdk/so/templates/instantiate_service_macro.json.j2 | 10 |
5 files changed, 107 insertions, 2 deletions
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 %} |