How to include cloud-config files from removable devices

Elemental Teal supports loading cloud-config files from specific block devices. In particular supports loading cloud-config files from an ISO having CIDATA as the volume ID or any vFAT formatted device labeled with CIDATA. If a device matching this criteria is found on early boot the Elemental client will read it and look for a user-data file in its root.

As an example an ISO including a cloud-config file can be created on a Linux host with the procedure below.

Create a user-data file with the cloud-config data in it. In the example below we just set a proxy:

user-data

  1. #cloud-config
  2. write_files:
  3. - path: /etc/sysconfig/proxy
  4. append: true
  5. content: |
  6. PROXY_ENABLED="yes"
  7. HTTP_PROXY=http://some.domain.org:8080
  8. HTTPS_PROXY=https://some.domain.org:8080
  9. NO_PROXY="localhost, 127.0.0.1"

Once the user-data file exists create an ISO including only this file by using the mkisofs Linux utility:

  1. mkisof -o cidata.iso -V CIDATA -J -r user-data

The result is an ISO labeled with CIDATA including the user-data file.

At boot the user-data file will be copied as is to /oem/user-data and in case it contains cloud-config data an extra copy will be added as /oem/user-data.yaml. The file /oem/user-data.yaml will be parsed on any later cloud-init stage.

Since the data is copied to /oem it will be persistent, hence on follow up reboots the removable device is not required to be present any more. If still present on follow up reboots, it just overwrites any aleady pre-existing data.

Include non cloud-config data

If the user-data is not containing cloud-config data the Elemental client will just copy it as is to /oem/user-data. Only *.yaml files are parsed when executing cloud-init stages, so in that case the file will be ignored by cloud-init services.

If the user-data contains a script the Elemental client will, in addition, try to execute it. The way Elemental client determines if user-data is a script or not is by the presence of a Shebang in the first line. For example, the previous user-data file could be rewritten as:

user-data

  1. #!/bin/bash
  2. cat <<EOF >> /etc/sysconfig/proxy
  3. PROXY_ENABLED="yes"
  4. HTTP_PROXY=http://some.domain.org:8080
  5. HTTPS_PROXY=https://some.domain.org:8080
  6. NO_PROXY="localhost, 127.0.0.1"
  7. EOF