A deploy interface plays a critical role in the provisioning process. It orchestrates the whole deployment and defines how the image gets transferred to the target disk.
direct deploy interface, the deploy ramdisk fetches the image from an
HTTP location. It can be an object storage (swift or RadosGW) temporary URL or
a user-provided HTTP URL. The deploy ramdisk then copies the image to the
target disk. See direct deploy diagram for
a detailed explanation of how this deploy interface works.
You can specify this deploy interface when creating or updating a node:
baremetal node create --driver ipmi --deploy-interface direct baremetal node set <NODE> --deploy-interface direct
For historical reasons the
direct deploy interface is sometimes called
agent. This is because before the Kilo release ironic-python-agent
used to only support this deploy interface.
Deploy with custom HTTP servers¶
direct deploy interface can also be configured to use with custom HTTP
servers set up at ironic conductor nodes, images will be cached locally and
made accessible by the HTTP server.
To use this deploy interface with a custom HTTP server, set
http in the
[agent] ... image_download_source = http ...
This configuration affects glance and
file:// images. If you want
http(s):// images to also be cached and served locally, use instead:
[agent] image_download_source = local
This option can also be set per node in
baremetal node set <node> --driver-info image_download_source=local
or per instance in
baremetal node set <node> --instance-info image_download_source=local
You need to set up a workable HTTP server at each conductor node which with
direct deploy interface enabled, and check http related options in the
ironic configuration file to match the HTTP server configurations.
[deploy] http_url = http://example.com http_root = /httpboot
Each HTTP server should be configured to follow symlinks for images
accessible from HTTP service. Please refer to configuration option
FollowSymLinks if you are using Apache HTTP server, or
disable_symlinks if Nginx HTTP server is in use.
Streaming raw images¶
The Bare Metal service is capable of streaming raw images directly to the target disk of a node, without caching them in the node’s RAM. When the source image is not already raw, the conductor will convert the image and calculate the new checksum.
If no algorithm is specified via the
image_os_hash_algo field, or if
this field is set to
md5, SHA256 is used for the updated checksum.
For HTTP or local file images that are already raw, you need to explicitly set the disk format to prevent the checksum from being unnecessarily re-calculated. For example:
baremetal node set <node> \ --instance-info image_source=http://server/myimage.img \ --instance-info image_os_hash_algo=sha512 \ --instance-info image_os_hash_value=<SHA512 of the raw image> \ --instance-info image_disk_format=raw
To disable this feature and cache images in the node’s RAM, set
[agent] stream_raw_images = False
To disable the conductor-side conversion completely, set
[DEFAULT] force_raw_images = False
This interface is similar to
direct in the sense that the image
is downloaded by the ramdisk directly from the image store
(not from ironic-conductor host), but the logic of provisioning the node
is held in a set of Ansible playbooks that are applied by the
ironic-conductor service handling the node.
While somewhat more complex to set up, this deploy interface provides greater
flexibility in terms of advanced node preparation during provisioning.
This interface is supported by most but not all hardware types declared
However this deploy interface is not enabled by default.
To enable it, add
ansible to the list of enabled deploy
enabled_deploy_interfaces option in the
section of ironic’s configuration file:
[DEFAULT] ... enabled_deploy_interfaces = direct,ansible ...
Once enabled, you can specify this deploy interface when creating or updating a node:
baremetal node create --driver ipmi --deploy-interface ansible baremetal node set <NODE> --deploy-interface ansible
For more information about this deploy interface, its features and how to use it, see Ansible deploy interface.
anaconda deploy interface is another option for highly customized
deployments. See Deploying with anaconda deploy interface for more details.
The ramdisk interface is intended to provide a mechanism to “deploy” an instance where the item to be deployed is in reality a ramdisk. It is documented separately, see Booting a Ramdisk or an ISO.
Custom agent deploy¶
custom-agent deploy interface is designed for operators who want to
completely orchestrate writing the instance image using
in-band deploy steps from a custom agent image. If you use this deploy interface, you are
responsible to provide all necessary deploy steps with priorities between
61 and 99 (see Agent steps for information on