summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorScott Moser <smoser@ubuntu.com>2013-02-04 22:23:42 -0500
committerScott Moser <smoser@ubuntu.com>2013-02-04 22:23:42 -0500
commitf3b25e68ac6d28cdacf7408c91da6e9a215ad1e6 (patch)
tree43dcc11fe3a3f39048f3b4ce19123f710356f621
parent1bb72070b70edaa960b3158feba936fbc3687b1f (diff)
downloadvyos-cloud-init-f3b25e68ac6d28cdacf7408c91da6e9a215ad1e6.tar.gz
vyos-cloud-init-f3b25e68ac6d28cdacf7408c91da6e9a215ad1e6.zip
make config of nocloud datasource able to specify meta-data and user-data
LP: #1115833
-rw-r--r--cloudinit/sources/DataSourceNoCloud.py72
-rw-r--r--doc/examples/cloud-config-datasources.txt11
2 files changed, 52 insertions, 31 deletions
diff --git a/cloudinit/sources/DataSourceNoCloud.py b/cloudinit/sources/DataSourceNoCloud.py
index bed500a2..d8484437 100644
--- a/cloudinit/sources/DataSourceNoCloud.py
+++ b/cloudinit/sources/DataSourceNoCloud.py
@@ -77,37 +77,47 @@ class DataSourceNoCloud(sources.DataSource):
found.append("ds_config")
md["seedfrom"] = self.ds_cfg['seedfrom']
- fslist = util.find_devs_with("TYPE=vfat")
- fslist.extend(util.find_devs_with("TYPE=iso9660"))
-
- label_list = util.find_devs_with("LABEL=cidata")
- devlist = list(set(fslist) & set(label_list))
- devlist.sort(reverse=True)
-
- for dev in devlist:
- try:
- LOG.debug("Attempting to use data from %s", dev)
-
- (newmd, newud) = util.mount_cb(dev, util.read_seeded)
- md = util.mergedict(newmd, md)
- ud = newud
-
- # For seed from a device, the default mode is 'net'.
- # that is more likely to be what is desired.
- # If they want dsmode of local, then they must
- # specify that.
- if 'dsmode' not in md:
- md['dsmode'] = "net"
-
- LOG.debug("Using data from %s", dev)
- found.append(dev)
- break
- except OSError as e:
- if e.errno != errno.ENOENT:
- raise
- except util.MountFailedError:
- util.logexc(LOG, ("Failed to mount %s"
- " when looking for data"), dev)
+ # if ds_cfg has 'user-data' and 'meta-data'
+ if 'user-data' in self.ds_cfg and 'meta-data' in self.ds_cfg:
+ if self.ds_cfg['user-data']:
+ ud = util.mergedict(md, self.ds_cfg['user-data'])
+ if self.ds_cfg['meta-data'] is not False:
+ md = util.mergedict(md, self.ds_cfg['meta-data'])
+ if 'ds_config' not in found:
+ found.append("ds_config")
+
+ if self.ds_cfg.get('fs_label', "cidata"):
+ fslist = util.find_devs_with("TYPE=vfat")
+ fslist.extend(util.find_devs_with("TYPE=iso9660"))
+
+ label = self.ds_cfg.get('fs_label')
+ label_list = util.find_devs_with("LABEL=%s" % label)
+ devlist = list(set(fslist) & set(label_list))
+ devlist.sort(reverse=True)
+
+ for dev in devlist:
+ try:
+ LOG.debug("Attempting to use data from %s", dev)
+
+ (newmd, newud) = util.mount_cb(dev, util.read_seeded)
+ md = util.mergedict(newmd, md)
+ ud = newud
+
+ # For seed from a device, the default mode is 'net'.
+ # that is more likely to be what is desired. If they want
+ # dsmode of local, then they must specify that.
+ if 'dsmode' not in md:
+ md['dsmode'] = "net"
+
+ LOG.debug("Using data from %s", dev)
+ found.append(dev)
+ break
+ except OSError as e:
+ if e.errno != errno.ENOENT:
+ raise
+ except util.MountFailedError:
+ util.logexc(LOG, ("Failed to mount %s"
+ " when looking for data"), dev)
# There was no indication on kernel cmdline or data
# in the seeddir suggesting this handler should be used.
diff --git a/doc/examples/cloud-config-datasources.txt b/doc/examples/cloud-config-datasources.txt
index d10dde05..fc8c22d4 100644
--- a/doc/examples/cloud-config-datasources.txt
+++ b/doc/examples/cloud-config-datasources.txt
@@ -31,3 +31,14 @@ datasource:
# <url>/user-data and <url>/meta-data
# seedfrom: http://my.example.com/i-abcde
seedfrom: None
+
+ # fs_label: the label on filesystems to be searched for NoCloud source
+ fs_label: cidata
+
+ # these are optional, but allow you to basically provide a datasource
+ # right here
+ user-data: |
+ # This is the user-data verbatum
+ meta-data:
+ instance-id: i-87018aed
+ local-hostname: myhost.internal