Files
Deploy-Laboratory/scripts/verify.sh
jack 8c43761962 feat: 按 doc_id 重组 ansible/files 与验证框架
- ansible/files 改为与文档 XX-YY 对齐的目录结构,更新相关 playbook 路径
- 新增 scripts/verify.sh 与 ansible/playbooks/verify/*.yml,移除单体 verify-matrix.yml
- 补充 docs/00-02 矩阵状态、00-05 验证框架与流程、00-04 环境与 ylc65 工作机说明
- 增加 k3s 存储准备、Longhorn、local-path 等 playbook 与辅助脚本

Made-with: Cursor
2026-03-26 07:01:14 +08:00

102 lines
2.6 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
# Ansible 验证入口:以 docs/00-02-验证矩阵.md 为执行清单,逐个 doc_id 执行 verify playbookdeploy→verify→teardown
# 推荐在 ylc61控制节点仓库根执行。
set -euo pipefail
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
MATRIX_MD="${ROOT}/docs/00-02-验证矩阵.md"
load_env() {
if [[ -f "${ROOT}/scripts/.env.verify" ]]; then
set -a
# shellcheck disable=SC1091
source "${ROOT}/scripts/.env.verify"
set +a
echo "[OK] 已加载 scripts/.env.verify"
fi
}
parse_doc_ids_from_matrix() {
if [[ ! -f "${MATRIX_MD}" ]]; then
echo "[ERR] matrix 不存在:${MATRIX_MD}" >&2
exit 1
fi
# 从矩阵中提取形如 `XX-YY-*.md` 的文件名,输出 XX-YY按出现顺序
# shellcheck disable=SC2016
awk '
match($0, /`[0-9][0-9]-[0-9][0-9]-[^`]+\.md`/) {
s = substr($0, RSTART+1, RLENGTH-2);
id = substr(s, 1, 5);
if (!seen[id]++) print id;
}
' "${MATRIX_MD}"
}
usage() {
cat <<'EOF'
用法scripts/verify.sh <命令> [...]
命令:
list 从验证矩阵列出 doc_id
run <XX-YY> 运行指定 doc_id执行 ansible/playbooks/verify/<XX-YY>.yml
run-all 按验证矩阵顺序运行全部 doc_idfail-fast
环境变量:
VERIFY_TEARDOWN=1 验证后清理(默认 1
nginx_entry_base 例如 http://192.168.2.61(用于 02-05
nodejs_entry_base 例如 http://192.168.2.61(用于 04-01
示例:
export nginx_entry_base=http://192.168.2.61
export VERIFY_TEARDOWN=1
./scripts/verify.sh run 02-05
EOF
}
ansible_verify() {
local doc_id="$1"
local inv="${ANSIBLE_INVENTORY:-${ROOT}/ansible/inventory.ini}"
local pb_single="${ROOT}/ansible/playbooks/verify/${doc_id}.yml"
if [[ ! -f "$inv" ]]; then
echo "[ERR] inventory 不存在:$inv" >&2
exit 1
fi
if [[ ! -f "$pb_single" ]]; then
echo "[ERR] verify playbook 不存在fail-fast$pb_single" >&2
exit 1
fi
echo "[RUN] ansible-playbook -i $inv $pb_single"
ansible-playbook -i "$inv" "$pb_single"
}
main() {
load_env
local cmd="${1:-}"
case "$cmd" in
""|-h|--help) usage ;;
list)
parse_doc_ids_from_matrix
;;
run)
local doc_id="${2:?need doc_id like 02-05}"
ansible_verify "$doc_id"
;;
run-all)
local id
while IFS= read -r id; do
echo ""
echo "########################################## $id"
ansible_verify "$id"
done < <(parse_doc_ids_from_matrix)
;;
*)
echo "[ERR] unknown cmd: $cmd" >&2
usage
exit 1
;;
esac
}
main "$@"