Correggi l'avviso "Le espressioni di sola interpolazione sono obsolete" in Terraform


11

Ho aggiornato a Terraform v0.12.16 e ora sto ricevendo molti messaggi che assomigliano a questo:

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.

Ci sono centinaia di questi messaggi. Esiste un modo automatizzato per risolverli?

Risposte:


13

Hai aggiornato prima il codice?

Terraform 0.11 non è compatibile con 0.12, quindi devi prima aggiornarlo.

terraform init
terraform 0.12upgrade

Se il tuo codice Terraform chiama altri moduli terraform, assicurati di aver aggiornato anche questi moduli terraform a 0.12.


3
Sì, ho aggiornato il codice. Stavo ancora ricevendo gli errori sopra.
Kevin Burke,

per chiarire, aggiornare i moduli significa eseguire questi stessi 2 comandi nella radice dei moduli come .terraform / modules / <module_name>
Kim Sant,

4

È possibile utilizzare il codice terraform-clean-syntax di Martin Atkins (grazie Kevin Burke per l'indizio)

L'ho spudoratamente usato e impacchettato all'interno del contenitore docker in modo che possa essere facilmente eseguito su macchine non linux_amd64, ad esempio MacOS:

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

TL&DR (ATTENZIONE: questo aggiornerà i tuoi file tf in atto):

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:

Questo strumento è stato utile, ma nota che non separa i valori all'interno di array (ad esempio subnet_ids). Per questo, ho dovuto ricorrere all'applicazione accurata di una sostituzione regex: "\$\{([^}"]+)\}"non può essere applicata alla cieca a causa dell'interpolazione nei documenti qui.
Trevor Robinson,


0

Ho usato Notepad ++ per rimuovere quella sintassi di interpolazione.

regex:

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

sostituirlo con:

\1\2 

-2

Oppure puoi usare un semplice sed:

sed -i 's/\"\${/\"/g;s/}\"/\"/g' main.tf
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.