A Hashicorp lançará o Terraform 0.12. Esta versão inclui uma série de novas melhorias muito solicitadas para o Terraform com base no feedback e ideias da comunidade. As mudanças mais notáveis são: expressões first-class, a expressão for e condicionais. A atualização para a nova versão pode causar quebras de compatibilidade para alguns usuários.
Expressões first-class simplificaram a escrita de scripts Terraforms e também adicionaram benefícios para a linguagem. Na versão atual, as expressões precisam estar entre aspas e são tratadas como sequências de interpolação. Com o lançamento da versão 0.12, as expressões agora são uma parte nativa da linguagem e podem ser escritas diretamente:
variable "ami" {}
# Terraform 0.11 and earlier
resource "aws_instance" "example" {
ami = "${var.ami}"
}
# Terraform 0.12
resource "aws_instance" "example" {
ami = var.ami
}
Esta mudança também permite o uso da sintaxe list e map via [...] e {...} diretamente dentro das expressões. Juntando isto à nova expressão for permite filtragem dinâmica e transformações de list e maps dentro de suas configurações. Uma cláusula if opcional pode ser adicionada para permitir a filtragem do resultado:
# Terraform 0.12
output "instance_public_ip_addresses" {
value = {
for instance in aws_instance.example:
instance.id => instance.public
if instance.associate_public_ip_address
}
}
Enquanto o operador condicional ( … ? … : …) tem estado no Terraform há algum tempo, seu uso era limitado, pois ambas as partes do valor de retorno sempre seriam avaliadas. Com a nova versão, isso foi corrigido e o operador condicional agora se comporta como se espera. Outra grande melhoria é que o operador condicional pode ser aproveitado com qualquer tipo.
# Terraform 0.12
locals {
first_id = length(azurerm_virtual_machine.example) > 0 ? azurerm_virtual_machine.example[0].id : ""
}
Na versão atual do Terraforms o exemplo acima falharia, pois ambos os valores de retorno são avaliados independentemente do que a expressão resolve.
A introdução dessas mudanças no Terraform exigiu a reformulação da linguagem de configuração. Enquanto o Terraform Core Team afirma que eles trabalharam para minimizar as quebras de compatibilidades, um guia de mudanças foi preparado para ajudar na mudança para a versão 0.12. Recomenda-se que você restrinja a versão do Terraform em seus scripts antes do lançamento. Eles acreditam que o foco nas alterações de configuração para esta versão minimizará as quebras de compatibilidade no futuro, além de permitir mudanças mais rápidas em funcionalidades futuras.
A equipe do Terraform sempre posta sobre as próximas mudanças e está procurando por feedbacks sobre estas e futuras e melhorias.