#!/bin/bash # OpenTofu 设置脚本 set -euo pipefail # 颜色定义 RED='\033[0;31m' GREEN='\033[0;32m' YELLOW='\033[1;33m' BLUE='\033[0;34m' NC='\033[0m' # No Color # 日志函数 log_info() { echo -e "${BLUE}[INFO]${NC} $1" } log_success() { echo -e "${GREEN}[SUCCESS]${NC} $1" } log_warning() { echo -e "${YELLOW}[WARNING]${NC} $1" } log_error() { echo -e "${RED}[ERROR]${NC} $1" } # 检查 OpenTofu 是否已安装 check_opentofu() { log_info "检查 OpenTofu 安装状态..." if command -v tofu &> /dev/null; then local version=$(tofu version | head -n1) log_success "OpenTofu 已安装: $version" return 0 else log_error "OpenTofu 未安装" return 1 fi } # 检查配置文件 check_config() { log_info "检查配置文件..." local config_file="tofu/environments/dev/terraform.tfvars" if [[ ! -f "$config_file" ]]; then log_error "配置文件不存在: $config_file" log_info "请复制 terraform.tfvars.example 并填入实际配置" return 1 fi # 检查是否包含示例值 if grep -q "your_tenancy_id_here\|your_user_id_here\|your:key:fingerprint:here" "$config_file"; then log_warning "配置文件包含示例值,请填入实际的 Oracle Cloud 配置" log_info "需要配置以下项目:" echo " - tenancy_ocid: Oracle Cloud 租户 OCID" echo " - user_ocid: 用户 OCID" echo " - fingerprint: API 密钥指纹" echo " - private_key_path: 私钥文件路径" echo " - compartment_ocid: 区间 OCID" return 1 fi log_success "配置文件检查通过" return 0 } # 初始化 OpenTofu init_opentofu() { log_info "初始化 OpenTofu..." cd tofu/environments/dev # 清理旧的状态文件 if [[ -d ".terraform" ]]; then log_info "清理旧的 .terraform 目录..." rm -rf .terraform fi # 初始化 if tofu init; then log_success "OpenTofu 初始化成功" else log_error "OpenTofu 初始化失败" return 1 fi cd - > /dev/null } # 验证配置 validate_config() { log_info "验证 OpenTofu 配置..." cd tofu/environments/dev if tofu validate; then log_success "配置验证通过" else log_error "配置验证失败" return 1 fi cd - > /dev/null } # 生成计划 plan_infrastructure() { log_info "生成基础设施计划..." cd tofu/environments/dev if tofu plan -var-file="terraform.tfvars" -out=tfplan; then log_success "计划生成成功" log_info "计划文件已保存为 tfplan" else log_error "计划生成失败" return 1 fi cd - > /dev/null } # 显示帮助信息 show_help() { echo "OpenTofu 设置脚本" echo "" echo "用法: $0 [选项]" echo "" echo "选项:" echo " init - 初始化 OpenTofu" echo " validate - 验证配置" echo " plan - 生成执行计划" echo " check - 检查环境和配置" echo " help - 显示此帮助信息" echo "" echo "示例:" echo " $0 check # 检查环境" echo " $0 init # 初始化项目" echo " $0 plan # 生成计划" } # 主函数 main() { case "${1:-help}" in "check") check_opentofu check_config ;; "init") check_opentofu || exit 1 check_config || exit 1 init_opentofu ;; "validate") validate_config ;; "plan") check_opentofu || exit 1 check_config || exit 1 plan_infrastructure ;; "help"|*) show_help ;; esac } # 运行主函数 main "$@"