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.
This commit is contained in:
Joshua Harlow 2012-08-09 20:48:01 -07:00
parent 84c7720af5
commit 6e87371ee8
3 changed files with 51 additions and 28 deletions

View File

@ -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)

View File

@ -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 <scott.moser@canonical.com>
# Author: Juerg Haefliger <juerg.haefliger@hp.com>
#
# 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 <http://www.gnu.org/licenses/>.
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)

View File

@ -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