summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xcloud-init-cfg.py10
-rw-r--r--cloudinit/CloudConfig/__init__.py1
-rw-r--r--upstart/cloud-config.conf2
-rw-r--r--upstart/cloud-run-user-script.conf24
4 files changed, 27 insertions, 10 deletions
diff --git a/cloud-init-cfg.py b/cloud-init-cfg.py
index b1c63a17..98bf63ce 100755
--- a/cloud-init-cfg.py
+++ b/cloud-init-cfg.py
@@ -35,11 +35,14 @@ def main():
# read cloud config jobs from config (builtin -> system)
# and run all in order
+ modlist = "cloud_config"
if len(sys.argv) < 2:
Usage(sys.stderr)
sys.exit(1)
if sys.argv[1] == "all":
name = "all"
+ if len(sys.argv) > 2:
+ modlist = sys.argv[2]
else:
freq = None
run_args = []
@@ -64,16 +67,17 @@ def main():
module_list = [ ]
if name == "all":
- modules_list = CC.read_cc_modules(cc.cfg,"cloud_config_modules")
+ modlist_cfg_name = "%s_modules" % modlist
+ modules_list = CC.read_cc_modules(cc.cfg,modlist_cfg_name)
if not len(modules_list):
- err("no modules to run in cloud_config",log)
+ err("no modules to run in cloud_config [%s]" % modlist,log)
sys.exit(0)
else:
module_list.append( [ name, freq ] + run_args )
failures = CC.run_cc_modules(cc,module_list,log)
if len(failures):
- err("errors running cloud_config modules: %s" % failures)
+ err("errors running cloud_config [%s]: %s" % (modlist,failures), log)
sys.exit(len(failures))
def err(msg,log=None):
diff --git a/cloudinit/CloudConfig/__init__.py b/cloudinit/CloudConfig/__init__.py
index bfed44b7..ab2c3573 100644
--- a/cloudinit/CloudConfig/__init__.py
+++ b/cloudinit/CloudConfig/__init__.py
@@ -24,6 +24,7 @@ import traceback
per_instance="once-per-instance"
per_always="always"
+per_once="once"
class CloudConfig():
cfgfile = None
diff --git a/upstart/cloud-config.conf b/upstart/cloud-config.conf
index 6649a99d..5c6fed82 100644
--- a/upstart/cloud-config.conf
+++ b/upstart/cloud-config.conf
@@ -5,4 +5,4 @@ start on (filesystem and started rsyslog)
console output
task
-exec cloud-init-cfg all
+exec cloud-init-cfg all cloud_config
diff --git a/upstart/cloud-run-user-script.conf b/upstart/cloud-run-user-script.conf
index 9a47e57b..e845aa71 100644
--- a/upstart/cloud-run-user-script.conf
+++ b/upstart/cloud-run-user-script.conf
@@ -7,10 +7,22 @@ console output
task
script
-iid=$(cloud-init-query instance-id) || exit 1
-sdir="/var/lib/cloud/data/scripts/${iid}"
-if [ -d "$sdir" ]; then
- exec cloud-init-run-module once-per-instance user-scripts execute \
- run-parts --regex '.*' "$sdir"
-fi
+bd=/var/lib/cloud
+toks="
+ ${bd}/scripts/per-once:once:cloud-scripts-per-once
+ ${bd}/scripts/per-boot:always:cloud-scripts-per-boot
+ ${bd}/scripts/per-instance:once-per-instance:cloud-scripts-per-instance
+ ${bd}/instance/scripts:once-per-instance:user-scripts
+"
+oifs=${IFS}
+errors=""
+for tok in ${toks}; do
+ IFS=":"; set -- ${tok}; IFS=${oifs}
+ dir=${1}; per=${2}; name=${3}
+ [ -d "${dir}" ] || continue
+ cloud-init-run-module "${per}" "${name}" execute \
+ run-parts --regex '.*' "$dir" || errors="${errors} ${name}"
+done
+errors=${errors# }
+[ -z "${errors}" ] || { echo "errors executing ${errors}" 1>&2; exit 1; }
end script