Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Junho/2014
Gustavo Chaves
about.me/gnustavo
Como é o seu ambiente pessoal de testes?
● Servidor compartilhado, sua máquina ou VM?
● O setup é automático?
○ Existe, pe...
Como você usa o seu ambiente de testes?
● Como copiar os artefatos entre os ambientes?
○ scp, rsync, wget, JRebel, …?
● Qu...
E a gestão de configuração?
● O seu ambiente é “igual” ao de produção?
Mas na
minha
máquina
funciona...
● O ambiente é úni...
http://vagrantup.com
Vagrant
O que você precisa instalar?
vagrantup.com/downloads.html
virtualbox.org/wiki/Downloads
Vagrant Boxes & Providers
● Um box é um arquivo contendo a imagem básica de
uma VM que será gerenciada pelo Vagrant.
● Cad...
Vagrant Command Line Interface
Vagrant init & Vagrantfile
Vagrant status
not created
running
poweroff
Vagrant status
saved
vagrant up
vagrant suspend
vagrant up
vagrant halt
vagrant halt
vagrant ...
Vagrant up
Vagrant ssh
Vagrant suspend
Vagrant halt
Vagrant destroy
Synchronized folders
● Por default o diretório do host onde fica o Vagrantfile
é “montado” na VM em /vagrant.
○ Útil para ...
Default Networking = NAT
● Por default a VM é configurada com uma rede “NAT”,
usando um IP privado, o que lhe permite aces...
Network port forwarding
Host
VM
80:
8080:
Remote
● config.vm.network :forwarded_port,
guest: 80, host: 8080
○ Permite aces...
Host
VM
Public Networking
● config.vm.network :public_network
○ Cria uma rede “bridged”, alocando um MAC para a VM e
conec...
Private Networking
● config.vm.network :private_network
○ Cria uma rede privada que pode ser compartilhada por mais de
uma...
Vagrant plugins
● 21 providers
○ KVM, VMware, Hyper-V, AWS, ...
● vagrant-cachier
○ “caffeine reducer”
○ Cache packages fo...
Vagrant snapshot
Vagrant snapshot
Vagrant snapshot
running
vagrant snapshot take
vagrant up
snapshotted
dirty
vagrant snapshot back
deploy
test
Ciclo de desenvolvimento fast...
Provisionamento
● “Provisionar uma VM” significa executar comandos nela
para instalar, configurar ou atualizar software.
●...
Provisionamento via shell
● config.vm.provision :shell,
inline: "echo Hello, World"
○ Invoca o comando direto na VM
● conf...
Provisionamento via Puppet
● config.vm.provision :puppet
○ Executa na VM o comando
■ puppet apply /vagrant/manifests/defau...
http://puppetlabs.com/puppet/puppet-open-source
“Puppet is a declarative, model-based approach to IT
automation, helping y...
Puppet - scripts declarativos
Descrevem “recursos” e suas relações.
○ Você diz “como é” sua infraestrutura e não “como con...
Puppet - scripts idempotentes
Pode-se executar os scripts múltiplas vezes pois cada recurso
“sabe” quando já está configur...
Puppet - Idempotência
file 1
file 1 service A
file 2
package A
file 1 service A
file 2
package A
Puppet - Recursos pré-definidos
● 54 tipos de recursos
○ exec
○ file
○ group
○ host
○ interface
○ mount
○ package
○ servic...
Puppet Forge - módulos compartilhados
● https://forge.puppetlabs.com/
● + 2.300 módulos, e.g.:
○ puppetlabs/stdlib
○ puppe...
Demo: Vagrantfile
Demo: manifests/default.pp
Demo: manifests/apache2-virtualhost.conf
Demo
$ vagrant up
>>> localhost:8080
$ vagrant snapshot take provisioned
$ vagrant provision
$ vagrant ssh -- sudo apt-get...
Como isso tudo se integra ao meu projeto?
$ vagrant up
$ vagrant snapshot take base
$ pense, trabalhe, teste...
$ vagrant ...
Ambientes diferentes!?!
Produção
Vagrant + Puppet = ambientes idênticos
Produção
Exemplo mais “complexo”
CDS Demo
MySQL OpenLDAP
Gerrit JIRA Jenkins TestLink SonarQube
JBoss
nginx
firefox
Módulos tipo Componente
CPqD Developer Suite “Puppetizado”
mysql
nginx
jenkins
jira
sonarqube
nexus
testlink
gerrit
Módulo...
See Also...
● Caso Locaweb
○ “Standardise Development Environments and Machine Images with
Packer”
○ go.cpqd.com.br/packer...
www.cpqd.com.br
Gustavo Chaves
gustavo@cpqd.com.br
(19) 3705 7003
Obrigado!
Upcoming SlideShare
Loading in …5
×

