我有一个包含很多行的第三方维护文件,它看起来像:
# a comment lines
aaa.bbb.cc 423
ddd.ee.fff 452
...
tons.like.them 111
有什么方法可以将文件加载到本地 map 并使用以下语法在 Terraform 中访问其键?:
"${lookup(var.locals.mylist, 'ddd.ee.fff', 0)}"
最佳答案
通常最好使用用通用编程语言编写的单独程序来预处理这样的文件,因为 Terraform 的 DSL 不太适合这种特殊的解析逻辑。
Terraform v0.11 及更早版本缺乏在语言本身内实现这样的解析所需的原语。 v0.12.0 版本(在撰写本文时为 in beta)引入了一些允许实现此类解析的原语,尽管我仍然通常更愿意在 Terraform 之外将其作为预处理步骤进行(如果有的话)可能的。
话虽如此,下面是一个使用 Terraform v0.12 功能将像您的示例一样的文件解析为 map 的示例:
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"
}
关于terraform - 将多行文件拆分为 Terraform 变量以通过键访问值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55181787/