Estou tentando usar um loop aninhado em terraform. Eu tenho duas variáveis de lista list_of_allowed_accounts
e list_of_images
, e olhando para iterar sobre a lista list_of_images
e, em seguida, iterar sobre a lista list_of_allowed_accounts
.
Aqui está o meu código de 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}"
}
Isso é o equivalente do que estou tentando fazer.
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))]
As respostas aqui funcionam (eu as usei inicialmente), mas acho que tenho uma solução melhor usando a função setproduct da Terraform . Não vi muitos exemplos usados nas interwebs, mas o setproduct usa dois conjuntos (ou mais importante, duas listas) e produz uma lista de conjuntos com todas as permutações das entradas. No meu caso, estou criando parâmetros SSM:
Isso cria parâmetros do SSM denominados:
Meu pequeno cérebro fraco pode analisar isso um pouco mais fácil do que a magia do módulo nas outras respostas!
fonte
${length(var.list1) * length(var.list2)}
vez de${length(local.product)}
contar?${length(local.product)}
provavelmente faz mais desde então. Além disso, estou bastante certosetproduct()
existe pré-0,12, (a mensagem no topo da página vinculada é apenas um aviso genérico para todos os seus 0,11 docs, eu acho?)Para sua informação, se alguém vier aqui do Google, se você estiver usando o terraform 0.12, será necessário usar a função floor em qualquer lugar que você dividir, ou então você receberá um erro sobre índices parciais.
fonte
for
,for_each
e ou construções / dinâmicos aninhados blocos de linguagem para implementar algo um pouco menos confuso?Basicamente, o problema está nos dados "template_file", o account_id não pode ser definido da maneira que você pensa, uma vez que a contagem no seu caso é apenas outra var que nunca é incrementada / alterada. Só estou dizendo desde que sinto falta de ver exatamente qual é a sua pergunta.
fonte
Não tenho pontos de reputação suficientes para adicionar um comentário à resposta fornecida por @ Martin Atkins , por isso estou postando sua resposta com uma pequena modificação, que funciona em torno do Terraform edição 20567
fonte