这是 TF V0.12 中的内容(如果有帮助的话) 在一个目录中,我有数量可变的单行文件。
我需要以某种方式读取它们的内容,将它们与换行符连接起来,并将结果存储到单个变量中。(不是字符串数组)我知道我可以使用以下方法获取要读取的文件列表:
locals{
my files=tolist(fileset("${var.file_path}", "**")) }
Run Code Online (Sandbox Code Playgroud)
如果我只有一个文件,我知道我可以使用以下方式读取内容
locals {
file_value=file("${var.file_path}\\${local.my_files}") # if there was only a single file
}
Run Code Online (Sandbox Code Playgroud)
但我的大脑只是变成了棉絮,我如何才能进行多个读取,我觉得我应该在空资源中使用计数和连接,但似乎无法解决逻辑。这是正确的道路还是我应该怎么做?
我们可以把这个问题分解为三个步骤:
我们可以将上述内容重新表述为三个局部值表达式,每个表达式都建立在前一个表达式的基础上:
locals {
filenames = fileset(".", "${var.file_path}/**")
file_contents = { for fn in local.filenames : fn => file(fn) }
file_contents_concat = join("\n", local.file_contents)
}
Run Code Online (Sandbox Code Playgroud)
或者,我们可以在一个表达式中一起完成所有这些步骤:
locals {
file_contents_concat = join("\n", [
for fn in fileset(".", "${var.file_path}/**") : file(fn)
])
}
Run Code Online (Sandbox Code Playgroud)
请注意,在fileset调用中我包含var.file_path在pattern参数中而不是参数中,path因为这样生成的文件路径都将相对于当前工作目录,因此我们可以直接将它们传递给而不file需要var.file_path在那里重新添加。
path(和patternfor之间的分隔fileset有助于解决诸如将一堆文件镜像到 S3 之类的情况,在这种情况下,使生成的路径相对于存储桶根而不是当前工作目录会很有帮助,但这种映射并不适用此处很重要,因为文件名根本不会出现在结果中。)
| 归档时间: |
|
| 查看次数: |
4870 次 |
| 最近记录: |