summaryrefslogtreecommitdiff
path: root/cloudinit/DataSourceEc2.py
diff options
context:
space:
mode:
Diffstat (limited to 'cloudinit/DataSourceEc2.py')
-rw-r--r--cloudinit/DataSourceEc2.py61
1 files changed, 32 insertions, 29 deletions
diff --git a/cloudinit/DataSourceEc2.py b/cloudinit/DataSourceEc2.py
index 00d882aa..18c1ed50 100644
--- a/cloudinit/DataSourceEc2.py
+++ b/cloudinit/DataSourceEc2.py
@@ -27,11 +27,12 @@ import sys
import boto_utils
import os.path
import errno
+import urlparse
class DataSourceEc2(DataSource.DataSource):
api_ver = '2009-04-04'
seeddir = seeddir + '/ec2'
- metadata_address = "http://169.254.169.254:80/"
+ metadata_address = "http://169.254.169.254"
def __str__(self):
return("DataSourceEc2")
@@ -80,14 +81,6 @@ class DataSourceEc2(DataSource.DataSource):
except:
return fallback
- def try_to_resolve_metadata(self, address):
- log.warning("Trying %s" % address)
- try:
- socket.getaddrinfo(address.split(":")[1][2:], address.split(":")[2])
- return True
- except Exception as e:
- log.warning("%s failed with %s" % (address, e))
- return False
def wait_for_metadata_service(self, sleeps = None):
mcfg = self.ds_cfg
@@ -110,43 +103,45 @@ class DataSourceEc2(DataSource.DataSource):
sleeptime = 1
- addresslist = ["http://169.254.169.254:80", "http://instance-data:8773"]
+ def_mdurls = ["http://169.254.169.254", "http://instance-data:8773"]
try:
- addresslist = mcfg.get("metadata_urls", addresslist)
+ mdurls = mcfg.get("metadata_urls", def_mdurls)
except Exception as e:
+ mdurls = def_mdurls
util.logexc(log)
- log.warning("Failed to get metadata URLs, using defaults")
+ log.warn("Failed to get metadata URLs, using defaults")
starttime = time.time()
- log.warning("Attempting to resolve metadata services")
- #for addr in addresslist:
- # log.warning("\t%s/meta-data/instance-id" % addr)
-
# Remove addresses from the list that wont resolve.
- addresslist[:] = [x for x in addresslist if self.try_to_resolve_metadata(x)]
+ filtered = [x for x in mdurls if try_to_resolve_metadata(x)]
- log.warning("The following metadata service addresses resolved:")
- for addr in addresslist:
- log.warning("\t%s/meta-data/instance-id" % addr)
+ if set(filtered) != set(mdurls):
+ log.debug("removed the following from metadata urls: %s" %
+ list((set(mdurls) - set(filtered))))
+ if len(filtered):
+ mdurls = filtered
+ else:
+ log.warn("Empty metadata url list! using default list")
+ mdurls = def_mdurls
+
+ log.debug("Searching the following metadata urls: %s" % mdurls)
for x in range(sleeps):
- log.warning("[%02s/%s] Trying Metadata Services:" % (x+1, sleeps))
- for address in addresslist:
- url="%s/%s/meta-data/instance-id" % (address, self.api_ver)
+ for url in mdurls:
+ iurl="%s/%s/meta-data/instance-id" % (url, self.api_ver)
# given 100 sleeps, this ends up total sleep time of 1050 sec
sleeptime=int(x/5)+1
reason = ""
try:
- #log.warning("\t - Trying %s" % url)
req = urllib2.Request(url)
resp = urllib2.urlopen(req, timeout=timeout)
if resp.read() != "":
- self.metadata_address = address
- log.warning("Success! Using %s for metadata" % self.metadata_address)
+ self.metadata_address = url
+ log.debug("Using metadata source: '%s'" % url)
return True
reason = "empty data [%s]" % resp.getcode()
except urllib2.HTTPError as e:
@@ -156,10 +151,9 @@ class DataSourceEc2(DataSource.DataSource):
#not needed? Addresses being checked are displayed above
#if x == 0:
- # log.warning("waiting for metadata service at %s" % url)
+ # log.warn("waiting for metadata service at %s" % url)
- log.warning("\t%s - Failed With : %s" % (address, reason))
- log.warning("Sleeping for %d seconds\n" % sleeptime)
+ log.warn("'%s' failed: %s" % (url, reason))
time.sleep(sleeptime)
log.critical("giving up on md after %i seconds\n" %
@@ -217,6 +211,15 @@ class DataSourceEc2(DataSource.DataSource):
return True
return False
+def try_to_resolve_metadata(url):
+ try:
+ addr = urlparse.urlsplit(url).netloc.split(":")[0]
+ socket.getaddrinfo(addr, None)
+ return True
+ except Exception as e:
+ return False
+
+
datasources = [
( DataSourceEc2, ( DataSource.DEP_FILESYSTEM , DataSource.DEP_NETWORK ) ),
]