summaryrefslogtreecommitdiff
path: root/ec2init
diff options
context:
space:
mode:
authorSoren Hansen <soren@canonical.com>2009-06-26 13:57:27 +0200
committerSoren Hansen <soren@canonical.com>2009-06-26 13:57:27 +0200
commitb098228ab03003218b894855142dec9a8f406cfb (patch)
treeefd52bd8ab547fd1b61406a68cb1eb5f0d2e2042 /ec2init
parentbb5711688e7f6b2abe4e82a5b5233194a323b99d (diff)
downloadvyos-cloud-init-b098228ab03003218b894855142dec9a8f406cfb.tar.gz
vyos-cloud-init-b098228ab03003218b894855142dec9a8f406cfb.zip
* Distutils added
* New ec2init python module introduced * Lots and lots of stuff cleaned up and moved to ec2init python module. * Started the move to Boto
Diffstat (limited to 'ec2init')
-rw-r--r--ec2init/__init__.py93
1 files changed, 93 insertions, 0 deletions
diff --git a/ec2init/__init__.py b/ec2init/__init__.py
new file mode 100644
index 00000000..3fa0de1d
--- /dev/null
+++ b/ec2init/__init__.py
@@ -0,0 +1,93 @@
+#
+# Common code for the EC2 initialisation scripts in Ubuntu
+# Copyright 2009 Canonical Ltd.
+#
+# 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
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+#
+
+from configobj import ConfigObj
+import os
+import socket
+
+import boto.utils
+
+class EC2Init():
+ api_ver = '2008-02-01'
+ filename = '/etc/ec2-init/ec2-config.cfg'
+
+ def __init__(self):
+ self.meta_data_base_url = 'http://169.254.169.254/%s/meta-data' % self.api_ver
+ self.user_data_base_url = 'http://169.254.169.254/%s/user-data' % self.api_ver
+ self.config = ConfigObj(filename)
+ self.wait_for_metadata_service()
+ bailout_command = self.get_cfg_option_str('bailout_command')
+ if bailout_command:
+ os.system(bailout_command)
+
+ def get_cfg_option_bool(self, key):
+ val = self.config[key]
+ if val.lower() in ['1', 'on', 'yes']:
+ return True
+ return False
+
+ def get_cfg_option_str(self, key):
+ return config[key]
+
+ def get_ssh_keys(self):
+ data = urllib.urlopen('%s/public-keys/' % self.meta_data_base_url).read()
+ keyids = [line.split('=')[0] for line in data.split('\n')]
+ return [urllib.urlopen('%s/public-keys/%d/openssh-key' % (self.meta_data_base_url, int(keyid))).read().rstrip() for keyid in keyids]
+
+ def get_user_data(self):
+ return boto.utils.get_instance_userdata()
+
+ def get_instance_metadata(self):
+ self.instance_metadata = getattr(self, 'instance_metadata', boto.utils.get_instance_metadata())
+ return self.instance_metadata
+
+ def get_ami_id(self):
+ return self.get_instance_metadata()['ami-id']
+
+ def get_availability_zone(self):
+ return self.get_instance_metadata()['availability-zone']
+
+ def get_hostname(self):
+ return self.get_instance_metadata()['local-hostname']
+
+ def get_mirror_for_availability_zone(self):
+ availability_zone = self.get_availability_zone()
+ if zone.startswith("us"):
+ return 'http://us.ec2.archive.ubuntu.com/ubuntu/'
+ elif zone.startswith("eu"):
+ return 'http://eu.ec2.archive.ubuntu.com/ubuntu/'
+
+ return 'http://archive.ubuntu.com/ubuntu/'
+
+ def wait_for_metadata_service(self):
+ timeout = 2
+ # This gives us about half an hour before we ultimately bail out
+ for x in range(10):
+ s = socket.socket()
+ try:
+ address = '169.254.169.254'
+ port = 80
+ s.connect((address,port))
+ s.close()
+ return True
+ except socket.error, e:
+ time.sleep(timeout)
+ timeout = timeout * 2
+ return False