Используя terraform v0.12.9 и создавая файл с использованием источника данных template_file, я не мог использовать двойные знаки доллара $$ для обработки ввода $ {data_directory} как литералов.
В поисках решения, чтобы правильно разобраться в этом, или в поисках любого другого предложения или обходного пути, который может помочь в создании файла с этим содержимым.
Я пытался использовать двойной знак доллара (например,в приведенном ниже примере кода) для выделения этого $ {data_directory} в качестве литералов в выходном файле.
Вот код, который я пытаюсь использовать для создания файла postfix main.cfс помощью terraform:
variable "hostname" {
default = "test"
}
variable "domain_name" {
default = "test.com"
}
variable "fn_main_cf" {
default = "main.cf"
}
data "template_file" "main_cf" {
template = <<EOF
##
## Network settings
##
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
inet_interfaces = 127.0.0.1, ::1, 120.121.123.124, 2a03:b0a0:3:d0::5e79:4001
myhostname = ${var.hostname}.${var.domain_name}
###
### Outbound SMTP connections (Postfix as sender)
###
smtp_tls_session_cache_database = btree:$${data_directory}/smtp_scache
EOF
}
data "template_cloudinit_config" "main_cf" {
gzip = false
base64_encode = false
part {
filename = "${var.fn_main_cf}"
content_type = "text/cloud-config"
content = "${data.template_file.main_cf.rendered}"
}
}
resource "null_resource" "main_cf" {
triggers = {
template = "${data.template_file.main_cf.rendered}"
}
provisioner "local-exec" {
command = "echo \"${data.template_file.main_cf.rendered}\" > ~/projects/mail-server/files/etc/postfix/${var.fn_main_cf}"
}
}
Как вы можете видеть, существует множество переменных, и все это работает нормально, но $ {data_directory} следует рассматривать не как переменную, а как литералы, и она должна оставаться такой, как есть.в файле вывода на диске.
Ожидаемый вывод в файле main.cf , сохраненном на диске, должен выглядеть следующим образом:
##
## Network settings
##
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
inet_interfaces = 127.0.0.1, ::1, 120.121.123.124, 2a03:b0a0:3:d0::5e79:4001
myhostname = test.test.com
###
### Outbound SMTP connections (Postfix as sender)
###
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
Итак $ {data_directory} долженне обрабатывается terraform как переменная terraform, а просто как группа символов, литералов (обычный ввод текста).
Выполнение план terraform вывод с двойными знаками доллара $$ выглядит следующим образом:
Error: failed to render : <template_file>:11,43-57: Unknown variable; There is no variable named "data_directory".