diff options
author | peukerl@telekom.de <peukerl@telekom.de> | 2023-06-21 15:25:40 +0200 |
---|---|---|
committer | Lukasz Rajewski <lukasz.rajewski@t-mobile.pl> | 2023-06-26 09:11:27 +0000 |
commit | c1cf91e41376e9b9dbf13013a3f79fb09debaf09 (patch) | |
tree | 8fecbf62cd35de17d4a46230fe906e27ca3c1ac1 | |
parent | c7c8f1d804748462f6d4614984eea591c8528909 (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.yaml | 19 | ||||
-rw-r--r-- | docs/requirements-docs.txt | 1 | ||||
-rw-r--r-- | src/onapsdk/so/so_element.py | 23 | ||||
-rw-r--r-- | src/onapsdk/so/templates/instantiate_multi_vnf_service_macro.json.j2 | 11 | ||||
-rw-r--r-- | tests/test_so_instantiation.py | 20 | ||||
-rw-r--r-- | tests/test_so_orchestration_request.py | 28 |
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(): |