diff --git a/releasenotes/notes/action-parameter-missing-7d234b96b5b1d81a.yaml b/releasenotes/notes/action-parameter-missing-7d234b96b5b1d81a.yaml new file mode 100644 index 00000000..ecaf81e2 --- /dev/null +++ b/releasenotes/notes/action-parameter-missing-7d234b96b5b1d81a.yaml @@ -0,0 +1,6 @@ +--- +fixes: + - | + Correctly handles error code ``Base.1.12.ActionParameterMissing`` when dealing with + hardware that requires ``TransferProtocolType`` for virtual media + operations and has different message in RelatedProperties response. diff --git a/sushy/resources/manager/virtual_media.py b/sushy/resources/manager/virtual_media.py index b4a5dc9f..ee2fcb2a 100644 --- a/sushy/resources/manager/virtual_media.py +++ b/sushy/resources/manager/virtual_media.py @@ -118,7 +118,8 @@ class VirtualMedia(base.ResourceBase): return ( (error.code.endswith(".ActionParameterMissing") or error.code.endswith(".PropertyMissing")) - and "#/TransferProtocolType" in error.related_properties + and (("#/TransferProtocolType" in error.related_properties) + or ("/TransferProtocolType" in error.related_properties)) ) def is_transfer_method_required(self, error=None): diff --git a/sushy/tests/unit/json_samples/transfer_proto_required_error3.json b/sushy/tests/unit/json_samples/transfer_proto_required_error3.json new file mode 100644 index 00000000..a7203cec --- /dev/null +++ b/sushy/tests/unit/json_samples/transfer_proto_required_error3.json @@ -0,0 +1,22 @@ +{ + "error": { + "@Message.ExtendedInfo": [ + { + "@odata.type": "#Message.v1_0_8.Message", + "Message": "The action /redfish/v1/Managers/Self/VirtualMedia/CD1/Actions/VirtualMedia.InsertMedia requires the parameter TransferProtocolType to be present in the request body.", + "MessageArgs": [ + "/redfish/v1/Managers/Self/VirtualMedia/CD1/Actions/VirtualMedia.InsertMedia", + "TransferProtocolType" + ], + "MessageId": "Base.1.12.ActionParameterMissing", + "RelatedProperties": [ + "/TransferProtocolType" + ], + "Resolution": "Supply the action with the required parameter in the request body when the request is resubmitted.", + "Severity": "Critical" + } + ], + "code": "Base.1.12.ActionParameterMissing", + "message": "The action /redfish/v1/Managers/Self/VirtualMedia/CD1/Actions/VirtualMedia.InsertMedia requires the parameter TransferProtocolType to be present in the request body." + } +} diff --git a/sushy/tests/unit/resources/manager/test_virtual_media.py b/sushy/tests/unit/resources/manager/test_virtual_media.py index e816115a..4b4befa2 100644 --- a/sushy/tests/unit/resources/manager/test_virtual_media.py +++ b/sushy/tests/unit/resources/manager/test_virtual_media.py @@ -207,6 +207,16 @@ class VirtualMediaTestCase(base.TestCase): retval = self.sys_virtual_media.is_transfer_protocol_required(error) self.assertTrue(retval) + def test_is_transfer_protocol_required_alt3(self): + with open('sushy/tests/unit/json_samples/' + 'transfer_proto_required_error3.json') as f: + response_obj = json.load(f) + response = mock.Mock(spec=['json', 'status_code']) + response.json.return_value = response_obj + error = exceptions.HTTPError('GET', 'VirtualMedia', response) + retval = self.sys_virtual_media.is_transfer_protocol_required(error) + self.assertTrue(retval) + def test_is_transfer_method_required(self): with open('sushy/tests/unit/json_samples/' 'transfer_method_required_error.json') as f: