88 lines
3.4 KiB
Bash
88 lines
3.4 KiB
Bash
#!/usr/bin/env bash
|
||
# 实验室「正式部署」入口(对应 docs/00-04 §2 步骤 1~3)。
|
||
# 在仓库根执行:./scripts/deploy-lab.sh <子命令>
|
||
#
|
||
# 步骤对应关系(详见 docs/00-03-测试与验证框架.md §2):
|
||
# 1 接入 — 本机有 ansible-playbook、inventory 可达;可选加载 scripts/.env.verify
|
||
# 2 前置 — 可选 01-06-prepare-storage(磁盘 → /storage),非 k3s-uninstall 类重度清理
|
||
# 3 部署 — 调用 ansible/playbooks/verify/ 下 playbook;默认 -e VERIFY_TEARDOWN=0(铺栈后保留资源)。
|
||
# 需要验收后自动清理时,用 ./scripts/verify.sh run <doc_id>(默认 VERIFY_TEARDOWN=1)。
|
||
set -euo pipefail
|
||
|
||
ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd)"
|
||
# shellcheck disable=SC1091
|
||
source "${ROOT}/scripts/lib-ansible-lab.sh"
|
||
ansible_lab_export_config
|
||
|
||
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
|
||
}
|
||
|
||
usage() {
|
||
cat <<'EOF'
|
||
用法:scripts/deploy-lab.sh <子命令>
|
||
|
||
子命令:
|
||
k3s 安装/复验 K3s(verify/01-06.yml;可选先数据盘准备)
|
||
longhorn Helm 安装 Longhorn + 健康检查(verify/03-07.yml,VERIFY_TEARDOWN=0)
|
||
nginx-matrix HTTP nginx 矩阵 + 校验(verify/02-05.yml,VERIFY_TEARDOWN=0)
|
||
nginx-matrix-tls TLS nginx 矩阵(verify/03-02.yml,需显式 -e nginx_matrix_tls_enable=true)
|
||
|
||
环境变量(节选,完整见 scripts/.env.verify.example):
|
||
ANSIBLE_INVENTORY 默认 <仓库>/ansible/inventory.ini
|
||
K3S_PREPARE_STORAGE 为 true 时在 01-06.yml 内启用准备数据盘(传 -e k3s_do_prepare_storage=true -e k3s_prepare_storage=true)
|
||
DEPLOY_VERIFY_TEARDOWN 默认 0;若设为 1,则与 verify 子命令一并传入 Ansible(longhorn/nginx-matrix 会执行卸载类 teardown)
|
||
|
||
说明:
|
||
铺栈入口与验收入口共用 verify 下 playbook;区别为本脚本固定默认 VERIFY_TEARDOWN=0。验收请用 ./scripts/verify.sh full / run <doc_id>。
|
||
EOF
|
||
}
|
||
|
||
ansible_wrap() {
|
||
local inv="${ANSIBLE_INVENTORY:-${ROOT}/ansible/inventory.ini}"
|
||
if [[ ! -f "$inv" ]]; then
|
||
echo "[ERR] inventory 不存在:$inv" >&2
|
||
exit 1
|
||
fi
|
||
if ! command -v ansible-playbook >/dev/null 2>&1; then
|
||
echo "[ERR] 未找到 ansible-playbook,请先安装 Ansible" >&2
|
||
exit 1
|
||
fi
|
||
ansible_lab_check_inventory_keys "$inv" || exit 1
|
||
local td="${DEPLOY_VERIFY_TEARDOWN:-0}"
|
||
echo "[RUN] ansible-playbook -i $inv -e VERIFY_TEARDOWN=$td $*"
|
||
ansible-playbook -i "$inv" -e "VERIFY_TEARDOWN=$td" "$@"
|
||
}
|
||
|
||
cmd_k3s() {
|
||
if [[ "${K3S_PREPARE_STORAGE:-false}" == "true" ]]; then
|
||
ansible_wrap "${ROOT}/ansible/playbooks/verify/01-06.yml" -e 'k3s_do_prepare_storage=true' -e 'k3s_prepare_storage=true'
|
||
fi
|
||
ansible_wrap "${ROOT}/ansible/playbooks/verify/01-06.yml" -e 'k3s_do_install=true'
|
||
}
|
||
|
||
main() {
|
||
load_env
|
||
local sub="${1:-}"
|
||
case "$sub" in
|
||
""|-h|--help) usage ;;
|
||
k3s) cmd_k3s ;;
|
||
longhorn) ansible_wrap "${ROOT}/ansible/playbooks/verify/03-07.yml" ;;
|
||
nginx-matrix) ansible_wrap "${ROOT}/ansible/playbooks/verify/02-05.yml" ;;
|
||
nginx-matrix-tls) ansible_wrap "${ROOT}/ansible/playbooks/verify/03-02.yml" -e 'nginx_matrix_tls_enable=true' ;;
|
||
*)
|
||
echo "[ERR] 未知子命令:$sub" >&2
|
||
usage
|
||
exit 1
|
||
;;
|
||
esac
|
||
}
|
||
|
||
main "$@"
|