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!
2. 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
6. Motivation
• Internal project
• Estimated development time ~2 years
• Approx. 15 developers
• 2-day sprints, every second week
• 4 developers per sprint
7. Motivation
Observations
• 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
8. Solution: Vagrant Boxes
Provisioning 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...
11. What is Vagrant?
• Building tool for portable work environments
• Tool for distributing work environments
• Written in Ruby
• Open Source
• Build upon well-established tools
13. Vagrant Boxes
• Pre-installed base images
• Used as base layer for all further provisioning
• Many different boxes available online:
14. 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)
15. Provisioners
• Configures your Vagrant box by
– Installing packages and software
– Configuration and starting of services
• Multiple provisioners available
• Run once the box is booted
16. Providers
• Describe in which virtualization environment
to provision your machines
• Multiple providers available
– VirtualBox
– VMWare
– Amazon AWS
17.
18. 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
22. Using chef-solo
• mount cookbooks directory into your box
config.vm.synced_folder "./chef", "/var/chef"
config.vm.synced_folder "./home", "/var/
vagrant-home"
• run chef-solo in your box
config.vm.provision :shell do |s|
s.inline = "sudo chef-solo -c /var/chef/
solo.rb -j /var/vagrant-home/config.json"
end
23. 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"
24. The config.json File
• Define cookbook runlist:
{"run_list" : ["recipe[cookbook_name]"]}
• Further configuration in config.json
overwrites defaults in cookbooks
node['key1']['key2']
25. 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
29. Set Up Box
1. Install VirtualBox & Vagrant
2. Add a box
vagrant box add box_name http://box_url
1. Create a first Vagrantfile
mkdir vagrant
cd vagrant
vagrant init
30. Set up & Boot the Box
4. Use the box in your Vagrantfile
Vagrant.configure("2") do |config|
config.vm.box = "box_name"
end
5. Boot your machine
vagrant up
6. ssh into your machine
vagrant ssh
31. 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 as
git clone git@github.com:my/vagrant.git
cd vagrant
vagrant up
32. Daily Vagrant Usage
• Start the box
vagrant up
• Stop the box
Vagrant halt
• Suspend the box
vagrant suspend
• Resume the box
vagrant resume
33.
34. Multiple Boxes for Multiple Projects
PROs
- Easy to set up
- Can have different systems in a box
Vagrant Box
Project 1
Vagrant Box
Project 2
CONs
- Have multiple Boxes running at the
same time consumes resources
Vagrant Box
Project 3
35. Multiple Projects in one Box
PROs
- Less ressources required
Vagrant Box
Project 1
Project 2
Project 3
CONs
- No easy way to set up
- Longer provisioning time
- Bigger boxes
36. Identical Copy of Server
server is provisioned
using Chef Client
Chef Client
Chef Server
Chef Cookbooks
mounted/copied into
OR taken from chef server
provisioned
using same cookboks
Identical Copy of Server
as Vagrant Box
37. 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
38. 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
39.
40.
41. 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