Ini adalah modul terraform hanya komputasi (yaitu, modul yang tidak membuat panggilan API jarak jauh) yang mengumpulkan semua file di bawah direktori dasar tertentu dan membuat mereka yang memiliki sufiks tertentu sebagai file template 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 "
}
} Output files adalah peta dari jalur file relatif ke direktori dasar ke objek dengan atribut berikut:
content_type : Jenis MIME untuk digunakan untuk file.content : Konten literal file, setelah membuat templat.source_path : Lokasi sistem file lokal dari file non-templat.digests : Peta yang berisi hasil menerapkan berbagai algoritma Digest/Hash ke konten file. content dan source_path saling eksklusif. content diatur untuk file templat dan berisi hasil rendering template. Untuk file non-template, source_path diatur ke lokasi file pada disk lokal, yang menghindari mencoba memuat file non-UTF-8 seperti gambar ke dalam memori.
Peta digests untuk setiap file berisi tombol berikut, yang nilainya merupakan hasil dari menerapkan fungsi hash bernama ke konten file:
md5sha1sha256base64sha256base512base64sha512 Secara default, file apa pun di direktori dasar yang nama file -nya berakhir dengan .tmpl ditafsirkan sebagai templat. Anda dapat mengganti sufiks itu dengan mengatur variabel template_file_suffix ke setiap string yang dimulai dengan periode dan diikuti oleh satu atau lebih karakter non-periode.
Templat ditafsirkan sebagai sintaks Template String Terraform. Templat dapat menggunakan fungsi bawaan Terraform kecuali fungsi templatefile , yang merupakan apa yang digunakan modul ini untuk rendering template secara internal.
File apa pun yang tidak memiliki akhiran file template akan diperlakukan sebagai file statis, mengembalikan jalur lokal ke file sumber.
Nilai-nilai tipe konten ( content_type dalam objek yang dihasilkan) dipilih berdasarkan sufiks dari semua file yang ditemukan.
Variabel file_types adalah pemetaan dari sufiks nama file (titik diikuti oleh setidaknya satu karakter non-dot) ke nilai header Content-Type . Pemetaan default mencakup sejumlah jenis file yang biasa digunakan pada situs web statis.
Jika modul menemukan file yang tidak memiliki akhiran sama sekali atau yang sufiks tidak ada di file_types , itu akan menggunakan nilai variabel default_file_type sebagai fallback, yang dengan sendirinya default untuk application/octet-stream .
Kasus penggunaan utama untuk modul ini adalah menghasilkan konten untuk mengunggah ke ember Amazon S3, misalnya untuk digunakan sebagai situs web statis.
Di modul panggilan Anda, gunakan aws_s3_bucket_object dari penyedia AWS dengan for_each untuk membuat objek S3 untuk setiap file:
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
}Pola untuk mengunggah file ke GCS sangat mirip dengan yang untuk Amazon S3 di atas:
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
}Modul ini membutuhkan Terraform V0.12.8 atau lebih baru. Itu tidak menggunakan penyedia terraform, dan tidak menyatakan sumber daya terraform.
template_dir ? Jenis sumber daya template_dir diimplementasikan sebagai solusi pragmatis untuk berbagai batasan dalam versi terraform sebelumnya, tetapi itu bermasalah karena melanggar asumsi terraform membuat sumber daya: itu memodifikasi negara lokal pada sistem di mana terraform berjalan, dan dengan demikian hasil dari tersebut Sumber daya tidak terlihat saat menjalankan terraform pada host lain.
Jenis sumber daya template_dir tidak lagi diperlukan dari terraform 0.12.8 dan seterusnya untuk sebagian besar kasus penggunaan, karena ada fungsionalitas bawaan yang cukup untuk mendapatkan hasil yang serupa tanpa sumber daya sama sekali.
Selain modul ini menjadi warga negara yang lebih baik dalam alur kerja Terraform daripada sumber daya template_file , ini juga memungkinkan campuran file template dan non-template dalam direktori yang sama, dan hanya akan dimuat ke dalam memori dan membuat file template. Untuk file non-template, itu hanya akan meninggalkannya di disk di mana mereka berada dan mengembalikan jalur sistem file lokal ke lokasi asli.
Di sisi lain, modul ini menganggap bahwa hasilnya akan digunakan dengan beberapa jenis sumber daya lain yang dapat menangani beberapa file yang diberikan string dalam memori dan file lain yang dibaca langsung dari disk. Ini berlaku untuk aws_s3_bucket_object , tetapi tidak benar untuk semua jenis sumber daya yang mungkin bekerja dengan file yang sewenang -wenang.