Khắc phục các biểu thức chỉ có nội suy là không được chấp nhận trong cảnh báo của Terra


11

Tôi đã nâng cấp lên Terraform v0.12.16 và bây giờ tôi nhận được rất nhiều tin nhắn giống như thế này:

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.

Có hàng trăm tin nhắn này. Có một cách tự động để sửa chúng?

Câu trả lời:


13

Bạn đã nâng cấp mã đầu tiên?

Terraform 0.11 không tương thích với 0.12, vì vậy bạn phải nâng cấp nó trước.

terraform init
terraform 0.12upgrade

Nếu mã Terraform của bạn đang gọi các mô-đun terraform khác, vui lòng đảm bảo rằng bạn cũng đã nâng cấp các mô-đun terraform này lên 0.12.


3
Có, tôi đã nâng cấp mã. Tôi vẫn nhận được các lỗi ở trên.
Kevin Burke

để làm rõ, nâng cấp các mô-đun có nghĩa là chạy cùng 2 lệnh này trong thư mục gốc như .terraform / module / <module_name>
Kim Sant

4

cú pháp terraform-clean- Martin của Martin Atkins có thể được sử dụng (cảm ơn Kevin Burke cho manh mối)

Tôi đã sử dụng nó một cách không biết xấu hổ và đóng gói trong container docker để có thể dễ dàng chạy trên các máy không phải linux_amd64, ví dụ MacOS:

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

TL & DR (CẢNH BÁO - điều này sẽ cập nhật các tệp tf của bạn tại chỗ):

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:

Công cụ này rất hữu ích, nhưng lưu ý rằng nó không giải mã các giá trị trong các mảng (ví dụ: subnet_ids). Vì thế, tôi đã phải quay lại áp dụng một cách cẩn thận một sự thay thế regex: "\$\{([^}"]+)\}"Nó không thể được áp dụng một cách mù quáng do nội suy trong các tài liệu ở đây.
Trevor Robinson


0

Tôi đã sử dụng notepad ++ để loại bỏ cú pháp nội suy đó.

regex:

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

thay thế bằng:

\1\2 

-2

Hoặc bạn có thể sử dụng một chiếc sed đơn giản:

sed -i 's/\"\${/\"/g;s/}\"/\"/g' main.tf
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.