Blueprint Reference
Blueprints are text files in the TOML format that describe customizations for the image you are building. To be used in the π΅Β onΒ premises environment.
Analogously the request content of the
image-builder /compose request
describes customizations of an image the π€Β hosted service should be building.
Not all customizations are supported in the API but those existing, are highlighted here with a
π€Β hosted label.
Additionally, there is π£Β bootc which is supposed to be used from within podman desktop.
Which blueprint fields are accepted depends on the image type. Image Builder
validates blueprints against per-type supported_options from the image
definitions (see image-builder describe).
Each image description page lists the supported
blueprint customizations for that image type.
A very basic blueprint with just the required attributes at the root looks like:
- π΅ on premises
- π€ hosted
- βͺ bootc
name = "basic-example"
description = "A basic blueprint"
version = "0.0.1"
{
"image_name": "basic-example",
"image_description": "A basic blueprint"
}
βΉοΈ - Currently not supported
Where:
- The
nameattribute is a string that contains the name of the blueprint. It can contain spaces, but they will be converted to-when it is imported intoosbuild-composer. It should be short and descriptive. - The
descriptionattribute is a string that can be a longer description of the blueprint and is only used for display purposes. - The
versionattribute is a string that contains a semantic versioning compatible version number. If a new blueprint is uploaded with the same version the server will automatically bump the PATCH level of the version. If the version doesn't match it will be used as is. For example, uploading a blueprint with version set to 0.1.0 when the existing blueprint version is 0.0.1 will result in the new blueprint being stored as version 0.1.0.
You can upload a blueprint with the osbuild-composer blueprints push $filename command, the blueprint will then be usable in osbuild-composer compose as the name you gave it.
Blueprints have two main sections, the content and customizations sections.
Distribution selection with blueprints π΅Β π€β
The blueprint now supports a new distro field that will be used to select the
distribution to use when composing images, or depsolving the blueprint. If
distro is left blank it will use the host distribution. If you upgrade the
host operating system the blueprints with no distro set will build using the
new os. You can't build an OS image that differs from the host OS that Image Builder lives on.
eg. A blueprint that will always build a Fedora 38 image, no matter what version is running on the host:
Note that osbuild-composer prior to version 100 didn't use a dot . to separate major and minor release versions in the distro name. New versions are backward compatible, so they will still accept the old distro names of distributions supported up to the version 100. However, going forward, it is strongly advised to use the new naming scheme. Future distribution versions won't be backward compatible (e.g. rhel-100 won't work in the future for RHEL 10.0, but one will have to use rhel-10.0).
- π΅ on premises
- π€ hosted
- βͺ bootc
name = "tmux"
description = "tmux image with openssh"
version = "1.2.16"
distro = "fedora-38"
[[packages]]
name = "tmux"
version = "*"
[[packages]]
name = "openssh-server"
version = "*"
name = "tmux"
description = "tmux image with openssh"
version = "1.2.16"
# for osbuild-composer version < 100
# distro = "rhel-84"
distro = "rhel-8.4"
[[packages]]
name = "tmux"
version = "*"
[[packages]]
name = "openssh-server"
version = "*"
{
"image_name": "tmux",
"image_description": "tmux image with openssh",
"distribution": "fedora-38",
"customizations": {
"packages": ["tmux", "openssh-server"]
}
}
{
"image_name": "tmux",
"image_description": "tmux image with openssh",
"distribution": "rhel-8.4",
"customizations": {
"packages": ["tmux", "openssh-server"]
}
}
βΉοΈ - Currently not supported
Contentβ
The content section determines what goes into the image from other sources such as packages, package groups, or containers. Content is defined at the root of the blueprint.
Note that content can also be adjusted by other customizations. For example, a selected OpenSCAP profile might remove packages even when explicitly selected to be installed under the content section.
Packages π΅Β π€β
The packages and modules lists contain objects with a name and optional version attribute.
- The
nameattribute is a required string and can be an exact match, or a filesystem-like glob using*for wildcards and?for character matching. - The
versionattribute is an optional string can be an exact match or a filesystem-like glob of the version using*for wildcards and?for character matching. If not provided the latest version in the repositories is used.
packages and modules are both treated as RPM package dependencies. For DNF modularity streams, use enabled_modules instead β that field is distinct from the modules package list.
When using virtual
providesas the package name the version glob should be*. And be aware that you will be unable tofreezethe blueprint. This is because theprovideswill expand into multiple packages with their own names and versions.
For example, to install tmux-2.9a and openssh-server-8.* packages, add this to your blueprint:
- π΅ on premises
- π€ hosted
- βͺ bootc
[[packages]]
name = "tmux"
version = "2.9a"
[[packages]]
name = "openssh-server"
version = "8.*"
Or in alternative syntax1:
packages = [
{ name = "tmux", version = "2.9a" },
{ name = "openssh-server", version = "8.*" }
]
{
"customizations": {
"packages": ["tmux", "openssh-server"]
}
}
βΉοΈ - Currently not supported
Enabled modules (modularity) π΅Β π€β
Enable DNF modularity streams so packages from those streams can be installed. This is not the same as the modules package list under Packages.
Each entry has:
nameβ required module name (for examplenodejs)streamβ required stream to enable (for example18)
Also list any packages you need from the stream under packages.
- π΅ on premises
- π€ hosted
- βͺ bootc
[[enabled_modules]]
name = "nodejs"
stream = "18"
[[packages]]
name = "nodejs"
{
"customizations": {
"enabled_modules": [
{ "name": "nodejs", "stream": "18" }
],
"packages": ["nodejs"]
}
}
βΉοΈ - Currently not supported
Support depends on the distribution and image type. Check the image description supported_options list for enabled_modules. Modularity availability also depends on the hostβs package manager (see Depsolving).
Groups π΅Β π€β
The groups list contains objects with a name-attribute.
- The
nameattribute is a required string and must match the id of a package group in the repositories exactly.
groups describes groups of packages to be installed into the image. Package groups are defined in the repository metadata. Each group has a descriptive name used primarily for display in user interfaces and an ID more commonly used in kickstart files. Here, the ID is the expected way of listing a group. Groups have three different ways of categorizing their packages: mandatory, default, and optional. For the purposes of blueprints, only mandatory and default packages will be installed. There is no mechanism for selecting optional packages.
For example, if you want to install the anaconda-tools group, add the following to your blueprint:
- π΅ on premises
- π€ hosted
- βͺ bootc
{
"customizations": {
"packages": ["@anaconda-tools"],
}
}
βΉοΈ - Currently not supported
Containers π΅ π€β
The containers list contains objects with a source and optional tls-verify attribute.
These list entries describe the container images to be embedded into the image.
- The
sourceattribute is a required string and is a reference to a container image at a registry. - The
nameattribute is an optional string to set the name under which the container image will be saved in the image. If not specifiednamefalls back to the same value assource. - The
tls-verifyattribute is an optional boolean to disable TLS verification of the source download. By default this is set totrue. - The
local-storageattribute is an optional boolean to pull the container image from the host's local-storage. By default this is set tofalse.
The container is pulled during the image build and stored in the image at the default local container storage location that is appropriate for the image type, so that all supported container tools like podman and cri-o will be able to work with it.
The embedded containers are not started, to do so you can create systemd unit files or quadlets with the files customization.
Container images from local-storage are only supported on-premise.
To embed the latest fedora container from http://quay.io and a container from your host, add this to your blueprint:
- π΅ on premises
- π€ hosted
- βͺ bootc
[[containers]]
source = "quay.io/fedora/fedora:latest"
[[containers]]
source = "localhost/test:latest"
local-storage = true
Or in alternative syntax1:
containers = [
{ source = "quay.io/fedora/fedora:latest" },
{ source = "quay.io/fedora/fedora-minimal:latest", tls-verify = false, name = "fedora-m" },
{ source = "localhost/test:latest", local-storage = true },
]
{
"customizations": {
"containers": [
{ "source": "quay.io/fedora/fedora:latest" },
{ "source": "quay.io/fedora/fedora-minimal:latest",
"tls_verify": false,
"name": "fedora-m"
}
]
}
}
βΉοΈ - Currently not supported
To access protected container resources a containers-auth.json(5) file can be used, see Container registry credentials.
Customizationsβ
In the customizations we determine what goes into the image that's not in the default packages defined under Content.
Hostname π΅ π€β
customizations.hostname is an optional string that can be used to configure the hostname of the final image:
- π΅ on premises
- π€ hosted
- βͺ bootc
[customizations]
hostname = "baseimage"
{
"customizations": {
"hostname": "baseimage"
}
}
βΉοΈ - Currently not supported
This is optional and can be left out to use the default hostname.
Kernel π΅ π€ π£β
Kernel Command-Line Argumentsβ
An optional object that contains the following attributes:
namean optional string which kernel to useappendan optional string to append arguments to the bootloader kernel command line
- π΅ on premises
- π€ hosted
- π£ bootc
[customizations.kernel]
name = "kernel-debug"
append = "nosmt=force"
{
"customizations": {
"kernel": {
"name": "kernel-debug",
"append": "nosmt=force"
}
}
}
[customizations.kernel]
# name - not yet supported
append = "nosmt=force"
Bootloader π£β
Configure GRUB2 terminal settings for bootc images (for example serial console). Support is image-type specific β see the image description for customizations.bootloader.
- βͺ on premises
- βͺ hosted
- π£ bootc
βΉοΈ - Currently not supported
βΉοΈ - Currently not supported
[customizations.bootloader.grub2]
terminal_input = ["serial", "console"]
terminal_output = ["serial", "console"]
serial = "serial --unit=0 --speed=115200"
Optional fields under [customizations.bootloader.grub2]:
terminal_inputβ list of GRUB terminal input devicesterminal_outputβ list of GRUB terminal output devicesserialβ GRUBserialcommand string
Subscription-manager (RHSM) π΅β
An optional set of configuration options for the Red Hat Subscription Manager (RHSM) client.
The customization expects that subscription-manager package is installed in the image, which is by default part of the RHEL distribution bootable images. To explicitly install the package, add it to the packages section in the blueprint.
The customization is not supported on Fedora distribution images.
To configure RHSM in the final image:
- π΅ on premises
- βͺ hosted
- βͺ bootc
[customizations.rhsm.config.dnf_plugins.product_id]
enabled = true
[customizations.rhsm.config.dnf_plugins.subscription_manager]
enabled = true
[customizations.rhsm.config.subscription_manager.rhsm]
manage_repos = true
auto_enable_yum_plugins = false
[customizations.rhsm.config.subscription_manager.rhsmcertd]
auto_registration = true
βΉοΈ - Currently not supported
βΉοΈ - Currently not supported
RPM configuration π΅β
An optional set of RPM configuration options. Currently, only importing RPM GPG keys from a file in the image is supported.
files is a list of strings containing the paths to the GPG keys to import. The files must be present in the image.
To configure RPM in the final image:
- π΅ on premises
- βͺ hosted
- βͺ bootc
[customizations.rpm.import_keys]
files = [
"/etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-18-primary",
"/etc/pki/rpm-gpg/RPM-GPG-KEY-fedora-19-primary"
]
βΉοΈ - Currently not supported
βΉοΈ - Currently not supported
CA certificates π΅ π€β
Install PEM-encoded CA certificates into the imageβs trust store. Provide one or more full PEM certificate strings in pem_certs.
- π΅ on premises
- π€ hosted
- βͺ bootc
[customizations.cacerts]
pem_certs = [
"""
-----BEGIN CERTIFICATE-----
MIIDszCCApugAwIBAgIUJ4lK+JfdJCNgcEVxZDinJfKKbQswDQYJKoZIhvcNAQEL
...
-----END CERTIFICATE-----
"""
]
{
"customizations": {
"cacerts": {
"pem_certs": [
"-----BEGIN CERTIFICATE-----\n...\n-----END CERTIFICATE-----\n"
]
}
}
}
βΉοΈ - Currently not supported
DNF configuration π΅β
Optional DNF configuration written into the image. Currently the only supported option is set_releasever, which sets the DNF releasever variable so the system stays pinned to a specific release (for example a RHEL minor version).
- π΅ on premises
- βͺ hosted
- βͺ bootc
[customizations.dnf.config]
set_releasever = true
βΉοΈ - Currently not supported
βΉοΈ - Currently not supported
SSH Keys π΅ π€β
An optional list of objects containing:
- The
userattribute is a required string and must match the name of a user in the image exactly. - The
keyattribute is a required string that contains the public key to be set for that user.
Deprecated: you should prefer the users customization which allows you to add SSH keys to users. Not all frontends support this customization.
Warning: key expects the entire content of the public key file, traditionally ~/.ssh/id_rsa.pub but any algorithm supported by the operating system in the image is valid
Set an existing user's SSH key in the final image:
- π΅ on premises
- π€ hosted
- βͺ bootc
[[customizations.sshkey]]
user = "root"
key = "PUBLIC SSH KEY"
{
"customizations": {
"users": [
{ "name": "root",
"ssh_key": "PUBLIC SSH KEY"
}
]
}
}
βΉοΈ - Currently not supported
The key will be added to the user's authorized_keys file in their home directory.
SSH daemon (sshd) π΅β
Configure OpenSSH server (sshd) settings in the image. This is separate from enabling the sshd service via Systemd Services or opening ports via Firewall.
Optional fields under [customizations.sshd]:
password_authenticationβ boolean; maps toPasswordAuthenticationkbd_interactive_authenticationβ boolean; maps to keyboard-interactive authenticationclient_alive_intervalβ integer seconds; maps toClientAliveIntervalpermit_root_loginβ string; one ofyes,no,prohibit-password,forced-commands-only
- π΅ on premises
- βͺ hosted
- βͺ bootc
[customizations.sshd]
password_authentication = false
kbd_interactive_authentication = false
client_alive_interval = 300
permit_root_login = "prohibit-password"
βΉοΈ - Currently not supported
βΉοΈ - Currently not supported
Users π΅ π€ π£β
An optional list of objects that contain the following attributes:
namea required string that sets the username.descriptionan optional string.passwordan optional string.keyan optional string.homean optional string.shellan optional string.groupsan optional list of strings.uidan optional integer.gidan optional integer.expiredatean optional integer.
Warning: key expects the entire content of the public key file, traditionally ~/.ssh/id_rsa.pub but any algorithm supported by the operating system in the image is valid
Note: If the password starts with $6$, $5$, or $2b$ it will be stored as an encrypted password. Otherwise it will be treated as a plain text password.
To generate an encrypted password you might want to use openssl:
openssl passwd -6
or mkpasswd
mkpasswd -m sha-512
Adds a user to or modifies a user in the image, and/or set their ssh key. All fields for this section are optional except for the name. The following is a complete example:
- π΅ on premises
- π€ hosted
- π£ bootc
[[customizations.user]]
name = "admin"
description = "Administrator account"
password = "$6$CHO2$3rN8eviE2t50lmVyBYihTgVRHcaecmeCk31L..."
key = "PUBLIC SSH KEY"
home = "/srv/widget/"
shell = "/usr/bin/bash"
groups = ["widget", "users", "wheel"]
uid = 1200
gid = 1200
expiredate = 12345
{
"customizations": {
"users": [
{ "name": "admin",
"ssh_key": "PUBLIC SSH KEY"
}
],
"groups": [
{ "name": "admin",
"gid": 1200
}
]
}
}
[[customizations.user]]
name = "alice"
password = "bob"
key = "ssh-rsa AAA ... user@email.com"
groups = ["wheel"]
Additional groups π΅ π€ π£β
An optional list of objects that contain the following attributes:
namea required string that sets the name of the group.gida required integer that sets the id of the group.
Note: Collisions caused by duplicate names or GIDs will be resolved automatically at build time. This includes system groups created by packages. Therefore, adding a group with a name that already exists on the system will have no effect. When specifying a GID that is already used by another group, another unique GID is chosen.
- π΅ on premises
- π€ hosted
- π£ bootc
[[customizations.group]]
name = "widget"
gid = 1130
{
"customizations": {
"groups": [
{ "name": "widget",
"gid": 1130
}
]
}
}
[[customizations.group]]
name = "widget"
gid = 1130
Timezone π΅ π€β
An optional object that contains the following attributes:
timezonean optional string. If not provided the UTC timezone is used..ntpserversan optional list of strings containing NTP servers to use. If not provided the distribution defaults are used.
- π΅ on premises
- π€ hosted
- βͺ bootc
[customizations.timezone]
timezone = "US/Eastern"
ntpservers = ["0.north-america.pool.ntp.org", "1.north-america.pool.ntp.org"]
{
"customizations": {
"timezone": {
"timezone": "US/Eastern",
"ntpservers": [
"0.north-america.pool.ntp.org",
"1.north-america.pool.ntp.org"
]
}
}
}
βΉοΈ - Currently not supported
The values supported by timezone can be listed by running the command:
$ timedatectl list-timezones
Some image types have already NTP servers setup such as Google Cloud images. These cannot be overridden because they are required to boot in the selected environment. However, the timezone will be updated to the one selected in the blueprint.
Locale π΅ π€β
An optional object that contains the following attributes to customize the locale settings for the system:
languagesan optional list of strings containing locales to be installed.keyboardan optional string to set the keyboard layout.
Multiple languages can be added. The first one becomes the primary, and the others are added as secondary. You must include one or more languages or keyboards in the section.
- π΅ on premises
- π€ hosted
- βͺ bootc
[customizations.locale]
languages = ["en_US.UTF-8"]
keyboard = "us"
{
"customizations": {
"locale": {
"languages": ["en_US.UTF-8"],
"keyboard": "us"
}
}
}
βΉοΈ - Currently not supported
The values supported by languages can be listed by running can be listed by running the command:
$ localectl list-locales
The values supported by keyboard can be listed by running the command:
$ localectl list-keymaps
Firewall π΅ π€β
An optional object containing the following attributes:
portsan optional list of strings containing ports (or port ranges) and protocols to open.servicesan optional object with the following attributes containing services to enable or disable forfirewalld.enabledoptional list of strings for services to enable.disabledoptional list of strings for services to disable.
By default the firewall blocks all access, except for services that enable their ports explicitly such as the sshd. The following blueprint can be used to open other ports or services.
Note: Ports are configured using the port:protocol format; port ranges are configured using portA-portB:protocol format:
- π΅ on premises
- π€ hosted
- βͺ bootc
[customizations.firewall]
ports = ["22:tcp", "80:tcp", "imap:tcp", "53:tcp", "53:udp", "30000-32767:tcp", "30000-32767:udp"]
{
"customizations": {
"firewall": {
"ports": ["22:tcp", "80:tcp", "imap:tcp", "53:tcp", "53:udp", "30000-32767:tcp", "30000-32767:udp"]
}
}
}
βΉοΈ - Currently not supported
Numeric ports, or their names from /etc/services can be used in the ports enabled/disabled lists.
The blueprint settings extend any existing settings in the image templates. Thus, if sshd is already enabled, it will extend the list of ports with those already listed by the blueprint.
If the distribution uses firewalld you can specify services listed by firewall-cmd --get-services in a customizations.firewall.services section:
- π΅ on premises
- π€ hosted
- βͺ bootc
[customizations.firewall.services]
enabled = ["ftp", "ntp", "dhcp"]
disabled = ["telnet"]
{
"customizations": {
"firewall": {
"services": {
"enabled": ["ftp", "ntp", "dhcp"],
"disabled": ["telnet"]
}
}
}
}
βΉοΈ - Currently not supported
Remember that the firewall.services are different from the names in /etc/services.
Both are optional, if they are not used leave them out or set them to an empty list []. If you only want the default firewall setup this section can be omitted from the blueprint.
Note: The Google and OpenStack templates explicitly disable the firewall for their environment. This cannot be overridden by the blueprint.
Systemd Services π΅ π€β
An optional object containing the following attributes:
enabledan optional list of strings containing services to be enabled.disabledan optional list of strings containing services to be disabled.maskedoptional list of strings for services to mask.
If a service enabled or disabled through the corresponding attributes does not exist in the image that is being built then this customization will fail and the build will fail as a result. However, the corresponding package is not required on the image when masking a service.
- π΅ on premises
- π€ hosted
- βͺ bootc
[customizations.services]
enabled = ["sshd", "cockpit.socket", "httpd"]
disabled = ["postfix", "telnetd"]
masked = ["rpcbind"]
{
"customizations": {
"services":{
"enabled": ["sshd", "cockpit.socket", "httpd"],
"disabled": ["postfix", "telnetd"],
"masked": ["rpcbind"],
}
}
}
βΉοΈ - Currently not supported
This section can be used to control which services are enabled at boot time. Some image types already have services enabled or disabled in order for the image to work correctly, and cannot be overridden. For example, ami image type requires sshd, chronyd, and cloud-init services. Without them, the image will not boot. Blueprint services do not replace these services, but add them to the list of services already present in the templates, if any.
The service names are systemd service units. You may specify any systemd unit file accepted by systemctl enable, for example, cockpit.socket:
Files and directories π΅ π€β
You can use blueprint customizations to create custom files and directories in the image. When using the custom files and directories customization, the following rules apply:
- The path must be an absolute path and must be under
/etc,/root,/usr/local/binor/usr/local/sbin. - There must be no duplicate paths of the same directory.
- There must be no duplicate paths of the same file.
These customizations are not supported for image types that deploy ostree commits (such as edge-raw-image, edge-installer, edge-simplified-installer). The only exception is the Fedora iot-raw-image image type, which supports these customizations.
Directoriesβ
You can create custom directories by specifying items in the customizations.directories list. The existence of a specified directory is handled gracefully only if no explicit mode, user or group is specified. If any of these customizations are specified and the directory already exists in the image, the image build will fail. The intention is to prevent changing the ownership or permissions of existing directories.
The following example creates a directory /etc/foobar with all the default settings:
- π΅ on premises
- π€ hosted
- βͺ bootc
[[customizations.directories]]
path = "/etc/foobar"
mode = "0755"
user = "root"
group = "root"
ensure_parents = false
{
"customizations": {
"directories": [
{ "path": "/etc/foobar",
"mode": "0755",
"user": "root",
"group": "root",
"ensure_parents": false
}
]
}
}
βΉοΈ - Currently not supported
pathis the path to the directory to create. It must be an absolute path under/etc. This is the only required field.modeis the octal mode to set on the directory. If not specified, the default is0755. The leading zero is optional.useris the user to set as the owner of the directory. If not specified, the default isroot. Can be specified as user name (string) or as user id (integer).groupis the group to set as the owner of the directory. If not specified, the default isroot. Can be specified as group name (string) or as group id (integer).ensure_parentsis a boolean that specifies whether to create parent directories as needed. If not specified, the default isfalse.
Filesβ
You can create custom files by specifying items in the customizations.files list. You can use the customization to create new files or to replace existing ones, if not restricted by the policy specified below. If the target path is an existing symlink to another file, the symlink will be replaced by the custom file.
Please note that the parent directory of a specified file must exist. If it does not exist, the image build will fail. One can ensure that the parent directory exists by specifying it in the customizations.directories list.
In addition, the following files are not allowed to be created or replaced by policy:
/etc/fstab/etc/shadow/etc/passwd/etc/group
Using the files customization comes with a high chance of creating an image that doesn't boot. Use this feature only if you know what you are doing. Although the files customization can be used to configure parts of the OS which can also be configured by other blueprint customizations, this use is discouraged. If possible, users should always default to using the specialized blueprint customizations. Note that if you combine the files customizations with other customizations, the other customizations may not work as expected or may be overridden by the files customizations.
The following example creates a file /etc/foobar with the contents Hello world!:
- π΅ on premises
- π€ hosted
- βͺ bootc
[[customizations.files]]
path = "/etc/foobar"
mode = "0644"
user = "root"
group = "root"
data = """
Hello world!
This is how you make a multiline string.
"""
{
"customizations": {
"files": [
{ "path": "/etc/foobar",
"mode": "0644",
"user": "root",
"group": "root",
"data": "Hello world!\nThis is how you make a multiline string.\n"
}
]
}
}
βΉοΈ - Currently not supported
pathis the path to the file to create. It must be an absolute under/etc. This is the only required field.modeis the octal mode to set on the file. If not specified, the default is0644. The leading zero is optional.useris the user to set as the owner of the file. If not specified, the default isroot. Can be specified as user name (string) or as user id (integer).groupis the group to set as the owner of the file. If not specified, the default isroot. Can be specified as group name (string) or as group id (integer).datais the plain text contents of the file. If not specified, the default is an empty file.
Note that the data property can be specified in any of the ways supported by TOML. Some of them require escaping certain characters and others don't. Please refer to the TOML specification for more details.
Firstboot π΅β
See the Firstboot guide for details, Satellite/AAP examples, and a manual files+services fallback.
Run scripts once on the imageβs first boot via [customizations.firstboot]. Scripts run in order through systemd; by default a failure stops later scripts unless ignore_failure is set.
Each entry in scripts requires a type:
type | Purpose | Required fields |
|---|---|---|
custom | Arbitrary script | contents |
satellite | Satellite registration command | command |
aap | Ansible Automation Platform callback | job_template_url, host_config_key |
Common optional fields: name, ignore_failure, after, before (systemd unit ordering). Satellite and AAP entries may also set cacerts (PEM strings) enrolled before the script runs.
Do not confuse this with customizations.ignition.firstboot, which configures Ignition provisioning.
- π΅ on premises
- βͺ hosted
- βͺ bootc
[[customizations.firstboot.scripts]]
type = "custom"
name = "touch-marker"
contents = """
#!/bin/bash
touch /var/lib/firstboot-done
"""
βΉοΈ - Use the dedicated firstboot / registration fields of the hosted API where available, or see the [Firstboot](./08-firstboot.md) guide. The TOML `customizations.firstboot` shape above is for on-premises blueprints.
βΉοΈ - Currently not supported
Installation device π΅ π€β
The customizations.installation_device variable is required by
the edge-simplified-installer image. It allows the user to define
the destination device for the installation.
- π΅ on premises
- π€ hosted
- βͺ bootc
[customizations]
installation_device = "/dev/sda"
{
"customizations": {
"installation_device": "/dev/sda"
}
}
βΉοΈ - Currently not supported
Ignition π΅ π€β
The customizations.ignition section allows users to provide Ignition configuration files to be used in edge-raw-image and edge-simplified-installer images. Check the RHEL for Edge (r4e) butane specification for a description of the supported configuration options.
The blueprint configuration can be done either by embedding an Ignition configuration file into the image (only available for edge-simplified-installer), or providing a provisioning URL that will be fetched at first boot.
ignition.embedded configurationβ
- π΅ on premises
- π€ hosted
- βͺ bootc
[customizations.ignition.embedded]
config = "eyJpZ25pdGlvbiI6eyJ2ZXJzaW9uIjoiMy4zLjAifSwicGFzc3dkIjp7InVzZXJzIjpbeyJncm91cHMiOlsid2hlZWwiXSwibmFtZSI6ImNvcmUiLCJwYXNzd29yZEhhc2giOiIkNiRqZnVObk85dDFCdjdOLjdrJEhxUnhxMmJsdFIzek15QUhqc1N6YmU3dUJIWEVyTzFZdnFwaTZsamNJMDZkUUJrZldYWFpDdUUubUpja2xQVHdhQTlyL3hwSmlFZFdEcXR4bGU3aDgxIn1dfX0="
{
"customizations": {
"ignition": {
"embedded": {
"config": "eyJpZ25pdGlvbiI6eyJ2ZXJzaW9uIjoiMy4zLjAifSwicGFzc3dkIjp7InVzZXJzIjpbeyJncm91cHMiOlsid2hlZWwiXSwibmFtZSI6ImNvcmUiLCJwYXNzd29yZEhhc2giOiIkNiRqZnVObk85dDFCdjdOLjdrJEhxUnhxMmJsdFIzek15QUhqc1N6YmU3dUJIWEVyTzFZdnFwaTZsamNJMDZkUUJrZldYWFpDdUUubUpja2xQVHdhQTlyL3hwSmlFZFdEcXR4bGU3aDgxIn1dfX0="
}
}
}
}
βΉοΈ - Currently not supported
Add a base64 encoded Ignition configuration in the config field. This Ignition configuration will be included in the edge-simplified-installer image.
ignition.firstboot configurationβ
- π΅ on premises
- π€ hosted
- βͺ bootc
[customizations.ignition.firstboot]
url = "http://some-server/configuration.ig"
{
"customizations": {
"ignition": {
"firstboot": {
"url": "http://some-server/configuration.ig"
}
}
}
}
βΉοΈ - Currently not supported
Add a URL pointing to the Ignition configuration that will be fetched during the first boot in the url field. Available for both edge-simplified-installer and edge-raw-image.
FDO π΅ π€β
The customizations.fdo section allows users to configure FIDO Device Onboard (FDO) device initialization parameters. It is only available with the edge-simplified-installer or iot-simplified-installer image types.
The manufacturing_server_url is a required field.
The user must choose one of the device initialization methods providing diun_pub_key_insecure, diun_pub_key_hash or diun_pub_key_root_certs.
The user may provide an IFACE name at di_mfg_string_type_mac_iface.
- π΅ on premises
- π€ hosted
- βͺ bootc
[customizations.fdo]
manufacturing_server_url = "http://192.168.122.199:8080"
diun_pub_key_insecure = "true"
di_mfg_string_type_mac_iface = "enp2s0"
{
"customizations": {
"fdo": {
"manufacturing_server_url": "http://192.168.122.199:8080",
"diun_pub_key_insecure": "true"
}
}
}
βΉοΈ - Currently not supported