Por: Adelmo da Silva – consultor de sistemas
O Vagrant
Em poucas palavras, o Vagrant é uma ferramenta de código aberto que automatiza a configuração e a gestão de ambientes de desenvolvimento virtuais, criando máquinas virtuais (VM), provisioná-las com software e configurações. A sua base é um arquivo de configuração chamado Vagrantfile, que contém todas as informações necessárias para criar e gerir o ambiente virtual.
O Vagrant, para criar as VMs, funciona de forma similar ao Docker, baixando uma box, uma imagem com o sistema operacional, de forma básica ou completa, dependendo do pacote desejado, que será a base para as VMs. Através dessa box, podem-se criar instâncias com configurações específicas como memória, CPU, rede, hostname, entre outras. Por exemplo, posso utilizar uma box Oracle Linux 7.9 para criar 3 servidores virtuais para um laboratório, onde cada servidor terá as suas especificações próprias.
O Vagrantfile
É um arquivo de configuração que contém todas as informações necessárias para criar e gerir um ambiente virtual com o Vagrant. Especificando a configuração das VMs, o software a ser instalado e as configurações do ambiente, etc.
Abaixo, um exemplo de um Vagrantfile com as configurações de uma VM:
# -*- mode: ruby -*-
# vi: set ft=ruby :
#### Definição Geral das Máquinas Virtuais ####
VAGRANTFILE_API_VERSION = “2”
Vagrant.configure(“2”) do |config|
config.vm.box = “geerlingguy/rockylinux8”
config.vm.synced_folder “.”, “/vagrant”, disabled: true
config.vm.provider :virtualbox do |v|
v.memory = 4092
v.cpus = 2
end
#### Definições da Máquina Virtual do Servidor Ansible ####
config.vm.define “ansible” do |ansible|
ansible.vm.hostname = “ansible-srv.lan”
ansible.vm.network :private_network, ip: “169.254.94.20”
ansible.vm.network :forwarded_port, guest: 22, host: 2222, id: ‘ssh’
ansible.vm.provider :virtualbox do |v|
v.memory = 4096
v.cpus = 2
end
end
end
Neste artigo, não vou explicar em detalhe como funciona o Vagrant, mas vou mostrar o básico.
SECÇÃO 01: estas são linhas de comentário que indicam o formato e modo de edição do arquivo. Isto não afecta a configuração do Vagrant.
# -*- mode: ruby -*-
# vi: set ft=ruby :
SECÇÃO 02: aqui, é definida a versão da API do Vagrant que o arquivo está a usar. Neste caso, versão 2.
VAGRANTFILE_API_VERSION = “2”
SECÇÃO 03: isto inicia a configuração principal do Vagrant. Tudo dentro deste bloco será parte da configuração do ambiente virtual.
Vagrant.configure(“2”) do |config|
SECÇÃO 04: define a imagem do sistema operacional (box) que será usada para criar a máquina virtual.
config.vm.box = “geerlingguy/rockylinux8”
Neste caso, está a ser usada a imagem “geerlingguy/rockylinux8”. Para saber qual é a imagem que poderá utilizar, basta ir ao site https://app.vagrantup.com/boxes/search e pesquise o nome do sistema que deseja. Por exemplo:
Clique na imagem que deseja
Basta copiar o código da secção Vagrantfile para ter a imagem desejada.
SECÇÃO 04: desactiva a pasta sincronizada padrão entre a máquina host e a máquina virtual. Geralmente, a pasta onde o Vagrantfile está localizado é automaticamente sincronizada com a pasta “/vagrant” na máquina virtual. No entanto, aqui ela está a ser desactivada (disabled: true).
config.vm.synced_folder “.”, “/vagrant”, disabled: true
SECÇÃO 05: esta seção define configurações específicas do provedor, que neste caso é o VirtualBox. Define a quantidade de memória (4092 MB) e o número de CPUs (2) para a máquina virtual.
config.vm.provider :virtualbox do |v|
v.memory = 4092
v.cpus = 2
end
SECÇÃO 06: aqui, está a ser definida uma máquina virtual com o nome “ansible”. São definidas configurações específicas para esta máquina, como o nome do host, redes privadas com endereços IP específicos e um encaminhamento de porta para permitir acesso SSH (porta 22 na máquina virtual) através da porta 2222 na máquina host. Também são definidas configurações do provedor VirtualBox para esta máquina, incluindo memória e CPUs.
config.vm.define “ansible” do |ansible|
ansible.vm.hostname = “ansible-srv.lan”
ansible.vm.network :private_network, ip: “169.254.94.20”
ansible.vm.network :forwarded_port, guest: 22, host: 2222, id: ‘ssh’
ansible.vm.provider :virtualbox do |v|
v.memory = 4096
v.cpus = 2
end
end
No caso da porta ssh, o guest é a VM e o host é o seu computador. Para uma conexão ssh temos duas formas: Interna e Externa:
Interna – Entre duas VMs: desta forma, você irá se conectar como de costume. Supondo que você tem a VM ansible e a VM node01 e que vá se conectar à VM node01 a partir da VM ansible. Neste caso, na VM ansible você entrará com o comando ssh vagrant@<ip-da-vm-node01> e informará a password. A porta 22 é a porta padrão do SSH e por isso não precisa de a declarar no comando. Pronto, já se estará a conectar na VM node01.
Externa – Entre a computador físico (host) e a VM (guest): se você desejar conectar-se a uma das VMs, criadas pelo Vagrant através de um MobaXterm, Putty, CMC, etc, execute o comando:
ssh 127.0.0.1:2222
Sim, 127.0.0.1, localhost. So assim se pode conectar com a VM do Vagrant. Já a porta 2222, que é definida no Vagrantfile é a porta de acesso externo à VM. Em outras palavras: o computador físico “conecta-se” ao Vagrant pela porta 2222 e o Vagrant redirecciona a conexão para a porta 22 da VM e, pronto, você está a conectar-se. Incrível, não!?
SECÇÃO 07: isto encerra a definição da configuração principal do Vagrant.
end
Principais comandos do Vagrant
Até aqui você já instalou o Vagrant, criou seu Vagrantfile (espero que sim!) e agora está na hora de colocar este camarada para trabalhar. Para manipularmos as VMs no Vagrant, trabalharemos principalmente com 5 comandos:
- vagrant status: Verifica o status das VMs,, como:
- not created: Existe a descrição da VM no Vagrantfile, mas ainda não foi criada.
- running: A VM foi criada e está em funcionamento.
- poweroff: A VM foi criada, mas está desligada.
- vagrant up: Inicia a criação da VM ou dá boot na mesma.
- vagrant ssh: Acede o terminal da VM.
- vagrant reload: Reinicia a VM
- vagrant halt: Desliga a VM.
Qualquer um dos comandos pode sede executado desta forma, como descrito, ou fazendo referência a uma, ou duas VMs,. Por exemplo:
vagrant up ansible – Isto irá iniciar, ou criar, a VM do ansible
vagrant up ansible node01 – Isto irá iniciar, ou criar, as VMs, ansible e node01.
E, assim, o mesmo poderá ser feito com os outros comandos.
Criando a nossa primeira VM com o Vagrant
Vamos criar a nossa primeira VM chamada ansible. Para isso, deve-se rodar os comandos dentro do mesmo directório onde está o Vagrantfile. Execute os comandos na sequência abaixo:
- Criar a VM: vagrant up ansible
- Depois de ter sido criada, vamos aceder: vagrant ssh ansible
Você estará no terminal da VM ansible com o utilizador administrativo “vagrant”, que é o utilizador padrão de VM’s criadas pelo Vagrant:
C:\~\Laboratorios_TIS\weblogic_admin> vagrant ssh weblogic à aqui estamos no cmd do Windows
Activate the web console with: systemctl enable –now cockpit.socket
Last login: Thu Aug 31 14:04:33 2023 from 10.0.2.2
[vagrant@weblogic-srv ~]$ à aqui já estamos dentro da VM
Pronto! Uma VM novinha para que você possa estudar, treinar, praticar e, até mesmo, trabalhar no seu Laptop, Desktop, etc. Agora é só criar quantas VMs, o seu computador aguentar.
Depois de criada, a VM poderá, até mesmo, aceder à Internet, pois usará seu computador como gateway.
Mas lembre-se: A VM irá consumir da memória física e do CPU do seu computador.
Agora, sim. Pode tomar aquele cafezinho e continuar a aprender… até a próxima.