#!/bin/bash set -euo pipefail ADDR="http://100.81.26.3:4646" # 检查 NOMAD_TOKEN 是否设置,如果设置了,则准备好 Header HDR="" if [ -n "${NOMAD_TOKEN:-}" ]; then HDR="-H "X-Nomad-Token: $NOMAD_TOKEN"" fi echo "--- 节点列表 (Before) ---" nomad node status -address="$ADDR" echo echo "--- 开始查找需要清理的旧节点 ---" # 使用 jq 从 nomad node status 的 json 输出中精确查找 # 条件: 状态为 "down" 且 名称匹配列表 IDS_TO_PURGE=$(nomad node status -address="$ADDR" -json | jq -r '.[] | select(.Status == "down" and (.Name | test("^(ch3|ch2|ash1d|ash2e|semaphore)$"))) | .ID') if [[ -z "$IDS_TO_PURGE" ]]; then echo "✅ 未找到符合条件的 'down' 状态节点,无需清理。" else echo "以下是待清理的节点 ID:" echo "$IDS_TO_PURGE" echo # 循环遍历 ID,使用 curl 调用 HTTP API 进行 purge for NODE_ID in $IDS_TO_PURGE; do echo "===> 正在清理节点: $NODE_ID" # 构造 curl 命令,并使用 eval 来正确处理可能为空的 $HDR cmd="curl -sS -XPOST $HDR -w ' -> HTTP %{http_code}\n' '$ADDR/v1/node/$NODE_ID/purge'" eval $cmd done fi echo echo "--- 节点列表 (After) ---" nomad node status -address="$ADDR"