Files
Deploy-Laboratory/scripts/deploy-lab.sh
2026-03-27 16:58:41 +08:00

88 lines
3.4 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
# 实验室「正式部署」入口(对应 docs/00-04 §2 步骤 13
# 在仓库根执行:./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 安装/复验 K3sverify/01-06.yml可选先数据盘准备
longhorn Helm 安装 Longhorn + 健康检查verify/03-07.ymlVERIFY_TEARDOWN=0
nginx-matrix HTTP nginx 矩阵 + 校验verify/02-05.ymlVERIFY_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 子命令一并传入 Ansiblelonghorn/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 "$@"