Máquinas virtuais com o Vagrant

O Vagrant é um software open-source para construção de máquinas virtuais portáteis. A ideia principal de sua criação partiu da necessidade da manutenção em um ambiente de homologação e desenvolvimento em projetos grandes o que torna essa tarefa muito custosa. O Vagrant gerencia todas as configurações necessárias para os administradores desse ambiente a fim de otimizar o tempo para a configuração e administração desses ambientes e aumentar a produtividade no dia a dia.

Para instalar no Fedora 25 vamos baixar seu pacote rpm com a versão mais atual:

[root@notebook ~]# wget https://releases.hashicorp.com/vagrant/1.9.3/vagrant_1.9.3_x86_64.rpm?_ga=1.89125083.1378462297.1490037182 

Para mais opções de download: https://www.vagrantup.com/downloads.html

[root@notebook ~]# rpm -ivh vagrant_1.9.3_x86_64.rpm 

Após a instalação iniciamos o vagrant com uma box de centos7:

[root@notebook ~]# vagrant init geerlingguy/centos7

O Vagrant trabalha com o conceito de box, que são imagens de sistemas operacionais pré-configurados que vão servir como base para a construção das VM’s.

Podemos consultar as boxes disponíveis no site oficial do projeto: https://atlas.hashicorp.com/boxes/search

Toda vez que iniciamos o vagrant com o ‘init‘ ele gera um arquivo ‘Vagrantfile’, a composição do seu arquivo é basicamente esta:

[root@notebook Vagrant]# cat Vagrantfile | grep -v ^# | grep -v '#' | sed -e '/^$/d'  
Vagrant.configure("2") do |config|
  config.vm.box = "geerlingguy/centos7"
end

Para listarmos as boxes baixadas:

[root@notebook ~]# vagrant box list 
centos/7 (libvirt, 1702.01)

Verificando os plugins instalados:

[root@notebook ~]# vagrant plugin list

Para instalar o plugin do VBoxGuestAdditions:

[root@notebook ~]# vagrant plugin install vagrant-vbguest

A máquina precisa estar em “halt” para instalação de plugins.

No Vagrantfile podemos fazer algumas alterações para o sistema, como hostname, rede e compartilhamento de arquivos. Exemplo:

# -*- mode: ruby -*-
# vi: set ft=ruby :

VAGRANTFILE_API_VERSION = "2"

Vagrant.configure(VAGRANTFILE_API_VERSION) do |config|

      config.vm.hostname = "centos7vagra.cissaspike.net"
      config.vm.box = "centos/7"
      config.vm.synced_folder "/home/tadeu/Documentos/txt", "/vagrant_data" 
      config.vm.network "private_network", ip: "192.168.33.10"
      
      config.vm.provider "virtualbox" do |virtualbox|
          virtualbox.customize [ "modifyvm", :id, "--cpus", "1" ]
          virtualbox.customize [ "modifyvm", :id, "--memory", "1024" ]
      end
end

Neste exemplo também especificamos a quantidade de memória e cpu utilizada pela VM.

Após a configuração do Vagrantfile startamos a VM:

[root@notebook ~]# vagrant up 
Bringing machine 'default' up with 'virtualbox' provider...
==> default: Clearing any previously set forwarded ports...
==> default: Clearing any previously set network interfaces...
==> default: Preparing network interfaces based on configuration...
    default: Adapter 1: nat
    default: Adapter 2: hostonly
==> default: Forwarding ports...
    default: 22 (guest) => 2222 (host) (adapter 1)
==> default: Running 'pre-boot' VM customizations...
==> default: Booting VM...
==> default: Waiting for machine to boot. This may take a few minutes...
    default: SSH address: 127.0.0.1:2222
    default: SSH username: vagrant
    default: SSH auth method: private key
    default: Warning: Remote connection disconnect. Retrying...
==> default: Machine booted and ready!
[default] GuestAdditions 5.1.18 running --- OK.
==> default: Checking for guest additions in VM...
==> default: Setting hostname...
==> default: Configuring and enabling network interfaces...
==> default: Mounting shared folders...
    default: /vagrant => /root/maquinas
    default: /vagrant_data => /home/tadeu/Documentos/txt
==> default: Machine already provisioned. Run `vagrant provision` or use the `--provision`
==> default: flag to force provisioning. Provisioners marked to run always will still run.

Para verificar o status da VM:

[root@notebook ~]# vagrant status

E para conectarmos:

[root@notebook maquinas]# vagrant ssh 
Last login: Wed Mar 22 18:52:56 2017 from 10.0.2.2
[vagrant@centos7vagra ~]$

Para visualizarmos o status de todas as boxes que estão rodando:

[root@notebook ~]# vagrant global-status 
id       name    provider   state    directory                           
-------------------------------------------------------------------------
a006cfb  default virtualbox running  /root/Vagrant/Debian8               
dae2c0a  default virtualbox running  /root/Vagrant/Centos7            

Com o ‘id’ das máquinas em mãos podemos gerencia-las utilizando os comandos:

  • up;
  • suspend;
  • pause;
  • halt;
  • resume;
  • destroy

Para ajuda com os comandos:

[root@notebook ~]# vagrant --help

[root@notebook ~]# vagrant list-commands

Um exemplo do meu Vagrantfile que sempre utilizo para meus labs:

Lembrando que precisamos baixar a box que vai ser utilizada:

[root@notebook yml]# vagrant box add insaneworks/centos7

O Vagrant e alguns dos seus recursos (como o vb-guest por exemplo) só funcionam corretamente se a box e a versão do GuestAdditions do Virtualbox forem a mesma.

VAGRANT PACKAGE

Para criarmos um “package” da máquina virtual criada. Dentro do diretório da box que contém o Vagrantfile executamos o seguinte comando:

[root@notebook ~]# vagrant halt
[root@notebook ~]# vagrant package --output centos7_tadeu.box
default: Clearing any previously set forwarded ports...
default: Exporting VM...
default: Compressing package to: /root/maquinas/centos7_tadeu.box

Agora em um outro diretório executamos:

[root@notebook ~]# mkdir -p ~tadeu/Vagrant-package

Alteramos o nome da máquina no Vagrantfile para o nome que utilizamos com o primeiro package:

config.vm.box = "centos7_tadeu"
[root@notebook ~]# vagrant box add --name teste_centos7 centos7_tadeu.box

E pronto subimos um clone da máquina antiga com as alterações feitas.

Referências:
https://en.wikipedia.org/wiki/Vagrant_(software)https://www.vagrantup.com/
https://www.vagrantup.com/downloads.htmlhttps://www.vagrantup.com/docs/cli/box.html
http://gutocarvalho.net/octopress/2014/05/09/entenda-o-vagrant/https://www.packer.io/intro/getting-started/build-image.html
http://gutocarvalho.net/octopress/2014/05/09/entenda-o-vagrant