SlideShare une entreprise Scribd logo
1  sur  47
Télécharger pour lire hors ligne
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, 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?
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?
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?
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.
● 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.
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 destroy
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 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
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
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
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. :-)
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
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
Vagrant snapshot
Vagrant snapshot
Vagrant snapshot
running
vagrant snapshot take
vagrant up
snapshotted
dirty
vagrant snapshot back
deploy
test
Ciclo de desenvolvimento fast-track
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.
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
Provisionamento via Puppet
● config.vm.provision :puppet
○ Executa na VM o comando
■ puppet apply /vagrant/manifests/default.pp
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.”
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,
}
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',
}
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
○ service
○ user
○ …
● Google puppet types
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
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 remove apache2
$ vagrant provision
>>> vi site/index.php
>>> localhost:8080
$ vagrant snapshot take base
$ vagrant snapshot back
Como isso tudo se integra ao meu projeto?
$ vagrant up
$ vagrant snapshot take base
$ pense, trabalhe, teste...
$ vagrant snapshot back
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ódulos tipo Profile
cds::jenkins
cds::jira cds::nexus cds::sonar
cds::testlink cds::gerrit
ldap
jboss
Configuração
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
www.cpqd.com.br
Gustavo Chaves
gustavo@cpqd.com.br
(19) 3705 7003
Obrigado!

Contenu connexe

Tendances

Aula PIT 3 - Ambientes
Aula PIT 3 - AmbientesAula PIT 3 - Ambientes
Aula PIT 3 - AmbientesDirceu Belém
 
Presentta: usando Node.js na prática
Presentta: usando Node.js na práticaPresentta: usando Node.js na prática
Presentta: usando Node.js na práticaNando Vieira
 
A explosão do Node.js: JavaScript é o novo preto
A explosão do Node.js: JavaScript é o novo pretoA explosão do Node.js: JavaScript é o novo preto
A explosão do Node.js: JavaScript é o novo pretoNando Vieira
 
Sismologia USP: Infra Estutura Computacional para Pesquisa
Sismologia USP: Infra Estutura Computacional para PesquisaSismologia USP: Infra Estutura Computacional para Pesquisa
Sismologia USP: Infra Estutura Computacional para PesquisaCentro de Sismologia - USP
 
Gerência de Configurações com o Puppet
Gerência de Configurações com o PuppetGerência de Configurações com o Puppet
Gerência de Configurações com o Puppetpericles_junior
 
Desmistificando um Ambiente de Desenvolvimento WEB com Vagrant
Desmistificando um Ambiente de Desenvolvimento WEB com VagrantDesmistificando um Ambiente de Desenvolvimento WEB com Vagrant
Desmistificando um Ambiente de Desenvolvimento WEB com VagrantLuis Henrique Costa
 
Oficina PostgreSQL Básico Latinoware 2012
Oficina PostgreSQL Básico Latinoware 2012Oficina PostgreSQL Básico Latinoware 2012
Oficina PostgreSQL Básico Latinoware 2012Fabrízio Mello
 
TDC2017 | São Paulo - Trilha Programação Funcional How we figured out we had ...
TDC2017 | São Paulo - Trilha Programação Funcional How we figured out we had ...TDC2017 | São Paulo - Trilha Programação Funcional How we figured out we had ...
TDC2017 | São Paulo - Trilha Programação Funcional How we figured out we had ...tdc-globalcode
 
A Biblioteca cURL
A Biblioteca cURLA Biblioteca cURL
A Biblioteca cURLricardophp
 
TDC2010 - Trilha Python: Python no iG (Automação de Datacenters)
TDC2010 - Trilha Python: Python no iG (Automação de Datacenters)TDC2010 - Trilha Python: Python no iG (Automação de Datacenters)
TDC2010 - Trilha Python: Python no iG (Automação de Datacenters) iG - Internet Group do Brasil S/A
 
Sistemas operacionais1
Sistemas operacionais1Sistemas operacionais1
Sistemas operacionais1Nauber Gois
 
Fundamentos Replicação MySQL
Fundamentos Replicação MySQLFundamentos Replicação MySQL
Fundamentos Replicação MySQLAlexandre Almeida
 

Tendances (20)

Node JS - Parte 2
Node JS - Parte 2Node JS - Parte 2
Node JS - Parte 2
 
Node JS - Parte 3
Node JS - Parte 3Node JS - Parte 3
Node JS - Parte 3
 
Aula PIT 3 - Ambientes
Aula PIT 3 - AmbientesAula PIT 3 - Ambientes
Aula PIT 3 - Ambientes
 
Presentta: usando Node.js na prática
Presentta: usando Node.js na práticaPresentta: usando Node.js na prática
Presentta: usando Node.js na prática
 
A explosão do Node.js: JavaScript é o novo preto
A explosão do Node.js: JavaScript é o novo pretoA explosão do Node.js: JavaScript é o novo preto
A explosão do Node.js: JavaScript é o novo preto
 
Drupal + Rex
Drupal + RexDrupal + Rex
Drupal + Rex
 
