diff options
author | Scott Moser <smoser@ubuntu.com> | 2010-08-12 01:56:12 -0400 |
---|---|---|
committer | Scott Moser <smoser@ubuntu.com> | 2010-08-12 01:56:12 -0400 |
commit | 54346d35221fd405423dd33a2b06202f10e2aa22 (patch) | |
tree | 71b636d2967abbb53cdb4d3c70061524e2add7ff /cloudinit/DataSourceEc2.py | |
parent | a43357425d32b53aa58e226613e7fa2dd0714102 (diff) | |
download | vyos-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.py | 51 |
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 |