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 = {}
 | 
			
		||||
    for name in file_order:
 | 
			
		||||
        url = files.get(name)
 | 
			
		||||
        if header_cb:
 | 
			
		||||
            headers = header_cb(url)
 | 
			
		||||
        if not header_cb:
 | 
			
		||||
            def _cb(url):
 | 
			
		||||
                return {}
 | 
			
		||||
            header_cb = _cb
 | 
			
		||||
 | 
			
		||||
        if name == 'user-data':
 | 
			
		||||
            retries = 0
 | 
			
		||||
        else:
 | 
			
		||||
            headers = {}
 | 
			
		||||
            retries = None
 | 
			
		||||
 | 
			
		||||
        try:
 | 
			
		||||
            ssl_details = util.fetch_ssl_details(paths)
 | 
			
		||||
            resp = util.read_file_or_url(url,
 | 
			
		||||
                                         headers=headers,
 | 
			
		||||
            resp = util.read_file_or_url(url, retries=retries,
 | 
			
		||||
                                         headers_cb=header_cb,
 | 
			
		||||
                                         timeout=timeout,
 | 
			
		||||
                                         ssl_details=ssl_details)
 | 
			
		||||
            if resp.ok():
 | 
			
		||||
 
 | 
			
		||||
@@ -102,8 +102,8 @@ class UrlError(IOError):
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
def readurl(url, data=None, timeout=None, retries=0, sec_between=1,
 | 
			
		||||
            headers=None, ssl_details=None, check_status=True,
 | 
			
		||||
            allow_redirects=True):
 | 
			
		||||
            headers=None, headers_cb=None, ssl_details=None,
 | 
			
		||||
            check_status=True, allow_redirects=True):
 | 
			
		||||
    url = _cleanurl(url)
 | 
			
		||||
    req_args = {
 | 
			
		||||
        'url': url,
 | 
			
		||||
@@ -149,8 +149,11 @@ def readurl(url, data=None, timeout=None, retries=0, sec_between=1,
 | 
			
		||||
        headers = {
 | 
			
		||||
            'User-Agent': 'Cloud-Init/%s' % (version.version_string()),
 | 
			
		||||
        }
 | 
			
		||||
    req_args['headers'] = headers
 | 
			
		||||
    LOG.debug("Attempting to open '%s' with %s configuration", url, req_args)
 | 
			
		||||
    if not headers_cb:
 | 
			
		||||
        def _cb(url):
 | 
			
		||||
            return headers
 | 
			
		||||
        headers_cb = _cb
 | 
			
		||||
 | 
			
		||||
    if data:
 | 
			
		||||
        # Do this after the log (it might be large)
 | 
			
		||||
        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...
 | 
			
		||||
    for i in range(0, manual_tries):
 | 
			
		||||
        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)
 | 
			
		||||
            if check_status:
 | 
			
		||||
                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:
 | 
			
		||||
            if (isinstance(e, (exceptions.HTTPError))
 | 
			
		||||
                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,
 | 
			
		||||
                                      headers=e.response.headers))
 | 
			
		||||
            else:
 | 
			
		||||
 
 | 
			
		||||
@@ -671,7 +671,8 @@ def fetch_ssl_details(paths=None):
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
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()
 | 
			
		||||
    if url.startswith("/"):
 | 
			
		||||
        url = "file://%s" % url
 | 
			
		||||
@@ -685,6 +686,7 @@ def read_file_or_url(url, timeout=5, retries=10,
 | 
			
		||||
                                  timeout=timeout,
 | 
			
		||||
                                  retries=retries,
 | 
			
		||||
                                  headers=headers,
 | 
			
		||||
                                  headers_cb=headers_cb,
 | 
			
		||||
                                  data=data,
 | 
			
		||||
                                  sec_between=sec_between,
 | 
			
		||||
                                  ssl_details=ssl_details)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user