Agenda
• Introduction to Vagrant
• Introduction to puppet
• Hands on
5
Slide 6
Slide 6 text
Goals
• Understand Vagrant and Puppet
• Setup a dev environment
6
Slide 7
Slide 7 text
http://www.vagrantup.com/
7
Slide 8
Slide 8 text
va•grant (ˈveɪ grənt)
Noun:
!
a person without a settled home or regular work
who wanders from place to place and lives by begging
8
Slide 9
Slide 9 text
• Manage virtual machines (such as Virtual Box, VMware,
AWS, and others)
• Define the configuration in code with a single file
• Provision the VM with Shell scripts, Puppet, Ansible, Chef
and other tools
9
What is Vagrant?
Slide 10
Slide 10 text
10
example of
a Vagrantfile
Slide 11
Slide 11 text
11
# /path/to/Vagrantfile
!
Vagrant.configure("2") do |config|
!
# define base box
config.vm.box = "precise64"
config.vm.box_url = "http://files.vagrantup.com/precise64.box"
!
# port forwarding
config.vm.network :forwarded_port, guest: 80, host: 8080
!
# setup a private network with a static IP Address
config.vm.network :private_network, ip: "10.5.0.2"
!
# sharing folders
config.vm.synced_folder ".", "/vagrant"
!
end
Slide 12
Slide 12 text
12
$ cd /path/to/my/project
!
$ vagrant up
!
$ vagrant ssh
Running it
Slide 13
Slide 13 text
Workflow of vagrant up
Vagrantfile
Provision
manifest
has provisioning
manifest
and it’s first time?
yes
start provisioning the VM
VM is running
vagrant up
downloads the box if needed,
loads the vagrant configuration
(share folders, port forwarding, etc)
and starts the VM
13
Classes
• Named blocks
• Defining a class does not evaluate the code
• Declaring evaluates the code (include)
30
Modules
• module name == folder name
• specific folder structure
Slide 31
Slide 31 text
Class example
class my_class {
notify {"This actually did something":}
}
!
include my_class
31
Slide 32
Slide 32 text
Ordering & chaining
• No loading order
• before and require
• notify and subscribe
• arrow chaining ( -> to require and ~> to notify)
32
What are we going to build?
!
• Provider: Virtual box 4.3
• OS: Ubuntu 12.04 x64
!
• PHP 5.4
• Apache 2.2
• MySQL 5.5
42
Slide 43
Slide 43 text
let’s get started
43
Slide 44
Slide 44 text
Distributing and sharing
• Use (D)VCS (Git, SVN, Mercurial, etc.)
!
• Add the Vagrantfile and provisioning files (puppet, chef,
shell scripts, etc) to your repository
!
• Add .vagrant folder to your repository ignore file or your
global ignore file.
44
Slide 45
Slide 45 text
Tips and Tricks
• When working in multiple projects use port forwarding and
networks carefully
• Avoid port collision by adding auto_correct: true for each
port forwarding
• Use --debug on your provision options when something is
wrong
• Have guest additions always up to date
• Improve share folders performance by enabling nfs (is not
available on windows)
• If you are using Puppet modules, don't forget to add the
module dependencies as well
45
Slide 46
Slide 46 text
Librarian Puppet
• Helps manage the modules
• https://github.com/rodjek/librarian-puppet
46
Slide 47
Slide 47 text
PuPHPet
A simple GUI to set up virtual
machines for PHP Web
development.
47
https://puphpet.com/
https://github.com/puphpet/puphpet