Slide 1

Slide 1 text

Virtuelle Entwicklungsumgebungen mit Vagrant Markus Zapke-Gründemann PyCon DE 2012

Slide 2

Slide 2 text

Übersicht • Vorstellung • Was ist Vagrant? • Warum Vagrant? • Installation • Anwendung • Weiterentwicklung

Slide 3

Slide 3 text

Markus Zapke-Gründemann • Softwareentwickler seit 2001 • Softwareentwicklung mit Python, Django und Mercurial • Selbstständig seit 2008 • Seit 2011 Geschäftsführer bei Inqbus

Slide 4

Slide 4 text

Was ist Vagrant?

Slide 5

Slide 5 text

Vagrant • Verwaltung von Virtuellen Maschinen • Basiert auf VirtualBox • Geschrieben in Ruby Visit me at vagrantup.com

Slide 6

Slide 6 text

Warum Vagrant? • Zu viele Programmiersprachen, Bibliotheken, Datenbanken, Message Queues, Frameworks, … • Unterschiedliche Versionen oft schwer kombinierbar • Arbeit und Zeit sparen - Wissen anderer nutzen

Slide 7

Slide 7 text

Vagrant installieren 1. VirtualBox installieren 2. Vagrant Pakete für OS X, Windows, Debian, RedHat und Arch Linux verfügbar oder $ gem install vagrant

Slide 8

Slide 8 text

Vagrant nutzen I

Slide 9

Slide 9 text

Vagrant nutzen I $ vagrant box add lucid32 http://files.vagrantup.com/lucid32.box

Slide 10

Slide 10 text

Vagrant nutzen I $ vagrant box add lucid32 http://files.vagrantup.com/lucid32.box $ vagrant init lucid32

Slide 11

Slide 11 text

Vagrant nutzen I $ vagrant box add lucid32 http://files.vagrantup.com/lucid32.box $ vagrant init lucid32 $ vagrant up

Slide 12

Slide 12 text

Vagrant nutzen I $ vagrant box add lucid32 http://files.vagrantup.com/lucid32.box $ vagrant init lucid32 $ vagrant up $ ls -A .vagrant Vagrantfile

Slide 13

Slide 13 text

Vagrantfile I $ cat Vagrantfile Vagrant::Config.run do |config| config.vm.box = "lucid32" end

Slide 14

Slide 14 text

Vagrantfile II $ cat Vagrantfile Vagrant::Config.run do |config| config.vm.box = "lucid32" # Port forwarding for Django config.vm.forward_port 8000, 8000 end

Slide 15

Slide 15 text

Vagrant nutzen II

Slide 16

Slide 16 text

Vagrant nutzen II $ vagrant ssh

Slide 17

Slide 17 text

Vagrant nutzen II $ vagrant ssh vagrant@vagrant-lucid32:~$ ls -A /vagrant .vagrant Vagrantfile

Slide 18

Slide 18 text

Vagrant nutzen II $ vagrant ssh vagrant@vagrant-lucid32:~$ ls -A /vagrant .vagrant Vagrantfile vagrant@vagrant-lucid32:~$ logout

Slide 19

Slide 19 text

Vagrant nutzen II $ vagrant ssh vagrant@vagrant-lucid32:~$ ls -A /vagrant .vagrant Vagrantfile vagrant@vagrant-lucid32:~$ logout $ vagrant halt

Slide 20

Slide 20 text

Vagrant nutzen II $ vagrant ssh vagrant@vagrant-lucid32:~$ ls -A /vagrant .vagrant Vagrantfile vagrant@vagrant-lucid32:~$ logout $ vagrant halt $ vagrant destroy

Slide 21

Slide 21 text

Vagrant Box

Slide 22

Slide 22 text

Vagrant Box $ vagrant box list lucid32

Slide 23

Slide 23 text

Vagrant Box $ vagrant box list lucid32 $ ls ~/.vagrant.d/boxes lucid32

Slide 24

Slide 24 text

Vagrant Box $ vagrant box list lucid32 $ ls ~/.vagrant.d/boxes lucid32 $ ls ~/.vagrant.d/boxes/lucid32 Vagrantfile box-disk1.vmdk box.ovf

Slide 25

Slide 25 text

Vagrant Box $ vagrant box list lucid32 $ ls ~/.vagrant.d/boxes lucid32 $ ls ~/.vagrant.d/boxes/lucid32 Vagrantfile box-disk1.vmdk box.ovf $ vagrant box remove lucid32

Slide 26

Slide 26 text

Provisioning • Chef Solo • Chef Server • Puppet Standalone • Puppet Server • Shell

Slide 27

Slide 27 text

Provisioning: Puppet I $ cat Vagrantfile Vagrant::Config.run do |config| config.vm.box = "lucid32" config.vm.provision :puppet end

Slide 28

Slide 28 text

Provisioning: Puppet II $ cat manifests/default.pp group { 'puppet': ensure => present, } class basic_setup { exec { 'apt-get update': command => '/usr/bin/apt-get update' } package { 'vim': ensure => present, } package { 'sqlite3': ensure => present, } } include basic_setup

Slide 29

Slide 29 text

Provisioning: Chef I $ cat Vagrantfile Vagrant::Config.run do |config| config.vm.box = "lucid32" config.vm.provision :chef_solo do |chef| chef.cookbooks_path = "cookbooks" chef.add_recipe "basesetup" end end

