Repara la advertencia "Las expresiones de solo interpolación están en desuso" en Terraform

11

Actualicé a Terraform v0.12.16 y ahora recibo muchos mensajes que se ven así:

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.

Hay cientos de estos mensajes. ¿Existe una forma automatizada de solucionarlos?

Kevin Burke
fuente

Respuestas:

13

¿Actualizaste el código primero?

Terraform 0.11 no es compatible con 0.12, por lo que primero debe actualizarlo.

terraform init
terraform 0.12upgrade

Si su código de Terraform está llamando a otros módulos de terraform, asegúrese de haber actualizado estos módulos de terraform a 0.12 también.

BMW
fuente
3
Sí, actualicé el código. Todavía recibía los errores anteriores.
Kevin Burke
Solo para aclarar, actualizar los módulos significa ejecutar estos mismos 2 comandos en la raíz de los módulos como .terraform / modules / <module_name>
Kim Sant
4

Se puede usar el código de sintaxis terraform-clean-clean de Martin Atkins (gracias Kevin Burke por la pista)

Lo he usado descaradamente y lo he empaquetado dentro del contenedor docker para que pueda ejecutarse fácilmente en máquinas que no sean linux_amd64, por ejemplo, MacOS:

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

TL&DR (ADVERTENCIA: esto actualizará sus archivos tf en su lugar):

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:
Pawel Niemiec
fuente
Esta herramienta fue útil, pero tenga en cuenta que no desinterpola los valores dentro de las matrices (por ejemplo, subnet_ids). Para eso, tuve que recurrir a aplicar cuidadosamente una sustitución de expresiones regulares: "\$\{([^}"]+)\}"no se puede aplicar a ciegas debido a la interpolación en los documentos aquí.
Trevor Robinson
2

Esta herramienta eliminará automáticamente las comillas y llaves iniciales y finales, lo que corrige las advertencias: https://github.com/apparentlymart/terraform-clean-syntax

go get github.com/apparentlymart/terraform-clean-syntax
terraform-clean-syntax .
Kevin Burke
fuente
obteniendo:panic: didn't find any token of type TokenOBrack
Spanky
0

Usé notepad ++ para eliminar esa sintaxis de interpolación.

regex:

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

reemplazar con:

\1\2 
Venkatesh
fuente
-2

O puede usar un sed simple:

sed -i 's/\"\${/\"/g;s/}\"/\"/g' main.tf
Dan Rudolph
fuente