Skip to content

Instantly share code, notes, and snippets.

@rsmitty
Created January 6, 2022 18:12
Show Gist options
  • Save rsmitty/46b8c8e595ca1ca05dcea9bc9a73f0d2 to your computer and use it in GitHub Desktop.
Save rsmitty/46b8c8e595ca1ca05dcea9bc9a73f0d2 to your computer and use it in GitHub Desktop.
A little script to automate creation of talos clusters in vsphere
#!/bin/bash
set -e
## The following commented environment variables should be set
## before running this script
# export GOVC_USERNAME='administrator@vsphere.local'
# export GOVC_PASSWORD='xxx'
# export GOVC_INSECURE=true
# export GOVC_URL='https://172.16.199.151'
# export GOVC_DATASTORE='xxx'
CLUSTER_NAME=${CLUSTER_NAME:=vsphere-test}
TALOS_VERSION=v0.14.0
OVA_PATH=${OVA_PATH:="https://github.com/talos-systems/talos/releases/download/${TALOS_VERSION}/vmware-amd64.ova"}
CONTROL_PLANE_COUNT=${CONTROL_PLANE_COUNT:=3}
CONTROL_PLANE_CPU=${CONTROL_PLANE_CPU:=2}
CONTROL_PLANE_MEM=${CONTROL_PLANE_MEM:=4096}
CONTROL_PLANE_DISK=${CONTROL_PLANE_DISK:=10G}
CONTROL_PLANE_MACHINE_CONFIG_PATH=${CONTROL_PLANE_MACHINE_CONFIG_PATH:="./controlplane.yaml"}
WORKER_COUNT=${WORKER_COUNT:=3}
WORKER_CPU=${WORKER_CPU:=2}
WORKER_MEM=${WORKER_MEM:=4096}
WORKER_DISK=${WORKER_DISK:=10G}
WORKER_MACHINE_CONFIG_PATH=${WORKER_MACHINE_CONFIG_PATH:="./worker.yaml"}
upload_ova () {
## Import desired Talos Linux OVA into a new content library
govc library.create ${CLUSTER_NAME}
govc library.import -n talos-${TALOS_VERSION} ${CLUSTER_NAME} ${OVA_PATH}
}
create () {
## Encode machine configs
CONTROL_PLANE_B64_MACHINE_CONFIG=$(cat ${CONTROL_PLANE_MACHINE_CONFIG_PATH}| base64 | tr -d '\n')
WORKER_B64_MACHINE_CONFIG=$(cat ${WORKER_MACHINE_CONFIG_PATH} | base64 | tr -d '\n')
## Create control plane nodes and edit their settings
for i in $(seq 1 ${CONTROL_PLANE_COUNT}); do
echo ""
echo "launching control plane node: ${CLUSTER_NAME}-control-plane-${i}"
echo ""
govc library.deploy ${CLUSTER_NAME}/talos-${TALOS_VERSION} ${CLUSTER_NAME}-control-plane-${i}
govc vm.change \
-c ${CONTROL_PLANE_CPU}\
-m ${CONTROL_PLANE_MEM} \
-e "guestinfo.talos.config=${CONTROL_PLANE_B64_MACHINE_CONFIG}" \
-e "disk.enableUUID=1" \
-vm ${CLUSTER_NAME}-control-plane-${i}
govc vm.disk.change -vm ${CLUSTER_NAME}-control-plane-${i} -disk.name disk-1000-0 -size ${CONTROL_PLANE_DISK}
govc vm.power -on ${CLUSTER_NAME}-control-plane-${i}
done
## Create worker nodes and edit their settings
for i in $(seq 1 ${WORKER_COUNT}); do
echo ""
echo "launching worker node: ${CLUSTER_NAME}-worker-${i}"
echo ""
govc library.deploy ${CLUSTER_NAME}/talos-${TALOS_VERSION} ${CLUSTER_NAME}-worker-${i}
govc vm.change \
-c ${WORKER_CPU}\
-m ${WORKER_MEM} \
-e "guestinfo.talos.config=${WORKER_B64_MACHINE_CONFIG}" \
-e "disk.enableUUID=1" \
-vm ${CLUSTER_NAME}-worker-${i}
govc vm.disk.change -vm ${CLUSTER_NAME}-worker-${i} -disk.name disk-1000-0 -size ${WORKER_DISK}
govc vm.power -on ${CLUSTER_NAME}-worker-${i}
done
}
destroy() {
for i in $(seq 1 ${CONTROL_PLANE_COUNT}); do
echo ""
echo "destroying control plane node: ${CLUSTER_NAME}-control-plane-${i}"
echo ""
govc vm.destroy ${CLUSTER_NAME}-control-plane-${i}
done
for i in $(seq 1 ${WORKER_COUNT}); do
echo ""
echo "destroying worker node: ${CLUSTER_NAME}-worker-${i}"
echo ""
govc vm.destroy ${CLUSTER_NAME}-worker-${i}
done
}
delete_ova() {
govc library.rm ${CLUSTER_NAME}
}
"$@"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment