Часто лучше предварительно обрабатывать файлы, подобные этой, используя отдельную программу, написанную на языке программирования общего назначения, поскольку DSL Terraform не очень подходит для такой логики специального анализа.
В Terraform v0.11 и более ранних версиях отсутствуют примитивы, необходимые для реализации такого анализа в самом языке. Релиз v0.12.0 (который на момент написания в бета-версии ) вводит некоторые примитивы, которые do позволяют реализовывать этот вид синтаксического анализа, хотя я все же обычно предпочитаю делать это вне Terraform как шаг предварительной обработки, если это вообще возможно.
С учетом вышесказанного, вот пример разбора файла, подобного вашему примеру, на карту с использованием возможностей Terraform v0.12:
locals {
raw_lines = [
for line in split("\n", file("${path.module}/input.txt")) :
split(" ", trimspace(line))
]
lines = [
for line in local.raw_lines :
line if length(line[0]) > 0 && substr(line[0], 0, 1) != "#"
]
records = { for line in local.lines : line[0] => line[1] }
}
output "result" {
value = local.records
}
Имеется следующий входной файл:
# a comment line
aaa.bbb.cc 423
ddd.ee.fff 452
tons.like.them 111
# another comment
another.record abc
Это дает следующий результат при использовании Terraform v0.12.0-beta1:
$ terraform apply
Apply complete! Resources: 0 added, 0 changed, 0 destroyed.
Outputs:
result = {
"aaa.bbb.cc" = "423"
"another.record" = "abc"
"ddd.ee.fff" = "452"
"tons.like.them" = "111"
}