summaryrefslogtreecommitdiff
path: root/cloudinit/DataSource.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/DataSource.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/DataSource.py')
-rw-r--r--cloudinit/DataSource.py41
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]