Мне нужен обходной путь для использования count.index
внутри блока модуля для некоторых входных переменных. У меня есть привычка чрезмерно усложнять проблемы, поэтому, возможно, есть гораздо более простое решение.
Структура файла / папки:
modules/
main.tf
ignition/
main.tf
modules/
files/
main.tf
template_files/
main.tf
Конечная цель: Создайте файл зажигания для каждого развертываемого экземпляра. Каждый файл зажигания содержит информацию об экземпляре c, такую как имя хоста, IP-адрес и т. Д. c.
Весь этот код работает, если я использую значение c или переменную без cound.index
. Мне нужна помощь, чтобы найти обходной путь для переменных address
, gateway
и hostname
. Если мне нужно обработать count.index
внутри одного из дочерних модулей, это совершенно нормально. Хотя я не могу обернуть это вокруг себя. Я пробовал null_data_source
и null_resource
блоки от дочерних модулей, чтобы достичь этого, но пока что не повезло.
Переменные:
workers = {
Lab1 = {
"lab1k8sc8r001" = "192.168.17.100/24"
}
Lab2 = {
"lab2k8sc8r001" = "192.168.18.100/24"
}
}
gateway = {
Lab1 = [
"192.168.17.1",
]
Lab2 = [
"192.168.18.1",
]
}
С modules/main.tf
, я ' Я вызываю модуль ignition
:
module "ignition_workers" {
source = "./modules/ignition"
virtual_machines = var.workers[terraform.workspace]
ssh_public_keys = var.ssh_public_keys
files = [
"files_90-disable-auto-updates.yaml",
"files_90-disable-console-logs.yaml",
]
template_files = {
"files_eth0.nmconnection.yaml" = {
interface-name = "eth0",
address = element(values(var.workers[terraform.workspace]), count.index),
gateway = element(var.gateway, count.index % length(var.gateway)),
dns = join(";", var.dns_servers),
dns-search = var.domain,
}
"files_etc_hostname.yaml" = {
hostname = element(keys(var.workers[terraform.workspace]), count.index),
}
"files_chronyd.yaml" = {
ntp_server = var.ntp_server,
}
}
}
С modules/ignition/main.tf
Я беру переменные files
и template_files
для построения конфигурации Ignition:
module "ingition_file_snippets" {
source = "./modules/files"
files = var.files
}
module "ingition_template_file_snippets" {
source = "./modules/template_files"
template_files = var.template_files
}
data "ct_config" "fedora-coreos-config" {
count = length(var.virtual_machines)
content = templatefile("${path.module}/assets/files_ssh_authorized_keys.yaml", {
ssh_public_keys = var.ssh_public_keys
})
pretty_print = true
snippets = setunion(values(module.ingition_file_snippets.files), values(module.ingition_template_file_snippets.files))
}