summaryrefslogtreecommitdiff
path: root/cloud-init.py
diff options
context:
space:
mode:
authorScott Moser <smoser@ubuntu.com>2012-04-05 00:49:11 -0400
committerScott Moser <smoser@ubuntu.com>2012-04-05 00:49:11 -0400
commitc2a4447527d5e8b2e2999b6f1832577203a64f2a (patch)
treeaa58108146e35f5ab5d93500c1116bcad12d6ce8 /cloud-init.py
parentb39abf5bbe51d62d1ef1dd1e813720eafc1ddc85 (diff)
parent6d62fe860f55faf2d7b0b6216c11305e114c5214 (diff)
downloadvyos-cloud-init-c2a4447527d5e8b2e2999b6f1832577203a64f2a.tar.gz
vyos-cloud-init-c2a4447527d5e8b2e2999b6f1832577203a64f2a.zip
Allow a url to cloud-config data to be specified on kernel config line
In order to allow an ephemeral, or otherwise pristine image to receive some configuration, cloud-init will read a url directed by the kernel command line and proceed as if its data had previously existed. For more information, see doc/kernel-cmdline.txt
Diffstat (limited to 'cloud-init.py')
-rwxr-xr-xcloud-init.py30
1 files changed, 30 insertions, 0 deletions
diff --git a/cloud-init.py b/cloud-init.py
index 9e0a0405..3261e3f3 100755
--- a/cloud-init.py
+++ b/cloud-init.py
@@ -28,6 +28,7 @@ import cloudinit.CloudConfig as CC
import cloudinit.DataSource as ds
import cloudinit.netinfo as netinfo
import time
+import traceback
import logging
import errno
import os
@@ -67,6 +68,30 @@ def main():
warn("unable to open /proc/uptime\n")
uptime = "na"
+ cmdline_msg = None
+ cmdline_exc = None
+ if cmd == "start":
+ target = "%s.d/%s" % (cloudinit.system_config,
+ "91_kernel_cmdline_url.cfg")
+ if os.path.exists(target):
+ cmdline_msg = "cmdline: %s existed" % target
+ else:
+ cmdline=util.get_cmdline()
+ try:
+ (key, url, content) = cloudinit.get_cmdline_url(
+ cmdline=cmdline)
+ if key and content:
+ util.write_file(target, content, mode=0600)
+ cmdline_msg = ("cmdline: wrote %s from %s, %s" %
+ (target, key, url))
+ elif key:
+ cmdline_msg = ("cmdline: %s, %s had no cloud-config" %
+ (key, url))
+ except Exception:
+ cmdline_exc = ("cmdline: '%s' raised exception\n%s" %
+ (cmdline, traceback.format_exc()))
+ warn(cmdline_exc)
+
try:
cfg = cloudinit.get_base_cfg(cfg_path)
except Exception as e:
@@ -86,6 +111,11 @@ def main():
cloudinit.logging_set_from_cfg(cfg)
log = logging.getLogger()
+ if cmdline_exc:
+ log.debug(cmdline_exc)
+ elif cmdline_msg:
+ log.debug(cmdline_msg)
+
try:
cloudinit.initfs()
except Exception as e: