Combine cloud-init autoinstall with other cloud-init modules
I'm trying to provision a VM with cloud-init and the server live image. (I'm not using the cloud image, for infrastructural reasons I have to install from ISOs)
However, whenever I'm trying to combine autoinstall
with e.g. write_files
, the write_files
part does not seem to succeed.
The following installs Ubuntu:
#cloud-config
autoinstall:
version: 1
identity:
hostname: boxy-001
password: "$1$k46kl1..."
username: alice
storage:
layout:
name: lvm
ssh:
install-server: true
authorized-keys:
- "ecdsa-sha2-nistp256 AAAAE2...."
write_files:
- content: |
cloud_init_has_run
path: /cloud_init_flag
But the file is not written at /cloud_init_flag
.
Are modules missing? Is cloud-config incomplete on the Server live ISOs?
Edit the file is written, but it's written in the installation environment! Instead, I should likely use the autoinstall.user-data
key to provide the user-data
for the target system.
Solution 1:
how would I get cloud-init to run on the installed system in combination with autoinstall?
There is a user-data
config key for the autoinstall file.
For example, if you want your write_files
configuration to be used by cloud-init
on the installed system then this snippet could be included as part of the autoinstall file.
#cloud-config
autoinstall:
version: 1
user-data:
write_files:
- content: |
cloud_init_has_run
path: /cloud_init_flag
...
How it works
- During the install, subiquity will create configuration for
cloud-init
at/target/var/lib/cloud/seed/nocloud-net/user-data
. - During the first boot of the installed system,
cloud-init
will use this config file to perform some of the install tasks. Notably, this is how the first user is created. - If a
user-data
section is included in the autoinstall file then subiquity will merge the user-data section into the generated/target/var/lib/cloud/seed/nocloud-net/user-data
file.
Using the snippet above, the merged configuration resulted in this file content.
#cloud-config
growpart: {mode: 'off'}
locale: en_US.UTF-8
preserve_hostname: true
resize_rootfs: false
...
write_files:
- {content: 'cloud_init_has_run
', path: /cloud_init_flag}
During first boot, cloud-init
did create the /cloud_init_flag
file with the configured content.