The document discusses using Vagrant and Puppet to create virtual machine environments for development. Vagrant allows defining and provisioning VMs through a Vagrantfile, while Puppet can further configure the VMs by installing software and configuring settings. Benefits include keeping development environments isolated, easy setup for new developers, and ability to deploy VMs to cloud providers like AWS. The key steps are downloading Vagrant and VirtualBox, defining the Vagrantfile, writing Puppet manifests, and running vagrant up to launch and provision the VM.
2. A bit about me
Involved with PHP since
1996
Author of tidy extension
Published Author of
many PHP texts
3. 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.)
4.
5. 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
6. 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
7. Step 1: Download the tools
Step 2: Define your VM parameters
Step 3: Build your puppet manifests
Step 4: Prosper
8. 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
9. 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
10. 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
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 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:
13. 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
14. 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.
15. 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
16. 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