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?

Kevin Burke
fonte

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.

BMW
fonte
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:
Pawel Niemiec
fonte
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
2

Essa ferramenta remove automaticamente as aspas e chaves iniciais e finais, corrigindo os avisos: https://github.com/apparentlymart/terraform-clean-syntax

go get github.com/apparentlymart/terraform-clean-syntax
terraform-clean-syntax .
Kevin Burke
fonte
Obtendo:panic: didn't find any token of type TokenOBrack
Spanky
0

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

regex:

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

substituir com:

\1\2 
Venkatesh
fonte
-2

Ou você pode usar um sed simples:

sed -i 's/\"\${/\"/g;s/}\"/\"/g' main.tf
Dan Rudolph
fonte