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
This commit is contained in:
2026-03-26 07:01:14 +08:00
parent a67788de56
commit 8c43761962
192 changed files with 4006 additions and 320 deletions

101
scripts/verify.sh Normal file
View File

@@ -0,0 +1,101 @@
#!/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 "$@"