feat: make kubeadm workflows auto-scale with terraform outputs
All checks were successful
Terraform Plan / Terraform Plan (push) Successful in 19s
All checks were successful
Terraform Plan / Terraform Plan (push) Successful in 19s
This commit is contained in:
@@ -6,7 +6,7 @@ INVENTORY_FILE="${1:-$SCRIPT_DIR/inventory.env}"
|
||||
|
||||
if [ ! -f "$INVENTORY_FILE" ]; then
|
||||
echo "Missing inventory file: $INVENTORY_FILE"
|
||||
echo "Copy $SCRIPT_DIR/inventory.example.env to $SCRIPT_DIR/inventory.env and edit IPs."
|
||||
echo "Copy $SCRIPT_DIR/inventory.example.env to $SCRIPT_DIR/inventory.env and edit node mappings."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
@@ -16,22 +16,57 @@ source "$INVENTORY_FILE"
|
||||
SSH_USER="${SSH_USER:-micqdf}"
|
||||
SSH_OPTS="${SSH_OPTS:- -o BatchMode=yes -o StrictHostKeyChecking=accept-new }"
|
||||
|
||||
required=(CP_1 CP_2 CP_3 WK_1 WK_2 WK_3)
|
||||
for key in "${required[@]}"; do
|
||||
if [ -z "${!key:-}" ]; then
|
||||
echo "Missing required inventory variable: $key"
|
||||
declare -A NODE_IPS=()
|
||||
|
||||
add_pair() {
|
||||
local pair="$1"
|
||||
local name="${pair%%=*}"
|
||||
local ip="${pair#*=}"
|
||||
|
||||
if [ -z "$name" ] || [ -z "$ip" ] || [ "$name" = "$ip" ]; then
|
||||
echo "Invalid node pair '$pair' (expected name=ip)."
|
||||
exit 1
|
||||
fi
|
||||
done
|
||||
|
||||
NODE_IPS["$name"]="$ip"
|
||||
}
|
||||
|
||||
if [ -n "${CONTROL_PLANES:-}" ]; then
|
||||
for pair in $CONTROL_PLANES; do
|
||||
add_pair "$pair"
|
||||
done
|
||||
else
|
||||
while IFS= read -r var_name; do
|
||||
idx="${var_name#CP_}"
|
||||
add_pair "cp-$idx=${!var_name}"
|
||||
done < <(compgen -A variable | grep -E '^CP_[0-9]+$' | sort -V)
|
||||
fi
|
||||
|
||||
if [ -n "${WORKERS:-}" ]; then
|
||||
for pair in $WORKERS; do
|
||||
add_pair "$pair"
|
||||
done
|
||||
else
|
||||
while IFS= read -r var_name; do
|
||||
idx="${var_name#WK_}"
|
||||
add_pair "wk-$idx=${!var_name}"
|
||||
done < <(compgen -A variable | grep -E '^WK_[0-9]+$' | sort -V)
|
||||
fi
|
||||
|
||||
if [ "${#NODE_IPS[@]}" -eq 0 ]; then
|
||||
echo "No nodes found in inventory."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
reset_node() {
|
||||
local node_ip="$1"
|
||||
echo "==> Resetting $node_ip"
|
||||
local node_name="$1"
|
||||
local node_ip="$2"
|
||||
echo "==> Resetting $node_name ($node_ip)"
|
||||
ssh $SSH_OPTS "$SSH_USER@$node_ip" "sudo kubeadm reset -f && sudo systemctl stop kubelet && sudo rm -rf /etc/kubernetes /var/lib/etcd /var/lib/cni /etc/cni/net.d"
|
||||
}
|
||||
|
||||
for key in CP_1 CP_2 CP_3 WK_1 WK_2 WK_3; do
|
||||
reset_node "${!key}"
|
||||
done
|
||||
while IFS= read -r node_name; do
|
||||
reset_node "$node_name" "${NODE_IPS[$node_name]}"
|
||||
done < <(printf '%s\n' "${!NODE_IPS[@]}" | sort -V)
|
||||
|
||||
echo "Cluster components reset on all listed nodes."
|
||||
|
||||
Reference in New Issue
Block a user