Sismologia USP: Infra Estutura Computacional para Pesquisa
Sismologia USP: Infra Estutura Computacional para PesquisaSismologia USP: Infra Estutura Computacional para Pesquisa
Sismologia USP: Infra Estutura Computacional para Pesquisa
 
Gerência de Configurações com o Puppet
Gerência de Configurações com o PuppetGerência de Configurações com o Puppet
Gerência de Configurações com o Puppet
 
Desmistificando um Ambiente de Desenvolvimento WEB com Vagrant
Desmistificando um Ambiente de Desenvolvimento WEB com VagrantDesmistificando um Ambiente de Desenvolvimento WEB com Vagrant
Desmistificando um Ambiente de Desenvolvimento WEB com Vagrant
 
Docker + Django
Docker + DjangoDocker + Django
Docker + Django
 
Node JS - Parte 4
Node JS - Parte 4Node JS - Parte 4
Node JS - Parte 4
 
Oficina PostgreSQL Básico Latinoware 2012
Oficina PostgreSQL Básico Latinoware 2012Oficina PostgreSQL Básico Latinoware 2012
Oficina PostgreSQL Básico Latinoware 2012
 
TDC2017 | São Paulo - Trilha Programação Funcional How we figured out we had ...
TDC2017 | São Paulo - Trilha Programação Funcional How we figured out we had ...TDC2017 | São Paulo - Trilha Programação Funcional How we figured out we had ...
TDC2017 | São Paulo - Trilha Programação Funcional How we figured out we had ...
 
A Biblioteca cURL
A Biblioteca cURLA Biblioteca cURL
A Biblioteca cURL
 
TDC2010 - Trilha Python: Python no iG (Automação de Datacenters)
TDC2010 - Trilha Python: Python no iG (Automação de Datacenters)TDC2010 - Trilha Python: Python no iG (Automação de Datacenters)
TDC2010 - Trilha Python: Python no iG (Automação de Datacenters)
 
Sistemas operacionais1
Sistemas operacionais1Sistemas operacionais1
Sistemas operacionais1
 
Docker volumes
Docker volumesDocker volumes
Docker volumes
 
OpenSolaris a Céu Aberto
OpenSolaris a Céu AbertoOpenSolaris a Céu Aberto
OpenSolaris a Céu Aberto
 
Fundamentos Replicação MySQL
Fundamentos Replicação MySQLFundamentos Replicação MySQL
Fundamentos Replicação MySQL
 
Docker para maiores
Docker para maioresDocker para maiores
Docker para maiores
 

Similaire à Vagrant + Puppet

Construção e provisionamento de ambientes de desenvolvimento virtualizados
Construção e provisionamento de ambientes  de desenvolvimento virtualizadosConstrução e provisionamento de ambientes  de desenvolvimento virtualizados
Construção e provisionamento de ambientes de desenvolvimento virtualizadosThiago Rodrigues
 
Como criar infraestrutura de sites para receber milhões de usuários?
Como criar infraestrutura de sites para receber milhões de usuários?Como criar infraestrutura de sites para receber milhões de usuários?
Como criar infraestrutura de sites para receber milhões de usuários?Marcelo Dieder
 
Vagrant - ambiente de desenvolvimento virtualizado
Vagrant - ambiente de desenvolvimento virtualizadoVagrant - ambiente de desenvolvimento virtualizado
Vagrant - ambiente de desenvolvimento virtualizadoVinícius Krolow
 
Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2PrinceGuru MS
 
Alta Disponibilidade na Prática utilizando servidores Linux
Alta Disponibilidade na Prática utilizando servidores LinuxAlta Disponibilidade na Prática utilizando servidores Linux
Alta Disponibilidade na Prática utilizando servidores Linuxelliando dias
 
Vagrant uma ferramenta realmente útil e versátil
Vagrant   uma ferramenta realmente útil e versátilVagrant   uma ferramenta realmente útil e versátil
Vagrant uma ferramenta realmente útil e versátilWanderlei Silva do Carmo
 
Tutorial servidor debian linux ocs invetory
Tutorial servidor debian linux ocs invetory Tutorial servidor debian linux ocs invetory
Tutorial servidor debian linux ocs invetory gigadrop
 
Palestra ganeti puppet
Palestra ganeti puppetPalestra ganeti puppet
Palestra ganeti puppetDaniel Sobral
 
Opennebula instalação
Opennebula instalaçãoOpennebula instalação
Opennebula instalaçãoLuís Eduardo
 
Project HA
Project HAProject HA
Project HAKarpv
 
Evitando a fadiga com Laravel Homestead
Evitando a fadiga com Laravel HomesteadEvitando a fadiga com Laravel Homestead
Evitando a fadiga com Laravel HomesteadDanilo Esser
 
Apresentação Openstack - FISL 2013
Apresentação Openstack - FISL 2013Apresentação Openstack - FISL 2013
Apresentação Openstack - FISL 2013Marcelo Dieder
 
From Development to Production: Vagrant and Ansible, por Erika Heidi
From Development to Production: Vagrant and Ansible, por Erika HeidiFrom Development to Production: Vagrant and Ansible, por Erika Heidi
From Development to Production: Vagrant and Ansible, por Erika HeidiiMasters
 

