59 lines
1.6 KiB
HCL
59 lines
1.6 KiB
HCL
locals {
|
|
# ssh-ключ приходит снаружи, файл не читаем
|
|
ssh_public_key = var.ssh_key
|
|
|
|
# Разделяем ноды по ролям
|
|
masters = {
|
|
for name, node in var.nodes :
|
|
name => node if node.role == "master"
|
|
}
|
|
|
|
workers = {
|
|
for name, node in var.nodes :
|
|
name => node if node.role == "worker"
|
|
}
|
|
|
|
# Даём каждой ноде индекс внутри своей роли (master1, master2, worker1...)
|
|
# Индекс определяется по отсортированным именам, чтобы был стабильным.
|
|
indexed_masters = {
|
|
for name, node in local.masters :
|
|
name => merge(node, {
|
|
index = index(sort(keys(local.masters)), name) + 1
|
|
})
|
|
}
|
|
|
|
indexed_workers = {
|
|
for name, node in local.workers :
|
|
name => merge(node, {
|
|
index = index(sort(keys(local.workers)), name) + 1
|
|
})
|
|
}
|
|
|
|
# Общая карта нод
|
|
nodes = merge(local.indexed_masters, local.indexed_workers)
|
|
|
|
# IP-адреса
|
|
ip_map = {
|
|
for name, node in local.nodes :
|
|
name => var.cluster_ip_start + node.ip_offset + node.index
|
|
}
|
|
|
|
# VMID: разные диапазоны для master/worker
|
|
vmid_map = {
|
|
for name, node in local.nodes :
|
|
name => (
|
|
node.role == "master"
|
|
? var.master_vmid_start + node.index
|
|
: var.worker_vmid_start + node.index
|
|
)
|
|
}
|
|
|
|
# hostname: prefix-role-index (k8s-master-1, k8s-worker-2 и т.п.)
|
|
hostname_map = {
|
|
for name, node in local.nodes :
|
|
name => "${var.hostname_prefix}-${node.role}-${node.index}"
|
|
}
|
|
}
|
|
|
|
|