145 lines
4.5 KiB
HCL
145 lines
4.5 KiB
HCL
# Nomad 多数据中心集群输出
|
|
|
|
# 集群概览
|
|
output "cluster_overview" {
|
|
description = "Nomad 多数据中心集群概览"
|
|
value = {
|
|
datacenters = {
|
|
dc1 = {
|
|
name = "dc1"
|
|
location = "China (CN)"
|
|
provider = "existing"
|
|
node = "semaphore"
|
|
ip = "100.116.158.95"
|
|
status = "existing"
|
|
}
|
|
dc2 = var.deploy_korea_node ? {
|
|
name = "dc2"
|
|
location = "Korea (KR)"
|
|
provider = "oracle"
|
|
node = "master"
|
|
ip = try(module.oracle_korea_node[0].public_ip, "pending")
|
|
status = "deployed"
|
|
} : null
|
|
dc3 = var.deploy_us_node ? {
|
|
name = "dc3"
|
|
location = "US"
|
|
provider = "huawei"
|
|
node = "ash3c"
|
|
ip = try(module.huawei_us_node[0].public_ip, "pending")
|
|
status = "deployed"
|
|
} : null
|
|
}
|
|
total_nodes = 1 + (var.deploy_korea_node ? 1 : 0) + (var.deploy_us_node ? 1 : 0)
|
|
}
|
|
}
|
|
|
|
# Oracle Cloud 韩国节点输出
|
|
output "oracle_korea_node" {
|
|
description = "Oracle Cloud 韩国节点信息"
|
|
value = var.deploy_korea_node ? {
|
|
instance_id = try(module.oracle_korea_node[0].instance_id, null)
|
|
public_ip = try(module.oracle_korea_node[0].public_ip, null)
|
|
private_ip = try(module.oracle_korea_node[0].private_ip, null)
|
|
datacenter = "dc2"
|
|
provider = "oracle"
|
|
region = var.oracle_config.region
|
|
|
|
# 连接信息
|
|
ssh_command = try("ssh ubuntu@${module.oracle_korea_node[0].public_ip}", null)
|
|
nomad_ui = try("http://${module.oracle_korea_node[0].public_ip}:4646", null)
|
|
} : null
|
|
}
|
|
|
|
# 华为云美国节点输出
|
|
output "huawei_us_node" {
|
|
description = "华为云美国节点信息"
|
|
value = var.deploy_us_node ? {
|
|
instance_id = try(module.huawei_us_node[0].instance_id, null)
|
|
public_ip = try(module.huawei_us_node[0].public_ip, null)
|
|
private_ip = try(module.huawei_us_node[0].private_ip, null)
|
|
datacenter = "dc3"
|
|
provider = "huawei"
|
|
region = var.huawei_config.region
|
|
|
|
# 连接信息
|
|
ssh_command = try("ssh ubuntu@${module.huawei_us_node[0].public_ip}", null)
|
|
nomad_ui = try("http://${module.huawei_us_node[0].public_ip}:4646", null)
|
|
} : null
|
|
}
|
|
|
|
# 集群连接信息
|
|
output "cluster_endpoints" {
|
|
description = "集群连接端点"
|
|
value = {
|
|
nomad_ui_urls = compact([
|
|
"http://100.116.158.95:4646", # dc1 - semaphore
|
|
var.deploy_korea_node ? try("http://${module.oracle_korea_node[0].public_ip}:4646", null) : null, # dc2
|
|
var.deploy_us_node ? try("http://${module.huawei_us_node[0].public_ip}:4646", null) : null # dc3
|
|
])
|
|
|
|
ssh_commands = compact([
|
|
"ssh root@100.116.158.95", # dc1 - semaphore
|
|
var.deploy_korea_node ? try("ssh ubuntu@${module.oracle_korea_node[0].public_ip}", null) : null, # dc2
|
|
var.deploy_us_node ? try("ssh ubuntu@${module.huawei_us_node[0].public_ip}", null) : null # dc3
|
|
])
|
|
}
|
|
}
|
|
|
|
# Ansible inventory 生成
|
|
output "ansible_inventory" {
|
|
description = "生成的 Ansible inventory"
|
|
value = {
|
|
all = {
|
|
children = {
|
|
nomad_servers = {
|
|
hosts = merge(
|
|
{
|
|
semaphore = {
|
|
ansible_host = "100.116.158.95"
|
|
datacenter = "dc1"
|
|
provider = "existing"
|
|
}
|
|
},
|
|
var.deploy_korea_node ? {
|
|
master = {
|
|
ansible_host = try(module.oracle_korea_node[0].public_ip, "pending")
|
|
datacenter = "dc2"
|
|
provider = "oracle"
|
|
}
|
|
} : {},
|
|
var.deploy_us_node ? {
|
|
ash3c = {
|
|
ansible_host = try(module.huawei_us_node[0].public_ip, "pending")
|
|
datacenter = "dc3"
|
|
provider = "huawei"
|
|
}
|
|
} : {}
|
|
)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
# 部署后验证命令
|
|
output "verification_commands" {
|
|
description = "部署后验证命令"
|
|
value = [
|
|
"# 检查集群状态",
|
|
"nomad server members",
|
|
"",
|
|
"# 检查各数据中心节点",
|
|
"nomad node status -verbose",
|
|
"",
|
|
"# 跨数据中心任务调度测试",
|
|
"nomad job run examples/cross-dc-test.nomad",
|
|
"",
|
|
"# 访问 UI",
|
|
join("\n", [for url in compact([
|
|
"http://100.116.158.95:4646",
|
|
var.deploy_korea_node ? try("http://${module.oracle_korea_node[0].public_ip}:4646", null) : null,
|
|
var.deploy_us_node ? try("http://${module.huawei_us_node[0].public_ip}:4646", null) : null
|
|
]) : "curl -s ${url}/v1/status/leader"])
|
|
]
|
|
} |