← Back to team overview

cloud-init-dev team mailing list archive

[Merge] lp:~harlowja/cloud-init/cloud-emit into lp:cloud-init

 

Joshua Harlow has proposed merging lp:~harlowja/cloud-init/cloud-emit into lp:cloud-init.

Requested reviews:
  cloud init development team (cloud-init-dev)

For more details, see:
https://code.launchpad.net/~harlowja/cloud-init/cloud-emit/+merge/119079

Rework the cloud-config upstart event emission so that its a somewhat generic module instead of a core piece of code.
-- 
https://code.launchpad.net/~harlowja/cloud-init/cloud-emit/+merge/119079
Your team cloud init development team is requested to review the proposed merge of lp:~harlowja/cloud-init/cloud-emit into lp:cloud-init.
=== modified file 'bin/cloud-init'
--- bin/cloud-init	2012-07-27 02:47:12 +0000
+++ bin/cloud-init	2012-08-10 03:53:17 +0000
@@ -100,29 +100,6 @@
     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 @@
     # 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)
 

=== added file 'cloudinit/config/cc_emit_upstart.py'
--- cloudinit/config/cc_emit_upstart.py	1970-01-01 00:00:00 +0000
+++ cloudinit/config/cc_emit_upstart.py	2012-08-10 03:53:17 +0000
@@ -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@xxxxxxxxxxxxx>
+#    Author: Juerg Haefliger <juerg.haefliger@xxxxxx>
+#
+#    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)

=== modified file 'config/cloud.cfg'
--- config/cloud.cfg	2012-07-11 21:00:21 +0000
+++ config/cloud.cfg	2012-08-10 03:53:17 +0000
@@ -32,6 +32,10 @@
 
 # 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