From e119877fcf9c38a89c4a054b146d8189b866d4e8 Mon Sep 17 00:00:00 2001 From: Scott Moser Date: Tue, 10 Jul 2012 17:47:02 -0400 Subject: send welcome message after logging has been applied in the 'cloud-init init' stages, we want the welcome message to get to the correct output as specified by the system's configuration. Ie, if the local /etc/cloud.config.d had 'output' or 'log_cfg' settings we want those to be able to affect the welcome message also. In normal operation, nothing else will go to stdout or stderr before this, and likely/hopefully nothing terribly important to the logs. --- bin/cloud-init | 34 +++++++++++++++++++++++++++------- cloudinit/util.py | 6 ++++-- 2 files changed, 31 insertions(+), 9 deletions(-) diff --git a/bin/cloud-init b/bin/cloud-init index 51360270..9dd7296e 100755 --- a/bin/cloud-init +++ b/bin/cloud-init @@ -82,16 +82,22 @@ def print_exc(msg=''): sys.stderr.write("\n") -def welcome(action): +def welcome(action, msg=None): + if not msg: + msg = welcome_format(action) + util.multi_log("%s\n" % (msg), + console=False, stderr=True, log=LOG) + return msg + + +def welcome_format(action): tpl_params = { 'version': version.version_string(), 'uptime': util.uptime(), 'timestamp': util.time_rfc2822(), 'action': action, } - tpl_msg = templater.render_string(WELCOME_MSG_TPL, tpl_params) - util.multi_log("%s\n" % (tpl_msg), - console=False, stderr=True) + return templater.render_string(WELCOME_MSG_TPL, tpl_params) def extract_fns(args): @@ -154,7 +160,7 @@ def main_init(name, args): # the modules objects configuration # 10. Run the modules for the 'init' stage # 11. Done! - welcome(name) + w_msg = welcome_format(name) init = stages.Init(deps) # Stage 1 init.read_cfg(extract_fns(args)) @@ -174,6 +180,12 @@ def main_init(name, args): " longer be active shortly")) logging.resetLogging() logging.setupLogging(init.cfg) + + # Any log usage prior to setupLogging above did not have local user log + # config applied. We send the welcome message now, as stderr/out have + # been redirected and log now configured. + welcome(name, msg=w_msg) + # Stage 3 try: init.initialize() @@ -284,7 +296,7 @@ def main_modules(action_name, args): # the modules objects configuration # 5. Run the modules for the given stage name # 6. Done! - welcome("%s:%s" % (action_name, name)) + w_msg = welcome_format("%s:%s" % (action_name, name)) init = stages.Init(ds_deps=[]) # Stage 1 init.read_cfg(extract_fns(args)) @@ -316,6 +328,10 @@ def main_modules(action_name, args): " longer be active shortly")) logging.resetLogging() logging.setupLogging(mods.cfg) + + # now that logging is setup and stdout redirected, send welcome + welcome(name, msg=w_msg) + # Stage 5 return run_module_section(mods, name, name) @@ -335,7 +351,7 @@ def main_single(name, args): # 5. Run the single module # 6. Done! mod_name = args.name - welcome("%s:%s" % (name, mod_name)) + w_msg = welcome_format(name) init = stages.Init(ds_deps=[]) # Stage 1 init.read_cfg(extract_fns(args)) @@ -374,6 +390,10 @@ def main_single(name, args): " longer be active shortly")) logging.resetLogging() logging.setupLogging(mods.cfg) + + # now that logging is setup and stdout redirected, send welcome + welcome(name, msg=w_msg) + # Stage 5 (which_ran, failures) = mods.run_single(mod_name, mod_args, diff --git a/cloudinit/util.py b/cloudinit/util.py index 6501cbdf..e7a2ebcd 100644 --- a/cloudinit/util.py +++ b/cloudinit/util.py @@ -288,8 +288,10 @@ def multi_log(text, console=True, stderr=True, wfh.write(text) wfh.flush() if log: - log.log(log_level, text) - + if text[-1] == "\n": + log.log(log_level, text[:-1]) + else: + log.log(log_level, text) def is_ipv4(instr): """ determine if input string is a ipv4 address. return boolean""" -- cgit v1.2.3