summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorVladimir Pouzanov <farcaller@google.com>2017-05-02 16:08:34 +0100
committerScott Moser <smoser@ubuntu.com>2017-06-06 10:18:20 -0600
commit802e7cb2da8e2d0225525160e6edd6b58b275b8c (patch)
tree38e28b5f92ae00f63a8bc13deff7d7627ef6f95c
parent543e25cda6235d18adb6485e4266944d59e1979d (diff)
downloadvyos-cloud-init-802e7cb2da8e2d0225525160e6edd6b58b275b8c.tar.gz
vyos-cloud-init-802e7cb2da8e2d0225525160e6edd6b58b275b8c.zip
NoCloud: support seed of nocloud from smbios information
This allows the user to seed NoCloud in a trivial way from qemu/libvirt, by using a stock image and passing a single command line flag. No custom command line, no filesystem modification, no bootstrap disk image. This is particularly handy now that Ec2 backend is discouraged from use under bug 1660385. LP: #1691772
-rw-r--r--cloudinit/sources/DataSourceNoCloud.py12
-rw-r--r--doc/rtd/topics/datasources/nocloud.rst22
-rwxr-xr-xtools/ds-identify3
3 files changed, 37 insertions, 0 deletions
diff --git a/cloudinit/sources/DataSourceNoCloud.py b/cloudinit/sources/DataSourceNoCloud.py
index c68f6b8c..e641244d 100644
--- a/cloudinit/sources/DataSourceNoCloud.py
+++ b/cloudinit/sources/DataSourceNoCloud.py
@@ -43,6 +43,18 @@ class DataSourceNoCloud(sources.DataSource):
'network-config': None}
try:
+ # Parse the system serial label from dmi. If not empty, try parsing
+ # like the commandline
+ md = {}
+ serial = util.read_dmi_data('system-serial-number')
+ if serial and load_cmdline_data(md, serial):
+ found.append("dmi")
+ mydata = _merge_new_seed(mydata, {'meta-data': md})
+ except Exception:
+ util.logexc(LOG, "Unable to parse dmi data")
+ return False
+
+ try:
# Parse the kernel command line, getting data passed in
md = {}
if load_cmdline_data(md):
diff --git a/doc/rtd/topics/datasources/nocloud.rst b/doc/rtd/topics/datasources/nocloud.rst
index 0159e853..665057f3 100644
--- a/doc/rtd/topics/datasources/nocloud.rst
+++ b/doc/rtd/topics/datasources/nocloud.rst
@@ -11,6 +11,28 @@ You can provide meta-data and user-data to a local vm boot via files on a
`vfat`_ or `iso9660`_ filesystem. The filesystem volume label must be
``cidata``.
+Alternatively, you can provide meta-data via kernel command line or SMBIOS
+"serial number" option. The data must be passed in the form of a string:
+
+::
+
+ ds=nocloud[;key=val;key=val]
+
+or
+
+::
+
+ ds=nocloud-net[;key=val;key=val]
+
+e.g. you can pass this option to QEMU:
+
+::
+
+ -smbios type=1,serial=ds=nocloud-net;s=http://10.10.0.1:8000/
+
+to cause NoCloud to fetch the full meta-data from http://10.10.0.1:8000/meta-data
+after the network initialization is complete.
+
These user-data and meta-data files are expected to be in the following format.
::
diff --git a/tools/ds-identify b/tools/ds-identify
index 546e0f59..7c8b144b 100755
--- a/tools/ds-identify
+++ b/tools/ds-identify
@@ -555,6 +555,9 @@ dscheck_NoCloud() {
case " ${DI_KERNEL_CMDLINE} " in
*\ ds=nocloud*) return ${DS_FOUND};;
esac
+ case " ${DI_DMI_PRODUCT_SERIAL} " in
+ *\ ds=nocloud*) return ${DS_FOUND};;
+ esac
for d in nocloud nocloud-net; do
check_seed_dir "$d" meta-data user-data && return ${DS_FOUND}
done