Eu sinto que isso é realmente fácil e óbvio, mas não consigo descobrir como devo abordar isso.
Eu tenho uma lista de ambientes que desejo construir ["env1", "env2"...], e então tenho um mapa que especifica os valores usados para um ambiente específico.
"wanted_envs": ["env1", "env2"]
"envs": {
"env1": {
"type": "prod",
"backend": "cust-prod-backend-vpc",
"backend_subnet": "192.168.0.0/22",
"k8_pod_subnet": "192.168.35.16.0/20",
"k8_service_subnet": "192.168.40.0/20",
"gateway_subnet": "1.2.3.0/27",
"dmz": "env1"
},
"env2": {
"type": "prod",
"backend": "cust-prod-backend-vpc",
"backend_subnet": "192.168.0.0/22",
"k8_pod_subnet": "192.168.35.16.0/20",
"k8_service_subnet": "192.168.40.0/20",
"gateway_subnet": "1.2.3.0/27",
"dmz": "env2"
},
"env3": {
"type": "prod",
"backend": "cust-prod-backend-vpc",
"backend_subnet": "192.168.0.0/22",
"k8_pod_subnet": "192.168.35.16.0/20",
"k8_service_subnet": "192.168.40.0/20",
"gateway_subnet": "1.2.3.0/27",
"dmz": "env3"
},
......
Eu simplesmente preciso criar uma variável local, que contenha os detalhes dos ambientes que desejo construir (listados na minha lista de strings) copiados do mapa em envs
.
Na minha definição local, tentei várias formas de for_each pensando que posso obter o valor da lista de ambientes necessários, mas não consigo descobrir sem apenas receber erros ao fazer a coisa 'errada' com o terraform.
Eu acabaria com um mapa contendo apenas os valores dos ambientes listados em wanted_envs
.
Igual a:
"envs_to_build": {
"env1": {
"type": "prod",
"backend": "cust-prod-backend-vpc",
"backend_subnet": "192.168.0.0/22",
"k8_pod_subnet": "192.168.35.16.0/20",
"k8_service_subnet": "192.168.40.0/20",
"gateway_subnet": "1.2.3.0/27",
"dmz": "env1"
},
"env2": {
"type": "prod",
"backend": "cust-prod-backend-vpc",
"backend_subnet": "192.168.0.0/22",
"k8_pod_subnet": "192.168.35.16.0/20",
"k8_service_subnet": "192.168.40.0/20",
"gateway_subnet": "1.2.3.0/27",
"dmz": "env2"
}
}
Usar uma expressão for pode fornecer o que você precisa. Considere o seguinte exemplo abreviado.
Isso produz a saída de:
E se você quiser manter as chaves, como na sua edição, pode fazer assim:
que produz: