diff options
Diffstat (limited to 'cloudinit/transforms/cc_final_message.py')
-rw-r--r-- | cloudinit/transforms/cc_final_message.py | 63 |
1 files changed, 38 insertions, 25 deletions
diff --git a/cloudinit/transforms/cc_final_message.py b/cloudinit/transforms/cc_final_message.py index abb4ca32..dc4ae34c 100644 --- a/cloudinit/transforms/cc_final_message.py +++ b/cloudinit/transforms/cc_final_message.py @@ -18,41 +18,54 @@ # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. -from cloudinit.CloudConfig import per_always import sys -from cloudinit import util, boot_finished -import time -frequency = per_always +from cloudinit import templater +from cloudinit import util +from cloudinit import version -final_message = "cloud-init boot finished at $TIMESTAMP. Up $UPTIME seconds" +from cloudinit.settings import PER_ALWAYS +frequency = PER_ALWAYS -def handle(_name, cfg, _cloud, log, args): +final_message_def = ("Cloud-init v. {{version}} finished at {{timestamp}}." + " Up {{uptime}} seconds.") + + +def handle(name, cfg, cloud, log, args): + + msg_in = None if len(args) != 0: msg_in = args[0] else: - msg_in = util.get_cfg_option_str(cfg, "final_message", final_message) + msg_in = util.get_cfg_option_str(cfg, "final_message") + + if not msg_in: + template_fn = cloud.get_template_filename('final_message') + if template_fn: + msg_in = util.load_file(template_fn) - try: - uptimef = open("/proc/uptime") - uptime = uptimef.read().split(" ")[0] - uptimef.close() - except IOError as e: - log.warn("unable to open /proc/uptime\n") - uptime = "na" + if not msg_in: + msg_in = final_message_def + uptime = util.uptime() + ts = util.time_rfc2822() + cver = version.version_string() try: - ts = time.strftime("%a, %d %b %Y %H:%M:%S %z", time.gmtime()) - except: - ts = "na" - - try: - subs = {'UPTIME': uptime, 'TIMESTAMP': ts} - sys.stdout.write("%s\n" % util.render_string(msg_in, subs)) + subs = { + 'uptime': uptime, + 'timestamp': ts, + 'version': cver, + } + # Use stdout, stderr or the logger?? + content = templater.render_string(msg_in, subs) + sys.stderr.write("%s\n" % (content)) except Exception as e: - log.warn("failed to render string to stdout: %s" % e) + util.logexc(log, "Failed to render final message template") - fp = open(boot_finished, "wb") - fp.write(uptime + "\n") - fp.close() + boot_fin_fn = cloud.paths.boot_finished + try: + contents = "%s - %s - v. %s\n" % (uptime, ts, cver) + util.write_file(boot_fin_fn, contents) + except: + util.logexc(log, "Failed to write boot finished file %s", boot_fin_fn) |