diff options
Diffstat (limited to 'ec2-run-user-data.py')
-rwxr-xr-x | ec2-run-user-data.py | 42 |
1 files changed, 33 insertions, 9 deletions
diff --git a/ec2-run-user-data.py b/ec2-run-user-data.py index 6638ef37..513c64ff 100755 --- a/ec2-run-user-data.py +++ b/ec2-run-user-data.py @@ -3,7 +3,7 @@ # Fetch and run user-data from EC2 # Copyright 2008 Canonical Ltd. # -# Author: Soren Hansen <soren@canonical.com> +# Original-Author: Soren Hansen <soren@canonical.com> # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by @@ -23,10 +23,22 @@ import os import sys import tempfile import urllib +import socket +from time import gmtime, strftime api_ver = '2008-02-01' metadata = None +def checkServer(): + s = socket.socket() + try: + address = '169.254.169.254' + port = 80 + s.connect((address,port)) + except socket.error, e: + print "!!!! Unable to connect to %s" % address + sys.exit(0) + def get_user_data(): url = 'http://169.254.169.254/%s/user-data' % api_ver fp = urllib.urlopen(url) @@ -34,15 +46,27 @@ def get_user_data(): fp.close() return data +def get_ami_id(): + url = 'http://169.254.169.254/%s/meta-data' % api_ver + ami_id = urllib.urlopen('%s/ami-id/' %url).read() + return ami_id + +checkServer() user_data = get_user_data() +amiId = get_ami_id() +filename = '/var/ec2/.already-ran.%s' % amiId -if user_data.startswith('#!'): - (fp, path) = tempfile.mkstemp() - fp.write(data) - fp.close() - os.chmod(path, 0700) - status = os.system('%s' % path) - os.unlink(path) - sys.exit(os.WIFEXITSTATUS(status)) +if os.path.exists(filename): + print "ec2-run-user-data already ran for this instance." + sys.exit(0) +elif user_data.startswith('#!'): + # run it + (fp, path) = tempfile.mkstemp() + os.write(fp,user_data) + os.close(fp); + os.chmod(path, 0700) + status = os.system('%s | logger -t "user-data" ' % path) + os.unlink(path) + os.system('touch %s' %(filename)) sys.exit(0) |