From c188c2ee5969cf434505667c79eee6d3dba6e62d Mon Sep 17 00:00:00 2001 From: Dalton Hubble Date: Tue, 5 Jan 2016 14:12:06 -0800 Subject: [PATCH] scripts: Add manager script for libvirt VM nodes --- Documentation/img/virt-manager.png | Bin 30432 -> 0 bytes Documentation/virtual-hardware.md | 21 ++++++--- scripts/libvirt | 73 +++++++++++++++++++++++++++++ 3 files changed, 88 insertions(+), 6 deletions(-) delete mode 100644 Documentation/img/virt-manager.png create mode 100755 scripts/libvirt diff --git a/Documentation/img/virt-manager.png b/Documentation/img/virt-manager.png deleted file mode 100644 index b31d658ba1a5974204d87e89465e62fc11ae68bc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 30432 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 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. -Virt-Manager showing PXE network boot method + 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 $@