re-work maas datasource and headers call backs
Couple of things here: * do not re-try on user-data (404 means 'not here') * re-generate headers on retry requests
This commit is contained in:
@@ -218,14 +218,20 @@ def read_maas_seed_url(seed_url, header_cb=None, timeout=None,
|
|||||||
md = {}
|
md = {}
|
||||||
for name in file_order:
|
for name in file_order:
|
||||||
url = files.get(name)
|
url = files.get(name)
|
||||||
if header_cb:
|
if not header_cb:
|
||||||
headers = header_cb(url)
|
def _cb(url):
|
||||||
|
return {}
|
||||||
|
header_cb = _cb
|
||||||
|
|
||||||
|
if name == 'user-data':
|
||||||
|
retries = 0
|
||||||
else:
|
else:
|
||||||
headers = {}
|
retries = None
|
||||||
|
|
||||||
try:
|
try:
|
||||||
ssl_details = util.fetch_ssl_details(paths)
|
ssl_details = util.fetch_ssl_details(paths)
|
||||||
resp = util.read_file_or_url(url,
|
resp = util.read_file_or_url(url, retries=retries,
|
||||||
headers=headers,
|
headers_cb=header_cb,
|
||||||
timeout=timeout,
|
timeout=timeout,
|
||||||
ssl_details=ssl_details)
|
ssl_details=ssl_details)
|
||||||
if resp.ok():
|
if resp.ok():
|
||||||
|
|||||||
@@ -102,8 +102,8 @@ class UrlError(IOError):
|
|||||||
|
|
||||||
|
|
||||||
def readurl(url, data=None, timeout=None, retries=0, sec_between=1,
|
def readurl(url, data=None, timeout=None, retries=0, sec_between=1,
|
||||||
headers=None, ssl_details=None, check_status=True,
|
headers=None, headers_cb=None, ssl_details=None,
|
||||||
allow_redirects=True):
|
check_status=True, allow_redirects=True):
|
||||||
url = _cleanurl(url)
|
url = _cleanurl(url)
|
||||||
req_args = {
|
req_args = {
|
||||||
'url': url,
|
'url': url,
|
||||||
@@ -149,8 +149,11 @@ def readurl(url, data=None, timeout=None, retries=0, sec_between=1,
|
|||||||
headers = {
|
headers = {
|
||||||
'User-Agent': 'Cloud-Init/%s' % (version.version_string()),
|
'User-Agent': 'Cloud-Init/%s' % (version.version_string()),
|
||||||
}
|
}
|
||||||
req_args['headers'] = headers
|
if not headers_cb:
|
||||||
LOG.debug("Attempting to open '%s' with %s configuration", url, req_args)
|
def _cb(url):
|
||||||
|
return headers
|
||||||
|
headers_cb = _cb
|
||||||
|
|
||||||
if data:
|
if data:
|
||||||
# Do this after the log (it might be large)
|
# Do this after the log (it might be large)
|
||||||
req_args['data'] = data
|
req_args['data'] = data
|
||||||
@@ -161,6 +164,11 @@ def readurl(url, data=None, timeout=None, retries=0, sec_between=1,
|
|||||||
# doesn't handle sleeping between tries...
|
# doesn't handle sleeping between tries...
|
||||||
for i in range(0, manual_tries):
|
for i in range(0, manual_tries):
|
||||||
try:
|
try:
|
||||||
|
req_args['headers'] = headers_cb(url)
|
||||||
|
LOG.debug("[%s/%s] open '%s' with %s configuration", i,
|
||||||
|
manual_tries, url,
|
||||||
|
{k: req_args[k] for k in req_args if k != 'data'})
|
||||||
|
|
||||||
r = requests.request(**req_args)
|
r = requests.request(**req_args)
|
||||||
if check_status:
|
if check_status:
|
||||||
r.raise_for_status() # pylint: disable=E1103
|
r.raise_for_status() # pylint: disable=E1103
|
||||||
@@ -174,7 +182,7 @@ def readurl(url, data=None, timeout=None, retries=0, sec_between=1,
|
|||||||
except exceptions.RequestException as e:
|
except exceptions.RequestException as e:
|
||||||
if (isinstance(e, (exceptions.HTTPError))
|
if (isinstance(e, (exceptions.HTTPError))
|
||||||
and hasattr(e, 'response') # This appeared in v 0.10.8
|
and hasattr(e, 'response') # This appeared in v 0.10.8
|
||||||
and e.response):
|
and hasattr(e.response, 'status_code')):
|
||||||
excps.append(UrlError(e, code=e.response.status_code,
|
excps.append(UrlError(e, code=e.response.status_code,
|
||||||
headers=e.response.headers))
|
headers=e.response.headers))
|
||||||
else:
|
else:
|
||||||
|
|||||||
@@ -671,7 +671,8 @@ def fetch_ssl_details(paths=None):
|
|||||||
|
|
||||||
|
|
||||||
def read_file_or_url(url, timeout=5, retries=10,
|
def read_file_or_url(url, timeout=5, retries=10,
|
||||||
headers=None, data=None, sec_between=1, ssl_details=None):
|
headers=None, data=None, sec_between=1, ssl_details=None,
|
||||||
|
headers_cb=None):
|
||||||
url = url.lstrip()
|
url = url.lstrip()
|
||||||
if url.startswith("/"):
|
if url.startswith("/"):
|
||||||
url = "file://%s" % url
|
url = "file://%s" % url
|
||||||
@@ -685,6 +686,7 @@ def read_file_or_url(url, timeout=5, retries=10,
|
|||||||
timeout=timeout,
|
timeout=timeout,
|
||||||
retries=retries,
|
retries=retries,
|
||||||
headers=headers,
|
headers=headers,
|
||||||
|
headers_cb=headers_cb,
|
||||||
data=data,
|
data=data,
|
||||||
sec_between=sec_between,
|
sec_between=sec_between,
|
||||||
ssl_details=ssl_details)
|
ssl_details=ssl_details)
|
||||||
|
|||||||
Reference in New Issue
Block a user