move cloud-config event to a config module
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.
This commit is contained in:
commit
042706e23c
@ -100,29 +100,6 @@ def welcome_format(action):
|
|||||||
return templater.render_string(WELCOME_MSG_TPL, tpl_params)
|
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):
|
def extract_fns(args):
|
||||||
# Files are already opened so lets just pass that along
|
# Files are already opened so lets just pass that along
|
||||||
# since it would of broke if it couldn't have
|
# 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
|
# now that logging is setup and stdout redirected, send welcome
|
||||||
welcome(name, msg=w_msg)
|
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
|
# Stage 5
|
||||||
return run_module_section(mods, name, name)
|
return run_module_section(mods, name, name)
|
||||||
|
|
||||||
|
48
cloudinit/config/cc_emit_upstart.py
Normal file
48
cloudinit/config/cc_emit_upstart.py
Normal file
@ -0,0 +1,48 @@
|
|||||||
|
# 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', 'debian']
|
||||||
|
|
||||||
|
|
||||||
|
def handle(name, _cfg, cloud, log, args):
|
||||||
|
event_names = args
|
||||||
|
if not event_names:
|
||||||
|
# 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)
|
||||||
|
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 Exception as e:
|
||||||
|
# TODO, use log exception from utils??
|
||||||
|
log.warn("Emission of upstart event %s failed due to: %s", n, e)
|
@ -32,6 +32,9 @@ cloud_init_modules:
|
|||||||
|
|
||||||
# The modules that run in the 'config' stage
|
# The modules that run in the 'config' stage
|
||||||
cloud_config_modules:
|
cloud_config_modules:
|
||||||
|
# Emit the cloud config ready event
|
||||||
|
# this can be used by upstart jobs for 'start on cloud-config'.
|
||||||
|
- emit_upstart
|
||||||
- mounts
|
- mounts
|
||||||
- ssh-import-id
|
- ssh-import-id
|
||||||
- locale
|
- locale
|
||||||
|
Loading…
x
Reference in New Issue
Block a user