talos/hack/test/integration/libvirt.sh
Andrew Rynhard 31baa14e36 feat: add support for tftp download
This adds support for downloading the machine config over TFTP. This
will allow users to avoid having to setup an HTTP server, and use
whatever they are using for PXE.

Signed-off-by: Andrew Rynhard <andrew@andrewrynhard.com>
2019-12-18 09:28:38 -08:00

88 lines
3.1 KiB
Bash
Executable File

#!/bin/bash
set -e
if [ "$EUID" -ne 0 ]
then echo "Please run as root"
exit
fi
function main {
case "$1" in
"up") up;;
"down") down;;
"workspace") workspace;;
*)
usage
exit 2
;;
esac
}
function usage {
echo "USAGE: ${0##*/} <command>"
echo "Commands:"
echo -e "\up\t\spin up QEMU/KVM nodes on the talos0 bridge"
echo -e "\down\t\tear down the QEMU/KVM nodes"
echo -e "\workspace\t\run and enter a docker container ready for osctl and kubectl use"
}
NODES=(control-plane-1 control-plane-2 control-plane-3 worker-1)
INSTALLER=${INSTALLER:-docker.io/autonomy/installer:latest}
VM_MEMORY=${VM_MEMORY:-2048}
VM_DISK=${VM_DISK:-10}
CNI_URL=${CNI_URL:-https://raw.githubusercontent.com/cilium/cilium/1.6.4/install/kubernetes/quick-install.yaml}
COMMON_VIRT_OPTS="--memory=${VM_MEMORY} --cpu=host --vcpus=1 --disk pool=default,size=${VM_DISK} --os-type=linux --os-variant=generic --noautoconsole --graphics none --events on_poweroff=preserve --rng /dev/urandom"
CONTROL_PLANE_1_NAME=control-plane-1
CONTROL_PLANE_1_MAC=52:54:00:a1:9c:ae
CONTROL_PLANE_2_NAME=control-plane-2
CONTROL_PLANE_2_MAC=52:54:00:b2:2f:86
CONTROL_PLANE_3_NAME=control-plane-3
CONTROL_PLANE_3_MAC=52:54:00:c3:61:77
WORKER_1_NAME=worker-1
WORKER_1_MAC=52:54:00:d7:99:c7
function up {
echo ${INSTALLER}
cp $PWD/../../../build/initramfs.xz ./matchbox/assets/
cp $PWD/../../../build/vmlinuz ./matchbox/assets/
cd ./matchbox/assets
$PWD/../../../../../build/osctl-linux-amd64 config generate --install-image ${INSTALLER} integration-test https://kubernetes.talos.dev:6443
yq w -i init.yaml machine.install.extraKernelArgs[+] 'console=ttyS0'
yq w -i init.yaml cluster.network.cni.name 'custom'
yq w -i init.yaml cluster.network.cni.urls[+] "${CNI_URL}"
yq w -i controlplane.yaml machine.install.extraKernelArgs[+] 'console=ttyS0'
yq w -i join.yaml machine.install.extraKernelArgs[+] 'console=ttyS0'
cd -
virt-install --name $CONTROL_PLANE_1_NAME --network=bridge:talos0,model=e1000,mac=$CONTROL_PLANE_1_MAC $COMMON_VIRT_OPTS --boot=hd,network
virt-install --name $CONTROL_PLANE_2_NAME --network=bridge:talos0,model=e1000,mac=$CONTROL_PLANE_2_MAC $COMMON_VIRT_OPTS --boot=hd,network
virt-install --name $CONTROL_PLANE_3_NAME --network=bridge:talos0,model=e1000,mac=$CONTROL_PLANE_3_MAC $COMMON_VIRT_OPTS --boot=hd,network
virt-install --name $WORKER_1_NAME --network=bridge:talos0,model=e1000,mac=$WORKER_1_MAC $COMMON_VIRT_OPTS --boot=hd,network
}
function down {
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
}
function workspace {
docker run --rm -it -v $PWD:/workspace -v $PWD/../../../build/osctl-linux-amd64:/bin/osctl:ro --network talos --dns 172.28.1.1 -w /workspace/matchbox/assets -e TALOSCONFIG='/workspace/matchbox/assets/talosconfig' -e KUBECONFIG='/workspace/matchbox/assets/kubeconfig' --entrypoint /bin/bash k8s.gcr.io/hyperkube:v1.17.0
}
main $@