143 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			143 lines
		
	
	
		
			3.3 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
	
| #!/bin/bash
 | ||
| 
 | ||
| # Jinja2模板测试脚本
 | ||
| set -e
 | ||
| 
 | ||
| TEMPLATE_FILE="infrastructure/consul/baseline/consul.j2"
 | ||
| OUTPUT_DIR="infrastructure/consul/jinja2-output"
 | ||
| 
 | ||
| # 节点配置
 | ||
| declare -A NODE_CONFIGS
 | ||
| NODE_CONFIGS[ch4]="100.117.106.134:server:true"
 | ||
| NODE_CONFIGS[ash3c]="100.116.80.94:server:true"
 | ||
| NODE_CONFIGS[warden]="100.122.197.112:server:true"
 | ||
| NODE_CONFIGS[ash1d]="100.81.26.3:client:false"
 | ||
| NODE_CONFIGS[ash2e]="100.81.26.4:client:false"
 | ||
| NODE_CONFIGS[ch2]="100.117.106.135:client:false"
 | ||
| NODE_CONFIGS[ch3]="100.117.106.137:client:false"
 | ||
| NODE_CONFIGS[de]="100.98.209.52:client:false"
 | ||
| NODE_CONFIGS[onecloud1]="100.98.209.53:client:false"
 | ||
| NODE_CONFIGS[semaphore]="100.98.209.54:client:false"
 | ||
| NODE_CONFIGS[browser]="100.116.112.45:client:false"
 | ||
| NODE_CONFIGS[hcp1]="100.116.112.46:client:false"
 | ||
| NODE_CONFIGS[influxdb]="100.116.112.47:client:false"
 | ||
| 
 | ||
| # 颜色输出
 | ||
| GREEN='\033[0;32m'
 | ||
| BLUE='\033[0;34m'
 | ||
| RED='\033[0;31m'
 | ||
| NC='\033[0m'
 | ||
| 
 | ||
| log() {
 | ||
|     echo -e "${BLUE}[$(date '+%H:%M:%S')]${NC} $1"
 | ||
| }
 | ||
| 
 | ||
| success() {
 | ||
|     echo -e "${GREEN}[SUCCESS]${NC} $1"
 | ||
| }
 | ||
| 
 | ||
| error() {
 | ||
|     echo -e "${RED}[ERROR]${NC} $1"
 | ||
| }
 | ||
| 
 | ||
| # 创建输出目录
 | ||
| mkdir -p "$OUTPUT_DIR"
 | ||
| 
 | ||
| # 测试Jinja2模板
 | ||
| test_jinja2_template() {
 | ||
|     local node=$1
 | ||
|     local config=${NODE_CONFIGS[$node]}
 | ||
|     
 | ||
|     if [ -z "$config" ]; then
 | ||
|         error "未找到节点 $node 的配置"
 | ||
|         return 1
 | ||
|     fi
 | ||
|     
 | ||
|     # 解析配置
 | ||
|     IFS=':' read -r bind_addr node_zone ui_enabled <<< "$config"
 | ||
|     
 | ||
|     log "测试节点: $node"
 | ||
|     log "绑定地址: $bind_addr"
 | ||
|     log "节点区域: $node_zone"
 | ||
|     log "UI启用: $ui_enabled"
 | ||
|     
 | ||
|     # 创建JSON配置文件
 | ||
|     local json_file="$OUTPUT_DIR/${node}-config.json"
 | ||
|     cat > "$json_file" << JSON
 | ||
| {
 | ||
|     "node_name": "$node",
 | ||
|     "bind_addr": "$bind_addr",
 | ||
|     "node_zone": "$node_zone",
 | ||
|     "ui_enabled": $ui_enabled
 | ||
| }
 | ||
| JSON
 | ||
|     
 | ||
|     # 使用Jinja2渲染模板
 | ||
|     local output_file="$OUTPUT_DIR/${node}-consul.hcl"
 | ||
|     
 | ||
|     if command -v jinja2 >/dev/null 2>&1; then
 | ||
|         jinja2 "$TEMPLATE_FILE" "$json_file" > "$output_file"
 | ||
|     else
 | ||
|         # 使用Python脚本
 | ||
|         python3 -c "
 | ||
| import json
 | ||
| from jinja2 import Template
 | ||
| 
 | ||
| with open('$json_file', 'r') as f:
 | ||
|     data = json.load(f)
 | ||
| 
 | ||
| with open('$TEMPLATE_FILE', 'r') as f:
 | ||
|     template = Template(f.read())
 | ||
| 
 | ||
| with open('$output_file', 'w') as f:
 | ||
|     f.write(template.render(**data))
 | ||
| "
 | ||
|     fi
 | ||
|     
 | ||
|     success "Jinja2模板渲染完成: $output_file"
 | ||
|     
 | ||
|     # 显示前10行验证
 | ||
|     echo "--- 验证前10行 ---"
 | ||
|     head -10 "$output_file"
 | ||
|     echo "--- 验证完成 ---"
 | ||
|     echo ""
 | ||
| }
 | ||
| 
 | ||
| # 主函数
 | ||
| main() {
 | ||
|     local target_node=${1:-"ch4"}
 | ||
|     
 | ||
|     log "开始Jinja2模板测试"
 | ||
|     log "目标节点: $target_node"
 | ||
|     
 | ||
|     if [ "$target_node" = "all" ]; then
 | ||
|         log "测试所有节点"
 | ||
|         for node in "${!NODE_CONFIGS[@]}"; do
 | ||
|             test_jinja2_template "$node"
 | ||
|         done
 | ||
|     else
 | ||
|         test_jinja2_template "$target_node"
 | ||
|     fi
 | ||
|     
 | ||
|     success "Jinja2模板测试完成!"
 | ||
|     log "输出目录: $OUTPUT_DIR"
 | ||
| }
 | ||
| 
 | ||
| # 显示帮助
 | ||
| show_help() {
 | ||
|     echo "使用方法: $0 [节点名|all]"
 | ||
|     echo ""
 | ||
|     echo "示例:"
 | ||
|     echo "  $0 ch4        # 测试ch4节点"
 | ||
|     echo "  $0 all        # 测试所有节点"
 | ||
|     echo ""
 | ||
|     echo "支持的节点: ${!NODE_CONFIGS[@]}"
 | ||
| }
 | ||
| 
 | ||
| if [ "$1" = "-h" ] || [ "$1" = "--help" ]; then
 | ||
|     show_help
 | ||
|     exit 0
 | ||
| fi
 | ||
| 
 | ||
| main "$@"
 |