From d9a4aad5d5cc8cb78997d66850d1916341b8d1cd Mon Sep 17 00:00:00 2001 From: Joshua Harlow Date: Thu, 9 Aug 2012 20:48:01 -0700 Subject: Move the code that did the 'cloud-config' upstart event name emitting to a config module and make it more generic in that it can take in a list of event names to emit as arguments. Add a yaml example to replace the functionality removed from the main binary. --- bin/cloud-init | 28 ---------------------- cloudinit/config/cc_emit_upstart.py | 47 +++++++++++++++++++++++++++++++++++++ config/cloud.cfg | 4 ++++ 3 files changed, 51 insertions(+), 28 deletions(-) create mode 100644 cloudinit/config/cc_emit_upstart.py diff --git a/bin/cloud-init b/bin/cloud-init index 3ecc3dad..1f017475 100755 --- a/bin/cloud-init +++ b/bin/cloud-init @@ -100,29 +100,6 @@ def welcome_format(action): return templater.render_string(WELCOME_MSG_TPL, tpl_params) -def emit_cloud_config_ready(cfg, cfgpath): - # emit the cloud config ready event - # this can be used by upstart jobs for 'start on cloud-config'. There is a - # builtin value for 'cc_ready_cmd' if that is not overidden by config, then - # we check to make sure that /sbin/initctl is availble. This makes it so - # that non-ubuntu distro will just no-op here with no explicit config. - cmd = None - if 'cc_ready_cmd' in cfg: - cmd = cfg['cc_ready_cmd'] - if isinstance(cmd, str): - cmd = ['sh', '-c', cmd] - elif os.path.isfile("/sbin/initctl"): - cmd = ['initctl', 'emit', 'cloud-config', - 'CLOUD_CFG=%s' % cfgpath] - - if not cmd: - return - try: - util.subp(cmd) - except: - LOG.warn("emission of cloud-config event failed") - - def extract_fns(args): # Files are already opened so lets just pass that along # since it would of broke if it couldn't have @@ -361,11 +338,6 @@ def main_modules(action_name, args): # now that logging is setup and stdout redirected, send welcome welcome(name, msg=w_msg) - # send the cloud-config event. - if name == "config": - emit_cloud_config_ready(mods.cfg, - init.paths.get_ipath_cur("cloud_config")) - # Stage 5 return run_module_section(mods, name, name) diff --git a/cloudinit/config/cc_emit_upstart.py b/cloudinit/config/cc_emit_upstart.py new file mode 100644 index 00000000..79f7119f --- /dev/null +++ b/cloudinit/config/cc_emit_upstart.py @@ -0,0 +1,47 @@ +# vi: ts=4 expandtab +# +# Copyright (C) 2009-2011 Canonical Ltd. +# Copyright (C) 2012 Hewlett-Packard Development Company, L.P. +# +# Author: Scott Moser +# Author: Juerg Haefliger +# +# This program is free software: you can redistribute it and/or modify +# it under the terms of the GNU General Public License version 3, as +# published by the Free Software Foundation. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# +# You should have received a copy of the GNU General Public License +# along with this program. If not, see . + +import os + +from cloudinit import util +from cloudinit.settings import PER_ALWAYS + +frequency = PER_ALWAYS + +distros = ['ubuntu'] + + +def handle(name, _cfg, cloud, log, args): + event_names = args + if not event_names: + log.debug(("Skipping module named %s," + " no event names provided"), name) + return + if not os.path.isfile("/sbin/initctl"): + log.debug(("Skipping module named %s," + " no /sbin/initctl located"), name) + return + cfgpath = cloud.paths.get_ipath_cur("cloud_config") + for n in event_names: + cmd = ['initctl', 'emit', str(n), 'CLOUD_CFG=%s' % cfgpath] + try: + util.subp(cmd) + except: + log.warn("Emission of upstart event %s failed", n) diff --git a/config/cloud.cfg b/config/cloud.cfg index 72e413d5..77b41063 100644 --- a/config/cloud.cfg +++ b/config/cloud.cfg @@ -32,6 +32,10 @@ cloud_init_modules: # The modules that run in the 'config' stage cloud_config_modules: +# Emit the cloud config ready event +# this can be used by upstart jobs for 'start on cloud-config'. + - name: emit_upstart + args: ["cloud-config"] - mounts - ssh-import-id - locale -- cgit v1.2.3 From e7116b69f093600e1e156ee332417d0a30b0df9c Mon Sep 17 00:00:00 2001 From: Joshua Harlow Date: Fri, 10 Aug 2012 10:41:52 -0700 Subject: Adjustments so that the default old event is used when no args are provided. Adjust the config file to use this older method so that older changes aren't needed. Also when calling 'initctl' emit fails log the exception message so that some useful warning information can be produced. --- cloudinit/config/cc_emit_upstart.py | 13 +++++++------ config/cloud.cfg | 3 +-- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/cloudinit/config/cc_emit_upstart.py b/cloudinit/config/cc_emit_upstart.py index 79f7119f..68b86ff6 100644 --- a/cloudinit/config/cc_emit_upstart.py +++ b/cloudinit/config/cc_emit_upstart.py @@ -25,15 +25,15 @@ from cloudinit.settings import PER_ALWAYS frequency = PER_ALWAYS -distros = ['ubuntu'] +distros = ['ubuntu', 'debian'] def handle(name, _cfg, cloud, log, args): event_names = args if not event_names: - log.debug(("Skipping module named %s," - " no event names provided"), name) - return + # Default to the 'cloud-config' + # event for backwards compat. + event_names = ['cloud-config'] if not os.path.isfile("/sbin/initctl"): log.debug(("Skipping module named %s," " no /sbin/initctl located"), name) @@ -43,5 +43,6 @@ def handle(name, _cfg, cloud, log, args): cmd = ['initctl', 'emit', str(n), 'CLOUD_CFG=%s' % cfgpath] try: util.subp(cmd) - except: - log.warn("Emission of upstart event %s failed", n) + except Exception as e: + # TODO, use log exception from utils?? + log.warn("Emission of upstart event %s failed due to: %s", n, e) diff --git a/config/cloud.cfg b/config/cloud.cfg index 77b41063..2b4d9e63 100644 --- a/config/cloud.cfg +++ b/config/cloud.cfg @@ -34,8 +34,7 @@ cloud_init_modules: cloud_config_modules: # Emit the cloud config ready event # this can be used by upstart jobs for 'start on cloud-config'. - - name: emit_upstart - args: ["cloud-config"] + - emit_upstart - mounts - ssh-import-id - locale -- cgit v1.2.3