Do not break on sushy.connector.Connector sig change
Right now, retries break in ilo driver due to server_side_retries being an accepted kwarg in sushy.connector.Connector._op, but not this version. We should accept any set of args, but only pass on known-good args, as sushy.connector.Connector._op() will pass on any unknown kwargs to requests, which means we should not blindly pass on all kwargs. Additionally, fixed related unit tests and some basic configuration fixes to get linting to pass. Change-Id: I80796cc4280a194735e6e4034d37cca4fdc97f97
This commit is contained in:
parent
f655e23cef
commit
fe2f9c2950
@ -36,7 +36,8 @@ class HPEConnector(connector.Connector):
|
||||
stop_max_attempt_number=MAX_RETRY_ATTEMPTS,
|
||||
wait_fixed=MAX_TIME_BEFORE_RETRY)
|
||||
def _op(self, method, path='', data=None, headers=None,
|
||||
blocking=False, timeout=60):
|
||||
blocking=False, timeout=60, server_side_retries_left=None,
|
||||
allow_reauth=True, **kwargs):
|
||||
"""Overrides the base method to support retrying the operation.
|
||||
|
||||
:param method: The HTTP method to be used, e.g: GET, POST,
|
||||
@ -46,16 +47,37 @@ class HPEConnector(connector.Connector):
|
||||
:param headers: Optional dictionary of headers.
|
||||
:param blocking: Whether to block for asynchronous operations.
|
||||
:param timeout: Max time in seconds to wait for blocking async call.
|
||||
:param server_side_retries_left: Remaining retries. If not provided
|
||||
will use limit provided by instance's server_side_retries
|
||||
:param allow_reauth: Whether to allow refreshing the authentication
|
||||
token.
|
||||
:param **kwargs: Catchall to improve compatability if parent class
|
||||
changes -- unsued.
|
||||
:returns: The response from the connector.Connector's _op method.
|
||||
"""
|
||||
resp = super(HPEConnector, self)._op(method, path, data=data,
|
||||
headers=headers,
|
||||
blocking=blocking,
|
||||
timeout=timeout,
|
||||
allow_redirects=False)
|
||||
resp = super(HPEConnector, self)._op(
|
||||
method=method,
|
||||
path=path,
|
||||
data=data,
|
||||
headers=headers,
|
||||
blocking=blocking,
|
||||
timeout=timeout,
|
||||
server_side_retries_left=server_side_retries_left,
|
||||
allow_reauth=allow_reauth,
|
||||
allow_redirects=False
|
||||
)
|
||||
# With IPv6, Gen10 server gives redirection response with new path with
|
||||
# a prefix of '/' so this check is required
|
||||
if resp.status_code == 308:
|
||||
path = urlparse(resp.headers['Location']).path
|
||||
resp = super(HPEConnector, self)._op(method, path, data, headers)
|
||||
resp = super(HPEConnector, self)._op(
|
||||
method=method,
|
||||
path=path,
|
||||
data=data,
|
||||
headers=headers,
|
||||
blocking=blocking,
|
||||
timeout=timeout,
|
||||
server_side_retries_left=server_side_retries_left,
|
||||
allow_reauth=allow_reauth
|
||||
)
|
||||
return resp
|
||||
|
@ -40,6 +40,8 @@ class HPEConnectorTestCase(testtools.TestCase):
|
||||
conn_mock.assert_called_once_with(hpe_conn, 'GET', path='fake/path',
|
||||
data=None, headers=headers,
|
||||
blocking=False, timeout=60,
|
||||
server_side_retries_left=None,
|
||||
allow_reauth=True,
|
||||
allow_redirects=False)
|
||||
self.assertEqual(1, conn_mock.call_count)
|
||||
|
||||
@ -91,8 +93,12 @@ class HPEConnectorTestCase(testtools.TestCase):
|
||||
data=None, headers=headers)
|
||||
calls = [mock.call(hpe_conn, 'GET', path='fake/path', data=None,
|
||||
headers=headers, blocking=False, timeout=60,
|
||||
server_side_retries_left=None,
|
||||
allow_reauth=True,
|
||||
allow_redirects=False),
|
||||
mock.call(hpe_conn, 'GET', path='/new/path', data=None,
|
||||
headers=headers)]
|
||||
headers=headers, blocking=False, timeout=60,
|
||||
server_side_retries_left=None,
|
||||
allow_reauth=True)]
|
||||
conn_mock.assert_has_calls(calls)
|
||||
self.assertEqual(res.status_code, 200)
|
||||
|
@ -11,5 +11,5 @@ pyasn1>=0.5.1 # BSD
|
||||
pyasn1-modules>=0.3.0 # BSD
|
||||
|
||||
# Redfish communication uses the Sushy library
|
||||
sushy>=4.5.0
|
||||
sushy>=4.5.2
|
||||
pyOpenSSL>=19.1.0
|
||||
|
11
tox.ini
11
tox.ini
@ -28,10 +28,10 @@ passenv =
|
||||
|
||||
[testenv:pep8]
|
||||
deps =
|
||||
hacking>=4.1.0,<5.0.0 # Apache-2.0
|
||||
flake8-import-order>=0.17.1 # LGPLv3
|
||||
pycodestyle>=2.0.0,<3.0.0 # MIT
|
||||
Pygments>=2.2.0 # BSD
|
||||
hacking # Apache-2.0
|
||||
flake8-import-order # LGPLv3
|
||||
pycodestyle # MIT
|
||||
Pygments # BSD
|
||||
commands = flake8 {posargs}
|
||||
|
||||
[testenv:cover]
|
||||
@ -51,9 +51,10 @@ commands =
|
||||
[flake8]
|
||||
show-source = True
|
||||
# [C901] function is too complex.
|
||||
# [E275] missing whitespace after keyword
|
||||
# [E731] do not assign a lambda expression, use a def
|
||||
# [W503] Line break occurred before a binary operator. Conflicts with W504.
|
||||
ignore = C901,E731,W503
|
||||
ignore = C901,E275,E731,W503
|
||||
exclude=.venv,.git,.tox,dist,doc,*lib/python*,*egg,build,*cpqdisk_mibs
|
||||
max-complexity=15
|
||||
import-order-style = pep8
|
||||
|
Loading…
Reference in New Issue
Block a user