fix:用 python3 校验 JSON(一般系统自带),不再强制 jq
Some checks failed
Sync Consul Config / sync (push) Failing after 2s

This commit is contained in:
xiaolipro 2026-09-08 14:14:56 +08:00
parent 9d38e2ae26
commit b713b739f9
2 changed files with 36 additions and 6 deletions

View File

@ -14,8 +14,27 @@ mkdir -p "$IDWMS_DIR"
need() { command -v "$1" >/dev/null || { echo "FAIL: 需要 $1"; exit 1; }; }
need kubectl
need curl
need jq
command -v python3 >/dev/null || command -v jq >/dev/null || {
echo "FAIL: 需要 python3 或 jq"; exit 1;
}
json_pretty() {
local raw="$1" out="$2"
if command -v python3 >/dev/null; then
python3 -c 'import json,sys; json.dump(json.load(sys.stdin), open(sys.argv[1],"w",encoding="utf-8"), ensure_ascii=False, indent=2); open(sys.argv[1],"a",encoding="utf-8").write("\n")' "$out" <<<"$raw"
else
jq . <<<"$raw" >"$out"
fi
}
json_ok_str() {
local raw="$1"
if command -v python3 >/dev/null; then
python3 -c 'import json,sys; json.loads(sys.stdin.read())' <<<"$raw"
else
jq empty <<<"$raw"
fi
}
if [[ -z "${CONSUL_HTTP_ADDR:-}" ]]; then
CIP="$(kubectl -n "$NS" get svc consul -o jsonpath='{.spec.clusterIP}')"
CONSUL_HTTP_ADDR="http://${CIP}:8500"
@ -48,11 +67,11 @@ for name in "${TARGETS[@]}"; do
echo "WARN: ${key} 为空或不存在,跳过"
continue
fi
if ! jq empty <<<"$raw" 2>/dev/null; then
if ! json_ok_str "$raw" 2>/dev/null; then
echo "FAIL: ${key} 不是 JSON"
exit 1
fi
jq . <<<"$raw" >"$out"
json_pretty "$raw" "$out"
echo "OK → ${out}"
done

View File

@ -22,8 +22,19 @@ IDWMS_DIR="${ROOT}/idwms"
need() { command -v "$1" >/dev/null || { echo "FAIL: 需要 $1"; exit 1; }; }
need kubectl
need curl
need jq
command -v envsubst >/dev/null || { echo "FAIL: 需要 envsubst(gettext)"; exit 1; }
command -v envsubst >/dev/null || { echo "FAIL: 需要 envsubst(apt install gettext-base)"; exit 1; }
# JSON 校验:优先 python3(runner 主机通常有),其次 jq
json_ok() {
local f="$1"
if command -v python3 >/dev/null; then
python3 -c 'import json,sys; json.load(open(sys.argv[1],encoding="utf-8"))' "$f"
elif command -v jq >/dev/null; then
jq empty "$f"
else
echo "FAIL: 需要 python3 或 jq 校验 JSON"; return 1
fi
}
secret_b64() {
local name="$1" key="$2"
@ -116,7 +127,7 @@ for name in "${TARGETS[@]}"; do
envsubst '${MYSQL_ROOT_PASSWORD} ${REDIS_PASSWORD} ${RABBITMQ_DEFAULT_PASS} ${ELASTIC_PASSWORD} ${JWT_SECRET_KEY}' \
<"$src" >"${TMP}/${name}.json"
if ! jq empty "${TMP}/${name}.json" 2>/dev/null; then
if ! json_ok "${TMP}/${name}.json" 2>/dev/null; then
echo "FAIL: ${name}.json 渲染后不是合法 JSON"
exit 1
fi