Files
matchbox/scripts/libvirt
Dalton Hubble 1246d5a0db contrib/dnsmasq: Add ipxe.efi for dnsmasq:v0.5.0
* Add ipxe.efi to dnsmasq image's /var/lib/tftpboot directory
* Add initrd kernel argument respected only by UEFI
https://github.com/coreos/bugs/issues/1239
* Improve network-setup docs and scripts to cover UEFI clients
and to support launching UEFI QEMU/KVM clusters locally
* Reduce references to grub.efi flow, its not a happy path
2017-11-16 23:40:52 -08:00

119 lines
3.5 KiB
Bash
Executable File

#!/bin/bash
# Manage VM nodes which have a specific set of hardware attributes.
VM_MEMORY=${VM_MEMORY:-2048}
VM_DISK=${VM_DISK:-10}
if [ "$EUID" -ne 0 ]
then echo "Please run as root"
exit
fi
function main {
case "$1" in
"create") create_docker;;
"create-docker") create_docker;;
"create-rkt") create_rkt;;
"create-uefi") create_uefi;;
"start") start;;
"reboot") reboot;;
"shutdown") shutdown;;
"poweroff") poweroff;;
"destroy") destroy;;
*)
usage
exit 2
;;
esac
}
function usage {
echo "USAGE: ${0##*/} <command>"
echo "Commands:"
echo -e "\tcreate\t\tcreate QEMU/KVM nodes on a rkt CNI metal0 bridge"
echo -e "\tcreate-rkt\tcreate QEMU/KVM nodes on a rkt CNI metal0 bridge"
echo -e "\tcreate-docker\tcreate QEMU/KVM nodes on the docker0 bridge"
echo -e "\tcreate-uefi\tcreate UEFI QEMU/KVM nodes on the docker0 bridge"
echo -e "\tstart\t\tstart the QEMU/KVM nodes"
echo -e "\treboot\t\treboot the QEMU/KVM nodes"
echo -e "\tshutdown\tshutdown the QEMU/KVM nodes"
echo -e "\tpoweroff\tpoweroff the QEMU/KVM nodes"
echo -e "\tdestroy\t\tdestroy the QEMU/KVM nodes"
}
COMMON_VIRT_OPTS="--memory=${VM_MEMORY} --vcpus=1 --disk pool=default,size=${VM_DISK} --os-type=linux --os-variant=generic --noautoconsole --events on_poweroff=preserve"
NODE1_NAME=node1
NODE1_MAC=52:54:00:a1:9c:ae
NODE2_NAME=node2
NODE2_MAC=52:54:00:b2:2f:86
NODE3_NAME=node3
NODE3_MAC=52:54:00:c3:61:77
NODE4_NAME=node4
NODE4_MAC=52:54:00:d7:99:c7
function create_docker {
virt-install --name $NODE1_NAME --network=bridge:docker0,mac=$NODE1_MAC $COMMON_VIRT_OPTS --boot=hd,network
virt-install --name $NODE2_NAME --network=bridge:docker0,mac=$NODE2_MAC $COMMON_VIRT_OPTS --boot=hd,network
virt-install --name $NODE3_NAME --network=bridge:docker0,mac=$NODE3_MAC $COMMON_VIRT_OPTS --boot=hd,network
virt-install --name $NODE4_NAME --network=bridge:docker0,mac=$NODE4_MAC $COMMON_VIRT_OPTS --boot=hd,network
}
function create_rkt {
virt-install --name $NODE1_NAME --network=bridge:metal0,mac=$NODE1_MAC $COMMON_VIRT_OPTS --boot=hd,network
virt-install --name $NODE2_NAME --network=bridge:metal0,mac=$NODE2_MAC $COMMON_VIRT_OPTS --boot=hd,network
virt-install --name $NODE3_NAME --network=bridge:metal0,mac=$NODE3_MAC $COMMON_VIRT_OPTS --boot=hd,network
virt-install --name $NODE4_NAME --network=bridge:metal0,mac=$NODE4_MAC $COMMON_VIRT_OPTS --boot=hd,network
}
function create_uefi {
virt-install --name $NODE1_NAME --network=bridge=docker0,model=e1000,mac=$NODE1_MAC $COMMON_VIRT_OPTS --boot=uefi,network
virt-install --name $NODE2_NAME --network=bridge=docker0,model=e1000,mac=$NODE2_MAC $COMMON_VIRT_OPTS --boot=uefi,network
virt-install --name $NODE3_NAME --network=bridge=docker0,model=e1000,mac=$NODE3_MAC $COMMON_VIRT_OPTS --boot=uefi,network
virt-install --name $NODE4_NAME --network=bridge=docker0,model=e1000,mac=$NODE4_MAC $COMMON_VIRT_OPTS --boot=uefi,network
}
nodes=(node1 node2 node3 node4)
function start {
for node in ${nodes[@]}; do
virsh start $node
done
}
function reboot {
for node in ${nodes[@]}; do
virsh reboot $node
done
}
function shutdown {
for node in ${nodes[@]}; do
virsh shutdown $node
done
}
function poweroff {
for node in ${nodes[@]}; do
virsh destroy $node
done
}
function destroy {
for node in ${nodes[@]}; do
virsh destroy $node
done
for node in ${nodes[@]}; do
virsh undefine $node
done
virsh pool-refresh default
for node in ${nodes[@]}; do
virsh vol-delete --pool default $node.qcow2
done
}
main $@