summaryrefslogtreecommitdiff
path: root/cloudinit/transforms/cc_final_message.py
diff options
context:
space:
mode:
Diffstat (limited to 'cloudinit/transforms/cc_final_message.py')
-rw-r--r--cloudinit/transforms/cc_final_message.py63
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)