Retry Virtual Media eject action on HTTP 400 response
When attempting to eject virtual media and HTTP server responds with HTTP error 400, retry the same HTTP query with empty JSON document. This change simply extends HTTP error code list when this retry should happen to account for Dell server(s) - unlike HPE ones (which return error 415), Dell returns 400. See also: https://review.opendev.org/#/c/636845/ Change-Id: Ie9c2f37062b8a8c9a1a082217dc22c79c5327fba Story: 2004995 Task: 35845
This commit is contained in:
parent
ba1b8220e7
commit
219d93aecd
|
@ -106,7 +106,9 @@ class VirtualMedia(base.ResourceBase):
|
|||
except exceptions.HTTPError as response:
|
||||
# Some vendors like HPE iLO has this kind of implementation.
|
||||
# It needs to pass an empty dict.
|
||||
if response.status_code == http_client.UNSUPPORTED_MEDIA_TYPE:
|
||||
if response.status_code in (
|
||||
http_client.UNSUPPORTED_MEDIA_TYPE,
|
||||
http_client.BAD_REQUEST):
|
||||
self._conn.post(target_uri, data={})
|
||||
self.invalidate()
|
||||
|
||||
|
|
|
@ -85,7 +85,7 @@ class VirtualMediaTestCase(base.TestCase):
|
|||
"/VirtualMedia.EjectMedia"))
|
||||
self.assertTrue(self.sys_virtual_media._is_stale)
|
||||
|
||||
def test_eject_media_pass_empty_dict(self):
|
||||
def test_eject_media_pass_empty_dict_415(self):
|
||||
target_uri = ("/redfish/v1/Managers/BMC/VirtualMedia/Floppy1/Actions"
|
||||
"/VirtualMedia.EjectMedia")
|
||||
self.conn.post.side_effect = [exceptions.HTTPError(
|
||||
|
@ -97,3 +97,16 @@ class VirtualMediaTestCase(base.TestCase):
|
|||
mock.call(target_uri, data={})]
|
||||
self.sys_virtual_media._conn.post.assert_has_calls(post_calls)
|
||||
self.assertTrue(self.sys_virtual_media._is_stale)
|
||||
|
||||
def test_eject_media_pass_empty_dict_400(self):
|
||||
target_uri = ("/redfish/v1/Managers/BMC/VirtualMedia/Floppy1/Actions"
|
||||
"/VirtualMedia.EjectMedia")
|
||||
self.conn.post.side_effect = [exceptions.HTTPError(
|
||||
method='POST', url=target_uri, response=mock.MagicMock(
|
||||
status_code=http_client.BAD_REQUEST)), '200']
|
||||
self.sys_virtual_media.eject_media()
|
||||
post_calls = [
|
||||
mock.call(target_uri),
|
||||
mock.call(target_uri, data={})]
|
||||
self.sys_virtual_media._conn.post.assert_has_calls(post_calls)
|
||||
self.assertTrue(self.sys_virtual_media._is_stale)
|
||||
|
|
Loading…
Reference in New Issue