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/DataSource.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/DataSource.py')
-rw-r--r-- | cloudinit/DataSource.py | 41 |
1 files changed, 40 insertions, 1 deletions
diff --git a/cloudinit/DataSource.py b/cloudinit/DataSource.py index 858608cc..d1458ffd 100644 --- a/cloudinit/DataSource.py +++ b/cloudinit/DataSource.py @@ -36,7 +36,20 @@ class DataSource: return(self.userdata_raw) def get_public_ssh_keys(self): - return([]) + 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): # translate a 'name' to a device @@ -45,3 +58,29 @@ class DataSource: # ephemeral0: sdb # and return 'sdb' for input 'ephemeral0' return(None) + + def get_locale(self): + return('en_US.UTF-8') + + def get_local_mirror(self): + return('http://archive.ubuntu.com/ubuntu/') + + def get_instance_id(self): + if 'instance-id' not in self.metadata: + return "ubuntuhost" + return(self.metadata['instance-id']) + + def get_hostname(self): + if not 'local-hostname' in self.metadata: + return None + + 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] |