f5-common-python
f5-common-python copied to clipboard
Timeout not working
Timeout not working
Reproduce
ManagementRoot(host, user, pwd, timeout=1)- Timeout of 1 second is not respected
Problem
Timeout is not respected. Instead the default timeout for the 'request' library is used, which is forever.
Solution
Replace the following line:
response = connect.get(base_uri)
By:
response = connect.get(base_uri, timeout=self.args["timeout"])
Note: This will only fix the issue for the tmos version call, but since this is the first call the sqk always makes, it fixes the problem is most of the cases. If a connection opens ones, it will probably open a few seconds later.
More information
The timeout is supposed to be set here:
self.session.timeout = timeout
But that doesn't work anymore.
I solved this by wrapping ManagementRoot object and changinf icr_session
class WrappedManagementRoot(ManagementRoot):
"""A customized wrapper for f5.bigip.ManagementRoot providing preferred behavior."""
def _get_icr_session(self, *args: Any, **kwargs: Any) -> iControlRESTSession:
# We wrap this session creating to properly enforce timeouts
icr_session: iControlRESTSession = super()._get_icr_session(*args, **kwargs)
timeout: tuple[float, float] = (settings.F5_CONNECT_TIMEOUT, settings.READ_TIMEOUT)
# noinspection HttpUrlsUsage
icr_session.session.mount("http://", TimeoutHttpAdapter(timeout=timeout))
icr_session.session.mount("https://", TimeoutHttpAdapter(timeout=timeout))
return icr_session
mgmt = WrappedManagementRoot(hostname, ....)