Зафіксуйте попередження "Терміни лише для інтерполяційних виразів" у 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 викликає інші модулі термоформи, переконайтесь, що ви модернізували ці модулі також до 0,12.


3
Так, я оновив код. Я все ще отримував помилки вище.
Кевін Берк

jus для уточнення, оновлення модулів означає виконання цих же двох команд у корені модулів, як .terraform / module / <module_name>
Кім Сант,

4

Синтаксичний код Мартіна Аткінса- терма-чисто-синтаксис (спасибі Кевіну Берку за підказку)

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


0

Для видалення синтаксису інтерполяції я використовував блокнот ++.

регулярний вираз:

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

замінити:

\1\2 

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.