# ironic-image **Repository Path**: mirrors_openshift/ironic-image ## Basic Information - **Project Name**: ironic-image - **Description**: No description available - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: main - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2020-08-22 - **Last Updated**: 2026-03-21 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README Metal3 Ironic Container ======================= This repo contains the files needed to build the Ironic images used by Metal3. ## Description When updated, builds are automatically triggered on This repo supports the creation of multiple containers needed when provisioning baremetal nodes with Ironic. Eventually there will be separate images for each container, but currently separate containers can share this same image with specific entry points. The following entry points are provided: - `runironic` - Starts the ironic-conductor and ironic-api processes to manage the provisioning of baremetal nodes. Details on Ironic can be found at . This is the default entry point used by the Dockerfile. - `rundnsmasq` - Runs the dnmasq dhcp server to provide addresses and initiate PXE boot of baremetal nodes. This includes a lightweight TFTP server. Details on dnsmasq can be found at . - `runhttpd` - Starts the Apache web server to provide images via http for PXE boot and for deployment of the final images. - `runlogwatch` - Waits for host provisioning ramdisk logs to appear, prints their contents and deletes files. All of the containers must share a common mount point or data store. Ironic requires files for both the TFTP server and HTTP server to be stored in the same partition. This common store must include, in `/html/images`, the following images: - ironic-python-agent.kernel - ironic-python-agent.initramfs - final image to be deployed onto node in qcow2 format The following environment variables can be passed in to customize run-time functionality: - `PROVISIONING_MACS` - a comma seperated list of mac address of the master nodes (used to determine the `PROVISIONING_INTERFACE`) - `PROVISIONING_INTERFACE` - interface to use for ironic, dnsmasq(dhcpd) and httpd (default provisioning, this is calculated if the above `PROVISIONING_MACS` is provided) - `PROVISIONING_IP` - the specific IP to use (instead of calculating it based on the `PROVISIONING_INTERFACE`) - `DNSMASQ_EXCEPT_INTERFACE` - interfaces to exclude when providing DHCP address (default `lo`) - `HTTP_PORT` - port used by http server (default `80`) - `HTTPD_SERVE_NODE_IMAGES` - used by runhttpd script, controls access to the `/shared/html/images` directory via the default virtual host `(HTTP_PORT)`. (default `true`) - `DHCP_RANGE` - dhcp range to use for provisioning (e.g. `172.22.0.10,172.22.0.100`) - `DHCP_HOSTS` - a `;` separated list of `dhcp-host` entries, e.g. known MAC addresses like `00:20:e0:3b:13:af;00:20:e0:3b:14:af` (empty by default). For more details on `dhcp-host` see [the man page](https://thekelleys.org.uk/dnsmasq/docs/dnsmasq-man.html). - `DHCP_IGNORE` - a set of tags on hosts that should be ignored and not allocate DHCP leases for, e.g. `tag:!known` to ignore any unknown hosts (empty by default) - `OS_
_\_=` - This format can be used to set arbitary Ironic config options. These OS\_ environment variables take precedence over configuration rendered from templates. For example, if both `SEND_SENSOR_DATA=true` and `OS_SENSOR_DATA__SEND_SENSOR_DATA=false` are set, the OS_ variable value (`false`) will be used at runtime. - `IRONIC_RAMDISK_SSH_KEY` - A single public key to allow ssh access as root to nodes running IPA, takes the format "ssh-rsa AAAAB3.....". This relies on the [dynamic-login](https://opendev.org/openstack/diskimage-builder/src/branch/master/diskimage_builder/elements/dynamic-login) element to inject the key. - `IRONIC_KERNEL_PARAMS` - This parameter can be used to add additional kernel parameters to nodes running IPA - `GATEWAY_IP` - gateway IP address to use for ironic dnsmasq(dhcpd) - `DNS_IP` - DNS IP address to use for ironic dnsmasq(dhcpd) - `IRONIC_IPA_COLLECTORS` - Use a custom set of collectors to be run on inspection. (default `default,logs`) - `HTTPD_ENABLE_SENDFILE` - Whether to activate the EnableSendfile apache directive for httpd `(default, false)` - `IRONIC_CONDUCTOR_HOST` - Host name of the current conductor (only makes sense to change for a multinode setup). Defaults to the IP address used for provisioning. - `IRONIC_EXTERNAL_IP` - Optional external IP if Ironic is not accessible on `PROVISIONING_IP`. - `IRONIC_EXTERNAL_CALLBACK_URL` - Override Ironic's external callback URL. Defaults to use `IRONIC_EXTERNAL_IP` if available. - `IRONIC_EXTERNAL_HTTP_URL` - Override Ironic's external http URL. Defaults to use `IRONIC_EXTERNAL_IP` if available. - `IRONIC_ENABLE_VLAN_INTERFACES` - Which VLAN interfaces to enable on the agent start-up. Can be a list of interfaces or a special value `all`. Defaults to `all`. - `DEPLOY_KERNEL_URL` and `DEPLOY_RAMDISK_URL` provide the default IPA kernel and initramfs images. If they're not set, the images from IPA downloader are used (if present). The following mountpoints can be passed in to customize run-time functionality: - `/certs/ca/bmc` - The storage path of BMC CA certificates. If the path exists and verify_ca field in driver_info is True or None, the certificates in this path will be used. MariaDB configuration: - `IRONIC_USE_MARIADB` - Whether to use an external MariaDB database instead of a local SQLite file (default `false`) - `MARIADB_HOST` - Host name with an optional port of the MariaDB database instance (must be provided if `IRONIC_USE_MARIADB` is `true`) - `MARIADB_DATABASE` - Database name to use (default `ironic`) - `MARIADB_USER` - User name to use when connecting to the database (default `ironic`). The user must have privileges to create and update tables. Can be provided via a secret mounted under `/auth/mariadb`. - `MARIADB_PASSWORD` - The database password. Deprecated. Instead, mount a secret with `password` (optionally with a `username`) under `/auth/mariadb` mount point. The ironic configuration can be overridden by various environment variables. The following can serve as an example: - `OS_CONDUCTOR__DEPLOY_CALLBACK_TIMEOUT=4800` - timeout (seconds) to wait for a callback from a deploy ramdisk - `OS_CONDUCTOR__INSPECT_TIMEOUT=1800` - timeout (seconds) for waiting for node inspection - `OS_CONDUCTOR__CLEAN_CALLBACK_TIMEOUT=1800` - timeout (seconds) to wait for a callback from the ramdisk doing the cleaning - `OS_PXE__BOOT_RETRY_TIMEOUT=1200` - timeout (seconds) to enable boot retries. ## TLS configuration The following environment variables can be passed to customize the Ironic API TLS configuration: - `IRONIC_SSL_PROTOCOL` - Apache `SSLProtocol` directive for the Ironic API and proxy vhosts (default `-ALL +TLSv1.2 +TLSv1.3`) - `IRONIC_TLS_12_CIPHERS` - Setting this variable will set the allowed cipher suites for TLS up to version 1.2 in order, it needs to be set in the openSSL format e.g. `ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305`. If left unset it will use default from openSSL. - `IRONIC_TLS_13_CIPHERS` - Setting this variable will set the allowed cipher suites for TLS version 1.3 in order, it needs to be set in the openSSL format e.g. `TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256`. If let unset it will use default from openSSL. - `IRONIC_TLS_CURVES` - Setting this variable will set the allowed set of groups allowed for TLS negotiation by order of preference, it needs to be set in the openSSL format like e.g. `x448:x25519:secp256r1:secp384r1`. If let unset it will use default from openSSL. - `IRONIC_TLS_ENFORCE_SERVER_CIPHER_ORDER` - Setting this variable to `true` will make the server enforce its cipher list ordering for TLS version up to 1.2, defaults to `false` The following environment variables can be passed to customize the virtual media HTTP server configuration: - `IRONIC_VMEDIA_CURVES` - Setting this variable will set the allowed set of groups allowed for TLS negotiation by order of preference, it needs to be set in the openSSL format like e.g. `x448:x25519:secp256r1:secp384r1`. If let unset it will use default from openSSL. - `IRONIC_VMEDIA_TLS_12_CIPHERS` - Setting this variable will set the allowed cipher suites for TLS up to version 1.2 in order, it needs to be set in the openSSL format e.g. `ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-ECDSA-CHACHA20-POLY1305`. If let unset it will use default from openSSL. - `IRONIC_VMEDIA_TLS_13_CIPHERS` - Setting this variable will set the allowed cipher suites for TLS up to version 1.3 in order, it needs to be set in the openSSL format e.g. `TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256`. If let unset it will use default from openSSL. - `IRONIC_VMEDIA_TLS_ENFORCE_SERVER_CIPHER_ORDER` - Setting this variable to `true` will make the server enforce its cipher list ordering for TLS version up to 1.2, defaults to `false` ## Using a read-only root filesystem The ironic-image can operate with a read-only root filesystem. However, it needs a few directories to be mounted as writable `emptyDir` volumes: - `/conf` - location for rendered configuration files - `/data` - writable runtime data such as the database - `/tmp` - temporary directory This is in addition to the always required `/shared` volume that is used to share runtime data between Ironic and HTTPD.