vagrant + puppet

Download Vagrant + Puppet

Post on 08-May-2015

6.475 views

Category:

Technology

6 download

Embed Size (px)

DESCRIPTION

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

TRANSCRIPT

  • 1.Junho/2014

2. Gustavo Chaves about.me/gnustavo 3. Como o seu ambiente pessoal de testes? Servidor compartilhado, sua mquina ou VM? O setup automtico? Existe, pelo menos, um procedimento? Quanto demora? O ambiente padronizado? Quanto? Sistema Operacional (Linux, Windows, Mac?) Plataforma (Java, Python, Ruby, Perl?) Servidor de Aplicao (JBoss, Tomcat, Jetty, php-fpm?) Banco de Dados (H2, MySQL, PostgreSQL, Oracle?) eu perguntei das verses? 4. Como voc usa o seu ambiente de testes? Como copiar os artefatos entre os ambientes? scp, rsync, wget, JRebel, ? Quo confortvel trabalhar no ambiente de testes? Tem que usar vi pra editar os arquivos? :-) D pra fazer rollback pra recomear os testes? 5. E a gesto de configurao? O seu ambiente igual ao de produo? Mas na minha mquina funciona... O ambiente nico para todos os projetos? E para os projetos antigos? 6. http://vagrantup.com Vagrant 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 bsica de uma VM que ser gerenciada pelo Vagrant. Cada box especfico para um provider. VirtualBox, VMWare, Hyper-V, AWS, Docker, ... Um box pode conter qualquer sistema operacional. Use e boxes pblicos do VagrantCloud.com e publique seus prprios boxes. 9. Vagrant Command Line Interface 10. Vagrant init & Vagrantfile 11. Vagrant status 12. not created running poweroff Vagrant status saved vagrant up vagrant suspend vagrant up vagrant halt vagrant halt vagrant destroy 13. Vagrant up 14. Vagrant ssh 15. Vagrant suspend 16. Vagrant halt 17. Vagrant destroy 18. Synchronized folders Por default o diretrio do host onde fica o Vagrantfile montado na VM em /vagrant. til para acelerar o ciclo de testes das aplicaes, pois o diretrio do projeto visvel pela VM. config.vm.synced_folder "www/", "/website" Monta o diretrio 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 no o contrrio. Host VM 20. Network port forwarding Host VM 80: 8080: Remote config.vm.network :forwarded_port, guest: 80, host: 8080 Permite acesso da rede fsica porta 80 da VM atravs 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 fsica. 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 mltiplas 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 24. Vagrant snapshot 25. Vagrant snapshot 26. Vagrant snapshot 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 vrios mecanismos de provisionamento: Shell scripts, Puppet, Chef, Ansible, CFengine, Salt, Docker O provisionamento ocorre implicitamente ao final do processo de criao 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 relaes. Voc diz como sua infraestrutura e no 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 mltiplas 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 - Idempotncia 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 - mdulos compartilhados https://forge.puppetlabs.com/ + 2.300 mdulos, e.g.: puppetlabs/stdlib puppetlabs/apache puppetlabs/mysql puppetlabs/postgresql puppetlabs/ntp jfryman/nginx maestrodev/wget thias/php example42/jboss Um mdulo define novos recursos parametrizados 37. Demo: Vagrantfile 38. Demo: manifests/default.pp 39. Demo: manifests/apache2-virtualhost.conf 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 42. Ambientes diferentes!?! Produo 43. Vagrant + Puppet = ambientes idnticos Produo 44. Exemplo mais complexo CDS Demo MySQL OpenLDAP Gerrit JIRA Jenkins TestLink SonarQube JBoss nginx firefox 45. Mdulos tipo Componente CPqD Developer Suite Puppetizado mysql nginx jenkins jira sonarqube nexus testlink gerrit Mdulos tipo Profile cds::jenkins cds::jira cds::nexus cds::sonar cds::testlink cds::gerrit ldap jboss Configurao 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 Apresentao na RubyConf 2013 Usando Vagrant como ambiente de desenvolvimento Ruby go.cpqd.com.br/vagrant-pt 47. www.cpqd.com.br Gustavo Chaves gustavo@cpqd.com.br (19) 3705 7003 Obrigado!