summaryrefslogtreecommitdiff
path: root/ec2-run-user-data.py
diff options
context:
space:
mode:
Diffstat (limited to 'ec2-run-user-data.py')
-rwxr-xr-xec2-run-user-data.py42
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)