#!/bin/bash # Consul配置生成脚本 # 此脚本使用Consul模板从KV存储生成最终的Consul配置文件 set -e # 配置参数 CONSUL_ADDR="${CONSUL_ADDR:-localhost:8500}" ENVIRONMENT="${ENVIRONMENT:-dev}" CONSUL_CONFIG_DIR="${CONSUL_CONFIG_DIR:-/root/mgmt/components/consul/configs}" CONSUL_TEMPLATE_CMD="${CONSUL_TEMPLATE_CMD:-consul-template}" echo "开始生成Consul配置文件..." echo "Consul地址: $CONSUL_ADDR" echo "环境: $ENVIRONMENT" echo "配置目录: $CONSUL_CONFIG_DIR" # 检查Consul连接 echo "检查Consul连接..." if ! curl -s "$CONSUL_ADDR/v1/status/leader" | grep -q "."; then echo "错误: 无法连接到Consul服务器 $CONSUL_ADDR" exit 1 fi echo "Consul连接成功" # 检查consul-template是否可用 if ! command -v $CONSUL_TEMPLATE_CMD &> /dev/null; then echo "错误: consul-template 命令不可用,请安装consul-template" exit 1 fi # 设置环境变量 export CONSUL_ADDR export ENVIRONMENT # 使用consul-template生成配置文件 echo "使用consul-template生成配置文件..." $CONSUL_TEMPLATE_CMD \ -template="$CONSUL_CONFIG_DIR/consul.hcl.tmpl:$CONSUL_CONFIG_DIR/consul.hcl" \ -once \ -consul-addr="$CONSUL_ADDR" # 验证生成的配置文件 if [ -f "$CONSUL_CONFIG_DIR/consul.hcl" ]; then echo "配置文件生成成功: $CONSUL_CONFIG_DIR/consul.hcl" # 验证配置文件语法 echo "验证配置文件语法..." if consul validate $CONSUL_CONFIG_DIR/consul.hcl; then echo "配置文件语法验证通过" else echo "错误: 配置文件语法验证失败" exit 1 fi else echo "错误: 配置文件生成失败" exit 1 fi echo "Consul配置文件生成完成"