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?

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.


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:

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


0

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

expression régulière:

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

remplacer par:

\1\2 

-2

Ou vous pouvez utiliser un sed simple:

sed -i 's/\"\${/\"/g;s/}\"/\"/g' main.tf
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.