iac_modules/terraform-hcl-standard/vultr-vps/envs/ai-workspace/provision.sh
Haitao Pan de7fe511d7 feat(vultr-vps): ai-workspace IaC env with YAML+Jinja2 render and Ansible linkage
- envs/ai-workspace: hosts.yaml -> generate.py renders explicit Terraform
  module/resource blocks via Jinja2 (no for_each/count); terraform runtime
  output merged with YAML -> cmdb.json + inventory.ini for Ansible.
- modules/compute: backups bool -> "enabled"/"disabled" (vultr provider
  2.19+); add required_providers to compute & iam modules.
- skills/terraform-yaml-render-pattern + terraform-hcl-standard/AGENTS.md:
  binding spec for the render pattern.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-23 20:57:19 +08:00

47 lines
1.6 KiB
Bash
Executable File
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
# 一键联动YAML -> 渲染 TF -> apply -> 生成 CMDB/inventory ->(可选)跑 Ansible
#
# 用法:
# export TF_VAR_vultr_api_key=xxxx
# ./provision.sh # 渲染+创建+生成 inventory
# ./provision.sh ping # 之后对 ai_workspace 组跑 ping
# ./provision.sh playbook setup-ai-workspace-all-in-one.yml
set -euo pipefail
ENV_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
REPO_ROOT="$(cd "${ENV_DIR}/../../../../.." && pwd)"
PLAYBOOKS_DIR="${REPO_ROOT}/playbooks"
DYN_INV="${PLAYBOOKS_DIR}/inventory/terraform_cmdb.py"
echo "==> [1/4] generate.py render (hosts.yaml -> generated_hosts.tf + tfvars)"
python3 "${ENV_DIR}/generate.py" render
echo "==> [2/4] terraform init & apply"
terraform -chdir="${ENV_DIR}" init -input=false >/dev/null
terraform -chdir="${ENV_DIR}" apply -auto-approve -input=false
echo "==> [3/4] generate.py inventory (terraform output + YAML -> cmdb.json + inventory.ini)"
python3 "${ENV_DIR}/generate.py" inventory
echo "==> [4/4] 完成。生成文件:"
echo " ${ENV_DIR}/cmdb.json"
echo " ${ENV_DIR}/inventory.ini"
action="${1:-none}"
case "${action}" in
none)
echo "可手动执行: ansible ai_workspace -i ${DYN_INV} -m ping"
;;
ping)
( cd "${PLAYBOOKS_DIR}" && ansible ai_workspace -i "${DYN_INV}" -m ping )
;;
playbook)
pb="${2:?用法: provision.sh playbook <playbook.yml>}"
( cd "${PLAYBOOKS_DIR}" && ansible-playbook -i "${DYN_INV}" "${pb}" )
;;
*)
echo "未知动作: ${action} (支持: none|ping|playbook)" >&2
exit 1
;;
esac