lukerops / manifest.tf

Um processador de manifestos YAML escrito inteiramente em Terraform.
GNU General Public License v3.0
3 stars 1 forks source link

Possível bug para campos multi-version #21

Closed daltonmatos closed 1 week ago

daltonmatos commented 2 weeks ago

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: Captura de tela de 2024-10-15 13-13-15

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.

diff --git a/schemaValidation/bool/main.tf b/schemaValidation/bool/main.tf
index 59f72e5..a7fffe9 100644
--- a/schemaValidation/bool/main.tf
+++ b/schemaValidation/bool/main.tf
@@ -22,7 +22,9 @@ module "v1" {

 output "resource" {
   value = one(
-    module.v0[*].resource,
-    module.v1[*].resource,
+    concat(
+      module.v0[*].resource,
+      module.v1[*].resource,
+    )
   )
 }

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.

Abaixo está um exemplo no terraform console:

t console
> concat([], [true])
[
  true,
]
> one(concat([], [true]))
true
>  

Com essa abordagem os testes passam quando temos múltiplas versões de uma mesma property: Captura de tela de 2024-10-15 13-19-01

Esse PR não precisa ser mergeado, ele serve apenas para demonstrar o problema e discutir a solução que será seguida no fix. ❤️