Usando Vagrant com Libvirt Fedora Server 30
O Vagrant é um produto de software de código aberto para criação e manutenção de ambientes de desenvolvimento de software!
Antes de começarmos precisamos instalar o grupo de pacotes destinados a virtualização no Fedora Server 30. Lembrando que este "servidor" precisa ter seus processadores com suporte a virtualização. O meu laboratório é feito no Fedora Workstation com Virt-Manager virtualizando o virtualizador. :P
Sintaxe de comando para verificar se o processador tem suporte vmx e svm!
egrep '(vmx|svm)' /proc/cpuinfo
Se seu equipamento tem suporte vamos instalar os pacotes!
dnf -y groupinstall "Virtualization"
Uma dica bacaninha é você acrescentar um pacote do Cockpit para gerenciar suas máquinas virtuais pela Web. Já que por padrão no Fedora 30 Server já vem com o Cockpit habilitado. Depois que fizermos o provisionamento pelo Vagrant, as VMs aparecerão no Cockpit/Maquinas Virtuais.
dnf -y install cockpit-machines
Veja minhas VMs provisionadas pelo Vagrant!
Com o serviço de virtualização ativado no Fedora Server 30 vamos adicionar os pacotes necessários para esta integração do Vagrant com Libvirt.
dnf -y install vagrant vagrant-libvirt
Depois de instalado podemos verificar a integração com o comando abaixo! Se a saída do comando for vagrant-libvirt parabéns, estamos no caminho! ;)
vagrant plugin list
Bem, agora vamos desfrutar desta fantástica integração! Como sabemos a infraestrutura como código não tem limite, é possível fazer uma infinidade de coisas utilizando diversas ferramentas de automação como Ansible, Puppet, etc... Ahhh! O Vagrant também é uma ferramenta de automação! :P
Vamos levantar uma VM do CentOS 7!
vagrant init centos/7
Ao rodar o comando acima será criado um arquivo chamado Vagrantfile, se observar este arquivo verá que existem poucas linhas não comentadas, portanto será criada uma VM com configurações padrões. Se precisarmos de mais atribuições e neste arquivo que faremos. Segue um Vagrantfile que criei usando imagem do CentOS 7 buscando IP pelo device de rede chamado de bridge0.
Vagrant.configure("2") do |config|
config.vm.box = "centos/7"
config.vm.network "public_network", type: "bridge",
dev: "bridge0",
mode: "bridge",
network_name: "public-network"
end
Em algumas situações poderá apresentar a mensagem de acesso negado ao diretório de gravação da imagem. Para resolver isso precisamos alterar o arquivo de configuração do QEMU e remover os comentários de user: root e group: root
/etc/libvirt/qemu.conf
systemctl restart libvirtd
Depois de criado o arquivo rodamos o comando necessário pra subir a máquina de fato. Na saída do comando podemos ver em detalhes tudo que foi feito!
vagrant up
Bringing machine 'default' up with 'libvirt' provider...
==> default: Checking if box 'centos/7' version '1905.1' is up to date...
==> default: Creating image (snapshot of base box volume).
==> default: Creating domain with the following settings...
==> default: -- Name: root_default
==> default: -- Domain type: kvm
==> default: -- Cpus: 1
==> default: -- Feature: acpi
==> default: -- Feature: apic
==> default: -- Feature: pae
==> default: -- Memory: 512M
==> default: -- Management MAC:
==> default: -- Loader:
==> default: -- Nvram:
==> default: -- Base box: centos/7
==> default: -- Storage pool: default
==> default: -- Image: /var/lib/libvirt/images/root_default.img (41G)
==> default: -- Volume Cache: default
==> default: -- Kernel:
==> default: -- Initrd:
==> default: -- Graphics Type: vnc
==> default: -- Graphics Port: -1
==> default: -- Graphics IP: 127.0.0.1
==> default: -- Graphics Password: Not defined
==> default: -- Video Type: cirrus
==> default: -- Video VRAM: 9216
==> default: -- Sound Type:
==> default: -- Keymap: en-us
==> default: -- TPM Path:
==> default: -- INPUT: type=mouse, bus=ps2
==> default: Creating shared folders metadata...
==> default: Starting domain.
==> default: Waiting for domain to get an IP address...
==> default: Waiting for SSH to become available...
default:
default: Vagrant insecure key detected. Vagrant will automatically replace
default: this with a newly generated keypair for better security.
default:
default: Inserting generated public key within guest...
default: Removing insecure key from the guest if it's present...
default: Key inserted! Disconnecting and reconnecting using new SSH key...
==> default: Configuring and enabling network interfaces...
default: SSH address: 192.168.122.205:22
default: SSH username: vagrant
default: SSH auth method: private key
==> default: Rsyncing folder: /root/ => /vagrant
A execução deste comando vai demorar porque irá baixar uma imagem do CentOS 7 que será utilizada para criação da VM. Se futuramente precisar de mais VMs do CentOS 7 ele não irá buscar na Internet e a saída do comando será rápida.
No site do Vagrant existe uma lista de imagens/boxes que você pode utilizar, lembrando que precisam ser para Libvirt. https://app.vagrantup.com/boxes/search
Para acessar a VM criada via SSH basta rodar o comando:
vagrant ssh
Para destruir/apagar a VM basta rodar o comando:
vagrant destroy
Se precisar de mais comando bastar executar apenas vagrant e teremos as opções. Existe também o comando vagrant list-commands que apresenta mais sintaxes.
Com o que vimos aqui já é possível sentir aquela coceira pra automatizar todo nosso ambiente. Linux é o poder!!!