summaryrefslogtreecommitdiff
path: root/cloudinit/util.py
diff options
context:
space:
mode:
authorharlowja <harlowja@virtualbox.rhel>2013-02-23 21:23:24 -0800
committerharlowja <harlowja@virtualbox.rhel>2013-02-23 21:23:24 -0800
commiteacfc7ffbec3e6a0348ed484da895e2d2fc5ba10 (patch)
treee63c8f74a34c6250764136865c542af6ba78d989 /cloudinit/util.py
parent46a7a39775ed8f745ec8b63a9563f3ae6337d845 (diff)
downloadvyos-cloud-init-eacfc7ffbec3e6a0348ed484da895e2d2fc5ba10.tar.gz
vyos-cloud-init-eacfc7ffbec3e6a0348ed484da895e2d2fc5ba10.zip
Get tests working and further adjustments.
Diffstat (limited to 'cloudinit/util.py')
-rw-r--r--cloudinit/util.py34
1 files changed, 25 insertions, 9 deletions
diff --git a/cloudinit/util.py b/cloudinit/util.py
index 42b3ab01..dc3c5639 100644
--- a/cloudinit/util.py
+++ b/cloudinit/util.py
@@ -70,18 +70,31 @@ FN_ALLOWED = ('_-.()' + string.digits + string.ascii_letters)
CONTAINER_TESTS = ['running-in-container', 'lxc-is-container']
-class FileResponse(object):
- def __init__(self, path, contents):
- self.code = 200
+# Made to have same accessors as UrlResponse so that the
+# read_file_or_url can return this or that object and the
+# 'user' of those objects will not need to know the difference.
+class StringResponse(object):
+ def __init__(self, contents, code=200):
+ self.code = code
self.headers = {}
self.contents = contents
- self.ok = True
- self.url = path
+ self.url = None
+
+ def ok(self, *args, **kwargs):
+ if self.code != 200:
+ return False
+ return True
def __str__(self):
return self.contents
+class FileResponse(StringResponse):
+ def __init__(self, path, contents, code=200):
+ StringResponse.__init__(self, contents, code=code)
+ self.url = path
+
+
class ProcessExecutionError(IOError):
MESSAGE_TMPL = ('%(description)s\n'
@@ -630,7 +643,7 @@ def read_optional_seed(fill, base="", ext="", timeout=5):
fill['user-data'] = ud
fill['meta-data'] = md
return True
- except OSError as e:
+ except IOError as e:
if e.errno == errno.ENOENT:
return False
raise
@@ -670,9 +683,12 @@ 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):
+ url = url.lstrip()
if url.startswith("/"):
url = "file://%s" % url
if url.lower().startswith("file://"):
+ if data:
+ LOG.warn("Unable to post data to file resource %s", url)
file_path = url[len("file://"):]
return FileResponse(file_path, contents=load_file(file_path))
else:
@@ -724,13 +740,13 @@ def read_seeded(base="", ext="", timeout=5, retries=10, file_retries=0):
md_resp = read_file_or_url(md_url, timeout, retries, file_retries)
md = None
- if md_resp.ok:
+ if md_resp.ok():
md_str = str(md_resp)
md = load_yaml(md_str, default={})
ud_resp = read_file_or_url(ud_url, timeout, retries, file_retries)
ud = None
- if ud_resp.ok:
+ if ud_resp.ok():
ud_str = str(ud_resp)
ud = ud_str
@@ -900,7 +916,7 @@ def get_cmdline_url(names=('cloud-config-url', 'url'),
return (None, None, None)
resp = read_file_or_url(url)
- if resp.contents.startswith(starts) and resp.ok:
+ if resp.contents.startswith(starts) and resp.ok():
return (key, url, str(resp))
return (key, url, None)