vagrant and chef on fossasia 2014
DESCRIPTION
This presentation gives a short introduction to Vagrant and Chef for automation of configuration management. You will get a first overview of the stack of technology used to set up your own Vagrant Boxes and how they help the to build reliable development environments right on your own local laptop. We will scratch topics like DevOps and Continuous Integration and how they link to Configuration Management and Chef and Vagrant. If you like these slides, make sure to check out http://de.slideshare.net/Sebobo/continuous-delivery-with-open-source-tools as well!TRANSCRIPT
Reproducible and Portable Work
Environments with Vagrant and Chef
About Me• 33 years old, almost married
• From Karlsruhe, Germany
• Studied Computer Science
• Hobbies: guitar, climbing,
cycling, travel, photography
• Works in Phnom Penh for 3 months
• Working with TYPO3
I am NO
Vagrant /
Chef
Guru!!!
Outline
• Motivation
• Introducing Vagrant & Chef
• Vagrant „Hands-On“
• Advanced usage
Motivation
Motivation
• Internal project
• Estimated development time ~2
years
• Approx. 15 developers
• 2-day sprints, every second week
• 4 developers per sprint
MotivationObservations
• Setting up dev environment takes >
1 day–More than ½ of the sprint time!
• Developers spent too much time on
setup
• Always needed physical server for
testing
Solution: Vagrant BoxesProvisioning 2 virtual machines...
• ...each with an extended LAMP
stack*)
• ...with 4 different projects
takes less than 15 minutes
*) including RabbitMQ, Solr, Git, Composer, tons of PHP
modules...
Technological StackVirtualBoxFree open source virtualization tool
ChefAutomation tool for Configuration Management
Vagrant“Remote control” for VirtualBox
Introducing
Vagrant
What is Vagrant?• Building tool for portable work
environments
• Tool for distributing work
environments
• Written in Ruby
• Open Source
• Build upon well-established tools
Vagrant Components
• Vagrant Box
• Vagrantfile
• Provisioners
• Providers
Vagrant Boxes
• Pre-installed base images
• Used as base layer for all further
provisioning
• Many different boxes available
online:
The Vagrantfile• Marks root directory of Vagrant
project
• Describes what Vagrant box to use
• Describes settings of box (e.g.
network)
• Triggers the provisioning of box
(using Chef)
Provisioners
• Configures your Vagrant box by
– Installing packages and software
– Configuration and starting of services
• Multiple provisioners available
• Run once the box is booted
Providers
• Describe in which virtualization
environment to provision your machines
• Multiple providers available
– VirtualBox
– VMWare
– Amazon AWS
Introducing
Chef
What is Chef?
• Configuration Management automation
tool
• Written in Ruby
• „Code your desired system state“
• Put system state into version control
• Relies on a client / server architecture
– Or use chef solo without a server
Chef Architecture
Chef Architecture
Provisionin
g with Chef
Using chef-solo
• mount cookbooks directory into your
box
• run chef-solo in your box
config.vm.synced_folder "./chef", "/var/chef"config.vm.synced_folder "./home", "/var/\ vagrant-home"
config.vm.provision :shell do |s| s.inline = "sudo chef-solo -c /var/chef/\ solo.rb -j /var/vagrant-home/config.json"end
The solo.rb File
• Define some paths:
file_cache_path "/var/chef-cache"cookbook_path ["/var/chef/cookbooks”]data_bag_path "/var/chef/data_bags"role_path "/var/chef/roles"
The config.json File
• Define cookbook runlist:
• Further configuration in config.json
overwrites defaults in cookbooks
{"run_list" : ["recipe[cookbook_name]"]}
node['key1']['key2']
Chef Provisioning Alternatives
• Different ways for Chef provisioning
–Mounting Cookbooks and use chef-solo
– Copy Cookbooks into box and use chef-
solo
– Use Chef client in box and Chef server
Overview
1
2
3
4
“Hands-on”
Provisioning ActivityP
rovis
ion
ing
A
cti
vit
y
Set up Box
Booting Box
Configuration Management
Provision Projects
Vagrant
Vagrant,VirtualBox
Vagrant,Chef
Chef,Git
Set Up Box
1. Install VirtualBox & Vagrant
2. Add a box
3. Create a first Vagrantfilemkdir vagrantcd vagrantvagrant init
vagrant box add box_name http://box_url
Set up & Boot the Box
4. Use the box in your Vagrantfile
5. Boot your machine
6. ssh into your machine
Vagrant.configure("2") do |config|config.vm.box = "box_name"
end
vagrant up
vagrant ssh
Versioning and Distribution• Remember: „Everything should be
put into Version Control!“
• Vagrantfile can easily be put into any
VCS
• Distributing an environment is as
easy asgit clone [email protected]:my/vagrant.gitcd vagrantvagrant up
Daily Vagrant Usage
• Start the box
• Stop the box
• Suspend the box
• Resume the box
vagrant up
Vagrant halt
vagrant suspend
vagrant resume
Advanced
Usage
PROs- Easy to set up- Can have different systems
in a box
CONs- Have multiple Boxes running
at the same time consumes resources
Multiple Boxes for Multiple Projects
Multiple Projects in one Box
PROs- Less ressources required
CONs- No easy way to set up- Longer provisioning time- Bigger boxes
Identical Copy of Server
Vagrant & Chef for CI / CD
• Set up the whole deployment chain
locally
• Use tools like Jenkins inside your
boxes
• Provision the projects on Jenkins with
Chef
DevOps
• Tools like Vagrant and Chef bring
Developers and system operators
closer together
• Learn from each other
• Use each other‘s tools for problem
solving
Summary• Vagrant is a great tool for portable
boxes
• Chef can help you manage your
configuration
• „Infrastructure as Code“
• Same environment on dev and live
system
• DevOps brings devs and admins
together