Исправлено предупреждение «Только интерполяционные выражения устарели» в Terraform

11

Я обновился до Terraform v0.12.16 и теперь получаю много сообщений, которые выглядят так:

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.

Есть сотни этих сообщений. Есть ли автоматический способ их исправить?

Кевин Берк
источник

Ответы:

13

Вы обновили код первым?

Terraform 0.11 не совместим с 0.12, поэтому сначала необходимо обновить его.

terraform init
terraform 0.12upgrade

Если ваш код Terraform вызывает другие модули terraform, пожалуйста, убедитесь, что вы также обновили эти модули terraform до 0.12.

БМВ
источник
3
Да, я обновил код. Я все еще получал ошибки выше.
Кевин Берк
Для уточнения, обновление модулей означает выполнение этих же двух команд в корне модулей, например .terraform / modules / <имя_модуля>
Ким Сан
4

Можно использовать код terraform-clean-syntax Мартина Аткинса (спасибо Кевину Бёрку за подсказку)

Я беззастенчиво использовал его и упаковал в докер-контейнер, чтобы его можно было легко запускать на машинах, отличных от linux_amd64, например MacOS:

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

TL & DR (ВНИМАНИЕ - это обновит ваши tf файлы на месте):

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:
Павел Немец
источник
Этот инструмент был полезен, но обратите внимание, что он не интерполирует значения в массивах (например, subnet_ids). Для этого мне пришлось прибегнуть к тщательному применению подстановки регулярных выражений: "\$\{([^}"]+)\}"ее нельзя применять вслепую из-за интерполяции в здесь-документах.
Тревор Робинсон
2

Этот инструмент автоматически удаляет начальные и конечные кавычки и скобки для вас, что исправляет предупреждения: https://github.com/apparentlymart/terraform-clean-syntax

go get github.com/apparentlymart/terraform-clean-syntax
terraform-clean-syntax .
Кевин Берк
источник
panic: didn't find any token of type TokenOBrack
Spanky
0

Я использовал notepad ++ для удаления этого синтаксиса интерполяции.

регулярное выражение:

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

заменить:

\1\2 
Venkatesh
источник
-2

Или вы можете использовать простой sed:

sed -i 's/\"\${/\"/g;s/}\"/\"/g' main.tf
Дэн Рудольф
источник