169 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			HCL
		
	
	
	
			
		
		
	
	
			169 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			HCL
		
	
	
	
# Nomad 多数据中心生产环境配置
 | 
						|
# 部署架构: CN(dc1) + KR(dc2) + US(dc3)
 | 
						|
 | 
						|
terraform {
 | 
						|
  required_version = ">= 1.0"
 | 
						|
  
 | 
						|
  required_providers {
 | 
						|
    oci = {
 | 
						|
      source  = "oracle/oci"
 | 
						|
      version = "~> 5.0"
 | 
						|
    }
 | 
						|
    huaweicloud = {
 | 
						|
      source  = "huaweicloud/huaweicloud"
 | 
						|
      version = "~> 1.60"
 | 
						|
    }
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
# Oracle Cloud Provider (韩国)
 | 
						|
provider "oci" {
 | 
						|
  alias            = "korea"
 | 
						|
  tenancy_ocid     = var.oracle_tenancy_ocid
 | 
						|
  user_ocid        = var.oracle_user_ocid
 | 
						|
  fingerprint      = var.oracle_fingerprint
 | 
						|
  private_key_path = var.oracle_private_key_path
 | 
						|
  region           = "ap-seoul-1" # 韩国首尔
 | 
						|
}
 | 
						|
 | 
						|
# 华为云 Provider (美国)
 | 
						|
provider "huaweicloud" {
 | 
						|
  alias      = "us"
 | 
						|
  access_key = var.huawei_access_key
 | 
						|
  secret_key = var.huawei_secret_key
 | 
						|
  region     = "us-east-1" # 美国东部
 | 
						|
}
 | 
						|
 | 
						|
# 本地变量
 | 
						|
locals {
 | 
						|
  project_name = "nomad-multi-dc"
 | 
						|
  environment  = "production"
 | 
						|
  
 | 
						|
  common_tags = {
 | 
						|
    Project     = local.project_name
 | 
						|
    Environment = local.environment
 | 
						|
    ManagedBy   = "opentofu"
 | 
						|
    Owner       = "devops-team"
 | 
						|
  }
 | 
						|
}
 | 
						|
 | 
						|
# 数据源:获取 SSH 公钥
 | 
						|
data "local_file" "ssh_public_key" {
 | 
						|
  filename = pathexpand("~/.ssh/id_rsa.pub")
 | 
						|
}
 | 
						|
 | 
						|
# Oracle Cloud 基础设施 (韩国 - dc2)
 | 
						|
module "oracle_infrastructure" {
 | 
						|
  source = "../../providers/oracle-cloud"
 | 
						|
  
 | 
						|
  providers = {
 | 
						|
    oci = oci.korea
 | 
						|
  }
 | 
						|
  
 | 
						|
  project_name = local.project_name
 | 
						|
  environment  = local.environment
 | 
						|
  vpc_cidr     = "10.1.0.0/16"
 | 
						|
  
 | 
						|
  oci_config = {
 | 
						|
    tenancy_ocid     = var.oracle_tenancy_ocid
 | 
						|
    user_ocid        = var.oracle_user_ocid
 | 
						|
    fingerprint      = var.oracle_fingerprint
 | 
						|
    private_key_path = var.oracle_private_key_path
 | 
						|
    region           = "ap-seoul-1"
 | 
						|
  }
 | 
						|
  
 | 
						|
  common_tags = local.common_tags
 | 
						|
}
 | 
						|
 | 
						|
# 华为云基础设施 (美国 - dc3)
 | 
						|
module "huawei_infrastructure" {
 | 
						|
  source = "../../providers/huawei-cloud"
 | 
						|
  
 | 
						|
  providers = {
 | 
						|
    huaweicloud = huaweicloud.us
 | 
						|
  }
 | 
						|
  
 | 
						|
  project_name       = local.project_name
 | 
						|
  environment        = local.environment
 | 
						|
  vpc_cidr          = "10.2.0.0/16"
 | 
						|
  availability_zones = ["us-east-1a", "us-east-1b"]
 | 
						|
  
 | 
						|
  common_tags = local.common_tags
 | 
						|
}
 | 
						|
 | 
						|
# Nomad 多数据中心集群
 | 
						|
module "nomad_cluster" {
 | 
						|
  source = "../../modules/nomad-cluster"
 | 
						|
  
 | 
						|
  # 部署配置
 | 
						|
  deploy_korea_node = var.deploy_korea_node
 | 
						|
  deploy_us_node    = var.deploy_us_node
 | 
						|
  
 | 
						|
  # Oracle Cloud 配置
 | 
						|
  oracle_config = {
 | 
						|
    tenancy_ocid     = var.oracle_tenancy_ocid
 | 
						|
    user_ocid        = var.oracle_user_ocid
 | 
						|
    fingerprint      = var.oracle_fingerprint
 | 
						|
    private_key_path = var.oracle_private_key_path
 | 
						|
    region           = "ap-seoul-1"
 | 
						|
  }
 | 
						|
  
 | 
						|
  oracle_subnet_id         = module.oracle_infrastructure.public_subnet_ids[0]
 | 
						|
  oracle_security_group_id = module.oracle_infrastructure.security_group_id
 | 
						|
  
 | 
						|
  # 华为云配置
 | 
						|
  huawei_config = {
 | 
						|
    access_key = var.huawei_access_key
 | 
						|
    secret_key = var.huawei_secret_key
 | 
						|
    region     = "us-east-1"
 | 
						|
  }
 | 
						|
  
 | 
						|
  huawei_subnet_id         = module.huawei_infrastructure.public_subnet_ids[0]
 | 
						|
  huawei_security_group_id = module.huawei_infrastructure.security_group_id
 | 
						|
  
 | 
						|
  # 通用配置
 | 
						|
  ssh_public_key = data.local_file.ssh_public_key.content
 | 
						|
  common_tags    = local.common_tags
 | 
						|
  
 | 
						|
  # Nomad 配置
 | 
						|
  nomad_version     = "1.10.5"
 | 
						|
  nomad_encrypt_key = var.nomad_encrypt_key
 | 
						|
}
 | 
						|
 | 
						|
# 生成 Ansible inventory
 | 
						|
resource "local_file" "ansible_inventory" {
 | 
						|
  filename = "${path.module}/generated/nomad-cluster-inventory.yml"
 | 
						|
  content = yamlencode({
 | 
						|
    all = {
 | 
						|
      children = {
 | 
						|
        nomad_servers = {
 | 
						|
          hosts = module.nomad_cluster.ansible_inventory.all.children.nomad_servers.hosts
 | 
						|
        }
 | 
						|
      }
 | 
						|
      vars = {
 | 
						|
        ansible_user                 = "ubuntu"
 | 
						|
        ansible_ssh_private_key_file = "~/.ssh/id_rsa"
 | 
						|
        ansible_ssh_common_args      = "-o StrictHostKeyChecking=no"
 | 
						|
      }
 | 
						|
    }
 | 
						|
  })
 | 
						|
}
 | 
						|
 | 
						|
# 生成部署后配置脚本
 | 
						|
resource "local_file" "post_deploy_script" {
 | 
						|
  filename = "${path.module}/generated/post-deploy.sh"
 | 
						|
  content = templatefile("${path.module}/templates/post-deploy.sh", {
 | 
						|
    cluster_overview = module.nomad_cluster.cluster_overview
 | 
						|
    endpoints       = module.nomad_cluster.cluster_endpoints
 | 
						|
  })
 | 
						|
  
 | 
						|
  file_permission = "0755"
 | 
						|
}
 | 
						|
 | 
						|
# 生成跨数据中心测试任务
 | 
						|
resource "local_file" "cross_dc_test_job" {
 | 
						|
  filename = "${path.module}/generated/cross-dc-test.nomad"
 | 
						|
  content = templatefile("${path.module}/templates/cross-dc-test.nomad", {
 | 
						|
    datacenters = ["dc1", "dc2", "dc3"]
 | 
						|
  })
 | 
						|
} |