Мы можем разбить эту проблему на три этапа:
- Перечислить имена файлов, соответствующие вашему желаемому шаблону.
- Считать содержимое каждого файла в память.
- Объединить все содержимое файла вместе.
Мы можем переформулировать вышеприведенное в три выражения локальных значения, каждое из которых строит предыдущее:
locals {
filenames = fileset(".", "${var.file_path}/**")
file_contents = { for fn in local.filenames : fn => file(fn) }
file_contents_concat = join("\n", local.file_contents)
}
В качестве альтернативы, мы можем можно выполнить все эти шаги вместе в одном выражении:
locals {
file_contents_concat = join("\n", [
for fn in fileset(".", "${var.file_path}/**") : file(fn)
])
}
Обратите внимание, что в вызове fileset
я включил var.file_path
в аргумент pattern
, а не в path
аргумент, потому что таким образом все пути к полученным файлам будут относиться к текущему рабочему каталогу, и поэтому мы можем просто передать их непосредственно в file
без необходимости повторного добавления var.file_path
туда.
(Разделение между path
и pattern
для fileset
помогает справиться с такими ситуациями, как зеркалирование группы файлов в S3, где полезно, чтобы результирующие пути были относительно доллара et root, а не текущий рабочий каталог, но такого рода отображение здесь не важно, поскольку имена файлов вообще не появляются в результате.)