summaryrefslogtreecommitdiff
path: root/cloudinit/sources/__init__.py
diff options
context:
space:
mode:
authorvteratipally <67723486+vteratipally@users.noreply.github.com>2021-09-20 21:53:05 -0700
committerGitHub <noreply@github.com>2021-09-20 22:53:05 -0600
commite27c30748e88409b1646a552f994edf9ed9d017e (patch)
tree638e22b5f5b59e2636fe3bca7e659358b9637b63 /cloudinit/sources/__init__.py
parentdc22786980a05129c5971e68ae37b1a9f76f882d (diff)
downloadvyos-cloud-init-e27c30748e88409b1646a552f994edf9ed9d017e.tar.gz
vyos-cloud-init-e27c30748e88409b1646a552f994edf9ed9d017e.zip
Add retries to DataSourceGCE.py when connecting to GCE (#1005)
Add retries to DatasourceGCE when connecting to GCE. Sometimes when the trying to fetch the metadata, cloud-init fails and the fallback datasource NoCloud is used which is not expected. Add retries to ensure loading of the data source.
Diffstat (limited to 'cloudinit/sources/__init__.py')
-rw-r--r--cloudinit/sources/__init__.py23
1 files changed, 18 insertions, 5 deletions
diff --git a/cloudinit/sources/__init__.py b/cloudinit/sources/__init__.py
index 54b8240a..d61d280d 100644
--- a/cloudinit/sources/__init__.py
+++ b/cloudinit/sources/__init__.py
@@ -138,7 +138,8 @@ def redact_sensitive_keys(metadata, redact_value=REDACT_SENSITIVE_VALUE):
URLParams = namedtuple(
- 'URLParms', ['max_wait_seconds', 'timeout_seconds', 'num_retries'])
+ 'URLParms', ['max_wait_seconds', 'timeout_seconds',
+ 'num_retries', 'sec_between_retries'])
class DataSource(CloudInitPickleMixin, metaclass=abc.ABCMeta):
@@ -175,9 +176,10 @@ class DataSource(CloudInitPickleMixin, metaclass=abc.ABCMeta):
NetworkConfigSource.ds)
# read_url_params
- url_max_wait = -1 # max_wait < 0 means do not wait
- url_timeout = 10 # timeout for each metadata url read attempt
- url_retries = 5 # number of times to retry url upon 404
+ url_max_wait = -1 # max_wait < 0 means do not wait
+ url_timeout = 10 # timeout for each metadata url read attempt
+ url_retries = 5 # number of times to retry url upon 404
+ url_sec_between_retries = 1 # amount of seconds to wait between retries
# The datasource defines a set of supported EventTypes during which
# the datasource can react to changes in metadata and regenerate
@@ -422,7 +424,18 @@ class DataSource(CloudInitPickleMixin, metaclass=abc.ABCMeta):
LOG, "Config retries '%s' is not an int, using default '%s'",
self.ds_cfg.get('retries'), retries)
- return URLParams(max_wait, timeout, retries)
+ sec_between_retries = self.url_sec_between_retries
+ try:
+ sec_between_retries = int(self.ds_cfg.get(
+ "sec_between_retries",
+ self.url_sec_between_retries))
+ except Exception:
+ util.logexc(
+ LOG, "Config sec_between_retries '%s' is not an int,"
+ " using default '%s'",
+ self.ds_cfg.get("sec_between_retries"), sec_between_retries)
+
+ return URLParams(max_wait, timeout, retries, sec_between_retries)
def get_userdata(self, apply_filter=False):
if self.userdata is None: