Vagrant facilitates the creation and configuration of lightweight, reproducible, and portable development environments.
It is currently in use at companies like Disqus, BBC, Mozilla, Nokia, and O'Reilly Media. More information about Vagrant is available at: http://www.vagrantup.com/
Links:
Boxes: https://github.com/opscode/bento
Cookbooks: http://community.opscode.com/
LAMP demo: https://github.com/bocribbz/cookbook-lampdemo
2. Bob Cribbs
Software developer.
Focused mainly on Python, junior on Ruby and
getting started with mobile.
bocribbz
bocribbz
bocribbz
bocribbz
bocribbz
bocribbz.com
4. You’re hired. Get the project up and running
on your new machine.
newguy$ git clone git://path-to-code-repo/super_project.git
Cloning into super_project
newguy$ cd super_project
newguy$ ...
newguy$ ./start.sh
Server listening on 127.0.0.1
5. We have a setup script!
newguy$ ./setup.sh
Installing software.
Installing dependencies.
Configuring.
Success!
6. We have a setup script!
● multiple ecosystems Win/Linux/MacOS
● multiple package managers yum, apt, homebrew, macports
● its likely some configuration will be done
differently
● its likely it will diverge from the production
environment
7. We have a README!
It gives precise instructions about what should
be installed and how it should be configured.
For a mature project, the README file ends up
being a few screens long.
8. We have a README!
● multiple ecosystems Win/Linux/MacOS
● very high chances something will be
misconfigured
● unlikely to be maintained, (most) developers
don’t write English
● time consuming
9. I’m sure you can do it!
newguy$ start.sh
Failed to connect to MySql at localhost:3333
newguy$ install mysql
newguy$ start.sh
Failed to connect to Redis at localhost:3334
newguy$ install redis
newguy$ start.sh
Missing ImageMagick extensions.
newguy$ install imagemagick
newguy$ start.sh
Server listening on 127.0.0.1
13. Vagrant
Its a tool for creating, managing and distributing
portable development environments.
Zero to VM in seconds
$ vagrant init precise32
http://files.vagrantup.com/precise32.box
...
$ vagrant up
...
$ vagrant ssh
vagrant@precisebox32:~$ echo hello
hello
14. Problems solved
Repeatable
you can do the exact same thing when needed
Verifiably correct
you should have automation to check this
Isolated
its in a virtual machine (Vbox, VMWare, etc.)
Understandable
You can read it to understand
Fast(er)
It still takes some time, but it is much faster
16. Boxes
Snapshots / base operating system images.
Initial state of the VM.
Operating system (Ubuntu 12.04, CentOS 5.9,
etc.)
Can be packaged and shared.
eg. https://github.com/opscode/bento
17. Some Terms
Boxes
templates for creating a machine, preinstalled OS
Vagrantfile
configuration read by vagrant to create your machine
18. Vagrantfile samples
Vagrant.configure("2") do |config|
config.vm.box = "precise32"
end
Vagrant.configure("2") do |config|
config.vm.box = "precise32"
config.vm.provision "shell"
inline "apt-get update"
config.vm.provision "shell"
inline "apt-get install apache2"
end
19. Some Terms
Boxes
templates for creating a machine, preinstalled OS
Vagrantfile
configuration read by vagrant to create your machine
"vagrant" command
manages life cycle of the environment
20. "vagrant" command
vagrant init
Create a Vagrantfile in the current directory
vagrant up
Boot the VM
vagrant halt
Shutdown the VM
vagrant destroy
Delete the virtual machine
vagrant ssh
SSH into the VM
21. You’re hired. Get the project up and running
on your new machine.
newguy$ git clone git://path-to-code-repo/super_project.git
Cloning into super_project
newguy$ cd super_project
newguy$ vagrant up
22. Overview
1. Project specific configuration file
2. Import base box
3. Boot up virtual machine
a. Synced folders
b. Networking
4. Configure / provision software
23. Synced Folders
Automatically sync files from host to guest so
you can use your prefered editor on the host.
VirtualBox shared folders
VMWare shared folder
rsync (for AWS)
etc...
25. Networking
Configure how you will communicate with the VM or how
multiple VMs communicate with each other.
You can still use your prefered browser or tools to
communicate with the guest servers.
NAT: usually for port forwarding
Host-Only: private network
Bridge: act like a new device on the router/network
27. Provisioning
You can use shell scripts, Puppet or Chef to
install and configure software.
Berkshelf
Create and manage cookbooks that install and
configure software dependencies.
Chef
Automation platform and nodes manager.
Transforms infrastructure into code.