Project

bakist

0.0
No commit activity in last 3 years
No release in over 3 years
Makes running chef-solo easy.
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Project Readme

Masterbaker

Masterbaker spawned from the Soloist project, and lets you quickly and easily converge Chef recipes using chef-solo. It does not require a Chef server, but can exploit community cookbooks, github-hosted cookbooks and locally-sourced cookbooks through Librarian.

Masterbaker was designed with users in mind, allowing a global runlist as well as user-specific.

Using Masterbaker

  1. First, agree to XCode License:

     $sudo xcodebuild -license
    
  2. You'll need to have Masterbaker installed:

     $ gem install masterbaker
    
  3. You'll need a Cheffile in your home directory that points Librarian to all the cookbooks you've included:

     $ cat ~/.bakery/Cheffile // or ~/.masterbaker/masterbakerrc
     site "http://community.opscode.com/api/v1"
     cookbook "pivotal_workstation",
              :git => "https://github.com/pivotal/pivotal_workstation"
    
  4. You'll need to create a ~/.bakery/bakeryrc or ~/.masterbaker/masterbakerrc file in your home directory to tell Chef which recipes to converge:

     $ cat /Users/pivotal/.bakery/bakeryrc
     recipes:
       - pivotal_workstation::default
       - pivotal_workstation::sublime_text
    
  5. It's always a good idea to see what is found and will be installed on next run using config:

     $ bake config
    
  6. You'll need to run masterbaker for anything to happen:

     $ bake
    

Examples

Running a set of recipes

Here's an example of a ~/.bakery/bakeryrc or ~/.masterbaker/masterbakerrc:

cookbook_paths:
  - /opt/beans
recipes:
  - beans::chili
  - beans::food_fight
  - napkins

This tells Masterbaker to search in both /opt/beans and ./cookbooks (relative to the ~/.bakery or ~/.masterbaker directories) for cookbooks to run. Then, it attempts to converge the beans::chili, beans::food_fight and napkins recipes.

Setting node attributes

Masterbaker lets you override node attributes. Let's say we've got a bash::prompt recipe for which we want to set node['bash']['prompt']['color']='p!nk'. No problem!

recipes:
  - bash::prompt
node_attributes:
  bash:
    prompt:
      color: p!nk
Conditionally modifying Masterbaker

Masterbaker allows conditionally switching on environment variables. Let's say we only want to include the embarrassment::parental recipe when the MEGA_PRODUCTION environment variable is set to juggalos. Here's the ~/.bakery/bakeryrc or ~/.masterbaker/masterbakerrc:

cookbook_paths:f
  - /fresno
recipes:
  - disaster
env_variable_switches:
  MEGA_PRODUCTION:
    juggalos:
      recipes:
        - embarrassment::parental

So now, this is the result of our Masterbaker run:

$ MEGA_PRODUCTION=juggalos bake
Installing disaster (1.0.0)
Installing embarrassment (1.0.0)
… chef output …
INFO: Run List expands to [disaster, embarrassment::parental, faygo]
… chef output …

If we set MEGA_PRODUCTION=godspeed, the embarrassment::parental recipe is not converged.

Running one-off recipes

Masterbaker can also run one-off recipes:

$ bake run_recipe lice::box
Installing lice (1.0.0)
… chef output …
INFO: Run List expands to [lice::box]
… chef output …

This just runs the lice::box recipe from your current set of cookbooks. It still uses all the node_attributes and env_variable_switches logic.

Chef logging

Masterbaker runs chef-solo at log level info by default, which is helpful when you need to see what your Chef run is doing. If you need more information, you can set the LOG_LEVEL environment variable:

$ LOG_LEVEL=debug bake

The default log level is FATAL to prevent undesireable output.

License

See LICENSE for details.