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?

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.


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:

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


0

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

regex:

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

zamienić:

\1\2 

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.