217 lines
9.6 KiB
Bash
Executable File
217 lines
9.6 KiB
Bash
Executable File
#!/bin/bash
|
||
|
||
# Consul 变量和存储配置示例脚本
|
||
# 此脚本展示了如何配置Consul的变量和存储功能
|
||
|
||
set -e
|
||
|
||
# 配置参数
|
||
CONSUL_ADDR=${CONSUL_ADDR:-"http://localhost:8500"}
|
||
ENVIRONMENT=${ENVIRONMENT:-"dev"}
|
||
PROVIDER=${PROVIDER:-"oracle"}
|
||
REGION=${REGION:-"kr"}
|
||
|
||
echo "Consul 变量和存储配置示例"
|
||
echo "========================="
|
||
echo "Consul 地址: $CONSUL_ADDR"
|
||
echo "环境: $ENVIRONMENT"
|
||
echo "提供商: $PROVIDER"
|
||
echo "区域: $REGION"
|
||
echo ""
|
||
|
||
# 检查Consul连接
|
||
check_consul_connection() {
|
||
echo "检查Consul连接..."
|
||
if curl -s "$CONSUL_ADDR/v1/status/leader" > /dev/null; then
|
||
echo "✓ Consul连接正常"
|
||
else
|
||
echo "✗ 无法连接到Consul,请检查Consul服务是否运行"
|
||
exit 1
|
||
fi
|
||
}
|
||
|
||
# 配置应用变量
|
||
configure_app_variables() {
|
||
echo "配置应用变量..."
|
||
|
||
# 应用基本信息
|
||
curl -X PUT "$CONSUL_ADDR/v1/kv/config/$ENVIRONMENT/app/name" -d "my-application"
|
||
curl -X PUT "$CONSUL_ADDR/v1/kv/config/$ENVIRONMENT/app/version" -d "1.0.0"
|
||
curl -X PUT "$CONSUL_ADDR/v1/kv/config/$ENVIRONMENT/app/environment" -d "$ENVIRONMENT"
|
||
|
||
# 特性开关
|
||
curl -X PUT "$CONSUL_ADDR/v1/kv/config/$ENVIRONMENT/features/new_ui" -d "true"
|
||
curl -X PUT "$CONSUL_ADDR/v1/kv/config/$ENVIRONMENT/features/advanced_analytics" -d "false"
|
||
curl -X PUT "$CONSUL_ADDR/v1/kv/config/$ENVIRONMENT/features/beta_features" -d "true"
|
||
|
||
echo "✓ 应用变量配置完成"
|
||
}
|
||
|
||
# 配置数据库变量
|
||
configure_database_variables() {
|
||
echo "配置数据库变量..."
|
||
|
||
# 数据库连接信息
|
||
curl -X PUT "$CONSUL_ADDR/v1/kv/config/$ENVIRONMENT/database/host" -d "db.example.com"
|
||
curl -X PUT "$CONSUL_ADDR/v1/kv/config/$ENVIRONMENT/database/port" -d "5432"
|
||
curl -X PUT "$CONSUL_ADDR/v1/kv/config/$ENVIRONMENT/database/name" -d "myapp_db"
|
||
curl -X PUT "$CONSUL_ADDR/v1/kv/config/$ENVIRONMENT/database/ssl_mode" -d "require"
|
||
|
||
# 数据库连接池配置
|
||
curl -X PUT "$CONSUL_ADDR/v1/kv/config/$ENVIRONMENT/database/max_connections" -d "100"
|
||
curl -X PUT "$CONSUL_ADDR/v1/kv/config/$ENVIRONMENT/database/min_connections" -d "10"
|
||
curl -X PUT "$CONSUL_ADDR/v1/kv/config/$ENVIRONMENT/database/connection_timeout" -d "30s"
|
||
|
||
echo "✓ 数据库变量配置完成"
|
||
}
|
||
|
||
# 配置缓存变量
|
||
configure_cache_variables() {
|
||
echo "配置缓存变量..."
|
||
|
||
# Redis配置
|
||
curl -X PUT "$CONSUL_ADDR/v1/kv/config/$ENVIRONMENT/cache/host" -d "redis.example.com"
|
||
curl -X PUT "$CONSUL_ADDR/v1/kv/config/$ENVIRONMENT/cache/port" -d "6379"
|
||
curl -X PUT "$CONSUL_ADDR/v1/kv/config/$ENVIRONMENT/cache/password" -d "secure_password"
|
||
curl -X PUT "$CONSUL_ADDR/v1/kv/config/$ENVIRONMENT/cache/db" -d "0"
|
||
|
||
# 缓存策略
|
||
curl -X PUT "$CONSUL_ADDR/v1/kv/config/$ENVIRONMENT/cache/ttl" -d "3600"
|
||
curl -X PUT "$CONSUL_ADDR/v1/kv/config/$ENVIRONMENT/cache/max_memory" -d "2gb"
|
||
curl -X PUT "$CONSUL_ADDR/v1/kv/config/$ENVIRONMENT/cache/eviction_policy" -d "allkeys-lru"
|
||
|
||
echo "✓ 缓存变量配置完成"
|
||
}
|
||
|
||
# 配置消息队列变量
|
||
configure_messaging_variables() {
|
||
echo "配置消息队列变量..."
|
||
|
||
# RabbitMQ配置
|
||
curl -X PUT "$CONSUL_ADDR/v1/kv/config/$ENVIRONMENT/messaging/host" -d "rabbitmq.example.com"
|
||
curl -X PUT "$CONSUL_ADDR/v1/kv/config/$ENVIRONMENT/messaging/port" -d "5672"
|
||
curl -X PUT "$CONSUL_ADDR/v1/kv/config/$ENVIRONMENT/messaging/username" -d "myapp"
|
||
curl -X PUT "$CONSUL_ADDR/v1/kv/config/$ENVIRONMENT/messaging/password" -d "secure_password"
|
||
curl -X PUT "$CONSUL_ADDR/v1/kv/config/$ENVIRONMENT/messaging/vhost" -d "/myapp"
|
||
|
||
# 队列配置
|
||
curl -X PUT "$CONSUL_ADDR/v1/kv/config/$ENVIRONMENT/messaging/queue_name" -d "tasks"
|
||
curl -X PUT "$CONSUL_ADDR/v1/kv/config/$ENVIRONMENT/messaging/exchange" -d "myapp_exchange"
|
||
curl -X PUT "$CONSUL_ADDR/v1/kv/config/$ENVIRONMENT/messaging/routing_key" -d "task.#"
|
||
|
||
echo "✓ 消息队列变量配置完成"
|
||
}
|
||
|
||
# 配置云服务提供商变量
|
||
configure_provider_variables() {
|
||
echo "配置云服务提供商变量..."
|
||
|
||
if [ "$PROVIDER" = "oracle" ]; then
|
||
# Oracle Cloud配置
|
||
curl -X PUT "$CONSUL_ADDR/v1/kv/config/$ENVIRONMENT/$PROVIDER/$region/tenancy_ocid" -d "ocid1.tenancy.oc1..aaaaaaaayourtenancyocid"
|
||
curl -X PUT "$CONSUL_ADDR/v1/kv/config/$ENVIRONMENT/$PROVIDER/$region/user_ocid" -d "ocid1.user.oc1..aaaaaaaayouruserocid"
|
||
curl -X PUT "$CONSUL_ADDR/v1/kv/config/$ENVIRONMENT/$PROVIDER/$region/fingerprint" -d "your-fingerprint"
|
||
curl -X PUT "$CONSUL_ADDR/v1/kv/config/$ENVIRONMENT/$PROVIDER/$region/region" -d "$REGION"
|
||
curl -X PUT "$CONSUL_ADDR/v1/kv/config/$ENVIRONMENT/$PROVIDER/$region/compartment_id" -d "ocid1.compartment.oc1..aaaaaaaayourcompartmentid"
|
||
elif [ "$PROVIDER" = "aws" ]; then
|
||
# AWS配置
|
||
curl -X PUT "$CONSUL_ADDR/v1/kv/config/$ENVIRONMENT/$PROVIDER/$region/access_key" -d "your-access-key"
|
||
curl -X PUT "$CONSUL_ADDR/v1/kv/config/$ENVIRONMENT/$PROVIDER/$region/secret_key" -d "your-secret-key"
|
||
curl -X PUT "$CONSUL_ADDR/v1/kv/config/$ENVIRONMENT/$PROVIDER/$region/region" -d "$REGION"
|
||
elif [ "$PROVIDER" = "gcp" ]; then
|
||
# GCP配置
|
||
curl -X PUT "$CONSUL_ADDR/v1/kv/config/$ENVIRONMENT/$PROVIDER/$region/project_id" -d "your-project-id"
|
||
curl -X PUT "$CONSUL_ADDR/v1/kv/config/$ENVIRONMENT/$PROVIDER/$region/region" -d "$REGION"
|
||
curl -X PUT "$CONSUL_ADDR/v1/kv/config/$ENVIRONMENT/$PROVIDER/$region/credentials_path" -d "/path/to/service-account.json"
|
||
elif [ "$PROVIDER" = "digitalocean" ]; then
|
||
# DigitalOcean配置
|
||
curl -X PUT "$CONSUL_ADDR/v1/kv/config/$ENVIRONMENT/$PROVIDER/$region/token" -d "your-do-token"
|
||
curl -X PUT "$CONSUL_ADDR/v1/kv/config/$ENVIRONMENT/$PROVIDER/$region/region" -d "$REGION"
|
||
fi
|
||
|
||
echo "✓ 云服务提供商变量配置完成"
|
||
}
|
||
|
||
# 配置存储相关变量
|
||
configure_storage_variables() {
|
||
echo "配置存储相关变量..."
|
||
|
||
# 快照配置
|
||
curl -X PUT "$CONSUL_ADDR/v1/kv/config/$ENVIRONMENT/storage/snapshot/enabled" -d "true"
|
||
curl -X PUT "$CONSUL_ADDR/v1/kv/config/$ENVIRONMENT/storage/snapshot/interval" -d "24h"
|
||
curl -X PUT "$CONSUL_ADDR/v1/kv/config/$ENVIRONMENT/storage/snapshot/retain" -d "30"
|
||
curl -X PUT "$CONSUL_ADDR/v1/kv/config/$ENVIRONMENT/storage/snapshot/name" -d "consul-snapshot-{{.Timestamp}}"
|
||
|
||
# 备份配置
|
||
curl -X PUT "$CONSUL_ADDR/v1/kv/config/$ENVIRONMENT/storage/backup/enabled" -d "true"
|
||
curl -X PUT "$CONSUL_ADDR/v1/kv/config/$ENVIRONMENT/storage/backup/interval" -d "6h"
|
||
curl -X PUT "$CONSUL_ADDR/v1/kv/config/$ENVIRONMENT/storage/backup/retain" -d "7"
|
||
curl -X PUT "$CONSUL_ADDR/v1/kv/config/$ENVIRONMENT/storage/backup/name" -d "consul-backup-{{.Timestamp}}"
|
||
|
||
# 数据目录配置
|
||
curl -X PUT "$CONSUL_ADDR/v1/kv/config/$ENVIRONMENT/storage/data_dir" -d "/opt/consul/data"
|
||
curl -X PUT "$CONSUL_ADDR/v1/kv/config/$ENVIRONMENT/storage/raft_dir" -d "/opt/consul/raft"
|
||
|
||
# Autopilot配置
|
||
curl -X PUT "$CONSUL_ADDR/v1/kv/config/$ENVIRONMENT/storage/autopilot/cleanup_dead_servers" -d "true"
|
||
curl -X PUT "$CONSUL_ADDR/v1/kv/config/$ENVIRONMENT/storage/autopilot/last_contact_threshold" -d "200ms"
|
||
curl -X PUT "$CONSUL_ADDR/v1/kv/config/$ENVIRONMENT/storage/autopilot/max_trailing_logs" -d "250"
|
||
curl -X PUT "$CONSUL_ADDR/v1/kv/config/$ENVIRONMENT/storage/autopilot/server_stabilization_time" -d "10s"
|
||
|
||
echo "✓ 存储相关变量配置完成"
|
||
}
|
||
|
||
# 显示配置结果
|
||
display_configuration() {
|
||
echo ""
|
||
echo "配置结果:"
|
||
echo "========="
|
||
|
||
echo "应用配置:"
|
||
curl -s "$CONSUL_ADDR/v1/kv/config/$ENVIRONMENT/app/?recurse" | jq -r '.[] | "\(.Key): \(.Value | @base64d)"' 2>/dev/null || echo " (需要安装jq以查看格式化输出)"
|
||
|
||
echo ""
|
||
echo "数据库配置:"
|
||
curl -s "$CONSUL_ADDR/v1/kv/config/$ENVIRONMENT/database/?recurse" | jq -r '.[] | "\(.Key): \(.Value | @base64d)"' 2>/dev/null || echo " (需要安装jq以查看格式化输出)"
|
||
|
||
echo ""
|
||
echo "缓存配置:"
|
||
curl -s "$CONSUL_ADDR/v1/kv/config/$ENVIRONMENT/cache/?recurse" | jq -r '.[] | "\(.Key): \(.Value | @base64d)"' 2>/dev/null || echo " (需要安装jq以查看格式化输出)"
|
||
|
||
echo ""
|
||
echo "消息队列配置:"
|
||
curl -s "$CONSUL_ADDR/v1/kv/config/$ENVIRONMENT/messaging/?recurse" | jq -r '.[] | "\(.Key): \(.Value | @base64d)"' 2>/dev/null || echo " (需要安装jq以查看格式化输出)"
|
||
|
||
echo ""
|
||
echo "云服务提供商配置:"
|
||
curl -s "$CONSUL_ADDR/v1/kv/config/$ENVIRONMENT/$PROVIDER/?recurse" | jq -r '.[] | "\(.Key): \(.Value | @base64d)"' 2>/dev/null || echo " (需要安装jq以查看格式化输出)"
|
||
|
||
echo ""
|
||
echo "存储配置:"
|
||
curl -s "$CONSUL_ADDR/v1/kv/config/$ENVIRONMENT/storage/?recurse" | jq -r '.[] | "\(.Key): \(.Value | @base64d)"' 2>/dev/null || echo " (需要安装jq以查看格式化输出)"
|
||
}
|
||
|
||
# 主函数
|
||
main() {
|
||
check_consul_connection
|
||
configure_app_variables
|
||
configure_database_variables
|
||
configure_cache_variables
|
||
configure_messaging_variables
|
||
configure_provider_variables
|
||
configure_storage_variables
|
||
display_configuration
|
||
|
||
echo ""
|
||
echo "✓ 所有变量和存储配置已完成!"
|
||
echo ""
|
||
echo "使用说明:"
|
||
echo "1. 在Terraform中使用consul_keys数据源获取这些配置"
|
||
echo "2. 在应用程序中使用Consul客户端库读取这些配置"
|
||
echo "3. 使用Consul UI查看和管理这些配置"
|
||
echo ""
|
||
echo "配置文件位置: /root/mgmt/docs/setup/consul_variables_and_storage_guide.md"
|
||
}
|
||
|
||
# 执行主函数
|
||
main "$@" |