Deploy Interfaces

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

With 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

The 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 image_download_source to http in the [agent] section.

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:

image_download_source = local


This option can also be set per node in driver_info:

baremetal node set <node> --driver-info image_download_source=local

or per instance in instance_info:

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.

http_url =
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.

Ansible deploy

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 in ironic. However this deploy interface is not enabled by default. To enable it, add ansible to the list of enabled deploy interfaces in enabled_deploy_interfaces option in the [DEFAULT] section of ironic’s configuration file:

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.

Ramdisk deploy

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

The 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 priorities).