From c0e63f0d3c09bdabb0ad2c88b7cc73e7618dd86a Mon Sep 17 00:00:00 2001 From: Hongxu Jia Date: Thu, 15 Jun 2017 17:35:33 +0800 Subject: [PATCH 4/4] load.py: retry to invoke request with timeout While networkless, use request to fetch kickstart file from network, it failed and wait 300s to break, we should retry to invoke request with timeout explicitly. So if it the network is up, the fetch works. Upstream-Status: inappropriate [oe specific] Signed-off-by: Hongxu Jia --- pykickstart/load.py | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/pykickstart/load.py b/pykickstart/load.py index 48c8276..74b266b 100644 --- a/pykickstart/load.py +++ b/pykickstart/load.py @@ -21,6 +21,7 @@ import requests from requests.auth import HTTPDigestAuth from requests.auth import HTTPBasicAuth +import time import shutil import six @@ -28,6 +29,9 @@ from pykickstart.errors import KickstartError, KickstartAuthError from pykickstart.i18n import _ from requests.exceptions import SSLError, RequestException +import logging +log = logging.getLogger("anaconda") + _is_url = lambda location: '://' in location # RFC 3986 SSL_VERIFY = False @@ -74,6 +78,29 @@ def load_to_file(location, destination): _copy_file(location, destination) return destination +def _access_url(location): + status = False + + # Retry 45 times, wait 45s~135s + i = 0 + while i < 45: + + try: + request = requests.get(location, verify=SSL_VERIFY, timeout=2) + except RequestException as e: + log.info("Try '%s' %d times, %s" % (location, i, str(e))) + status = False + i += 1 + time.sleep(1) + continue + + else: + status = True + return status + + return status + + def _get_auth(location, user=None, passwd=None): auth = None @@ -96,6 +123,9 @@ def _get_auth(location, user=None, passwd=None): def _load_url(location, user=None, passwd=None): '''Load a location (URL or filename) and return contents as string''' + if not _access_url(location): + raise KickstartError(_("Connection %s failed" % location)) + auth = _get_auth(location, user=user, passwd=passwd) try: -- 2.7.4