Use separate connect and data timeouts

This allows us to keep a very low connect timeout of 3 seconds, but also
ensure that long commands (e.g. --wait or VM disable) can take as long
as the API requires to complete.

Avoids having to explicitly set very long single-instance timeouts for
other functions which would block forever on an unreachable API.
This commit is contained in:
Joshua Boniface 2021-11-08 03:04:24 -05:00
parent 799c3e8d5d
commit e7d7378bae
2 changed files with 4 additions and 9 deletions

View File

@ -123,8 +123,10 @@ def call_api(
params=None, params=None,
data=None, data=None,
files=None, files=None,
timeout=3,
): ):
# Set the connect timeout to 3 seconds but extremely long (48 hour) data timeout
timeout = (3, 172800)
# Craft the URI # Craft the URI
uri = "{}://{}{}{}".format( uri = "{}://{}{}{}".format(
config["api_scheme"], config["api_host"], config["api_prefix"], request_uri config["api_scheme"], config["api_host"], config["api_prefix"], request_uri

View File

@ -377,19 +377,12 @@ def vm_state(config, vm, target_state, force=False, wait=False):
API arguments: state={state}, wait={wait} API arguments: state={state}, wait={wait}
API schema: {"message":"{data}"} API schema: {"message":"{data}"}
""" """
if wait or target_state == "disable":
timeout = 300
else:
timeout = 3
params = { params = {
"state": target_state, "state": target_state,
"force": str(force).lower(), "force": str(force).lower(),
"wait": str(wait).lower(), "wait": str(wait).lower(),
} }
response = call_api( response = call_api(config, "post", "/vm/{vm}/state".format(vm=vm), params=params)
config, "post", "/vm/{vm}/state".format(vm=vm), params=params, timeout=timeout
)
if response.status_code == 200: if response.status_code == 200:
retstatus = True retstatus = True