Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Chef, Vagrant and Friends

Chef, Vagrant and Friends

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

Avatar for Ben McRae

Ben McRae

May 14, 2014
Tweet

Other Decks in Technology

Transcript

  1. Installing Chef 11 ! Chef Omnibus (Linux, OS X, Windows)

    Chef DK (April 2014, v0.1.0) (Bundled software) Gem (Ruby 1.9.3 recommended)
  2. 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)
  3. Resources Resources represent a piece of the system and its

    desired state. Some resources available:! • Directories • Users • Groups • Services • Packages
  4. 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
  5. 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
  6. 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…
  7. 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
  8. 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
  9. Providers Providers define steps that are needed to bring a

    piece of the system from its current state into the desired state.
  10. Idempotent A recipe can run multiple times on the same

    system and the results will always be identical.
  11. Outcomes • Poor single responsibility • Use better suited resources

    e.g. template / file • Fixed values could be swapped for attributes
  12. Cookbook A cookbook defines a scenario, such as everything needed

    to install and configure Apache and the resources that support it.
  13. 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
  14. 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
  15. 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
  16. 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
  17. 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
  18. Ohai Ohai is a CLI tool that is used to

    detect attributes on a node! • Platform details • Network usage • Memory usage • Processor usage
  19. 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
  20. 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
  21. 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
  22. Outcomes • A single cookbook to manage our developer user

    • A cookbook that can be used with both chef-solo and chef-client (Chef Server)
  23. Community Cookbooks • An online Open Source cookbook repository, maintained

    and used by the chef community. • Trusted cookbooks can be downloaded from - http://community.opscode.com • Cookbook dependencies are not automatically downloaded. This must be done by looking through the cookbook metadata file, and manually downloading listed cookbooks.
  24. Berkshelf • The cookbook dependency manager • gem install berkshelf

    • Used to maintain cookbooks on your Chef Server • Written by Jamie Windsor, and Seth Vargo
  25. 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
  26. Outcomes • Implemented a community cookbook with the aid of

    Berkshelf. • Applied our knowledge of attributes to other cookbooks.
  27. 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.
  28. • 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.
  29. Commands • vagrant init hashicorp/precise32 • vagrant up • vagrant

    provision • vagrant halt • vagrant destroy
  30. 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
  31. Git Resource • Manage source control resources that exist in

    a git repository • Functionality for revision and branching control • Offers both export and syncing abilities
  32. Outcomes • Used Vagrant to run chef-solo and setup our

    node • Established our cookbook development workflow • Finished cookbook
  33. 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
  34. 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
  35. Share / Connect • Share SSH access to other vagrant

    users • Share the whole machine as a local entity to other vagrant users
  36. Vagrant Plugins • vagrant plugin install <plugin_name> • vagrant-sahara (operate

    in a sandbox environment) • vagrant-proxy (define http and https proxies)
  37. 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 • https://learnchef.opscode.com/
  38. Vagrant Reading • Vagrant: Up and Running - Mitchell Hashimoto

    • http://docs.vagrantup.com/ • http://www.vagrantup.com/blog.html