Conhecendo o Vagrant

logo_vagrant

Cansado da frase, “na minha maquina funciona?” Essa é a ideia por traz do Vagrant. Provisionar maquinas virtuais com todo o ambiente necessário para testar sua aplicação sem que você faça isso manualmente.

Já pensou se a cada novo teste no sistema, você formata-se o PC, reinstala-se sua aplicação e todas as dependências que ele precisa para ter certeza que no ambiente de produção vai funcionar?

E se você esquecer uma lib, colocar o aplicativo em outro path, ou usar versões diferentes, mais atuais ou depreciadas?

Como garantir que o que você esta usando para desenvolver é o mesmo que estará nos ambientes de testes, homologação e até produção ?

Acredito que a resposta para essas e muitas outras perguntas sobre o deploy de aplicações, se resumiria em um SCRIPT / Orquestração!

Você faz um script uma unica vez, e executa toda vez que precisa reproduzir o mesmo feito, garantindo que ele fará exatamente o que foi escrito.

Esse é o conceito do Vagrant, você prepara todo o ambiente de execução para o seu aplicativo, desde sistema operacional, atualização de pacotes, softwares bases, em fim, tudo que precisa via script, salva, e toda vez que for testar o seu sistema, você destrói a maquina, e o script se encarrega de monta-la novamente, com tudo prontinho para você só executar sua aplicação.

E o melhor, no Vagrant existe plugins que o tornam muito maior. Você pode configurar seu Vagrant para se comunicar com a Amazon ou a Digital Ocean e montar seu ambiente diretamente na nuvem. Sem contar que o Vagrant não re-inventou a roda, por baixo ele pode usar o VirtualBox ou VMWare para gerenciar as maquinas virtuais.

Mas chega de conversa e vamos conhecer alguns termos comuns do Vagrant.

Box:

Uma box, é um sistema operacional, e deve ser definido no inicio do seu projeto Vagrant. O Vagrant faz o download da imagem do sistema que você definiu e aplica na maquina virtual.

Host e Guest

Host é o sistema que esta executando o Vagrant, ou seja, o seus sistema operacional. E Guest é a maquina virtual que sera criada.

Provider

Provider, ou provedor, é o software responsável pela virtualização. Como dito anteriormente, o Vagrant é compatível com VirtualBox, VMWare, KVM, e outros, como o Docker inclusive, que usa outra forma de virtualização, baseada em containers. O VirtualBox ja vem por default no Vagrant, para os outros precisamos de plugins.

Plugins

São extensões para o Vagrant, estendendo e aumentando as funcionalidades do Vagrant, dando capacidade por exemplo dele se conectar a AWS ou usar o Docker.

Provisioner

Um provisionador / orquestrador é o software que irá automatizar as tarefas que serão executadas no ambiente virtual assim que o sistema operacional estiver disponível.

Lembra do script que iriamos escrever ? Ele é básico para o Vagrant fazer o download do sistema e instalar em uma maquina virtual para nós. A partir daí, executar tarefas dentro desta nova máquina pode se tornar mais fácil com um provisionador.

O Vagrant pode usar o Chef, Puppet e Ansible para automatizar estas tarefas, mas podemos usar o puro Shell Script para isso também.

Veremos mais adiante como executar tarefas simples com cada um deles.

Diretórios Sincronizados

Synced folders, são diretórios usados para compartilhar conteúdo entre a maquina Host e Guest. Isso é ótimo e nos permite continuar editando nosso código localmente na nossa IDE preferida, e ver o resultado aplicado em um ambiente isolado.

Vagrantfile

O arquivo Vagrantfile é o arquivo de configuração do Vagrant para o seu projeto. É nele que definimos tudo da sua maquina virtual, versão do OS, memória, ip de rede entre entre outros. Veremos mais detalhes mais adiante.

Requisitos básicos

Além do próprio Vagrant, vamos precisar obviamente do VirtualBox. Tanto o Vagrant quanto o VirtualBox estão disponíveis para Linux, MacOS e Windows. É claro que em cada um deles podemos ter funcionalidades ausentes e outras presentes, por exemplo o NFS (para diretórios sincronizados) já vem por padrão no Mac, no Linux temos que instalar o NSFD e o Windows não existe compatibilidade (seria necessário usarmos protocolo SMB).

Comandos básicos:

Comando  Descrição Uso
up inicializa a maquia virtual e executa o provisioner. quando vamos começar a subir nosso ambiente.
reload reinicia a maquina virtual. necessario caso haja alteração no vagrantfile.
provision executa o provisioner. quando o script de provisionamento for alterado.
init gera um novo vagrantfile baseado em uma box. quando estamos iniciando nosso projeto.
halt desliga a maquina virtual. quando vamos desligar a maquina virtual.
destroy destroi a maquina virtual quando vamos limpar tudo e começar de novo
suspend Pausa a maquina virtual quando queremos parar e manter o estado atual da maquina
resume retira a pausa da maquina virtual quando queremos continuar a partir do estado salvo
ssh acessa a maquina virtual via ssh quando queremos executar comandos manuais


E ficamos por aqui pessoal, vimos neste artigo a solução em se testar aplicações em ambientes limpos e garantir que sempre teremos o mesmo ambiente, para desenvolver, testar e entregar nossa aplicação.

21