summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--cloudinit/sources/DataSourceOpenStack.py28
-rw-r--r--cloudinit/url_helper.py1
2 files changed, 14 insertions, 15 deletions
diff --git a/cloudinit/sources/DataSourceOpenStack.py b/cloudinit/sources/DataSourceOpenStack.py
index 69807798..7fafa3f7 100644
--- a/cloudinit/sources/DataSourceOpenStack.py
+++ b/cloudinit/sources/DataSourceOpenStack.py
@@ -45,6 +45,8 @@ class DataSourceOpenStack(openstack.SourceMixin, sources.DataSource):
self.version = None
self.files = {}
self.ec2_metadata = None
+ if not self.ds_cfg:
+ self.ds_cfg = {}
def __str__(self):
root = sources.DataSource.__str__(self)
@@ -54,27 +56,25 @@ class DataSourceOpenStack(openstack.SourceMixin, sources.DataSource):
def _get_url_settings(self):
# TODO(harlowja): this is shared with ec2 datasource, we should just
# move it to a shared location instead...
- ds_cfg = self.ds_cfg
- if not ds_cfg:
- ds_cfg = {}
- max_wait = 120
+ # Note: the defaults here are different though.
+
+ # max_wait < 0 indicates do not wait
+ max_wait = -1
+ timeout = 10
+
try:
- max_wait = int(ds_cfg.get("max_wait", max_wait))
+ max_wait = int(self.ds_cfg.get("max_wait", max_wait))
except Exception:
util.logexc(LOG, "Failed to get max wait. using %s", max_wait)
- timeout = 50
try:
- timeout = max(0, int(ds_cfg.get("timeout", timeout)))
+ timeout = max(0, int(self.ds_cfg.get("timeout", timeout)))
except Exception:
util.logexc(LOG, "Failed to get timeout, using %s", timeout)
return (max_wait, timeout)
def wait_for_metadata_service(self):
- ds_cfg = self.ds_cfg
- if not ds_cfg:
- ds_cfg = {}
- urls = ds_cfg.get("metadata_urls", [DEF_MD_URL])
+ urls = self.ds_cfg.get("metadata_urls", [DEF_MD_URL])
filtered = [x for x in urls if util.is_resolvable_url(x)]
if set(filtered) != set(urls):
LOG.debug("Removed the following from metadata urls: %s",
@@ -95,8 +95,6 @@ class DataSourceOpenStack(openstack.SourceMixin, sources.DataSource):
url2base[md_url] = url
(max_wait, timeout) = self._get_url_settings()
- if max_wait <= 0:
- return False
start_time = time.time()
avail_url = url_helper.wait_for_url(urls=md_urls, max_wait=max_wait,
timeout=timeout,
@@ -104,8 +102,8 @@ class DataSourceOpenStack(openstack.SourceMixin, sources.DataSource):
if avail_url:
LOG.debug("Using metadata source: '%s'", url2base[avail_url])
else:
- LOG.critical("Giving up on md from %s after %s seconds",
- md_urls, int(time.time() - start_time))
+ LOG.debug("Giving up on OpenStack md from %s after %s seconds",
+ md_urls, int(time.time() - start_time))
self.metadata_address = url2base.get(avail_url)
return bool(avail_url)
diff --git a/cloudinit/url_helper.py b/cloudinit/url_helper.py
index c116a484..4a83169a 100644
--- a/cloudinit/url_helper.py
+++ b/cloudinit/url_helper.py
@@ -266,6 +266,7 @@ def wait_for_url(urls, max_wait=None, timeout=None,
max_wait: roughly the maximum time to wait before giving up
The max time is *actually* len(urls)*timeout as each url will
be tried once and given the timeout provided.
+ a number <= 0 will always result in only one try
timeout: the timeout provided to urlopen
status_cb: call method with string message when a url is not available
headers_cb: call method with single argument of url to get headers