174 lines
3.8 KiB
Bash
Executable File
174 lines
3.8 KiB
Bash
Executable File
#!/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 "$@" |