summaryrefslogtreecommitdiff
path: root/cloudinit/DataSourceEc2.py
diff options
context:
space:
mode:
authorScott Moser <smoser@ubuntu.com>2010-08-12 01:56:12 -0400
committerScott Moser <smoser@ubuntu.com>2010-08-12 01:56:12 -0400
commit54346d35221fd405423dd33a2b06202f10e2aa22 (patch)
tree71b636d2967abbb53cdb4d3c70061524e2add7ff /cloudinit/DataSourceEc2.py
parenta43357425d32b53aa58e226613e7fa2dd0714102 (diff)
downloadvyos-cloud-init-54346d35221fd405423dd33a2b06202f10e2aa22.tar.gz
vyos-cloud-init-54346d35221fd405423dd33a2b06202f10e2aa22.zip
initial dump of "sans-cloud" code (DataSourceNoCloud)
The new classes 'DataSourceNoCloud' and 'DataSourceNoCloudNet' implement a way to get data from the filesystem, or (very minimal) data from the kernel command line. This allows the user to seed data to these sources. There are now 2 "cloud-init" jobs, cloud-init-local that runs on mounted MOUNTPOINT=/ and 'cloud-init' that runs on start on (mounted MOUNTPOINT=/ and net-device-up IFACE=eth0 and stopped cloud-init-local ) The idea is that cloud-init-local can actually function without network. The last thing in this commit is "uncloud-init". This tool can be invoked as 'init=/usr/lib/cloud-init/uncloud-init' It will "uncloudify" things in the image, generally making it easier to use for a simpler environment, and then it will exec /sbin/init.
Diffstat (limited to 'cloudinit/DataSourceEc2.py')
-rw-r--r--cloudinit/DataSourceEc2.py51
1 files changed, 12 insertions, 39 deletions
diff --git a/cloudinit/DataSourceEc2.py b/cloudinit/DataSourceEc2.py
index cf50a3d5..8a79eb5f 100644
--- a/cloudinit/DataSourceEc2.py
+++ b/cloudinit/DataSourceEc2.py
@@ -19,12 +19,14 @@
import DataSource
import cloudinit
+import cloudinit.util as util
import socket
import urllib2
import time
import sys
import boto_utils
import os.path
+import errno
class DataSourceEc2(DataSource.DataSource):
api_ver = '2009-04-04'
@@ -39,21 +41,20 @@ class DataSourceEc2(DataSource.DataSource):
def __init__(self):
pass
+ def __str__(self):
+ return("DataSourceEc2")
+
def get_data(self):
try:
- udf = open(self.cachedir + "/user-data.raw")
- self.userdata_raw = udf.read()
- udf.close()
-
- mdf = open(self.cachedir + "/meta-data.raw")
- data = mdf.read()
- self.metadata = eval(data)
- mdf.close()
-
+ (md,ud) = util.read_seeded(self.cachedir + "/")
+ self.userdata_raw = ud
+ self.metadata = md
cloudinit.log.debug("using seeded ec2 cache data in %s" % self.cachedir)
return True
- except:
- pass
+ except OSError, e:
+ if e.errno != errno.ENOENT:
+ cloudinit.log.warn("unexpected error from preseeded data")
+ raise
try:
if not self.wait_for_metadata_service():
@@ -81,18 +82,6 @@ class DataSourceEc2(DataSource.DataSource):
else:
return(self.location_locale_map["default"])
- def get_hostname(self):
- toks = self.metadata['local-hostname'].split('.')
- # if there is an ipv4 address in 'local-hostname', then
- # make up a hostname (LP: #475354)
- if len(toks) == 4:
- try:
- r = filter(lambda x: int(x) < 256 and x > 0, toks)
- if len(r) == 4:
- return("ip-%s" % '-'.join(r))
- except: pass
- return toks[0]
-
def get_mirror_from_availability_zone(self, availability_zone = None):
# availability is like 'us-west-1b' or 'eu-west-1a'
if availability_zone == None:
@@ -138,22 +127,6 @@ class DataSourceEc2(DataSource.DataSource):
int(time.time()-starttime))
return False
- def get_public_ssh_keys(self):
- keys = []
- if not self.metadata.has_key('public-keys'): return([])
- for keyname, klist in self.metadata['public-keys'].items():
- # lp:506332 uec metadata service responds with
- # data that makes boto populate a string for 'klist' rather
- # than a list.
- if isinstance(klist,str):
- klist = [ klist ]
- for pkey in klist:
- # there is an empty string at the end of the keylist, trim it
- if pkey:
- keys.append(pkey)
-
- return(keys)
-
def device_name_to_device(self, name):
# consult metadata service, that has
# ephemeral0: sdb