-
Notifications
You must be signed in to change notification settings - Fork 452
/
vmware.sh
120 lines (93 loc) · 3.88 KB
/
vmware.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
#!/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'
# export GOVC_NETWORK='PortGroup Name'
CLUSTER_NAME=${CLUSTER_NAME:=vmware-test}
TALOS_VERSION=v1.6.3
OVA_PATH=${OVA_PATH:="https://github.com/siderolabs/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:=2}
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}
if [ -z "${GOVC_NETWORK+x}" ]; then
echo "GOVC_NETWORK is unset, assuming default VM Network";
else
echo "GOVC_NETWORK set to ${GOVC_NETWORK}";
govc vm.network.change -vm ${CLUSTER_NAME}-control-plane-${i} -net ${GOVC_NETWORK} ethernet-0
fi
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}
if [ -z "${GOVC_NETWORK+x}" ]; then
echo "GOVC_NETWORK is unset, assuming default VM Network";
else
echo "GOVC_NETWORK set to ${GOVC_NETWORK}";
govc vm.network.change -vm ${CLUSTER_NAME}-worker-${i} -net ${GOVC_NETWORK} ethernet-0
fi
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}
}
"$@"