Поскольку вы используете Terraform 0.12, вы должны использовать функцию templatefile
вместо источника данных template_file
. Поскольку он встроен в язык, а не предлагается поставщиком, он свободен от ограничений источника данных, таких как принудительное использование всех значений vars
в виде строк.
locals {
ansible_inventory = templatefile("${path.module}/inventory.tpl", {
hosts = hcloud_server.rebrain_quest
})
}
Затем в файле шаблона:
[master]
%{ for h in hosts ~}
${h.name} ansible_host=${h.ipv4_address}
%{ endfor ~}
Приведенный выше шаблон представляет собой вариант примера, приведенного в документации о синтаксисе шаблонных директив Terraform .
Ваш первоначальный пример включал count = var.domains
, но остальная часть конфигурации ресурса не включала упоминания count.index
, поэтому я предположил, что это на самом деле не нужно. Однако, если вы хотите создать несколько копий шаблона на основе номера в var.domains
, вы можете сделать следующее изменение:
locals {
ansible_inventory = [
for i in range(var.domains) :
templatefile("${path.module}/inventory.tpl", {
hosts = hcloud_server.rebrain_quest
index = i
})
]
}
Функция range
здесь создает список целых чисел от нуля до var.domains - 1
, поэтому мы можем использовать его с for
, чтобы повторить рендеринг шаблона несколько раз. Я добавил index = i
к объекту переменных шаблона, чтобы вы могли в принципе использовать ${i}
внутри шаблона, чтобы получить эффект, аналогичный count.index
в блоке ресурсов.