Slide 30

Slide 30 text

Provisioning: Chef II $ cat cookbooks/basesetup/recipes/default.rb execute "apt-get-update" do command "apt-get update" ignore_failure true end %w(vim sqlite3).each do |pkg| package(pkg) do action :install end end

Slide 31

Slide 31 text

Woher eine Box bekommen? www.vagrantbox.es

Slide 32

Slide 32 text

Eigene Box mit VeeWee erstellen I • VeeWee: https://github.com/jedi4ever/veewee • Box erstellen für • Vagrant • VMWare • KVM $ gem install veewee

Slide 33

Slide 33 text

Eigene Box mit VeeWee erstellen II

Slide 34

Slide 34 text

Eigene Box mit VeeWee erstellen II $ vagrant basebox templates|grep debian vagrant basebox define '' 'Debian-6.0.1a-amd64-netboot' vagrant basebox define '' 'Debian-6.0.1a-i386-netboot'

Slide 35

Slide 35 text

Eigene Box mit VeeWee erstellen II $ vagrant basebox templates|grep debian vagrant basebox define '' 'Debian-6.0.1a-amd64-netboot' vagrant basebox define '' 'Debian-6.0.1a-i386-netboot' $ vagrant basebox define 'debian-60' 'Debian-6.0.1a-amd64-netboot'

Slide 36

Slide 36 text

Eigene Box mit VeeWee erstellen II $ vagrant basebox templates|grep debian vagrant basebox define '' 'Debian-6.0.1a-amd64-netboot' vagrant basebox define '' 'Debian-6.0.1a-i386-netboot' $ vagrant basebox define 'debian-60' 'Debian-6.0.1a-amd64-netboot' $ ls definitions/debian-60 definition.rb postinstall.sh preseed.cfg

Slide 37

Slide 37 text

Eigene Box mit VeeWee erstellen II $ vagrant basebox templates|grep debian vagrant basebox define '' 'Debian-6.0.1a-amd64-netboot' vagrant basebox define '' 'Debian-6.0.1a-i386-netboot' $ vagrant basebox define 'debian-60' 'Debian-6.0.1a-amd64-netboot' $ ls definitions/debian-60 definition.rb postinstall.sh preseed.cfg $ vagrant basebox build 'debian-60'

Slide 38

Slide 38 text

Eigene Box mit VeeWee erstellen II $ vagrant basebox templates|grep debian vagrant basebox define '' 'Debian-6.0.1a-amd64-netboot' vagrant basebox define '' 'Debian-6.0.1a-i386-netboot' $ vagrant basebox define 'debian-60' 'Debian-6.0.1a-amd64-netboot' $ ls definitions/debian-60 definition.rb postinstall.sh preseed.cfg $ vagrant basebox build 'debian-60' $ vagrant basebox validate 'debian-60'

Slide 39

Slide 39 text

Eigene Box mit VeeWee erstellen II $ vagrant basebox templates|grep debian vagrant basebox define '' 'Debian-6.0.1a-amd64-netboot' vagrant basebox define '' 'Debian-6.0.1a-i386-netboot' $ vagrant basebox define 'debian-60' 'Debian-6.0.1a-amd64-netboot' $ ls definitions/debian-60 definition.rb postinstall.sh preseed.cfg $ vagrant basebox build 'debian-60' $ vagrant basebox validate 'debian-60' $ vagrant basebox export 'debian-60'

Slide 40

Slide 40 text

Eigene Box mit VeeWee erstellen II $ vagrant basebox templates|grep debian vagrant basebox define '' 'Debian-6.0.1a-amd64-netboot' vagrant basebox define '' 'Debian-6.0.1a-i386-netboot' $ vagrant basebox define 'debian-60' 'Debian-6.0.1a-amd64-netboot' $ ls definitions/debian-60 definition.rb postinstall.sh preseed.cfg $ vagrant basebox build 'debian-60' $ vagrant basebox validate 'debian-60' $ vagrant basebox export 'debian-60' $ vagrant box add 'debian-60' debian-60.box

Slide 41

Slide 41 text

Eigene Box mit VeeWee erstellen II $ vagrant basebox templates|grep debian vagrant basebox define '' 'Debian-6.0.1a-amd64-netboot' vagrant basebox define '' 'Debian-6.0.1a-i386-netboot' $ vagrant basebox define 'debian-60' 'Debian-6.0.1a-amd64-netboot' $ ls definitions/debian-60 definition.rb postinstall.sh preseed.cfg $ vagrant basebox build 'debian-60' $ vagrant basebox validate 'debian-60' $ vagrant basebox export 'debian-60' $ vagrant box add 'debian-60' debian-60.box $ vagrant init debian-60

Slide 42

Slide 42 text

branch machine-abstraction Merge mit master am 19.8.2012: Möglichkeit Plugins für neue „Provider“ zu schreiben. https://github.com/mitchellh/vagrant/commit/ 391dc392675c73518ebf04252d824fe916e8860b

Slide 43

Slide 43 text

Danksagung • Mitchell Hashimoto // @mitchellh für Vagrant • Mathias Lafeldt // @mlafeldt für die Chef Beispiele

Slide 44

Slide 44 text

Fragen? www.inqbus.de www.keimlink.de @keimlink