Vagrant + Puppet

Fonte: Wikiversidade
Saltar para a navegação Saltar para a pesquisa

Definição[editar | editar código-fonte]

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 | editar código-fonte]

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 | editar código-fonte]

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

 1 Vagrant.configure("2") do |config|
 2   config.vm.box = "ubuntu-server-14.04"
 3   config.vm.box_url = "https://cloud-images.ubuntu.com/vagrant/trusty/current/trusty-server-cloudimg-amd64-vagrant-disk1.box"
 4   config.vm.define :django do |web_config|
 5     web_config.vm.network "private_network", ip: "192.168.50.10"
 6     config.vm.network :forwarded_port, guest: 80, host: 8080
 7     web_config.vm.provision "puppet" do |puppet|
 8       puppet.manifest_file = "django.pp"
 9     end
10   end
11 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 | editar código-fonte]

  • 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 | editar código-fonte]

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.

1 tipo { 'título':
2     param1     => 'valor',
3     param2     => 'valor',
4     param3     => 'valor',
5     metaparam1 => 'valor',
6     metaparam2 => 'valor',
7     function1  => 'valor',
8     function2  => 'valor',
9 }

48 Tipos de recursos nativos:

Exemplo prático usando o puppet[editar | editar código-fonte]

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

 1 exec {"apt-update":
 2   command => '/usr/bin/apt-get update'
 3 }
 4 
 5 package {[
 6   "python3-dev",
 7   "python3-pip",
 8   "git-core",
 9   "openssl",
10   "zlib1g-dev",
11   ]:
12   ensure => installed,
13   require => Exec["apt-update"]
14 }
15 
16 file {"python3.6":
17   source => "/vagrant/manifests/python.sh",
18   path => '/usr/local/bin/python.sh',
19   ensure => 'file',
20   owner => 'root',
21   group => 'root',
22   mode  => '0744',
23   notify => Exec['python-script'],
24 }
25 
26 exec {"python-script":
27   command => '/usr/local/bin/python.sh',
28   timeout => 0,
29 }
30 
31 exec {"install-vm":
32   command => 'pip3 install virtualenvwrapper',
33   path => '/usr/bin',
34   require => Exec['python-script']
35 }
36 
37 file {".bashrc":
38   source => "/vagrant/manifests/.bashrc",
39   path => '/home/vagrant/.bashrc',
40   ensure => 'file',
41   owner => 'root',
42   group => 'root',
43   mode  => '0777',
44   require => Exec['install-vm']
45 }
46 
47 file {".bash_git":
48   source => "/vagrant/manifests/.bash_git",
49   path => '/home/vagrant/.bash_git',
50   ensure => 'file',
51   owner => 'root',
52   group => 'root',
53   mode  => '0777',
54 }
55 
56 file {"README":
57   source => "/vagrant/README.md",
58   path => '/home/vagrant/README.md',
59   ensure => 'file',
60   owner => 'root',
61   group => 'root',
62   mode  => '0777',
63 }
64 
65 exec {"codeschool-repo":
66   command => 'git clone https://github.com/MES20171CodeSchool/cs-server.git',
67   path => "/usr/bin",
68   require => Package['git-core']
69 }
70 
71 file {"vim":
72   source => "/vagrant/manifests/vim.sh",
73   path => '/home/vagrant/vim.sh',
74   ensure => 'file',
75   owner => 'root',
76   group => 'root',
77   mode  => '0744',
78 }
79 
80 file {"atom":
81   source => "/vagrant/manifests/atom.sh",
82   path => '/usr/local/bin/atom.sh',
83   ensure => 'file',
84   owner => 'root',
85   group => 'root',
86   mode  => '0744',
87   notify => Exec['atom-script'],
88 }
89 
90 exec {"atom-script":
91   command => '/usr/local/bin/atom.sh',
92   timeout => 0,
93 }

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/