Napraw ostrzeżenie „Wyrażenia tylko interpolacyjne są przestarzałe” w programie Terraform

11

Uaktualniłem do Terraform v0.12.16 i teraz otrzymuję wiele komunikatów, które wyglądają tak:

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.

Istnieją setki takich wiadomości. Czy istnieje zautomatyzowany sposób ich naprawienia?

Kevin Burke
źródło

Odpowiedzi:

13

Czy najpierw zaktualizowałeś kod?

Terraform 0.11 nie jest kompatybilny z 0.12, więc musisz go najpierw zaktualizować.

terraform init
terraform 0.12upgrade

Jeśli Twój kod Terraform wywołuje inne moduły terraform, upewnij się, że zaktualizowałeś również te moduły terraform do wersji 0.12.

BMW
źródło
3
Tak, zaktualizowałem kod. Nadal otrzymywałem powyższe błędy.
Kevin Burke,
jus wyjaśnić, aktualizacja modułów oznacza uruchomienie tych samych 2 poleceń w katalogu głównym modułów, takich jak .terraform / modules / <nazwa_modułu>
Kim Sant
4

Można użyć kodu terraform-clean-syntax Martina Atkinsa (dzięki Kevin Burke za wskazówkę)

Użyłem go bezwstydnie i spakowałem w kontenerze dokera, dzięki czemu można go łatwo uruchomić na maszynach innych niż linux_amd64, np. MacOS:

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

TL&DR (OSTRZEŻENIE - spowoduje to aktualizację plików tf na miejscu):

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:
Paweł Niemiec
źródło
To narzędzie było pomocne, ale należy pamiętać, że nie interpoluje wartości w obrębie tablic (np. Subnet_ids). W tym celu musiałem cofnąć się do ostrożnego stosowania podstawienia wyrażenia regularnego: "\$\{([^}"]+)\}"nie można go zastosować na ślepo z powodu interpolacji w dokumentach tutaj.
Trevor Robinson
2

To narzędzie automatycznie usunie dla ciebie początkowe i końcowe cytaty i nawiasy klamrowe, co naprawia ostrzeżenia: https://github.com/apparentlymart/terraform-clean-syntax

go get github.com/apparentlymart/terraform-clean-syntax
terraform-clean-syntax .
Kevin Burke
źródło
uzyskiwanie:panic: didn't find any token of type TokenOBrack
Spanky
0

Użyłem notatnika ++, aby usunąć tę składnię interpolacji.

regex:

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

zamienić:

\1\2 
Venkatesh
źródło
-2

Lub możesz użyć prostego sed:

sed -i 's/\"\${/\"/g;s/}\"/\"/g' main.tf
Dan Rudolph
źródło