Utilizando Vagrant

Posted on Apr 5, 2019

Vagrant é um utilitário de linha de comando para gerenciar o ciclo de vidas das máquinas virtuais. Ou de uma forma mais resumida, ambiente de desenvolvimento em modo fácil.

É exatamente assim que a documentação oficial descreve a solução.

Já a minha definição é um pouco diferente, eu diria que o Vagrant é uma solução de front-end(apesar de não ter nenhuma interface) que se conecta ao back-end(virtualizadores como VirtualBox ou VMware Player/Fusion) para automatizar a criação de ambientes de desenvolvimento.

Agora que já conhecemos a definição oficial e não oficial, seguiremos falando da sua arquitetura.

Até a data deste post, o Vagrant utiliza a linguagem HCL(Hashicorp Configuration Language) para que possamos declar os recursos de uma máquina virtual. Como a quantidade de memória RAM, CPU, nome da máquina e outras configurações.

Outro ponto importante, para que consigamos executar o Vagrant, precisamos ter instalado em nosso computador algum provider, ou seja, um hypervisor para virtualização das VMs. Logo abaixo temos uma lista com alguns dos providers suportados pelo Vagrant, esse tutorial será baseado no Oracle VirtualBox devido a sua facilidade.

  • LibVirt
  • KVM
  • Hyper-V
  • VMware
  • XenServer
  • AWS
  • DigitalOcean
  • GCP

É de conhecimento, pelo menos para quem trabalha como sysadmin, fazer a instalação de uma nova máquina virtual geralmente demanda tempo visto que será preciso atualizar o sistema operacional, configurar o DNS e resolver dependências de software.

Com o provisioning conseguimos automatizar essas tarefas maçantes utilizando os provisionadores mais conhecidos do mercado como Ansible, Chef, Puppet e Salt Stack.

Vagrant.configure("2") do |config|   
#   
# Run Ansible from the Vagrant Host   
#   
config.vm.provision "ansible" do |ansible|                 
  ansible.playbook = "playbook.yml"
  end 
end

Por fim, temos o conceito de box, que são as imagens disponíveis no repositório.

Certo, agora que já possuímos um entendimento melhor sobre a ferramenta vamos ao hads-on.

Instalando o Vagrant

Acesse o site do oficial do Vagrant e faça o download de acordo com o seu sistema operacional. Para fins de explicação, no meu caso, escolhi Ubuntu/Debian visto que o meu sistem operacional é um Debian 9.

$ sudo dpkg --install vagrant_2.2.4_x86_64.deb

Verificando a versão.

$ vagrant version
Installed Version: 2.2.4
Latest Version: 2.2.4
You're running an up-to-date version of Vagrant!

Subindo uma VM com Centos 7

Vamos inicializar o arquivo de configuração Vagrantfile a partir do comando abaixo.

$ vagrant init centos/7

Após a execução do comando acima, no seu diretório corrente será criado um novo arquivo chamado Vagrantfile, nesse arquivo vamos definir as configurações da máquina virtual.

Logo abaixo, temos um exemplo que utilizo como template, ou seja, quando necessito subir um vm faço a configuração a partir deste arquivo para não perder tempo.

# -*- mode: ruby -*-
# vi: set ft=ruby :
Vagrant.configure("2") do |config|
  config.vm.box = "centos/7"
  config.vm.hostname = "srvcentos"
  config.vm.network "private_network", ip: "172.16.0.4"
  config.vm.provider "virtualbox" do |v|
        v.name = "srvcentos"
        v.memory = "256"
        v.cpus = "1"
    end
end

Já configuramos os parâmetros necessários no Vagrantfile, inicializamos a máquina virtual.

$ vagrant up

O comando acima efetuará o download da imagem do Centos 7 e atribuirá as configurações da VM, seguindo as especificações do arquivo Vagrantfile.

> Máquina em processo de inicialização após a execução do comando vagrant up

Até o momento tudo bem. Mas agora como faço para acessar a máquina? Simples, execute o comando vagrant ssh para logar na console do servidor e seja feliz :+1:

Lembre-se, é de suma importância que você esteja no diretório corrente no qual o arquivo Vagrantfile esteja, se não possivelmente você não conseguirá conectar com o comando acima. Por que disso? Então, essa questão eu posso abordar em outro post dado que este post está focado nos primeiros passsos com a solução.

Comandos úteis para o gerenciamento das VMs

  • vagrant halt — Desliga a VM
  • vagrant init — Inicializa um arquivo Vagrantfile
  • vagrant ssh — Acesso a VM
  • vagrant destroy — Destruir uma VM