Correção do aviso “Expressões somente de interpolação estão obsoletas” no Terraform


11

Atualizei para o Terraform v0.12.16 e agora estou recebendo muitas mensagens parecidas com esta:

Warning: Interpolation-only expressions are deprecated

  on ../modules/test-notifier/test_notifier.tf line 27, in resource "aws_sns_topic_policy" "default":
  27:   arn    = "${aws_sns_topic.default.arn}"

Terraform 0.11 and earlier required all non-constant expressions to be
provided via interpolation syntax, but this pattern is now deprecated. To
silence this warning, remove the "${ sequence from the start and the }"
sequence from the end of this expression, leaving just the inner expression.

Template interpolation syntax is still used to construct strings from
expressions when the template includes multiple interpolation sequences or a
mixture of literal strings and interpolations. This deprecation applies only
to templates that consist entirely of a single interpolation sequence.

Existem centenas dessas mensagens. Existe uma maneira automatizada de corrigi-los?

Respostas:


13

Você atualizou o código primeiro?

Terraform 0.11 não é compatível com 0.12, então você deve atualizá-lo primeiro.

terraform init
terraform 0.12upgrade

Se o seu código Terraform estiver chamando outros módulos de terraform, verifique se você também atualizou esses módulos para 0.12.


3
Sim, eu atualizei o código. Eu ainda estava recebendo os erros acima.
Kevin Burke

Para esclarecer, atualizar os módulos significa executar esses mesmos 2 comandos na raiz dos módulos, como .terraform / modules / <module_name>
Kim Sant

4

O código de sintaxe de limpeza de terraform de Martin Atkins pode ser usado (obrigado Kevin Burke pela pista)

Eu o usei descaradamente e empacotado no contêiner do docker para que ele possa ser executado facilmente em máquinas não linux_amd64, por exemplo, no MacOS

https://github.com/NoLedgeTech/terraform-clean-syntax-docker

TL&DR (AVISO - isso atualizará seus arquivos tf no local):

docker pull pniemiec/terraform-clean-syntax-docker
cd <DIRECTORY_WITH_TF_FILES>
terraform init
terraform plan    # This shows a lot of warnings
docker run --rm -v $(pwd):/code -t pniemiec/terraform-clean-syntax-docker
terraform plan    # This does not show a lot of warnings :sweat_smile:

Essa ferramenta foi útil, mas observe que ela não desinterpola valores dentro de matrizes (por exemplo, subnet_ids). Para isso, tive que voltar a aplicar cuidadosamente uma substituição de regex: "\$\{([^}"]+)\}"ela não pode ser aplicada às cegas devido à interpolação nos documentos aqui.
Trevor Robinson


0

Eu usei o bloco de notas ++ para remover essa sintaxe de interpolação.

regex:

^(.*)\${(.*)}

substituir com:

\1\2 

-2

Ou você pode usar um sed simples:

sed -i 's/\"\${/\"/g;s/}\"/\"/g' main.tf
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.