web-dev-qa-db-fra.com

Correction de l'avertissement "Les expressions d'interpolation uniquement sont obsolètes" dans Terraform

J'ai mis à niveau vers Terraform v0.12.16 et maintenant je reçois beaucoup de messages qui ressemblent à ceci:

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.

Il y a des centaines de ces messages. Existe-t-il un moyen automatisé de les corriger?

11
Kevin Burke

Cet outil supprimera automatiquement les guillemets et accolades de début et de fin, ce qui corrige les avertissements: https://github.com/apparentlymart/terraform-clean-syntax

go get github.com/apparentlymart/terraform-clean-syntax
terraform-clean-syntax .
1
Kevin Burke

Avez-vous mis à niveau le code en premier?

Terraform 0.11 n'est pas compatible avec 0.12, vous devez donc le mettre à niveau en premier.

terraform init
terraform 0.12upgrade

Si votre code Terraform appelle d'autres modules terraform, assurez-vous d'avoir également mis à niveau ces modules terraform à 0,12.

11
BMW

Le code terraform-clean-syntax de Martin Atkins peut être utilisé (merci Kevin Burke pour un indice)

Je l'ai utilisé sans vergogne et emballé dans un conteneur Docker afin qu'il puisse être facilement exécuté sur des machines non linux_AMD64, par exemple MacOS:

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

TL&DR (AVERTISSEMENT - cela mettra à jour vos fichiers tf en place):

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:
4
Pawel Niemiec

J'ai utilisé notepad ++ pour supprimer cette syntaxe d'interpolation.

regex:

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

replace_with:

\1\2 
0
Venkatesh