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": "pxe_ipmitool",
            "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 pxe_ipmitool 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 pxe_ipmitool \
    --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"

Then check that everything is populated properly:

openstack baremetal node validate $NODE_UUID_OR_NAME | grep power