diff options
-rwxr-xr-x | cloud-init-run-module.py | 50 | ||||
-rw-r--r-- | ec2init/execute.py | 14 | ||||
-rwxr-xr-x | setup.py | 4 |
3 files changed, 67 insertions, 1 deletions
diff --git a/cloud-init-run-module.py b/cloud-init-run-module.py new file mode 100755 index 00000000..5a35de5d --- /dev/null +++ b/cloud-init-run-module.py @@ -0,0 +1,50 @@ +#!/usr/bin/python + +import sys +import ec2init + +def Usage(out = sys.stdout): + out.write("Usage: cloud-init-run-module freq sem-name mod-name [args]") + +def main(): + # expect to be called with + # <freq> <semaphore-name> <module-name> args + if len(sys.argv) < 4: + Usage(sys.stderr) + sys.exit(1) + + (freq,semname,modname)=sys.argv[1:4] + run_args=sys.argv[4:] + + if ec2init.sem_has_run(semname,freq): + sys.stderr.write("%s already ran %s\n" % (semname,freq)) + sys.exit(0) + + try: + mod = __import__('ec2init.' + modname) + inst = getattr(mod,modname) + except: + sys.stderr.write("Failed to load module ec2init.%s\n" % modname) + sys.exit(1) + + import os + + cfg_path = None + cfg_env_name = "CLOUD_CFG" + if os.environ.has_key(cfg_env_name): + cfg_path = os.environ[cfg_env_name] + + try: + if not ec2init.sem_acquire(semname,freq): + sys.stderr.write("Failed to acquire lock on %s\n" % semname) + sys.exit(1) + + inst.run(run_args,cfg_path) + except: + ec2init.sem_clear(semname,freq) + raise + + sys.exit(0) + +if __name__ == '__main__': + main() diff --git a/ec2init/execute.py b/ec2init/execute.py new file mode 100644 index 00000000..d7386663 --- /dev/null +++ b/ec2init/execute.py @@ -0,0 +1,14 @@ +def run(list,cfg): + import subprocess + subprocess.Popen(list).communicate() + retcode = subprocess.call(list) + + if retcode == 0: + return + + if retcode < 0: + str="Cmd terminated by signal %s\n" % -retcode + else: + str="Cmd returned %s\n" % retcode + str+=' '.join(list) + raise Exception(str) @@ -36,7 +36,9 @@ setup(name='EC2-init', 'ec2-set-hostname.py', 'ec2-wait-for-meta-data-service.py', 'ec2-init.py', - 'ec2-is-compat-env'], + 'ec2-is-compat-env', + 'cloud-init-run-module.py' + ], data_files=[('/etc/ec2-init', ['ec2-config.cfg']), ('/etc/ec2-init/templates', glob('templates/*')), ('/etc/init', ['ec2init.conf']), |