Saya mencoba menggunakan loop bersarang di terraform. Saya memiliki dua variabel daftar list_of_allowed_accounts
dan list_of_images
, dan mencari untuk beralih daftar list_of_images
dan kemudian beralih daftar list_of_allowed_accounts
.
Ini kode terraform saya.
variable "list_of_allowed_accounts" {
type = "list"
default = ["111111111", "2222222"]
}
variable "list_of_images" {
type = "list"
default = ["alpine", "java", "jenkins"]
}
data "template_file" "ecr_policy_allowed_accounts" {
template = "${file("${path.module}/ecr_policy.tpl")}"
vars {
count = "${length(var.list_of_allowed_accounts)}"
account_id = "${element(var.list_of_allowed_accounts, count.index)}"
}
}
resource "aws_ecr_repository_policy" "repo_policy_allowed_accounts" {
count = "${length(var.list_of_images)}"
repository = "${element(aws_ecr_repository.images.*.id, count.index)}"
count = "${length(var.list_of_allowed_accounts)}"
policy = "${data.template_file.ecr_policy_allowed_accounts.rendered}"
}
Ini setara dengan bash dari apa yang saya coba lakukan.
for image in alpine java jenkins
do
for account_id in 111111111 2222222
do
// call template here using variable 'account_id' and 'image'
done
done
account_id = var.list_of_allowed_accounts[floor(count.index / length(var.list_of_images))]
Jawaban di sini berfungsi (saya awalnya menggunakannya), tapi saya pikir saya punya solusi yang lebih baik menggunakan fungsi setproduct Terraform . Saya belum melihat banyak contoh yang digunakan di sekitar jalinan, tetapi setproduct membutuhkan dua set (atau lebih penting, dua daftar) dan menghasilkan daftar set dengan setiap permutasi input. Dalam kasus saya, saya membuat parameter SSM:
Ini menciptakan parameter SSM bernama:
Otak kecilku yang lemah bisa menguraikan ini sedikit lebih mudah daripada sihir modulo di jawaban lain!
sumber
${length(var.list1) * length(var.list2)}
bukan${length(local.product)}
untuk menghitung?${length(local.product)}
mungkin menghasilkan lebih banyak sejak itu. Juga, saya cukup yakinsetproduct()
ada pra-0,12, (pesan di bagian atas halaman yang ditautkan hanyalah peringatan umum untuk semua dokumen 0,11 mereka, saya kira?)FYI jika ada yang datang ke sini dari Google, jika Anda menggunakan terraform 0.12, Anda harus menggunakan fungsi lantai di mana saja Anda membagi, atau Anda akan mendapatkan kesalahan tentang indeks parsial.
sumber
for
,for_each
dan / atau dinamis untuk mengimplementasikan sesuatu yang sedikit membingungkan?Pada dasarnya masalahnya ada di data "template_file", account_id tidak dapat mengatur seperti yang Anda pikirkan karena hitungan dalam kasus Anda hanyalah var lain yang tidak pernah bertambah / diubah. Hanya mengatakan karena aku rindu untuk melihat apa pertanyaanmu sebenarnya.
sumber
Saya tidak memiliki poin reputasi yang cukup untuk menambahkan komentar pada jawaban yang diberikan oleh @ Martin Atkins , jadi saya memposting jawabannya dengan sedikit modifikasi, yang bekerja di sekitar masalah Terraform 20567
sumber