Descubra como o Vagrant pode agilizar a configuração de ambientes virtuais

Descubra como o Vagrant pode agilizar a configuração de ambientes virtuais

O que é o Vagrant ?

Vagrant é uma solução de gerenciamento e construção de máquina virtuais, com a finalidade de automatizar a construção de laboratórios complexo por um único arquivo de configuração.

Por que utilizar o Vagrant ?

Tendo como principal foco a automação de ambientes, o Vagrant se conecta à um provider – podendo esse ser o VirtualBox, Hyper-V, Docker e até mesmo o VMware – através do arquivo Vagranfile um ambiente virtual poderá ser construído diretamente sem precisar realizar todas as interações que um SO precisaria,  com isso agilizamos o processo de configuração de ambientes virtuais que consumiria muito tempo.

E como utilizamos o Vagrant ?

Para começar a fazer uso do Vagrant é necessário primeiramente realizar a instalação dele, que pode ser feito em qualquer ambiente por meio do gerenciador de pacotes da sua distribuição:

Debian/Ubuntu

apt install -y vagrant

CentOS/RedHat

yum install -y vagrant

Após a instalação ter finalizado iniciamos a utilização do Vagrant por meio do parâmetro init na linha de comando.

vagrant init -m

Ao executar esse parâmetro um arquivo de nome Vagrantfile será criado com uma pré configuração:

vagrant$ cat Vagrantfile
Vagrant.configure("2") do |config|
  config.vm.box = "base"
end

O parâmetro “-m” informado faz com que o vagrant não crie os comentários no Vagrantfile

O Vagrantfile possui uma estrutura bem simples. A partir de um bloco principal de configuração definido pela entrada:

“Vagrant.configure(“2″) do |config|”

Assim, definimos quais configurações podemos criar nas maquinas virtuais. Mas antes disso vamos definir o que são boxes para o Vagrant.

 

Vagrant Boxes

Boxes para o Vagrant são as máquinas virtuais que de fato irão rodar o SO. Pense na boxe como um HD com um sistema instalado e configurado pronto para ser utilizado. A box deve ser definida pela entrada config.vm.box. Todas as boxes estão armazenadas no repositório da HashiCorp, que possui diversas distribuições em diferentes versões prontas para uso, algumas já com soluções prontas como Apache, Docker, Nginx entre outras.

Iniciando uma VM pelo Vagrant

Agora que já temos uma ideia do que é o Vagrant vamos subir nossa primeira VM. Para isso, vamos mudar a config.vm.box para ubuntu/xenial64, assim teremos a  versão 16.04 LTS do ubuntu já pronta para uso.

vagrant$ cat Vagrantfile
Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu/xenial64"
end 

Agora podemos iniciar nossa maquina com o comando up:

vagrant up

 

Como resultado o Vagrant importa a base do box, verifica a configuração de rede, vê se a box está atualizada, define um nome, inicia a vm e já deixa uma chave ssh pronta para ser utilizada.

Agora que já temos uma máquina rodando podemos acessá-la via ssh. No caso como a conexão foi criada em uma rede NAT, também foi adicionado um redirecionamento no loopback pela porta 2222, dessa forma podemos usar o comando ssh e acessar diretamente.

ssh -i .vagrant/machines/default/virtualbox/private_key vagrant@127.0.0.1 -p2222

Como isso é muito trabalhoso o Vagrant já implementou um wrapper e usando a mesma chave você consegue acessar as máquinas com um simples comando:

vagrant ssh

Provisionamento

O provisionamneto dentro do Vagrant consiste na utilização de scripts e arquivos que agrupem um conjunto de ações de automação do processo de criação da VM. Alguns dos formatos de provisionamento são Shell, File, Ansible, Puppet, Chef, Salt, Docker entre outros. Como exemplo podemos incrementar nosso Vagrantfile utilizando Shell Linux e passar todos os comandos utilizados para instalação de pacotes, alteração de arquivo de configuração.

 cat Vagrantfile

Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/xenial64"

config.vm.provision "shell",
inline: "apt update"

config.vm.provision "shell", inline:<<-SHELL
  apt install -y cowsay
  apt install -y links
  apt install -y apache2
SHELL

end

Para que o provisionamento seja realizado precisamos rodar o comando “vagrant provision”, com isso a etapa de provisionamento será reexecutada e teremos os repositório APT atualizado e os pacotes CowSay e Apache2 instalados e pronto para serem utilizados.

Agora temos nosso Apache rodando podemos acessar o WebServer, mas para isso precisamos de um redirecionamento para acessar a porta 80 da VM. O redirecionamento precisa ser feito no VirtualBox mas com o Vagrant podemos especificar com uma única linha no Vagrantfile.

 

cat Vagrantfile
Vagrant.configure("2") do |config|
config.vm.box = "ubuntu/xenial64"

config.vm.network "forwarded_port", guest: 80, host: 8080, host_ip: "127.0.0.1"

config.vm.provision "shell",
inline: "apt update"

config.vm.provision "shell", inline:<<-SHELL
apt install -y cowsay

apt install -y links

apt install -y apache2
SHELL

end

Agora executando o “vagrant reload” nossa VM será reiniciada e conseguiremos acessar via porta 8080 da nossa maquina física o Apache2.

Conclusão

Com Vagrant podemos criar rapidamente diversos laboratórios sem precisar configurar uma máquina virtual, ou um conjunto, do zero e instalar o sistema operacional, tudo isso por um único arquivo de configuração, o Vagrantfile.

CURSOSCONSULTORIA    CONTATO

Anterior Como Implementar a Análise de Qualidade de Código com DevOps e SonarQube
Próxima Proteja sua infraestrutura com Ansible Vault: segurança e simplicidade

About author

Julio Ballot
Julio Ballot 8 posts

Júlio Rangel Ballot, atua como Consultor de TI em Software Livre, formado em Engenharia de Computação pela Universidade de Taubaté. Possui experiência em Administração de Sistemas Open Source e ferramentas voltadas a práticas DevOps, com ênfase em CI/CD (Continuous Integration / Continuous Delivery), atuando há 13 anos na área de Tecnologia da Informação. Detém expertise como instrutor de cursos voltados ao Sistema Operacional Linux, sendo certificado LPIC-2, LPIC - DevOps Tools Engineer, Exin DevOps Master e MongoDB Administrator.

View all posts by this author →

Você pode gostar também

Cloud

Descubra o Jitsi: a solução completa para videoconferências

Logo do Jitsi Introdução Durante o momento que vivemos, basicamente todas nossas interações se tornaram virtuais, com o home office sendo a alternativa primaria para muitas empresas, tivemos um súbito

DevOps

DevOpsDays Maringá: Evento internacional de tecnologia chega ao Paraná

Sétima edição no Brasil e a primeira a ser realizada no estado do Paraná, o DevOpsDays Maringá reunirá especialistas para expor e debater temas do mundo DevOps. O DevOpsDays terá

DevOps

Guia completo: Implantação de MongoDB resiliente no Google Kubernetes Engine

Este guia aborda a implantação de um MongoDB resiliente no GKE, incluindo etapas para configurar um StatefulSet, serviço headless e inicializar o conjunto réplica. Aprenda a utilizar recursos do GKE