Vagrant + Puppet
Definição
editarO 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
editarA 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
editarO 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
editarvagrant up
: Cria a máquina virtual e instala o sistema operacionalvagrant 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 Vagrantfilevagrant destroy
: Destroi por completo a máquinavagrant provision
: Ele só roda os provisiton do arquivo VagrantFile
Recursos do puppet
editarNo 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
editarCrie 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/