Chef, Vagrant and Friends
Upcoming SlideShare
Loading in...5

Chef, Vagrant and Friends



An introduction to using Chef and Vagrant for entry level users.

An introduction to using Chef and Vagrant for entry level users.



Total Views
Views on SlideShare
Embed Views



1 Embed 3 3


Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
Post Comment
Edit your comment

Chef, Vagrant and Friends Chef, Vagrant and Friends Presentation Transcript

  • @benmcrae • Software engineer • • Travelling & listening to music • Coffee / real ale drinker
  • YOU? View slide
  • MASTER CHEFS View slide
  • Chef can automate how you configure, deploy and scale your servers and applications.
  • Installing Chef 11 ! Chef Omnibus (Linux, OS X, Windows) Chef DK (April 2014, v0.1.0) (Bundled software) Gem (Ruby 1.9.3 recommended)
  • Chef CLI tools ohai (node attributes) chef-apply (execute a single recipe from the command line) chef-solo (execute run lists and cookbooks on a node) chef-client (retrieves & executes run lists & cookbooks on nodes) knife (interact with chef server)
  • Resources Resources represent a piece of the system and its desired state. Some resources available:! • Directories • Users • Groups • Services • Packages
  • Resource Syntax A resource is a Ruby block with four components: • A type • A name • One (or more) attributes (with values) • One (or more) actions
  • Recipe Recipes are what you write to install and configure things on your machine.! • Authored using a Ruby DSL • Made from multiple resources • Can include other recipes • Single responsibility in purpose • Belongs to a Cookbook
  • Recipe DSL A Ruby DSL, with specific methods to write chef recipes and resource blocks. Common Ruby syntax can be used with the Recipe DSL methods. if / case statements…
  • Ingredients • Using chef-apply and a single recipe • Create a new developer user on the system • Install Git using the OS package manager • Create a .gitconfig file for the developer user
  • stage-1
  • Chef Run • Recipe loaded • Resources are arranged in an ordered queue • Each resource is mapped to a Provider! • The node Converges by executing each provider
  • Providers Providers define steps that are needed to bring a piece of the system from its current state into the desired state.
  • Idempotent A recipe can run multiple times on the same system and the results will always be identical.
  • Outcomes • Poor single responsibility • Use better suited resources e.g. template / file • Fixed values could be swapped for attributes
  • Next Steps 1. Create cookbook from existing recipe 2. Refactor outcomes from retrospective
  • Cookbook A cookbook defines a scenario, such as everything needed to install and configure Apache and the resources that support it.
  • Cookbook Folders • attributes - attribute files, loaded in alphabetical order! • files - stored files for file and directory resources! • libraries - arbitrary ruby libraries, used in recipes! • providers - custom providers (LWRP)! • recipes - recipe files! • resources - custom resources (LWRP)! • templates - erb files for the template resource
  • Cookbook Generators • knife cookbook create ‘cookbook name’ • berks cookbook ‘cookbook name’
  • Metadata File • The metadata.rb sits in the cookbook root directory • Defines cookbook name, version, and description • Can declare dependencies on other cookbooks • List supported operating systems
  • Template Resource • Uses ERB (Embedded Ruby) files • Supports variables and hashes in templates • Multi nested folders designed to support distributing files across platforms • Best practice: set variables using attributes
  • Node Object • Attributes - An attribute is a specific piece of data about the node! • Run list - A run-list is an ordered list of recipes and/or roles that are run in an exact order
  • Attributes ! • Attributes can be defined by the node, recipes, cookbooks, roles and environments! • Node information. i.e. IP / MAC addresses, OS info • Recipe information. i.e. directory paths, users, application data
  • Overriding Attributes
  • Ohai Ohai is a CLI tool that is used to detect attributes on a node! • Platform details • Network usage • Memory usage • Processor usage
  • Run List • A run-list defines all of the configuration settings that are necessary for a node to converge • An ordered list of roles and/or recipes that are run in an exact order
  • chef-solo • chef-solo allows using cookbooks on nodes without using Chef server • Cookbooks & dependencies must be on the node • Limited in functionality compared to chef-server • Requires configuration; run-list and attributes
  • stage-2
  • Chef Run • Builds node object! • Expands run-list • Compiles Resources in an ordered queue • Each resource is mapped to a Provider! • The node Converges by executing each provider
  • Outcomes • A single cookbook to manage our developer user • A cookbook that can be used with both chef-solo and chef-client (Chef Server)
  • Next Steps • Introduce community cookbooks and Berkshelf • Install Ruby 2.1.2, using Berkshelf
  • Community Cookbooks • An online Open Source cookbook repository, maintained and used by the chef community. • Trusted cookbooks can be downloaded from - • Cookbook dependencies are not automatically downloaded. This must be done by looking through the cookbook metadata file, and manually downloading listed cookbooks.
  • Berkshelf • The cookbook dependency manager • gem install berkshelf • Used to maintain cookbooks on your Chef Server • Written by Jamie Windsor, and Seth Vargo
  • Berksfile • Lives in the root directory of the Cookbook • Lists each cookbook name, and version (optional) which your cookbook depends on • Ability to read cookbook dependencies from metadata.rb file • Traverses over other cookbook dependencies
  • stage-3
  • Outcomes • Implemented a community cookbook with the aid of Berkshelf. • Applied our knowledge of attributes to other cookbooks.
  • Next Steps • Provision the node automatically with chef-solo and Vagrant. • Create a new recipe to git clone our ruby app into the developer home directory.
  • • Create and configure lightweight, reproducible, and portable development environments. • Vagrant stands on the shoulders of giants. Machines are provisioned on top of VirtualBox, VMware, AWS, or any other provider. • Provision machines with, shell scripts, Chef, or Puppet.
  • Commands • vagrant init hashicorp/precise32 • vagrant up • vagrant provision • vagrant halt • vagrant destroy
  • Vagrant Provision • Move the run list and attributes into the Vagrantfile • Vagrant will run chef-solo on VM start, or by running the provision command
  • Git Resource • Manage source control resources that exist in a git repository • Functionality for revision and branching control • Offers both export and syncing abilities
  • stage-4
  • Outcomes • Used Vagrant to run chef-solo and setup our node • Established our cookbook development workflow • Finished cookbook
  • More Features • Full support for both Linux and Windows guest’s • Mount directories using either NFS, SMB or Rsync • Multi machine environments • Network support - port forwarding, private networks
  • Vagrant Cloud • Share a link to your web server to a teammate across the country • Community collection of fully baked box images • Distribute versionable private environments to your team
  • Share / Connect • Share SSH access to other vagrant users • Share the whole machine as a local entity to other vagrant users
  • Vagrant Plugins • vagrant plugin install <plugin_name> • vagrant-sahara (operate in a sandbox environment) • vagrant-proxy (define http and https proxies)
  • Chef Reading • Test-Driven Infrastructure with Chef, 2nd Edition
 - Steven Nelson-Smith • Chef Infrastructure Automation Cookbook 
 - Matthias Marschall • Learning Chef (Released Sep 2014)
 - Seth Vargo, Mischa Taylor •
  • Vagrant Reading • Vagrant: Up and Running - Mitchell Hashimoto • •