Definição

editar

O Vagrant é uma ferramenta para criar rapidamente ambientes virtuais para vários fins, como ambiente de testes, desenvolvimento, produção e etc, utilizando soluções de virtualização como o VirtualBox e o VMWare, sendo compativel com clouds como AWS, DigitalOcean entre outros e tem suporte a várias tecnologias de provisionamento como o Puppet, Chef.

O Puppet permite criar e configurar o ambiente em um único processo, ele é um utilitário para gerenciamento de configuração de código livre e inclui sua própria linguagem declarativa para descrever a configuração do sistema.

Instalação

editar

A instalação do vagrant esta na documentação oficial do vagrant, faça o download do vagrant através do link https://www.vagrantup.com/downloads.html de acordo com seu sistema operacional e instale o pacote baixado.

Faça o download e instale o virtualbox na versão do seu sistema operacional do tipo ADM no link https://www.virtualbox.org/wiki/Linux_Downloads

Configuração do Vagrant

editar

O nosso primeiro passo é criar uma máquina virtual.

O Vagrant é capaz de criar e gerenciar essas máquinas virtuais – através do VirtualBox

Assim que instalar o vagrant execute o comando vagrant init

Isso irá criar um arquivo chamado Vagrantfile na pasta onde você executou o comando

Vagrant.configure("2") do |config|
  config.vm.box = "ubuntu-server-14.04"
  config.vm.box_url = "https://cloud-images.ubuntu.com/vagrant/trusty/current/trusty-server-cloudimg-amd64-vagrant-disk1.box"
  config.vm.define :django do |web_config|
    web_config.vm.network "private_network", ip: "192.168.50.10"
    config.vm.network :forwarded_port, guest: 80, host: 8080
    web_config.vm.provision "puppet" do |puppet|
      puppet.manifest_file = "django.pp"
    end
  end
end

Os comandos acima dizem o seguinte:

  • L1: Vagrant, configura aí usando a sua versão 2.
  • L2-3: Vagrant, a imagem da minha máquina, do meu box, que eu vou usar é o Ubuntu e quero que baixe dessa url.
  • L4: O próximo passo é falar que eu quero uma máquina. Que máquina que eu quero? Eu quero uma máquina que eu vou chamar de django. Então eu estou falando: “Olha, configuração, define aí uma máquina; o nome dessa máquina é django.”
  • L5: Vagrant, dentro dessa máquina, eu queria configurar uma rede, a rede vai ser fechada (private_network) entre eu, que sou o host, a minha máquina, e essa máquina django, e pra essa máquina django eu vou dar um ip fixo, que vai ser: 192.168.50.10.
  • L6: Vagrant, quero mapear a porta 80 da máquina django para a porta 8080 da minha máquina local
  • L7: Ao dar vagrant up já quero que minha maquina rode o puppet criado, logo vamos fornecer ou abastecer (provision) nossa maquina virtual com o puppet na pasta manifests no arquivo django.pp

Comandos Básicos do Vagrant

editar
  • vagrant up: Cria a máquina virtual e instala o sistema operacional
  • vagrant ssh: Se conecta a máquina virtual, o usuário padrão quando eu dou um vagrant ssh pra uma máquina do VirtualBox se chama “vagrant”.
  • vagrant reload: Restarta a máquina, reiniciar do zero com as novas configurações do Vagrantfile
  • vagrant destroy: Destroi por completo a máquina
  • vagrant provision: Ele só roda os provisiton do arquivo VagrantFile

Recursos do puppet

editar

No puppet, cada recurso é uma instância de algum tipo, e cada tipo de recurso tem um título e seus atributos, os atributos podem ser parâmetros, meta-parâmetros, funções e provedores.

tipo { 'título':
    param1     => 'valor',
    param2     => 'valor',
    param3     => 'valor',
    metaparam1 => 'valor',
    metaparam2 => 'valor',
    function1  => 'valor',
    function2  => 'valor',
}

48 Tipos de recursos nativos:

Exemplo prático usando o puppet

editar

Crie uma pasta chamada manifests e dentro dele crie o arquivo do puppet chamado django.pp ou qualquer outro nome que queira, porém terá que mudar na configuração do vagrant

exec {"apt-update":
  command => '/usr/bin/apt-get update'
}

package {[
  "python3-dev",
  "python3-pip",
  "git-core",
  "openssl",
  "zlib1g-dev",
  ]:
  ensure => installed,
  require => Exec["apt-update"]
}

file {"python3.6":
  source => "/vagrant/manifests/python.sh",
  path => '/usr/local/bin/python.sh',
  ensure => 'file',
  owner => 'root',
  group => 'root',
  mode  => '0744',
  notify => Exec['python-script'],
}

exec {"python-script":
  command => '/usr/local/bin/python.sh',
  timeout => 0,
}

exec {"install-vm":
  command => 'pip3 install virtualenvwrapper',
  path => '/usr/bin',
  require => Exec['python-script']
}

file {".bashrc":
  source => "/vagrant/manifests/.bashrc",
  path => '/home/vagrant/.bashrc',
  ensure => 'file',
  owner => 'root',
  group => 'root',
  mode  => '0777',
  require => Exec['install-vm']
}

file {".bash_git":
  source => "/vagrant/manifests/.bash_git",
  path => '/home/vagrant/.bash_git',
  ensure => 'file',
  owner => 'root',
  group => 'root',
  mode  => '0777',
}

file {"README":
  source => "/vagrant/README.md",
  path => '/home/vagrant/README.md',
  ensure => 'file',
  owner => 'root',
  group => 'root',
  mode  => '0777',
}

exec {"codeschool-repo":
  command => 'git clone https://github.com/MES20171CodeSchool/cs-server.git',
  path => "/usr/bin",
  require => Package['git-core']
}

file {"vim":
  source => "/vagrant/manifests/vim.sh",
  path => '/home/vagrant/vim.sh',
  ensure => 'file',
  owner => 'root',
  group => 'root',
  mode  => '0744',
}

file {"atom":
  source => "/vagrant/manifests/atom.sh",
  path => '/usr/local/bin/atom.sh',
  ensure => 'file',
  owner => 'root',
  group => 'root',
  mode  => '0744',
  notify => Exec['atom-script'],
}

exec {"atom-script":
  command => '/usr/local/bin/atom.sh',
  timeout => 0,
}

Com isso, ao rodar o vagrant up o vagrant e o puppet irá atualizar o repositorio, baixar e instalar todos os pacotes e dependências citadas e já inserir o repositorio do github em sua máquina virtual.

Isso tudo de forma automatizada e se caso você queira destruir sua maquina ou de algum problema, é só dar o comando vagrant up novamente e tudo estará como era antes.

Esse é um exemplo bem simples e prático o puppet pode fazer bem mais que isso, só estudar a sua documentação: https://docs.puppet.com/puppet/latest/