Skip to main content

Migrando para a versão 0.32.x

Quando o contrato dos recursos do Terraform muda na nova versão do provedor, é necessário importar os recursos existentes para o estado do Terraform para garantir a compatibilidade. Abaixo está um guia detalhado para realizar essa tarefa para Máquinas Virtuais.

Passo 1: Inicializar o Terraform

Antes de importar recursos, inicialize o diretório de trabalho para baixar a nova versão (0.32.x)

terraform init

Verifique a saída para garantir que o provedor mgc foi baixado e configurado com sucesso.

Passo 2: Remover o Recurso do Estado (se necessário)

Caso o Terraform retorne um erro indicando que o recurso já está sendo gerenciado, você precisará removê-lo do estado antes de realizar a importação. Use o comando:

terraform state rm <tipo_recurso>.<nome_recurso>

Exemplo:

terraform state rm mgc_virtual_machine_instances.basic_instance

Repita para todos os recursos necessários.


Passo 3: Importar os Recursos

Use o comando terraform import para vincular os recursos existentes à configuração atualizada. A sintaxe é a seguinte:

terraform import <tipo_recurso>.<nome_recurso> <id_recurso>

Exemplos de Importação

Importar VM:

terraform import mgc_virtual_machine_instances.basic_instance 90912b21-6b98-3de4-b110-8d0d7d94f777

Passo 4: Usar o Comando terraform show

Após importar, use o comando terraform show para verificar os recursos no estado atual. Isso exibirá os atributos do recurso no formato Terraform. Por exemplo:

terraform show

Saída:

resource "mgc_virtual_machine_instances" "basic_instance" {
availability_zone = "br-se1-a"
created_at = "2025-01-13T18:39:23Z"
id = "90912b21-6b98-3de4-b110-8d0d7d94f777"
image = "cloud-ubuntu-22.04 LTS"
machine_type = "cloud-bs1.xsmall"
name = "basic_instance"
network_interfaces = [
{
id = "21ca17c4-4ce6-41b2-aec3-c18af57ac85f"
ipv6 = "2801:80:3ea0:ca06::137"
local_ipv4 = "172.40.3.140"
name = "port-basic_instance"
primary = true
},
]
ssh_key_name = "ssh-key"
vpc_id = "eyb128d7-a02d-4b44-a55c-d228a426941c"
}

Passo 6: Atualizar o Código do main.tf

Copie a saída do comando terraform show e cole no arquivo main.tf para estar de acordo com o novo contrato. Remova os seguintes campos, que são gerenciados automaticamente pelo Terraform:

  • network_interfaces
  • id
  • created_at

Exemplo atualizado:

resource "mgc_virtual_machine_instances" "vm-pico-tests" {
availability_zone = "br-se1-a"
image = "cloud-ubuntu-22.04 LTS"
machine_type = "cloud-bs1.xsmall"
name = "basic_instance"
ssh_key_name = "ssh-key"
vpc_id = "eyb128d7-a02d-4b44-a55c-d228a426941c"
}

Passo 7: Verificar a Importação

Depois de atualizar o código, execute o comando terraform plan para verificar os recursos importados contra a configuração.

terraform plan

Se o Terraform não mostrar alterações inesperadas, os recursos foram importados com sucesso.


Passo 8: Aplicar Alterações (Opcional)

Se forem necessárias atualizações adicionais na configuração, aplique-as com o comando:

terraform apply
Atenção

Antes de executar o apply, verifique se não ocorrerá criação de novo recurso!


Dicas para Solução de Problemas

  • Erro: Recurso Não Encontrado: Certifique-se de que o ID do recurso está correto e corresponde ao que está listado na nuvem.
  • Incompatibilidade na Configuração: Verifique se a configuração no main.tf reflete corretamente o novo contrato do provedor.
  • Problemas de Conexão: Verifique o acesso de rede aos recursos, especialmente para provisionadores ou configurações de SSH.
  • Erro de Recurso Gerenciado: Remova o recurso do estado usando terraform state rm antes de reimportar.
  • Erros no Plano: Certifique-se de que o código no main.tf não contém campos gerenciados automaticamente pelo Terraform.