OpenTofu 1.13: valor desconhecido não é licença para presumir qualquer coisa
Novas garantias ajudam o planejamento, mas criam contratos que precisam sobreviver ao apply e à migração de versão.
O OpenTofu 1.13 acrescenta funções para declarar características de valores ainda desconhecidos durante o planejamento.[12] Recursos como convert e garantias como assumenotnull ajudam a resolver certas decisões sobre quantidade de recursos sem conhecer todos os atributos finais.[12] O benefício é tornar explícito um contrato, não fazer a ferramenta adivinhar o estado futuro.
O que muda para quem desenvolve
A reportagem destaca o uso em dados decodificados de YAML que controlam recursos condicionais.[12] Se o valor encontrado no apply contrariar a garantia declarada, a aplicação termina com erro.[12] A declaração desloca uma parte da responsabilidade para quem escreve o módulo.
A leitura de engenharia é perguntar quem assegura cada propriedade. Se uma entrada é declarada como não nula, a documentação e as validações precisam mostrar por que essa promessa é razoável. Usar uma garantia apenas para silenciar uma dificuldade do plano pode esconder uma incompatibilidade de domínio.
A versão também introduz lint experimental e bibliotecas de símbolos opcionais para compartilhar funções e tipos.[12] Esses recursos não devem ser tratados como se tivessem todos o mesmo grau de maturidade. Separe a atualização da ferramenta da decisão de ativar novas capacidades no módulo.
Como aplicar
Escolha um módulo pequeno, com criação condicional de um recurso sem impacto crítico. Defina uma matriz de entradas: valor conhecido válido, valor desconhecido com contrato válido, nulo e valor que viola o contrato. Escreva o resultado esperado para cada caso antes de executar.
Compare o plano na versão atual e na candidata usando o mesmo estado e as mesmas variáveis. Em um ambiente descartável, avance até o apply nos casos selecionados e registre se a garantia se confirmou ou se a falha foi corretamente identificada. Não use produção como lugar para descobrir a diferença entre desconhecido e inválido.
Na migração, revise também os bytes derivados e as integrações de provisionamento. O relato menciona mudança na saída de base64gzip, remoção de WinRM nos provisionadores remote-exec e file, além de alterações nas plataformas suportadas.[12] Conteúdo descomprimido equivalente ainda pode provocar atualizações de recursos quando os bytes comprimidos mudam.[12]
Cuidados e limites
A reportagem destaca o patch 1.13.2 com correções de segurança relacionadas a HTTP/2 e certificados, além de um problema ao aplicar planos salvos com bibliotecas de símbolos.[12] A decisão de versão precisa considerar esses pontos, não somente a função nova.
Mantenha experimentos separados da atualização de segurança e revise qualquer plano destrutivo ou inesperado. Um planejamento mais previsível é útil quando descreve corretamente o contrato do módulo. Se a previsibilidade depende de uma promessa que ninguém consegue sustentar, o problema apenas foi adiado para o apply.
Fonte
[12] Fonte: InfoQ