Generators¶
Generators are used to create, modify or remove files inside the rootfs. Available generators are
In the image definition YAML, they are listed under files
.
files:
- generator: <string> # which generator to use (required)
name: <string>
path: <string>
content: <string>
template:
properties: <map>
when: <array>
templated: <boolean>
mode: <string>
gid: <string>
uid: <string>
pongo: <boolean>
source: <string>
architectures: <array> # filter
releases: <array> # filter
variants: <array> # filter
Filters can be applied to each entry in files
.
Valid filters are architecture
, release
and variant
.
See filters for more information.
If pongo
is true
, the values of path
, content
, and source
are rendered using Pongo2.
cloud-init
¶
For LXC images, the generator disables cloud-init by disabling any cloud-init services, and creates the file cloud-init.disable
which is checked by cloud-init
on startup.
For Incus images, the generator creates templates depending on the provided name.
Valid names are user-data
, meta-data
, vendor-data
and network-config
.
The default path
if not defined otherwise is /var/lib/cloud/seed/nocloud-net/<name>
.
Setting path
, content
or template.properties
will override the default values.
dump
¶
The dump
generator writes the provided content
to a file set in path
.
If provided, it will set the mode
(octal format), gid
(integer) and/or uid
(integer).
copy
¶
The copy
generator copies the file(s) from source
to the destination path
.
path
can be left empty and in that case the data will be placed in the same source
path but inside the container.
If provided, the destination path
will set the mode
(octal format), gid
(integer) and/or uid
(integer).
Copying will be done according to the following rules:
If
source
is a directory, the entire contents of the directory are copied. Only symlinks and regular files are supported.Note 1: The directory itself is not copied, just its contents.
Note 2: For files copied, only regular Unix permissions are kept.
If
source
is a symlink or a regular file, it is copied individually along with its metadata. In this case, ifpath
ends with a trailing slash/
, it will be considered a directory and the contents ofsource
will be written atpath
/base(source
).If
path
does not end with a trailing slash, it will be considered a regular file and the contents ofsource
will be written atpath
.If
path
does not exist, it is created along with all missing directories in its path.Multiple
source
resources can be specified using Golangfilepath.Match
regexps. For simplicity they are only allowed in the base name and not in the directory hierarchy. If more than one match is found,path
will be automatically interpreted as a directory.
hostname
¶
For LXC images, the host name generator writes the LXC specific string LXC_NAME
to the hostname
file set in path
.
If the path doesn’t exist, the generator does nothing.
For Incus images, the generator creates a template for path
.
If the path doesn’t exist, the generator does nothing.
hosts
¶
For LXC images, the generator adds the entry 127.0.0.1 LXC_NAME
to the hosts file set in path
.
For Incus images, the generator creates a template for the hosts file set in path
, adding an entry for 127.0.0.1 {{ container.name }}
.
remove
¶
The generator removes the file set in path
from the container’s root file system.
template
¶
This generator creates a custom Incus template.
The name
field is used as the template’s file name.
The path
defines the target file in the container’s root file system.
The properties
key is a map of the template properties.
The when
key can be one or more of:
create (run at the time a new container is created from the image)
copy (run when a container is created from an existing one)
start (run every time the container is started)
See Image format in the Incus documentation for more information.
incus-agent
¶
This generator creates the systemd
unit files which are needed to start the incus-agent
in Incus VMs.
fstab
¶
This generator creates an /etc/fstab
file which is used for VMs.
Its content is:
LABEL=rootfs / <fs> <options> 0 0
LABEL=UEFI /boot/efi vfat defaults 0 0
The file system is taken from the Incus target (see targets) which defaults to ext4
.
The options are generated depending on the file system.
You cannot override them.