Automate your
Development
Environment
withVagrant & Chef
Michael Lihs
@kaktusmimi
CHANGEOVERTIME
“How long does it take you
to set up a new XYZ project?”
COLLABORATION
How do you share projects with colleagues?
YOU BUILD IT –YOU RUN IT!
“But it worked on my machine!”
How canVagrant help you?
• Set up ANY projects in minutes
• Have it “to go”
• Share it with others
• Have a “copy” of your production server
Technology Stack
VirtualBox
Free Open SourceVirtualizationTool
Chef
Configuration Management
Framework
Vagrant
“Remote Control” forVirtualBox
What isVagrant?
• Building tool for portable dev 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
• Basically a “tweaked” virtual machine Image
• Used as base layer for all further provisioning
• Many pre-installed boxes available online:
$ vagrant box add {title} {url}
$ vagrant init {title}
$ vagrant up
Provisioners
• „Where the magic happens“
– Installing packages and software
– Configuration and starting of services
– E.g. creating vhost, database, ...
• Run once the box is booted inVirtualBox
What is Chef?
• Configuration Management automation tool
• Written in Ruby
– Provides easy-to-learn (?) DSL
• „Infrastructure as code“
– Use versioning
– Use tests, Continuous Integration & Delivery
ChefTools
• Chef Client
• Chef Server
• Knife
• …too many
Chef Components
• Cookbooks, Recipes, Resources
• Attributes
• Templates
• Roles
• and many more…
└── cookbook_name
├── attributes
│ └── default.rb
├── recipes
│ └── default.rb
├── templates
│ └── default
│ └── template.erb
└── metadata.rb
Provisioning
Run Chef in yourVagrantBox
sudo chef-solo –c solo.rb -j config.json
chef run
vagrant up
import image
provision projects
mount cookbooks
Your ownVagrant Box
• The “Playbook-to-Cookbook-Algorithm”
– Write installation steps in a text document
– Follow steps yourself, refine document
– Give document to someone else, refine again
– No changes in document  start writing
cookbooks
GenericWebProject
Cookbook
1. Install Packages for Apache, MySQL, PHP
2. Provision Webspace(s) and vhost(s)
3. Provision MySQL Database(s)
4. DownloadTYPO3 sources (or use Composer)
5. Clone your Git project
Next Step
• Provisioning of hosting servers with Chef
• BuildingVagrant Boxes on CI Server
• Vagrant Boxes for customers
• Codecoon
Summary
• Vagrant is a great tool for portable boxes
• Chef can help you manage your configuration
• „Infrastructure as Code“
• Same environment on dev and production
• DevOps brings devs and admins together
@kaktusmimi

Automate your Development Environment with Vagrant & Chef

Editor's Notes

  • #4 In our company, we started to use Vagrant for a project that simply took too long to be set up on our developers‘ laptops. We wanted to work on this projects with a group of developers that should change in each sprint.
  • #7 After we introduced Vagrant for the installation of the project on the developers‘ machines, we reduced the time required for installation from 1 day to about 15 minutes. Besides the reduced installation time, we could be sure that every change of the configuration took effect immediately on all the developer machines.
  • #8 This slide is presenting the stack of software that we use for the Vagrant Boxes in our company. Go to the respective project website to get more information on the components.
  • #9 The main aspects of Vagrant is the BUILDING and the DISTRIBUTION of whole work environments. By well established tools, I‘m talking about software like VirtualBox, VMWare or Chef and Puppet.
  • #10 This slide shows an overview of the components that make up a Vagrant installation. See the following slides for the details of each component.
  • #11 Boxes are the base images that are used in the virtualization software. They include the operating system and probably most of the packages and services that you need on the boxes to be running (e.g. MySQL Server, Apache Webserver...) There is a website with a lot of pre-build boxes that you can build your customized boxes upon: http://vagrantbox.es
  • #15 Provisioners are used to run the configuration management inside the Vagrant box. In the following slides, we will use Chef as a provisioner. There exist other provisioners for different configuration management tools. Provisioners are not only run, if the box is booted, but you can trigger them later on (inside the running box), if your configuration has changed (e.g. add an additional database to a running box)
  • #16 One of the main aspects of Chef is to follow the principle, that you should put EVERYTHING into version control. Chef helps you to put the configuration for your hardware (or virtualized) infrastructure into Version Control. When using Chef for your hardware infrastructure you will probably rely on the Client / Server architecture of Chef, where the Client (run on each server to be provisioned by Chef) will repeatly pull its configuration from the Chef server. In our scenario, we use chef-solo, a tool that kind of combines the Chef Server and the Chef Client in a single tool for handier use inside the Vagrant Boxes. When using chef-solo, you do not have to set up a Chef Server.
  • #23 This slide explains how to mount a folder from your Host system (the system on which you run VirtualBox) into your guest system (the Vagrant Box) using a configuration inside the Vagrant File. For more information on synched folders go to http://docs.vagrantup.com/v2/synced-folders/index.html As explained earlier, we will use Chef for the provisioning of the box. The second code snippet shows how we can use chef-solo during the provisioning step inside the Vagrantfile
  • #24 This slide shows the whole process of Chef Provisioning Vagrant tells VirtualBox, to start the respective virtual machine that we use for our Vagrant Box The folders configured as synched folders will be mounted inside the Vagrant Box Vagrant triggers chef-solo inside the running Vagrant Box Chef-solo will then use the previously mounted Cookbooks to do the provisioning of the Vagrant Box