John Coggeshall 
@coogle 
http://www.coggeshall.org/
 A bit about me 
 Involved with PHP since 
1996 
 Author of tidy extension 
 Published Author of 
many PHP texts
 Virtualization for you, the developer 
 Creating fully encapsulated development environments 
▪ Fully Version Controlled 
 Available locally using free tools or deploy to EC2 as 
necessary 
 The technologies we are going to discuss 
 Vagrant – Bootstrap virtual machines, manage box 
settings, etc. 
 VirtualBox – Provides the actual VM environment for 
machine 
 Puppet – Provisions box, installs and manages various 
software, code, etc. (also supports others such as Chef, 
shell scripts, etc.)
 There are a lot of reasons to use VMs for 
development 
 Keep your host machine clean / easily recover from 
corruption 
 Keep separate projects from stepping on each other 
 Super easy developer on-boarding 
 There are even more reasons to use Vagrant & 
Puppet 
 Much easier management of the stack, versions, etc. 
 Allows seamless deployment to various environments 
for testing
 To get started, you’re going to need to 
download two pieces of software 
 Vagrant - http://www.vagrantup.com/ 
 VirtualBox - https://www.virtualbox.org/ 
 There are builds available for all major 
platforms
 Step 1: Download the tools 
 Step 2: Define your VM parameters 
 Step 3: Build your puppet manifests 
 Step 4: Prosper
 Every repository should have a Vagrantfile in the root 
directory that defines the VM itself 
 Ruby based, but no Ruby knowledge required 
 Defines a few key aspects of your initial VM 
configuration 
 Base VM type used (various available) 
 Network configuration for VM in relation to host machine 
 Provisioning tooling used (i.e. puppet) 
 VM resource limits (memory, etc) 
 Different configurations can be defined for different 
environments, and propagated throughout the 
process
 Once the VM has been defined vagrant can 
boot it up as a headless VM (no display) using 
VirtualBox automatically and configure it as 
necessary 
 Once booted, it can then provision the box by 
installing software packages, shared paths 
with hosts, etc. as necessary through the use 
of provisioning tools like puppet 
 Next step is defining your puppet manifests
 With everything defined, one command takes 
care of it all! 
 Downloads the VirtualBox image if necessary 
(precise64) 
 Boots the VM with the defined parameters (memory, 
network, etc) 
 Sets of shared folders, copies puppet manifests as 
necessary and executes puppet to run those manifests
 vagrant up – Brings up the virtual machine 
 vagrant halt – Halts the VM (poweroff) 
 vagrant destroy – Destroys the VM entirely 
 vagrant provision – Run puppet provisioning 
again 
 vagrant ssh – automagically log into the VM 
via SSH
 Primarily Vagrant is used to build local VMs for 
development 
 But Vagrant can also be used to deploy to other 
environments, such as AWS through the use of 
Vagrant plug-ins 
 First, install the Vagrant AWS provider plug-in:
 Next, you will need to add a new 
environment to your Vagrantfile to setup the 
necessary configuration values for AWS such 
as Key/Secret, AMI type, etc. 
 Note: To do provisioning using puppet, you 
may need to bootstrap the AMI on boot to 
install the puppet tooling 
 To boot, simply add the --provider option to 
vagrant up
 A single Vagrantfile can define multiple VMs 
(multi-machine environments) useful for all 
sorts of things: 
 A web server and database server 
 API client and server 
 Etc. 
 Vagrant can do more than just VirtualBox as 
well, through providers can also provide 
VMWareVMs, etc.
 Vagrantfile configuration files can be created 
at various levels, and will be merged together 
to define/override settings 
 Box itself (precise64) 
 Home directory (~/.vagrant.d) 
 Project directory
 Thank you for coming! 
 Questions? 
 Further Reading: 
 http://docs.vagrantup.com/v2/ 
 http://puppetlabs.com/ 
 http://www.github.com/coogle/skeleton 
 https://joind.in/12070

Virtualization for Developers

  • 1.
    John Coggeshall @coogle http://www.coggeshall.org/
  • 2.
     A bitabout me  Involved with PHP since 1996  Author of tidy extension  Published Author of many PHP texts
  • 3.
     Virtualization foryou, the developer  Creating fully encapsulated development environments ▪ Fully Version Controlled  Available locally using free tools or deploy to EC2 as necessary  The technologies we are going to discuss  Vagrant – Bootstrap virtual machines, manage box settings, etc.  VirtualBox – Provides the actual VM environment for machine  Puppet – Provisions box, installs and manages various software, code, etc. (also supports others such as Chef, shell scripts, etc.)
  • 5.
     There area lot of reasons to use VMs for development  Keep your host machine clean / easily recover from corruption  Keep separate projects from stepping on each other  Super easy developer on-boarding  There are even more reasons to use Vagrant & Puppet  Much easier management of the stack, versions, etc.  Allows seamless deployment to various environments for testing
  • 6.
     To getstarted, you’re going to need to download two pieces of software  Vagrant - http://www.vagrantup.com/  VirtualBox - https://www.virtualbox.org/  There are builds available for all major platforms
  • 7.
     Step 1:Download the tools  Step 2: Define your VM parameters  Step 3: Build your puppet manifests  Step 4: Prosper
  • 8.
     Every repositoryshould have a Vagrantfile in the root directory that defines the VM itself  Ruby based, but no Ruby knowledge required  Defines a few key aspects of your initial VM configuration  Base VM type used (various available)  Network configuration for VM in relation to host machine  Provisioning tooling used (i.e. puppet)  VM resource limits (memory, etc)  Different configurations can be defined for different environments, and propagated throughout the process
  • 9.
     Once theVM has been defined vagrant can boot it up as a headless VM (no display) using VirtualBox automatically and configure it as necessary  Once booted, it can then provision the box by installing software packages, shared paths with hosts, etc. as necessary through the use of provisioning tools like puppet  Next step is defining your puppet manifests
  • 10.
     With everythingdefined, one command takes care of it all!  Downloads the VirtualBox image if necessary (precise64)  Boots the VM with the defined parameters (memory, network, etc)  Sets of shared folders, copies puppet manifests as necessary and executes puppet to run those manifests
  • 11.
     vagrant up– Brings up the virtual machine  vagrant halt – Halts the VM (poweroff)  vagrant destroy – Destroys the VM entirely  vagrant provision – Run puppet provisioning again  vagrant ssh – automagically log into the VM via SSH
  • 12.
     Primarily Vagrantis used to build local VMs for development  But Vagrant can also be used to deploy to other environments, such as AWS through the use of Vagrant plug-ins  First, install the Vagrant AWS provider plug-in:
  • 13.
     Next, youwill need to add a new environment to your Vagrantfile to setup the necessary configuration values for AWS such as Key/Secret, AMI type, etc.  Note: To do provisioning using puppet, you may need to bootstrap the AMI on boot to install the puppet tooling  To boot, simply add the --provider option to vagrant up
  • 14.
     A singleVagrantfile can define multiple VMs (multi-machine environments) useful for all sorts of things:  A web server and database server  API client and server  Etc.  Vagrant can do more than just VirtualBox as well, through providers can also provide VMWareVMs, etc.
  • 15.
     Vagrantfile configurationfiles can be created at various levels, and will be merged together to define/override settings  Box itself (precise64)  Home directory (~/.vagrant.d)  Project directory
  • 16.
     Thank youfor coming!  Questions?  Further Reading:  http://docs.vagrantup.com/v2/  http://puppetlabs.com/  http://www.github.com/coogle/skeleton  https://joind.in/12070