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
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.