Caroline… Carolzinha… ou simplesmente Carol!

Comece pelo simples e não pare de tentar.

Terraform + VirtualBox

Postado por Carol Souza 0 Comentários

Desafio que surgiu durante umas das aulas de #terraform da #linuxtips

Deu um trabalhinho para fazer rodar no #virtualbox mas missão dada é missão cumprida, né!

Obs.: Como o virtualbox não é um dos providers oficialmente mantidos pela #hashicorp mas sim pela comunidade, esses passos devem sofrer constantes evoluções no decorrer do tempo.

O código completo e outros você pode encontrar no meu GitHubhttps://github.com/carolinux07

Terraform_virtualbox_provider

Código que estou utilizando para provisionar máquinas CentOS e Debian no VirtualBox, através do Terraform.

É importante ressaltar que o VirtualBox não é um dos vários providers mantidos pela HashiCorp, por isso, utilizei um trabalho experimental desenvolvido pela comunidade.

Configuração do ambiente:

Obs.: Minha estação de trabalho é openSUSE.

zypper install go
mkdir ~/.terraform.d/plugins
cp go/bin/terraform-provider-virtualbox  ~/.terraform.d/plugins

 

Iniciando um projeto:

mkdir virtualbox-example 
cd virtualbox-example
touch main.tf && vi main.tf

 

Código para geração de 3 Vms (Ubuntu, CentOS e Debian):

https://github.com/carolinux07/terraform_virtualbox_provider/blob/master/main.tf

 

Execução dos comandos do terraform:

Obs.: Utilizei o recurso de Debug pois muitos erros foram ocorrendo e precisava entender em que camada estava o problema (terraform / plugin / vagrant / virtualbox / SO)

terraform init
TF_LOG=DEBUG terraform plan -out plano
TF_LOG=DEBUG terraform apply "plano"

 

Problemas encontrados:

Erro 1:

Tentei duas versões diferentes de Ubuntu e em todas o VM não sobe. Mesmo trocando a ordem dos discos no VirtualBox (esse foi o único dos 3 que gerou dois discos), não funciona. Se alguém descobri me fala. hehehe

Erro 2:

Ao realizar o comando terraform destroy, as máquinas virtuais são removidas mas as mídias virtuais não são, isso causará problemas em novas execuções do terraform apply.

Error: exit status 1

  on main.tf line 1, in resource "virtualbox_vm" "ubuntu":
   1: resource "virtualbox_vm" "ubuntu" {

Descobri essa através do Debug do terraform e verificando o arquivo virtiualbox.xml.

grep "HardDisk uuid" /home/carol/.config/VirtualBox/VirtualBox.xml
<HardDisk uuid="{87990bd0-c225-4c86-89ef-73d6017b06ec}" location="/home/carol/.terraform/virtualbox/gold/centos/centos-7-1-1.x86_64.vmdk" format="VMDK" type="Normal"/>
        <HardDisk uuid="{2904da25-8b8b-46b2-af45-dfd75877d755}" location="/home/carol/.terraform/virtualbox/gold/ubuntu/ubuntu-bionic-18.04-cloudimg-configdrive.vmdk" format="VMDK" type="Normal"/>
        <HardDisk uuid="{dd863f3b-fbc3-467c-a8f9-4d57974e3435}" location="/home/carol/.terraform/virtualbox/gold/ubuntu/ubuntu-bionic-18.04-cloudimg.vmdk" format="VMDK" type="Normal"/>
        <HardDisk uuid="{ca5c746f-9b3f-4107-aef9-4fd17814da20}" location="/home/carol/.terraform/virtualbox/gold/debian/buster.vmdk" format="VMDK" type="Normal"/>

Para que esse tipo de erro não ocorra é preciso apagar os discos virtuais em: File > Virtual Media Manager… ou editar o xml citado removendo essas entradas de HardDisk.

Erro 3:

A cada novo erro e correção do código, o terraform apresentava o seguinte erro:

Error: machine already exists

  on main.tf line 1, in resource "virtualbox_vm" "ubuntu":
   1: resource "virtualbox_vm" "ubuntu" {

Isso acontace porque uma das primeiras validações que ocorrem é a execução do VBoxManage list vms e VBoxManage showvminfo, como a última execução com erro chegou a gerar, pelo menos, a referência no VirtualBox será necessário apagar manualmente esse “lixinho”.

Erro 4:

Bem, esse não é exatamente um erro, mas é importante ter atenção as Boxes do Vangrant, nem todas possuem o VirtualBox como provider. E me tomou um tempo entender a lógica deles.

Para utilizar uma box, escolha o SO, o CentOS por exemplo:

Escolha uma versão que tenha o VirtualBox como provider, essa por exemplo tem 4 providers (virtualbox, vmware_desktop, libvirt, hyperv):

Para definir o provider utilize ao final da url “providers/virtualbox.box”, assim:

 

Materiais utilizados como guia de referência para configuração da minha estação de trabalho:

IMPORTANTE: Mérito total a todos que desenvolveram esses materiais, apenas fui adequando as minhas necessidades e corrigindo o que não funcionava no meu ambiente, tendo em vista de que é um projeto que está em constante evolução e possui alguns bugs.

 

Boxes do Vagrant utilizados:

Categorias: Cloud, Divulgação

Sobre Carol Souza

Caroline de Souza Vieira, mais conhecida como Carol Souza, formada em Análise de Sistemas, administradora de redes Linux, incentivadora do uso de Software Livre e usuária OpenSuse. Membro atuante da Comunidade Software Livre no Rio de Janeiro, colaboradora voluntária de eventos como Hack’n Rio 2011, IV FSLDC e DFDRJ, blogueira em sites como Cotidiano Linux, Gmigos, Mulheres na Tecnologia e CooperaTI além de manter o próprio blog Carolinux. Sonhadora, amiga, determinada, criativa e movida à desafios. Uma “padawan” amante de tecnologia, aspirante a corredora, ritmista e blogueira.

Posts Populares

Remote Desktop via W

Recentemente precisei usar o Remote Desktop do Windows para acessar ...

Extraindo textos a p

Realizando um atendimento (quem lê até pensa que sou médica ...

À caça de um Malwa

Escrevendo novos posts até tarde da noite, divulgando e acompanhando ...

Erro no "apt-get upd

Essa é mais uma daquelas histórias em que a simples ...

Mulheres em moviment

Neste último domingo consegui realizar um grande desejo, participar de ...