aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorpeukerl@telekom.de <peukerl@telekom.de>2023-06-21 15:25:40 +0200
committerLukasz Rajewski <lukasz.rajewski@t-mobile.pl>2023-06-26 09:11:27 +0000
commitc1cf91e41376e9b9dbf13013a3f79fb09debaf09 (patch)
tree8fecbf62cd35de17d4a46230fe906e27ca3c1ac1
parentc7c8f1d804748462f6d4614984eea591c8528909 (diff)
Orchestration request changes
status-message added to orchestration-request pnfRegistrationFields added to service-instantiation Issue-ID: INT-2253 Signed-off-by: peukerl@telekom.de <peukerl@telekom.de> Change-Id: I8dd1ee326d63c915591829ceaca2e0f8247afdde
-rw-r--r--.readthedocs.yaml19
-rw-r--r--docs/requirements-docs.txt1
-rw-r--r--src/onapsdk/so/so_element.py23
-rw-r--r--src/onapsdk/so/templates/instantiate_multi_vnf_service_macro.json.j211
-rw-r--r--tests/test_so_instantiation.py20
-rw-r--r--tests/test_so_orchestration_request.py28
6 files changed, 97 insertions, 5 deletions
diff --git a/.readthedocs.yaml b/.readthedocs.yaml
new file mode 100644
index 0000000..09c9138
--- /dev/null
+++ b/.readthedocs.yaml
@@ -0,0 +1,19 @@
+---
+# .readthedocs.yml
+# Read the Docs configuration file
+# See https://docs.readthedocs.io/en/stable/config-file/v2.html for details
+# Required
+
+version: 2
+build:
+ os: ubuntu-20.04
+ tools:
+ python: "3.8"
+
+python:
+ install:
+ - requirements: docs/requirements-docs.txt
+
+sphinx:
+ configuration: docs/conf.py
+
diff --git a/docs/requirements-docs.txt b/docs/requirements-docs.txt
index 71df2ab..a064d33 100644
--- a/docs/requirements-docs.txt
+++ b/docs/requirements-docs.txt
@@ -5,3 +5,4 @@ sphinxcontrib-seqdiag # BSD
sphinxcontrib-swaggerdoc
sphinxcontrib-spelling
sphinxcontrib-plantuml
+sphinx-autodoc-typehints
diff --git a/src/onapsdk/so/so_element.py b/src/onapsdk/so/so_element.py
index fca6ba7..68866ae 100644
--- a/src/onapsdk/so/so_element.py
+++ b/src/onapsdk/so/so_element.py
@@ -221,3 +221,26 @@ class OrchestrationRequest(SoElement, WaitForFinishMixin, ABC):
"""
return self.finished and self.status == self.StatusEnum.FAILED
+
+ @property
+ def status_message(self) -> str:
+ """Object instantiation status information.
+
+ It's populated by call SO orchestation request endpoint.
+
+ Returns:
+ str: status message of orchestration request.
+
+ """
+ response: dict = self.send_message_json(
+ "GET",
+ f"Check {self.request_id} orchestration request status",
+ (f"{self.base_url}/onap/so/infra/"
+ f"orchestrationRequests/{self.api_version}/{self.request_id}"),
+ headers=headers_so_creator(OnapService.headers)
+ )
+ try:
+ return response["request"]["requestStatus"]["statusMessage"]
+ except (KeyError, ValueError):
+ self._logger.exception("Invalid statusMessage.")
+ return "Unknown request state"
diff --git a/src/onapsdk/so/templates/instantiate_multi_vnf_service_macro.json.j2 b/src/onapsdk/so/templates/instantiate_multi_vnf_service_macro.json.j2
index 32e1b68..93ef79c 100644
--- a/src/onapsdk/so/templates/instantiate_multi_vnf_service_macro.json.j2
+++ b/src/onapsdk/so/templates/instantiate_multi_vnf_service_macro.json.j2
@@ -30,6 +30,17 @@
},
"productFamilyId":"{{ aai_service.service_id }}",
"instanceParams":[],
+ {% if pnf.registration_parameters %}
+ "pnfRegistrationFields": {
+ "modelNumber": "{{ pnf.registration_parameters.model_number }}",
+ "oamV4IpAddress": "{{ pnf.registration_parameters.oam_v4_ip_address }}",
+ "oamV6IpAddress": "{{ pnf.registration_parameters.oam_v6_ip_address }}",
+ "serialNumber": "{{ pnf.registration_parameters.serial_number }}",
+ "softwareVersion": "{{ pnf.registration_parameters.software_version }}",
+ "unitType": "{{ pnf.registration_parameters.unit_type }}",
+ "vendorName": "{{ pnf.registration_parameters.vendor_name }}"
+ },
+ {% endif %}
{% if pnf.processing_priority %}
"processingPriority": "{{ pnf.processing_priority }}",
{% endif %}
diff --git a/tests/test_so_instantiation.py b/tests/test_so_instantiation.py
index 8f2a93e..3babdd3 100644
--- a/tests/test_so_instantiation.py
+++ b/tests/test_so_instantiation.py
@@ -1051,7 +1051,16 @@ def test_service_instantiation_so_service(mock_send_message_json):
),
SoServicePnf(
model_name="test_so_service_pnf_model_name_2",
- instance_name="test_so_service_pnf_instance_name_2"
+ instance_name="test_so_service_pnf_instance_name_2",
+ registration_parameters=PnfRegistrationParameters(
+ model_number="test_model_number",
+ oam_v4_ip_address="test_ip",
+ oam_v6_ip_address="test_mac",
+ serial_number="test_serial_number",
+ software_version="test_software_version",
+ unit_type="test_unit_type",
+ vendor_name="test_vendor"
+ )
)
]
)
@@ -1106,8 +1115,17 @@ def test_service_instantiation_so_service(mock_send_message_json):
assert vf_module_2_data["instanceParams"][0]["vf_module_param_2"] == "vf_module_param_2_value"
assert pnf_1_data["instanceName"] == "test_so_service_pnf_instance_name_1"
+ assert not "pnfRegistrationFields" in pnf_1_data
assert pnf_2_data["instanceName"] == "test_so_service_pnf_instance_name_2"
+ assert pnf_2_data["pnfRegistrationFields"]["modelNumber"] == "test_model_number"
+ assert pnf_2_data["pnfRegistrationFields"]["oamV4IpAddress"] == "test_ip"
+ assert pnf_2_data["pnfRegistrationFields"]["oamV6IpAddress"] == "test_mac"
+ assert pnf_2_data["pnfRegistrationFields"]["serialNumber"] == "test_serial_number"
+ assert pnf_2_data["pnfRegistrationFields"]["softwareVersion"] == "test_software_version"
+ assert pnf_2_data["pnfRegistrationFields"]["unitType"] == "test_unit_type"
+ assert pnf_2_data["pnfRegistrationFields"]["vendorName"] == "test_vendor"
+
def test_so_service_load_from_yaml():
diff --git a/tests/test_so_orchestration_request.py b/tests/test_so_orchestration_request.py
index c93189b..56d0ad4 100644
--- a/tests/test_so_orchestration_request.py
+++ b/tests/test_so_orchestration_request.py
@@ -21,28 +21,32 @@ from onapsdk.onap_service import OnapService
IN_PROGRESS = {
"request": {
"requestStatus": {
- "requestState": "IN_PROGRESS"
+ "requestState": "IN_PROGRESS",
+ "statusMessage": "test-message"
}
}
}
FAILED = {
"request": {
"requestStatus": {
- "requestState": "FAILED"
+ "requestState": "FAILED",
+ "statusMessage": "test-message"
}
}
}
COMPLETE = {
"request": {
"requestStatus": {
- "requestState": "COMPLETE"
+ "requestState": "COMPLETE",
+ "statusMessage": "test-message"
}
}
}
UNKNOWN = {
"request": {
"requestStatus": {
- "requestState": "INVALID"
+ "requestState": "INVALID",
+ "statusMessage": "test-message"
}
}
}
@@ -81,6 +85,22 @@ def test_orchestration_request_status(mock_send_message):
assert not orchestration_req.completed
assert orchestration_req.failed
+@mock.patch.object(OrchestrationRequest, "send_message_json")
+def test_orchestration_request_status_message(mock_send_message):
+ orchestration_req = OrchestrationRequest(request_id="test")
+
+ mock_send_message.return_value = BAD_RESPONSE
+ assert orchestration_req.status_message == "Unknown request state"
+
+ mock_send_message.return_value = UNKNOWN
+ assert orchestration_req.status_message == "test-message"
+
+ mock_send_message.return_value = FAILED
+ assert orchestration_req.status_message == "test-message"
+
+ mock_send_message.return_value = COMPLETE
+ assert orchestration_req.status_message == "test-message"
+
#Test the Class SoElement
def test_SoElement_headers():