Vagrant + Puppet

9,469 views

Published on

Uma breve introdução ao Vagrant e ao Puppet, duas ferramentas livres que podem ajudá-lo a manter seu ambiente de desenvolvimento sob controle.

Published in: Technology

Vagrant + Puppet

  1. 1. Junho/2014
  2. 2. Gustavo Chaves about.me/gnustavo
  3. 3. Como é o seu ambiente pessoal de testes? ● Servidor compartilhado, sua máquina ou VM? ● O setup é automático? ○ Existe, pelo menos, um procedimento? ○ Quanto demora? ● O ambiente é padronizado? Quanto? ○ Sistema Operacional (Linux, Windows, Mac?) Plataforma (Java, Python, Ruby, Perl?) Servidor de Aplicação (JBoss, Tomcat, Jetty, php-fpm?) Banco de Dados (H2, MySQL, PostgreSQL, Oracle?) … ○ eu perguntei das versões?
  4. 4. Como você usa o seu ambiente de testes? ● Como copiar os artefatos entre os ambientes? ○ scp, rsync, wget, JRebel, …? ● Quão “confortável” é trabalhar no ambiente de testes? ○ Tem que usar “vi” pra editar os arquivos? :-) ● Dá pra fazer rollback pra recomeçar os testes?
  5. 5. E a gestão de configuração? ● O seu ambiente é “igual” ao de produção? Mas na minha máquina funciona... ● O ambiente é único para todos os projetos? ● E para os projetos antigos?
  6. 6. http://vagrantup.com Vagrant
  7. 7. O que você precisa instalar? vagrantup.com/downloads.html virtualbox.org/wiki/Downloads
  8. 8. Vagrant Boxes & Providers ● Um box é um arquivo contendo a imagem básica de uma VM que será gerenciada pelo Vagrant. ● Cada box é específico para um provider. ○ VirtualBox, VMWare, Hyper-V, AWS, Docker, ... ● Um box pode conter qualquer sistema operacional. ● Use e boxes públicos do VagrantCloud.com e publique seus próprios boxes.
  9. 9. Vagrant Command Line Interface
  10. 10. Vagrant init & Vagrantfile
  11. 11. Vagrant status
  12. 12. not created running poweroff Vagrant status saved vagrant up vagrant suspend vagrant up vagrant halt vagrant halt vagrant destroy
  13. 13. Vagrant up
  14. 14. Vagrant ssh
  15. 15. Vagrant suspend
  16. 16. Vagrant halt
  17. 17. Vagrant destroy
  18. 18. Synchronized folders ● Por default o diretório do host onde fica o Vagrantfile é “montado” na VM em /vagrant. ○ Útil para acelerar o ciclo de testes das aplicações, pois o diretório do projeto é visível pela VM. ● config.vm.synced_folder "www/", "/website" ○ Monta o diretório www do host em /website na VM. Host VM
  19. 19. Default Networking = NAT ● Por default a VM é configurada com uma rede “NAT”, usando um IP privado, o que lhe permite acessar o mundo externo mas não o contrário. Host VM
  20. 20. Network port forwarding Host VM 80: 8080: Remote ● config.vm.network :forwarded_port, guest: 80, host: 8080 ○ Permite acesso da rede física à porta 80 da VM através da porta 8080 do host
  21. 21. Host VM Public Networking ● config.vm.network :public_network ○ Cria uma rede “bridged”, alocando um MAC para a VM e conectando-a diretamente à rede física. ○ Mais intrusiva que a rede NAT. Use apenas se souber exatamente o que está fazendo. :-)
  22. 22. Private Networking ● config.vm.network :private_network ○ Cria uma rede privada que pode ser compartilhada por mais de uma VM. ○ Útil para ambientes de desenvolvimento complexos que exijam múltiplas VMs comunicando-se entre si. Host VM VM
  23. 23. Vagrant plugins ● 21 providers ○ KVM, VMware, Hyper-V, AWS, ... ● vagrant-cachier ○ “caffeine reducer” ○ Cache packages for APT, YUM, etc. ● vagrant-vbguest ○ Keep VirtualBox Guest Additions up to date ● vagrant-vbox-snapshot ○ Manage VirtualBox snapshots github.com/mitchellh/vagrant/wiki/Available-Vagrant-Plugins
  24. 24. Vagrant snapshot
  25. 25. Vagrant snapshot
  26. 26. Vagrant snapshot
  27. 27. running vagrant snapshot take vagrant up snapshotted dirty vagrant snapshot back deploy test Ciclo de desenvolvimento fast-track
  28. 28. Provisionamento ● “Provisionar uma VM” significa executar comandos nela para instalar, configurar ou atualizar software. ● O Vagrant suporta vários mecanismos de provisionamento: ○ Shell scripts, Puppet, Chef, Ansible, CFengine, Salt, Docker ● O provisionamento ocorre implicitamente ao final do processo de criação da VM (primeiro vagrant up) ou explicitamente pelo comando vagrant provision.
  29. 29. Provisionamento via shell ● config.vm.provision :shell, inline: "echo Hello, World" ○ Invoca o comando direto na VM ● config.vm.provision :shell, path: "vm/provision.sh" ○ Invoca na VM o script /vagrant/vm/provision.sh config.vm.provision :shell, path:"https://raw.github.../provision.sh" ○ Invoca na VM o script /tmp/vagrant-shell20140519-9217...sh
  30. 30. Provisionamento via Puppet ● config.vm.provision :puppet ○ Executa na VM o comando ■ puppet apply /vagrant/manifests/default.pp
  31. 31. http://puppetlabs.com/puppet/puppet-open-source “Puppet is a declarative, model-based approach to IT automation, helping you manage infrastructure throughout its lifecycle, from provisioning and configuration to orchestration and reporting. Using Puppet, you can easily automate repetitive tasks, quickly deploy critical applications, and proactively manage change, scaling from 10s of servers to 1000s, on-premise or in the cloud.”
  32. 32. Puppet - scripts declarativos Descrevem “recursos” e suas relações. ○ Você diz “como é” sua infraestrutura e não “como construí-la” package { ['apache2', 'libapache2-mod-php5']: ensure => installed, } -> file { '/etc/apache2/sites-enabled/001-localhost.conf': ensure => file, source => '/vagrant/manifests/apache2-virtualhost.conf', } ~> service { 'apache2': ensure => running, enable => true, }
  33. 33. Puppet - scripts idempotentes Pode-se executar os scripts múltiplas vezes pois cada recurso “sabe” quando já está configurado. exec { '/usr/sbin/locale-gen pt_BR.utf8': unless => '/usr/bin/locale -a | grep -qF pt_BR.utf8', } exec { 'perl -i.orig -lpe "s/^#(?=color_prompt)//" .bashrc': user => 'vagrant', path => '/usr/bin', creates => '/home/vagrant/.bashrc.orig', }
  34. 34. Puppet - Idempotência file 1 file 1 service A file 2 package A file 1 service A file 2 package A
  35. 35. Puppet - Recursos pré-definidos ● 54 tipos de recursos ○ exec ○ file ○ group ○ host ○ interface ○ mount ○ package ○ service ○ user ○ … ● Google puppet types
  36. 36. Puppet Forge - módulos compartilhados ● https://forge.puppetlabs.com/ ● + 2.300 módulos, e.g.: ○ puppetlabs/stdlib ○ puppetlabs/apache ○ puppetlabs/mysql ○ puppetlabs/postgresql ○ puppetlabs/ntp ○ jfryman/nginx ○ maestrodev/wget ○ thias/php ○ example42/jboss Um módulo define novos recursos parametrizados
  37. 37. Demo: Vagrantfile
  38. 38. Demo: manifests/default.pp
  39. 39. Demo: manifests/apache2-virtualhost.conf
  40. 40. Demo $ vagrant up >>> localhost:8080 $ vagrant snapshot take provisioned $ vagrant provision $ vagrant ssh -- sudo apt-get remove apache2 $ vagrant provision >>> vi site/index.php >>> localhost:8080 $ vagrant snapshot take base $ vagrant snapshot back
  41. 41. Como isso tudo se integra ao meu projeto? $ vagrant up $ vagrant snapshot take base $ pense, trabalhe, teste... $ vagrant snapshot back
  42. 42. Ambientes diferentes!?! Produção
  43. 43. Vagrant + Puppet = ambientes idênticos Produção
  44. 44. Exemplo mais “complexo” CDS Demo MySQL OpenLDAP Gerrit JIRA Jenkins TestLink SonarQube JBoss nginx firefox
  45. 45. Módulos tipo Componente CPqD Developer Suite “Puppetizado” mysql nginx jenkins jira sonarqube nexus testlink gerrit Módulos tipo Profile cds::jenkins cds::jira cds::nexus cds::sonar cds::testlink cds::gerrit ldap jboss Configuração
  46. 46. See Also... ● Caso Locaweb ○ “Standardise Development Environments and Machine Images with Packer” ○ go.cpqd.com.br/packer-pt ● Caso Wikimedia ○ “Ever wondered how the Wikimedia servers are configured?” ○ https://gerrit.wikimedia.org/r/p/operations/puppet ● Apresentação na RubyConf 2013 ○ “Usando Vagrant como ambiente de desenvolvimento Ruby” ○ go.cpqd.com.br/vagrant-pt
  47. 47. www.cpqd.com.br Gustavo Chaves gustavo@cpqd.com.br (19) 3705 7003 Obrigado!

×