Próbuję użyć zagnieżdżonej pętli w terraformie. Mam dwie zmienne listy list_of_allowed_accounts
i list_of_images
, i szukam iteracji po liście, list_of_images
a następnie iteracji po liście list_of_allowed_accounts
.
Oto mój kod terraform.
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}"
}
To jest odpowiednik tego, co próbuję zrobić.
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))]
Odpowiedzi tutaj działają (początkowo ich użyłem), ale myślę, że mam lepsze rozwiązanie, korzystając z funkcji setproduct firmy Terraform . Nie widziałem wielu przykładów tego użytych w interwebach, ale setproduct bierze dwa zestawy (a co ważniejsze, dwie listy) i tworzy listę zestawów przy każdej permutacji danych wejściowych. W moim przypadku tworzę parametry SSM:
To tworzy parametry SSM o nazwie:
Mój wątły mózg może przeanalizować to trochę łatwiej niż magia modulo w innych odpowiedziach!
źródło
${length(var.list1) * length(var.list2)}
zamiast${length(local.product)}
liczyć?${length(local.product)}
prawdopodobnie od tego czasu coś więcej. Poza tym jestem pewien, żesetproduct()
istnieje przed wersją 0.12 ( myślę , że wiadomość na górze połączonej strony jest tylko ogólnym ostrzeżeniem dla wszystkich dokumentów w wersji 0.11, tak myślę?)Do Twojej wiadomości, jeśli ktoś przyjdzie tutaj z Google, jeśli używasz terraformu 0.12, będziesz musiał użyć funkcji floor w dowolnym miejscu, w którym się podzielisz, w przeciwnym razie pojawi się błąd dotyczący indeksów częściowych.
źródło
for
,for_each
i / lub konstrukcje dynamiczne zagnieżdżone bloki językowe zaimplementować coś trochę mniej mylące?Zasadniczo problem tkwi w danych „file_file”, identyfikator_konta nie może być ustawiony tak, jak myślisz, ponieważ będzie to kolejna zmienna, która nigdy nie zostanie zwiększona / zmieniona. Tylko mówię, skoro tęsknię za tym, aby dokładnie zobaczyć, jakie jest twoje pytanie.
źródło
Nie mam wystarczającej liczby punktów reputacji, aby dodać komentarz do odpowiedzi udzielonej przez @ Martina Atkinsa , więc zamieszczam jego odpowiedź z niewielką modyfikacją, która działa wokół numeru Terraform 20567
źródło