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?

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.


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:

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


0

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

regex:

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

reemplazar con:

\1\2 

-2

O puede usar un sed simple:

sed -i 's/\"\${/\"/g;s/}\"/\"/g' main.tf
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.