Durante a implementação (ainda inacabada) do default value para campos boolean (#16) percebi que quando temos mútiplas versões de uma property dentro do schemaValidation, apesar de termos já a estrutra para podermos selecionar qual versão será usada, o terraform retorna um erro.
Esse erro tem relação com os parametros que estão sendo passados para a function one().
Quando apenas passamos dessa forma:
output "resource" {
value = one(
module.v0[*].resource,
module.v1[*].resource,
)
}
vemos o erro abaixo:
Isso porque, no final, o que é passado para a function one() são dois parametros: one([], [true]). Aqui o exemplo é do caso do bool que retorna apenas um true ou false. Como uma das versões não será usada a expansão [*].resource retorna uma lista vazia ([]).
A Correção (que quero confirmar que está ok e se sim vou seguir com ela na implementação do #16) está feita no commit: 36cf01e75e9554caae7fc5e876c01bd4d2d52b1e.
O que fazemos é apenas um concat() antes de chamar o one(), dessa forma teremos novamente apenas um parametro e isso tornará a chamada do one() válida.
Durante a implementação (ainda inacabada) do default value para campos boolean (#16) percebi que quando temos mútiplas versões de uma property dentro do
schemaValidation
, apesar de termos já a estrutra para podermos selecionar qual versão será usada, o terraform retorna um erro.Esse erro tem relação com os parametros que estão sendo passados para a function one().
Quando apenas passamos dessa forma:
vemos o erro abaixo:
Isso porque, no final, o que é passado para a function
one()
são dois parametros:one([], [true])
. Aqui o exemplo é do caso do bool que retorna apenas umtrue
oufalse
. Como uma das versões não será usada a expansão[*].resource
retorna uma lista vazia ([]
).A Correção (que quero confirmar que está ok e se sim vou seguir com ela na implementação do #16) está feita no commit: 36cf01e75e9554caae7fc5e876c01bd4d2d52b1e.
O que fazemos é apenas um
concat()
antes de chamar oone()
, dessa forma teremos novamente apenas um parametro e isso tornará a chamada doone()
válida.Abaixo está um exemplo no terraform console:
Com essa abordagem os testes passam quando temos múltiplas versões de uma mesma property:
Esse PR não precisa ser mergeado, ele serve apenas para demonstrar o problema e discutir a solução que será seguida no fix. ❤️