87 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			HCL
		
	
	
	
			
		
		
	
	
			87 lines
		
	
	
		
			2.5 KiB
		
	
	
	
		
			HCL
		
	
	
	
| # OpenTofu 小王 - 客户端配置部署
 | |
| terraform {
 | |
|   required_providers {
 | |
|     null = {
 | |
|       source = "registry.opentofu.org/hashicorp/null"
 | |
|       version = "3.2.4"
 | |
|     }
 | |
|   }
 | |
| }
 | |
| 
 | |
| # 6个客户端节点列表
 | |
| variable "client_nodes" {
 | |
|   type = list(string)
 | |
|   default = [
 | |
|     "hcp1",
 | |
|     "influxdb", 
 | |
|     "ash3c",
 | |
|     "ch4",
 | |
|     "warden",
 | |
|     "browser"
 | |
|   ]
 | |
| }
 | |
| 
 | |
| # 为每个客户端节点生成配置文件
 | |
| resource "local_file" "client_configs" {
 | |
|   for_each = toset(var.client_nodes)
 | |
|   
 | |
|   filename = "${path.module}/generated/${each.key}-client.hcl"
 | |
|   content = replace(
 | |
|     file("${path.module}/../nomad-configs-tofu/client-template.hcl"),
 | |
|     "NODE_NAME",
 | |
|     each.key
 | |
|   )
 | |
| }
 | |
| 
 | |
| # 部署配置到每个客户端节点
 | |
| resource "null_resource" "client_deploy" {
 | |
|   for_each = toset(var.client_nodes)
 | |
|   
 | |
|   depends_on = [local_file.client_configs]
 | |
|   
 | |
|   provisioner "local-exec" {
 | |
|     command = <<EOF
 | |
| echo "=== 部署客户端配置到 ${each.key} ==="
 | |
| echo "开始时间: $(date)"
 | |
| 
 | |
| echo "1. 测试连接 ${each.key}..."
 | |
| ping -c 1 ${each.key}.tailnet-68f9.ts.net || echo "   - ${each.key} ping 失败"
 | |
| 
 | |
| echo "2. 上传配置文件..."
 | |
| sshpass -p '3131' scp -o StrictHostKeyChecking=no -o ConnectTimeout=5 \
 | |
|   ${path.module}/generated/${each.key}-client.hcl \
 | |
|   ben@${each.key}.tailnet-68f9.ts.net:/tmp/nomad-new.hcl && echo "   - 文件上传成功" || echo "   - 文件上传失败"
 | |
| 
 | |
| echo "3. 部署配置并重启服务..."
 | |
| sshpass -p '3131' ssh -o StrictHostKeyChecking=no -o ConnectTimeout=5 \
 | |
|   ben@${each.key}.tailnet-68f9.ts.net \
 | |
|   "echo '=== ${each.key} 客户端配置部署开始 ==='; \
 | |
|    echo '3131' | sudo -S systemctl stop nomad; \
 | |
|    echo '备份旧配置...'; \
 | |
|    echo '3131' | sudo -S cp /etc/nomad.d/nomad.hcl /etc/nomad.d/nomad.hcl.backup.\$(date +%Y%m%d_%H%M%S) 2>/dev/null || true; \
 | |
|    echo '替换配置文件...'; \
 | |
|    echo '3131' | sudo -S cp /tmp/nomad-new.hcl /etc/nomad.d/nomad.hcl; \
 | |
|    echo '启动服务...'; \
 | |
|    echo '3131' | sudo -S systemctl start nomad; \
 | |
|    sleep 5; \
 | |
|    echo '检查服务状态...'; \
 | |
|    echo '3131' | sudo -S systemctl status nomad --no-pager; \
 | |
|    echo '=== ${each.key} 部署完成 ==='" && echo "   - ${each.key} 部署成功" || echo "   - ${each.key} 部署失败"
 | |
| 
 | |
| echo "=== ${each.key} 配置部署完成!时间: $(date) ==="
 | |
| EOF
 | |
|   }
 | |
|   
 | |
|   triggers = {
 | |
|     config_hash = local_file.client_configs[each.key].content_md5
 | |
|     deploy_time = timestamp()
 | |
|   }
 | |
| }
 | |
| 
 | |
| output "deployment_summary" {
 | |
|   value = {
 | |
|     client_nodes = var.client_nodes
 | |
|     config_files = [for node in var.client_nodes : "${node}-client.hcl"]
 | |
|     deploy_time = timestamp()
 | |
|   }
 | |
| } |