Similaire à Vagrant + Puppet (20)

Consegi 2011: Puppet
Consegi 2011: PuppetConsegi 2011: Puppet
Consegi 2011: Puppet
 
Apt_vagrant_chef_olavo_queiroz
Apt_vagrant_chef_olavo_queirozApt_vagrant_chef_olavo_queiroz
Apt_vagrant_chef_olavo_queiroz
 
Consegi 2011: Ganeti + Puppet
Consegi 2011: Ganeti + PuppetConsegi 2011: Ganeti + Puppet
Consegi 2011: Ganeti + Puppet
 
Construção e provisionamento de ambientes de desenvolvimento virtualizados
Construção e provisionamento de ambientes  de desenvolvimento virtualizadosConstrução e provisionamento de ambientes  de desenvolvimento virtualizados
Construção e provisionamento de ambientes de desenvolvimento virtualizados
 
Como criar infraestrutura de sites para receber milhões de usuários?
Como criar infraestrutura de sites para receber milhões de usuários?Como criar infraestrutura de sites para receber milhões de usuários?
Como criar infraestrutura de sites para receber milhões de usuários?
 
Vagrant - ambiente de desenvolvimento virtualizado
Vagrant - ambiente de desenvolvimento virtualizadoVagrant - ambiente de desenvolvimento virtualizado
Vagrant - ambiente de desenvolvimento virtualizado
 
Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2Phpjedi 090307090434-phpapp01 2
Phpjedi 090307090434-phpapp01 2
 
Gentoo
GentooGentoo
Gentoo
 
Alta Disponibilidade na Prática utilizando servidores Linux
Alta Disponibilidade na Prática utilizando servidores LinuxAlta Disponibilidade na Prática utilizando servidores Linux
Alta Disponibilidade na Prática utilizando servidores Linux
 
Vagrant uma ferramenta realmente útil e versátil
Vagrant   uma ferramenta realmente útil e versátilVagrant   uma ferramenta realmente útil e versátil
Vagrant uma ferramenta realmente útil e versátil
 
Tutorial servidor debian linux ocs invetory
Tutorial servidor debian linux ocs invetory Tutorial servidor debian linux ocs invetory
Tutorial servidor debian linux ocs invetory
 
Palestra ganeti puppet
Palestra ganeti puppetPalestra ganeti puppet
Palestra ganeti puppet
 
Opennebula instalação
Opennebula instalaçãoOpennebula instalação
Opennebula instalação
 
Orquestração com Mcollective
Orquestração com McollectiveOrquestração com Mcollective
Orquestração com Mcollective
 
Project HA
Project HAProject HA
Project HA
 
Igor Oliveira - Puppet
Igor Oliveira - PuppetIgor Oliveira - Puppet
Igor Oliveira - Puppet
 
Evitando a fadiga com Laravel Homestead
Evitando a fadiga com Laravel HomesteadEvitando a fadiga com Laravel Homestead
Evitando a fadiga com Laravel Homestead
 
Apresentação Openstack - FISL 2013
Apresentação Openstack - FISL 2013Apresentação Openstack - FISL 2013
Apresentação Openstack - FISL 2013
 
From Development to Production: Vagrant and Ansible, por Erika Heidi
From Development to Production: Vagrant and Ansible, por Erika HeidiFrom Development to Production: Vagrant and Ansible, por Erika Heidi
From Development to Production: Vagrant and Ansible, por Erika Heidi
 
Automação de Data Center
Automação de Data CenterAutomação de Data Center
Automação de Data Center
 

Vagrant + Puppet

  • 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. 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. 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?
  • 7. O que você precisa instalar? vagrantup.com/downloads.html virtualbox.org/wiki/Downloads
  • 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.
  • 10. Vagrant init & Vagrantfile
  • 12. not created running poweroff Vagrant status saved vagrant up vagrant suspend vagrant up vagrant halt vagrant halt vagrant destroy
  • 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. 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. 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. 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. 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. 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
  • 27. running vagrant snapshot take vagrant up snapshotted dirty vagrant snapshot back deploy test Ciclo de desenvolvimento fast-track
  • 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. 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. Provisionamento via Puppet ● config.vm.provision :puppet ○ Executa na VM o comando ■ puppet apply /vagrant/manifests/default.pp
  • 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. 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. 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. Puppet - Idempotência file 1 file 1 service A file 2 package A file 1 service A file 2 package A
  • 35. Puppet - Recursos pré-definidos ● 54 tipos de recursos ○ exec ○ file ○ group ○ host ○ interface ○ mount ○ package ○ service ○ user ○ … ● Google puppet types
  • 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
  • 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. Como isso tudo se integra ao meu projeto? $ vagrant up $ vagrant snapshot take base $ pense, trabalhe, teste... $ vagrant snapshot back
  • 43. Vagrant + Puppet = ambientes idênticos Produção
  • 44. Exemplo mais “complexo” CDS Demo MySQL OpenLDAP Gerrit JIRA Jenkins TestLink SonarQube JBoss nginx firefox
  • 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. 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