iv. Mini tutorial do Vagrant
Ao longo desse curso, o Vagrant será usado o tempo todo. Embora os detalhes do Vagrant estejam fora do escopo deste curso, é importante que o estudante entenda alguns conceitos básicos sobre o Vagrant para se familiarizar com o ambiente.
Talvez um dos principais problemas sobre o Vagrant para iniciantes seja que nada é visível graficamente. O usuário precisa ter um tipo de imagem mental do que está acontecendo para poder navegar. Como nós vimos anteriormente, há dois consoles: o host e o guest, que podem ser identificados pelos prefixos:
user@host:~/JavaClasses$ vagrant@vagrant-ubuntu-trusty-32:~$
O primeiro console depende do seu computador e é muito diferente se você estiver usando Windows. Esse tutorial é dividido em tópicos para servir como referência, mas ele pode também ser seguido do início ao fim se você já tiver o Vagrant configurado como apresentado anteriormente.
É importante que você esteja sempre no diretório JavaClasses. Estar nesse diretório é o que faz o Vagrant saber que você está tentando trabalhar com uma determinada máquina virtual.
Verificando o status
user@host:~/JavaClasses$ vagrant status
Esse comando mostra se uma máquina virtual está rodando ou não.
Iniciando uma máquina virtual
user@host:~/JavaClasses$ vagrant up
Agora que a máquina virtual está rodando você pode verificar o status novamente e ver que ele mudou.
user@host:~/JavaClasses$ vagrant status
Configurar a janela gráfica para o VirtualBox
Por padrão, quando a VM é ligada, o VirtualBox executa a VM nos "bastidores". Isto é, o VirtualBox não mostra qualquer janela gráfica. O usuário, então, precisa digitar vagrant status para saber se a VM está executando ou não.
Esta janela gráfica também facilita o uso do terminal da VM para principiantes, pois serve como alternativa para o uso de SSH (console remoto). Infelizmente o sistema operacional Windows vem sem um cliente para SSH. Por isso recomendamos a instalação do programa Putty para usuários Windows.
Para configurar o Vagrant para mostrar a janela gráfica do VirtualBox, edite o arquivo Vagrantfile e altere o valor da propriedade v.gui para true:
v.gui = true
O usuário e a senha são strongvagrant/vagrant e strongvagrant/vagrant, respectivamente.
Interrompendo uma máquina virtual
user@host:~/JavaClasses$ vagrant halt
Agora se verificarmos o status, nós veremos que ele mudou para o status original.
user@host:~/JavaClasses$ vagrant status
Acessando o terminal da máquina virtual
user@host:~/JavaClasses$ vagrant ssh vagrant@vagrant-ubuntu-trusty-32:~$
Agora nós estamos dentro da máquina virtual. Todas as mudanças que nós fazemos, tais como criar arquivos ou diretórios, mudam a máquina virtual (guest OS). Para ilustrar tal conceito, vamos criar um simples diretório chamado trash:
vagrant@vagrant-ubuntu-trusty-32:~$ mkdir trash vagrant@vagrant-ubuntu-trusty-32:~$ ls trash
Nós precisamos voltar à máquina host para comparar os conteúdos.
Saindo da máquina virtual
vagrant@vagrant-ubuntu-trusty-32:~$ exit user@host:~/JavaClasses$
É tão simples quanto finalizar qualquer sessão de console. Nós podemos agora verificar os conteúdos da máquina host e veremos que o diretório trash não está lá:
user@host:~/JavaClasses$ ls install.sh VagrantFile
Porém, agora temos o diretório trash que é inútil para nós. E se nós quisermos voltar no tempo quando tudo estava limpo?
Voltando para um snapshot
Um snapshot é como uma foto congelada de uma máquina virtual. Você tira a foto e você pode pedir à máquina virtual para voltar àquele estado. Na sessão anterior, nós tiramos o snapshot "clean". Agora vamos voltar àquele snapshot. ATENÇÃO! Você irá apagar tudo o que você criou desde que você tirou o snapshot "clean".
user@host:~/JavaClasses$ vagrant go clean vagrant@vagrant-ubuntu-trusty-32:~$
O Vagrant coloca você de volta para o console guest quando você retorna ao snapshot. Agora você pode rodar ls novamente e ver que o diretório trash se foi.
user@host:~/JavaClasses$ ls
Neste momento, você não pode ver nada. E se você quiser fazer o oposto, indo adiante no tempo? Você não pode. Para ir para um certo estado, você precisa solicitar explicitamente ao Vagrant para tirar um snapshot. Se você queria voltar àquele estado você deveria ter tirado um snapshot quando você estava naquele estado. Então vamos criar outro arquivo chamado trashAgain, que nos ajudará a entender o processo.
vagrant@vagrant-ubuntu-trusty-32:~$ mkdir trashAgain vagrant@vagrant-ubuntu-trusty-32:~$ ls trashAgain
Tirando um snapshot
Agora nós podemos tirar outro snapshot e nomeá-lo x. Para tirar um snapshot nós precisamos voltar à máquina host. É interessante notar que a máquina guest não pode fazer nada igual a isso. A máquina guest não sabe que ela mesma é uma máquina virtual.
Agora nós podemos tirar um outro snapshot e nomeá-lo x. Para tirar um snapshot nós precisamos voltar para a máquina host.
vagrant@vagrant-ubuntu-trusty-32:~$ exit user@host:~/JavaClasses$ vagrant take x
Agora que nós voltamos ao estado "clean", no qual não tínhamos o diretório chamado "trashAgain".
user@host:~/JavaClasses$ vagrant go clean vagrant@vagrant-ubuntu-trusty-32:~$ ls (nothing) vagrant@vagrant-ubuntu-trusty-32:~$ exit
Agora vamos ao estado "x" e vemos que o diretório "trashAgain" reapareceu:
user@host:~/JavaClasses$ vagrant go x vagrant@vagrant-ubuntu-trusty-32:~$ ls trashAgain
Agora vamos voltar ao estado "clean".
vagrant@vagrant-ubuntu-trusty-32:~$ exit user@host:~/JavaClasses$ vagrant go clean vagrant@vagrant-ubuntu-trusty-32:~$ exit user@host:~/JavaClasses$
Nós temos dois snapshots, vamos aprender como listá-los:
Listando snapshots
user@host:~/JavaClasses$ vagrant snapshot list clean x
Nós não precisamos do snapshot "x", que contém somente o trash. Então nós podemos removê-lo:
Removendo um snapshot
user@host:~/JavaClasses$ vagrant snapshot delete x user@host:~/JavaClasses$ vagrant snapshot list clean
Como você pode ver, agora você tem somente o snapshot "clean".
Regra de ouro
Nunca mais digite o seguinte comando:
user@host:~/JavaClasses$ vagrant take clean
Se você digitar este comando de novo, você modificará o estado "clean". Nós não queremos isso! Nós queremos que o estado "clean" seja exatamente como nós o definimos anteriormente.
Portanto, desde que você não mude o estado "clean", você sempre poderá voltar a ele digitando:
user@host:~/JavaClasses$ vagrant go clean
Compartilhando o seu Vagrant box
Uma vez configurada a sua máquina virtual, você pode compartilhá-la digitando o seguinte:
vagrant package --base zeroToJava
Este comando criará um arquivo chamado package.box, que você pode usar para replicar a mesma máquina virtual em outro computador.