- 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
102 lines
2.6 KiB
Bash
102 lines
2.6 KiB
Bash
#!/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 "$@"
|
||
|