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

11

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?

Kevin Burke
la source

Réponses:

13

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.

BMW
la source
3
Oui, j'ai mis à jour le code. J'obtenais toujours les erreurs ci-dessus.
Kevin Burke du
Pour clarifier, mettre à niveau les modules signifie exécuter ces mêmes 2 commandes dans la racine des modules comme .terraform / modules / <module_name>
Kim Sant
4

Le code terraform-clean-syntax de Martin Atkins peut être utilisé (merci Kevin Burke pour son 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:
Pawel Niemiec
la source
Cet outil était utile, mais notez qu'il n'interpole pas les valeurs dans les tableaux (par exemple subnet_ids). Pour cela, j'ai dû me rabattre sur l'application prudente d'une substitution d'expression régulière: "\$\{([^}"]+)\}"elle ne peut pas être appliquée à l'aveugle en raison de l'interpolation dans les documents ici.
Trevor Robinson
2

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 .
Kevin Burke
la source
obtenir:panic: didn't find any token of type TokenOBrack
Spanky
0

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

expression régulière:

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

remplacer par:

\1\2 
Venkatesh
la source
-2

Ou vous pouvez utiliser un sed simple:

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