Это модуль Terraform только для вычислений (то есть модуль, который не делает никаких удаленных вызовов API), который собирает все файлы в определенном базовом каталоге и делает те, которые имеют определенный суффикс в качестве файлов шаблонов Terraform.
module "template_files" {
source = " hashicorp/dir/template "
base_dir = " ${ path . module } /src "
template_vars = {
# Pass in any values that you wish to use in your templates.
vpc_id = " vpc-abc123 "
}
} Вывод files - это карта из путей файла относительно базового каталога, чтобы объекты со следующими атрибутами:
content_type : тип MIME для использования для файла.content : буквальное содержание файла, после рендеринга шаблона.source_path : локальная файловая система местоположения неэлементного файла.digests : карта, содержащая результаты применения различных алгоритмов Digest/Hash к содержимому файла. content и source_path являются взаимоисключающими. content установлено для файлов шаблонов и содержит результат рендеринга шаблона. Для файлов, не относящихся к T-Template, source_path устанавливается на местоположение файла на локальном диске, что позволяет избежать попыток загружать файлы без OUTF-8, такие как изображения, в память.
Карта digests для каждого файла содержит следующие ключи, значения которых являются результатом применения именованной функции хэш к содержанию файла:
md5sha1sha256base64sha256base512base64sha512 По умолчанию любой файл в базовом каталоге, чье имя файла заканчивается .tmpl интерпретируется как шаблон. Вы можете переопределить этот суффикс, установив переменную template_file_suffix для любой строки, которая начинается с периода и сопровождается одним или несколькими непериодными символами.
Шаблоны интерпретируются как синтаксис шаблонов Terraform. Шаблоны могут использовать любую из встроенных функций Terraform, за исключением функции templatefile , которую этот модуль использует для рендеринга шаблонов внутри.
Любой файл, в котором нет суффикса файла шаблона, будет рассматриваться как статический файл, возвращая локальный путь к исходному файлу.
Значения типа контента ( content_type в полученных объектах) выбираются на основе суффиксов всех обнаруженных файлов.
Переменная file_types -это отображение из суффиксов имени файла (точка, за которым следует по крайней мере один не DOT-символ) с значениями заголовка Content-Type . Сопоставление по умолчанию включает в себя ряд филетипов, обычно используемых на статических веб -сайтах.
Если модуль сталкивается с файлом, который вообще не имеет суффикса или чей суффикс не находится в file_types , он будет использовать значение переменной default_file_type в качестве резерва, что само по умолчанию по умолчанию по application/octet-stream .
Ключевым вариантом использования этого модуля является создание контента для загрузки в ковш Amazon S3, например, для использования в качестве статического веб-сайта.
В модуле вызова используйте aws_s3_bucket_object от поставщика AWS с for_each , чтобы создать объект S3 для каждого файла:
resource "aws_s3_bucket_object" "static_files" {
for_each = module . template_files . files
bucket = " example "
key = each . key
content_type = each . value . content_type
# The template_files module guarantees that only one of these two attributes
# will be set for each file, depending on whether it is an in-memory template
# rendering result or a static file on disk.
source = each . value . source_path
content = each . value . content
# Unless the bucket has encryption enabled, the ETag of each object is an
# MD5 hash of that object.
etag = each . value . digests . md5
}Шаблон загрузки файлов в GCS очень похож на Amazon S3 выше:
resource "google_storage_bucket_object" "picture" {
for_each = module . template_files . files
bucket = " example "
name = each . key
content_type = each . value . content_type
# The template_files module guarantees that only one of these two attributes
# will be set for each file, depending on whether it is an in-memory template
# rendering result or a static file on disk.
source = each . value . source_path
content = each . value . content
}Этот модуль требует Terraform V0.12.8 или более поздней версии. Он не использует каких -либо поставщиков терраформ и не объявляет никаких ресурсов терраформ.
template_dir ? Тип ресурса template_dir был реализован как прагматический обходной путь для различных ограничений в более ранних версиях терраформы, но он проблематичен, поскольку он нарушает предположение, что терраформ делает ресурсы: он изменяет локальное государство в системе, где работает терраформ, и, следовательно, результат Ресурс не виден при запуске Terraform на других хостах.
Тип ресурса template_dir больше не нужен от Terraform 0.12.8 для большинства случаев использования, поскольку существует достаточно встроенных функций, чтобы получить аналогичные результаты без ресурсов.
Помимо того, что этот модуль является лучшим гражданином в рабочем процессе Terraform, чем ресурс template_file , он также позволяет смесь шаблонов и не Tatemberate файлов в том же каталоге и будет загружаться только в память и отображать файлы шаблонов. Что касается файлов, не относящихся к T-Template, это просто оставит их на диске, где они находятся, и вернет локальную траекторию файловой системы в исходное место.
С другой стороны, этот модуль предполагает , что его результат будет использоваться с некоторым другим типом ресурса, который может справиться с некоторыми файлами, которые визуализируются строки в памяти, и другие файлы, которые читаются непосредственно с диска. Это верно для aws_s3_bucket_object , но не верно для всех типов ресурсов, которые могут работать с произвольными файлами.