VirtualBMC is a small CLI that allows users to create a virtual BMC to manage a virtual machines using the IPMI protocol, similar to how real bare metal machines are managed. It can be used to to enable testing bare metal deployments in completely virtual environments.

Stable Branch

Ironic also ships a pxe_ssh driver that can be used for that purpose, but it has been deprecated and its use is discouraged.


VirtualBMC is not meant for production environments.


VirtualBMC is available from RDO repositories starting with the Ocata release:

sudo yum install -y python-virtualbmc

It is usually installed and used on the hypervisor where the virtual machines reside.

Creating virtual BMC

Every virtual machine needs its own virtual BMC. Create it with:

vbmc add <domain> --port 6230 --username admin --password password


You need to use a different port for each domain. Port numbers lower than 1025 requires the user to have root privilege in the system.


For tripleo-quickstart you may have to specify --libvirt-uri=qemu:///session.

Start the virtual BMCs:

vbmc start <domain>


This step has to be repeated after virtual host reboot.

Test the virtual BMC to see if it’s working. For example, to power on the virtual machine do:

ipmitool -I lanplus -U admin -P password -H -p 6230 power on

Enrolling virtual machines

In the undercloud, populate the instackenv.json with new “bare metals” in a similar way to real bare metal machines (see instackenv.json) with two exceptions:

  • set pm_port to the port you specified when Creating virtual BMC

  • populate mac field even if you plan to use introspection

For example:

    "nodes": [
            "pm_type": "ipmi",
            "mac": [
            "pm_user": "admin",
            "pm_password": "password",
            "pm_addr": "",
            "pm_port": "6230",
            "name": "compute-0"

Migrating from pxe_ssh to VirtualBMC

If you already have a virtual cloud deployed and want to migrate from the deprecated pxe_ssh driver to ipmi using VirtualBMC, follow Creating virtual BMC, then update the existing nodes to change their drivers and certain driver properties:

openstack baremetal node set $NODE_UUID_OR_NAME \
    --driver ipmi \
    --driver-info ipmi_address=<IP address of the virthost> \
    --driver-info ipmi_port=<Virtual BMC port> \
    --driver-info ipmi_username="admin" \
    --driver-info ipmi_password="password"

Stable Branch

For the Ocata release, use pxe_ipmitool driver instead of ipmi.

In the case of bare metal service in the overcloud, you will first have to configure the deployment to include the pxe_ipmitool driver, then rerun the deployment command, for example:

      - pxe_ipmitool
      - pxe_ssh

Before updating to Pike release, make sure to remove the pxe_ssh driver from the deployment configuration, as it will be removed from Ironic, then rerun the deployment command, for example:

      - pxe_ipmitool

To validate after updating deployment and verify everything is populated properly:

openstack baremetal node validate $NODE_UUID_OR_NAME | grep power