Anunciado o HashiCorp Terraform 0.13 Beta


A hashcorp publicou e disponibilizou ontem em seu blog o lançamento da versão beta publica do Terraform 0.13.

"A versão 0.13 do Terraform baseia-se nas melhorias de linguagem feitas com 0.12, com foco na usabilidade aprimorada para fluxos de trabalho específicos do módulo e aprimoramentos em nosso vibrante e crescente ecossistema de provedores."

Uma das novidades é o Terraform login, que facilita a colaboração usando o Terraform Cloud, conectando a CLI ao Terraform Cloud app.

O Terraform 0.13 traz uma nova sintaxe para o required providers.
Essa alteração acompanha as melhorias no Terraform Provider Registry, focando na capacidade de iniciar providers a partir do Registry, simplificando a instalação, melhorando a interação e podendo distinguir provedores oficiais com suporte da hashcorp e provedores suportados por parceiros e da comunidade.

A Custom Validation Rules que foi introduzida como experimental no Terraform 0.12.20, agora é um recurso pronto para produção no Terraform 0.13.


O Terraform v0.13 não inclui mais o comando terraform 0.12upgrade, usado para migrar o código-fonte da sintaxe do terraform v0.11 para a v0.12, na versão beta atual a opção ainda está no binário, mas creio que será removida nas próximas atualizações, ao executar, dá o seguinte retorno:
The 0.12upgrade command is deprecated

indicando para usar o terraform na versão 0.12 e usar a opção de upgrade.
Se seus módulos foram escritos para a v0.11 e versões anteriores, será necessário atualizar sua sintaxe usando a última versão do Terraform v0.12 antes de usar o Terraform v0.13.

Migrando terraform 0.11 para o terraform 0.12:


Abaixo um trecho e exemplo de código no terraform 0.11, para criar uma instância ec2 na AWS:

resource "aws_instance" "teste" {
  ami = "${var.ami}"
  instance_type = "${var.instance}"
  key_name = "${aws_key_pair.key-pair.key_name}"
  vpc_security_group_ids = ["${var.sg}"]
  subnet_id = "${var.subnet-id}"
  root_block_device {
    delete_on_termination = true
    volume_type = "gp2"
    volume_size = "${var.root_ebs_block_size}"
  }
  ebs_block_device {
    device_name = "ProtimsTMS"
    volume_size = "${var.ebs_block_size}"
    volume_type = "standard"
    delete_on_termination = true
  }


No terraform 0.11 há o parâmetro chamado 0.12checklist, após executar o 'terraform init', execute:
terraform 0.12checklist

O retorno deve ser:
Looks good! We did not detect any problems that ought to be
addressed before upgrading to Terraform v0.12.

Caso aponte algum erro, corrija-o, caso não, estamos prontos para migrar para o terraform 0.12.
Baixe e substitua o binário (ou crie um alias...)

Já com o terraform 0.12, execute o seguinte comando:

terraform 0.12upgrade

Terá o seguinte retorno (confirme com 'yes' ao final):

This command will rewrite the configuration files in the given directory so
that they use the new syntax features from Terraform v0.12, and will identify
any constructs that may need to be adjusted for correct operation with
Terraform v0.12.
We recommend using this command in a clean version control work tree, so that
you can easily see the proposed changes as a diff against the latest commit.
If you have uncommited changes already present, we recommend aborting this
command and dealing with them before running this command again.
Would you like to upgrade the module in the current directory?
  Only 'yes' will be accepted to confirm.
  Enter a value: 


Após o 'yes':

Upgrade complete!
The configuration files were upgraded successfully. Use your version control
system to review the proposed changes, make any necessary adjustments, and
then commit.



Veja o mesmo modulo para criação da ec2 na AWS após migrar para o terraform 0.12:

resource "aws_instance" "teste" {
  ami                    = var.ami
  instance_type          = var.instance
  key_name               = aws_key_pair.key-pair.key_name
  vpc_security_group_ids = [var.sg]
  subnet_id              = var.subnet-id
  root_block_device {
    delete_on_termination = true
    volume_type           = "gp2"
    volume_size           = var.root_ebs_block_size
  }
  ebs_block_device {
    device_name           = "teste"
    volume_size           = var.ebs_block_size
    volume_type           = "standard"
    delete_on_termination = true
  }

No binário do terraform 0.13 existem as opções:
0.12upgrade (depreciada!)
0.13upgrade

Executei o upgrade para o terraform 0.13 no código recém migrado do 0.11 para o 0.12.

A mudança observada ao executar o upgrade, referente a nova abordagem em relação aos providers foi no arquivo version.tf:

Terraform 0.12:

terraform {
  required_version = ">= 0.12"
}

Terraform 0.13:

terraform {
  required_version = ">= 0.13"
  required_providers {
    aws = {
      source = "hashicorp/aws"
    }
  }
}


Muito provavelmente esta alteração foi devido no meu provider.tf apenas haver a seguinte estrutura básica:
provider "aws" {
  profile = "${var.profile}"
  region = "${var.region}"
  shared_credentials_file = "/.aws/credentials"
}


Irei testando e provavelmente postarei novos textos sobre a versão 0.13. Não precisaria lembrar, mas é bom repetir: não use essa versão em prod, ok?

Segue uns links:


Terraform 0.13 Beta Guide:

Download:


Comentários