diff options
-rwxr-xr-x | cloud-init-cfg.py | 10 | ||||
-rw-r--r-- | cloudinit/CloudConfig/__init__.py | 1 | ||||
-rw-r--r-- | upstart/cloud-config.conf | 2 | ||||
-rw-r--r-- | upstart/cloud-run-user-script.conf | 24 |
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 |