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:
101
scripts/verify.sh
Normal file
101
scripts/verify.sh
Normal file
@@ -0,0 +1,101 @@
|
||||
#!/usr/bin/env bash
|
||||
# Ansible 验证入口:以 docs/00-02-验证矩阵.md 为执行清单,逐个 doc_id 执行 verify playbook(deploy→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_id(fail-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 "$@"
|
||||
|
||||
Reference in New Issue
Block a user