summaryrefslogtreecommitdiff
path: root/cloud-init.py
diff options
context:
space:
mode:
Diffstat (limited to 'cloud-init.py')
-rwxr-xr-xcloud-init.py94
1 files changed, 13 insertions, 81 deletions
diff --git a/cloud-init.py b/cloud-init.py
index bdfa9f01..7c261c26 100755
--- a/cloud-init.py
+++ b/cloud-init.py
@@ -22,6 +22,7 @@ import sys
import cloudinit
import cloudinit.util as util
+import cloudinit.CloudConfig as CC
import time
import logging
import errno
@@ -98,92 +99,23 @@ def main():
warn("consuming user data failed!\n")
raise
- try:
- if util.get_cfg_option_bool(cloud.cfg,"preserve_hostname",False):
- log.debug("preserve_hostname is set. not managing hostname")
- else:
- hostname = cloud.get_hostname()
- cloud.sem_and_run("set_hostname", "once-per-instance",
- set_hostname, [ hostname, log ], False)
- cloud.sem_and_run("update_hostname", "always",
- update_hostname, [ hostname, log ], False)
- except Exception, e:
- util.logexc(log)
- warn("failed to set hostname\n")
-
- #print "user data is:" + cloud.get_user_data()
-
# finish, send the cloud-config event
cloud.initctl_emit()
- sys.exit(0)
-
-# read hostname from a 'hostname' file
-# allow for comments and stripping line endings.
-# if file doesn't exist, or no contents, return default
-def read_hostname(filename, default=None):
- try:
- fp = open(filename,"r")
- lines = fp.readlines()
- fp.close()
- for line in lines:
- hpos = line.find("#")
- if hpos != -1:
- line = line[0:hpos]
- line = line.rstrip()
- if line:
- return line
- except IOError, e:
- if e.errno == errno.ENOENT: pass
- return default
-
-def set_hostname(hostname, log):
- try:
- subprocess.Popen(['hostname', hostname]).communicate()
- util.write_file("/etc/hostname","%s\n" % hostname, 0644)
- log.debug("populated /etc/hostname with %s on first boot", hostname)
- except:
- log.error("failed to set_hostname")
-
-def update_hostname(hostname, log):
- prev_file="%s/%s" % (cloudinit.get_cpath('datadir'),"previous-hostname")
- etc_file = "/etc/hostname"
-
- hostname_prev = None
- hostname_in_etc = None
-
- try:
- hostname_prev = read_hostname(prev_file)
- except:
- log.warn("Failed to open %s" % prev_file)
-
- try:
- hostname_in_etc = read_hostname(etc_file)
- except:
- log.warn("Failed to open %s" % etc_file)
-
- update_files = []
- if not hostname_prev or hostname_prev != hostname:
- update_files.append(prev_file)
-
- if (not hostname_in_etc or
- (hostname_in_etc == hostname_prev and hostname_in_etc != hostname)):
- update_files.append(etc_file)
-
- try:
- for fname in update_files:
- util.write_file(fname,"%s\n" % hostname, 0644)
- log.debug("wrote %s to %s" % (hostname,fname))
- except:
- log.warn("failed to write hostname to %s" % fname)
+ cfg_path = cloudinit.get_ipath_cur("cloud_config")
+ cc = CC.CloudConfig(cfg_path, cloud)
+ modules_list = CC.read_cc_modules(cc.cfg,"cloud_init_modules")
- if hostname_in_etc and hostname_prev and hostname_in_etc != hostname_prev:
- log.debug("%s differs from %s. assuming user maintained" %
- (prev_file,etc_file))
+ failures = []
+ if len(modules_list):
+ failures = CC.run_cc_modules(cc,module_list,log)
+ else:
+ msg = "no cloud_init_modules to run"
+ sys.stderr.write(msg + "\n")
+ log.debug(msg)
+ sys.exit(0)
- if etc_file in update_files:
- log.debug("setting hostname to %s" % hostname)
- subprocess.Popen(['hostname', hostname]).communicate()
+ sys.exit(len(failures))
if __name__ == '__main__':
main()