diff --git a/Documentation/img/virt-manager.png b/Documentation/img/virt-manager.png
deleted file mode 100644
index b31d658b..00000000
Binary files a/Documentation/img/virt-manager.png and /dev/null differ
diff --git a/Documentation/virtual-hardware.md b/Documentation/virtual-hardware.md
index 62d12b2b..440bdcfe 100644
--- a/Documentation/virtual-hardware.md
+++ b/Documentation/virtual-hardware.md
@@ -84,26 +84,35 @@ Continue to [clients](#clients) to create a client VM or attach a baremetal mach
## Clients
-Once a network environment is prepared to boot client machines, create a libvirt VM configured to PXE boot or attach a baremetal machine to your Docker host.
+Create or attach PXE client machines to the network boot environment on the `docker0` bridge.
### libvirt VM
-Use `virt-manager` to create a new client VM. Select Network Boot with PXE and for the network selection, choose "Specify Shared Device" with the bridge name `docker0`.
+Create 5 VMs (`node1` to `node5`) with known hardware attributes, configured to PXE-boot. The `libvirt` script can manage these 5 nodes which are used throughout the [example](data) clusters.
-
+ sudo ./scripts/libivrt
+ USAGE: libvirt
+ Commands:
+ create create 5 libvirt nodes
+ reboot reboot the 5 libvirt nodes
+ shutdown shutdown the 5 libvirt nodes
+ poweroff poweroff the 5 libvirt nodes
+ destroy destroy the 5 libvirt nodes
-The VM should PXE boot using the boot and config settings based on its UUID or MAC address and your data volume. The `virt-manager` shows the UUID and the MAC address of the NIC on the shared bridge, which you can use when naming configs.
+You may use `virt-manager` to create your own VMs and view the console/state/attributes of existing VM nodes.
+
+When creating your own VMs, select "Network Boot with PXE" and for network selection use "Specify Shared Device" with the bridge name `docker0`.
### Bare Metal
-Connect a baremetal client machine to your libvirt Docker host machine and ensure that the client's boot firmware (probably BIOS) has been configured to prefer PXE booting.
+Connect a baremetal client machine to your host's `docker0` bridge and ensure the boot firmware (probably BIOS) is configured to prefer PXE booting.
Find the network interface and attach it to the virtual bridge.
ip link show # find new link e.g. enp0s20u2
brctl addif docker0 enp0s20u2
-Restart the client machine and it should PXE boot using the boot and config settings based on its UUID or MAC address and your data volume.
+Restart the client machine and it should PXE boot using settings from `bootcfg`.
## Next
diff --git a/scripts/libvirt b/scripts/libvirt
new file mode 100755
index 00000000..db658f07
--- /dev/null
+++ b/scripts/libvirt
@@ -0,0 +1,73 @@
+#!/bin/bash -e
+# Manage 5 VM nodes which have a specific set of hardware attributes.
+
+if [ "$EUID" -ne 0 ]
+ then echo "Please run as root"
+ exit
+fi
+
+function main {
+ case "$1" in
+ "create") create;;
+ "reboot") reboot;;
+ "shutdown") shutdown;;
+ "poweroff") poweroff;;
+ "destroy") destroy;;
+ *)
+ usage
+ exit 2
+ ;;
+ esac
+}
+
+function usage {
+ echo "USAGE: ${0##*/} "
+ echo "Commands:"
+ echo -e "\tcreate\t\tcreate 5 libvirt nodes with specific hardware attributes"
+ echo -e "\treboot\t\treboot the 5 libvirt nodes"
+ echo -e "\tshutdown\tshutdown the 5 libvirt nodes"
+ echo -e "\tpoweroff\tpoweroff the 5 libvirt nodes"
+ echo -e "\tdestroy\t\tdestroy the 5 libvirt nodes"
+}
+
+function create {
+ virt-install --name node1 -u 16e7d8a7-bfa9-428b-9117-363341bb330b --pxe --network=bridge:docker0 --ram=756 --vcpus=1 --os-type=linux --disk none --noautoconsole
+ virt-install --name node2 -u 264cd073-ca62-44b3-98c0-50aad5b5f819 --pxe --network=bridge:docker0 --ram=756 --vcpus=1 --os-type=linux --disk none --noautoconsole
+ virt-install --name node3 -u 39d2e747-2648-4d68-ae92-bbc70b245055 --pxe --network=bridge:docker0 --ram=756 --vcpus=1 --os-type=linux --disk none --noautoconsole
+ virt-install --name node4 -u 4ed46e8e-db69-471e-b874-0990dd65649d --pxe --network=bridge:docker0 --ram=756 --vcpus=1 --os-type=linux --disk none --noautoconsole
+ virt-install --name node5 -u 53683e94-3273-4a49-9a82-d769b88e3ccf --pxe --network=bridge:docker0 --ram=756 --vcpus=1 --os-type=linux --disk none --noautoconsole
+}
+
+function reboot {
+ virsh reboot node1
+ virsh reboot node2
+ virsh reboot node3
+ virsh reboot node4
+ virsh reboot node5
+}
+
+function shutdown {
+ virsh shutdown node1
+ virsh shutdown node2
+ virsh shutdown node3
+ virsh shutdown node4
+ virsh shutdown node5
+}
+
+function poweroff {
+ virsh destroy node1
+ virsh destroy node2
+ virsh destroy node3
+ virsh destroy node4
+ virsh destroy node5
+}
+
+function destroy {
+ virsh undefine node1
+ virsh undefine node2
+ virsh undefine node3
+ virsh undefine node4
+ virsh undefine node5
+}
+
+main $@