Vagrant
Team development made easy
Me
Technical Leader @Centralway


Before?
Intraneia
   ● Open-Source, Ubuntu
Deloitte
   ● IT Audits, Security & Privacy
How do we develop..
Local development environment

 MySQL Apache2 Python PEAR RVM
  npm nginx PostgreSQL PHP Ruby
          RoR MongoDB ....


              ???
Local development environment
No Isolation
Not Shareable
Not Repeatable
Alternative?
Virtual Machines
Vagrant
Free and open source

Started on January 21, 2010 by Mitchell
Hashimoto and John Bender.

The first release, 0.1.0 released on March 7,
2010.

Linux, Mac OS X, and Windows
Vision



 The vision of the project is to create a tool to
transparently manage all the complex parts of
     modern development within a virtual
  environment without affecting the everyday
     workflow of the developer too much.
Vagrant
~12000 lines of Ruby
~3500 : test code
~5500 : "plugins"
~3300 : core



          Thats a lot of code!!!
Script must...
Import a virtual machine
setup host only networking
setup shared folders
boots the machine
provision the machine
support Mac, Linux, and Windows
guest additions
NFS
and how do we use it?
the basic way
#Fetch the Box
$ vagrant box add base http://files.vagrantup.com/precise32.box

#Init Vagrant on your current folder
$ vagrant init

#Start it!!
$ vagrant up
with various projects...
Vagrantfile
Vagrant::Config.run do |config|
  config.vm.box = "debian"
  config.vm.box_url = "http://path/to/vagrantbox.box"

  config.vm.network :hostonly, "10.10.10.10", :adapter=>4
  config.vm.customize ["modifyvm", :id, "--memory", "512"]
end
Vagrantfile
Vagrant::Config.run do |config|
  config.vm.box = "debian"
  config.vm.box_url = "http://path/to/vagrantbox.box"

  config.vm.network :hostonly, "10.10.10.10", :adapter=>4
  config.vm.customize ["modifyvm", :id, "--memory", "512"]

  config.vm.provision :puppet do |puppet|
   puppet.manifests_path = "vagrant/puppet/manifests"
   puppet.manifest_file = "base.pp"
  end

 config.vm.provision :shell, :inline => "/bin/bash /vagrant/myscript.sh"
end
Vagrantfile
Vagrant::Config.run do |config|
  config.vm.box = "debian"
  config.vm.box_url = "http://path/to/vagrantbox.box"

  config.vm.network :hostonly, "10.10.10.10", :adapter=>4
  config.vm.customize ["modifyvm", :id, "--memory", "512"]

  config.vm.provision :puppet do |puppet|
   puppet.manifests_path = "vagrant/puppet/manifests"
   puppet.manifest_file = "base.pp"
  end

 config.vm.provision :shell, :inline => "/bin/bash /vagrant/myscript.sh"
end
Demo time....
important vagrant commands
vagrant up

vagrant provision

vagrant suspend

vagrant halt

vagrant destroy
tips
shared folders vs NFS

golden box vs clean box

similar environments -> helps deployments

Multi-VM Environments
      http://vagrantup.com/v1/docs/multivm.html
tips
veewee
  ● github.com/jedi4ever/veewee

puppet / chef
Thank You



vagrantup.com
vagrantbox.es
github.com/igama/wp-vagrant-demo

Vagrant - Team Development made easy