chef

Chef notes

Sometime back I had to fiddle with Chef. I created some notes, posting it over here, so that I won’t loose it. Don’t think it’ll be useful much to anyone else other than me 🙂 Its basically a list of instructions that is scattered on their site.

So, anyone other than me, please ignore this post!

Write a cookbook
chef generate repo ~/chef-repo
=> Install starter kit to create .chef directory and certs that we need to communicate with chef server
cd ~/chef-repo
chef generate cookbook cookbooks/COOKBOOK_NAME

Create a recipe:
chef generate recipe cookbooks/COOKBOOK_NAME RECIPE_NAME ## RECIPE_NAME shouldn’t have suffix. Eg. it should be ‘webserver and not ‘webserver.rb’
=> Write the script in RECIPE_NAME.rb file that got generated

How to refer(include) a recipe(RECIPE_NAME) in another recipe:
include_recipe 'COOKBOOK_NAME::RECIPE_NAME' ## Eg: include_recipe 'my_cookbook::webserver'

## By default the recipe that gets called is ‘cookbooks/COOKBOOK_NAME/recipes/default.rb’
## So include any other recipe in this using include_recipe

Create a file:
chef generate file cookbooks/COOKBOOK_NAME FILE_NAME.txt

How to upload the cookbook to the chef server. There are 2 ways:
## Option 1. Prefer this one. This one takes up the dependencies if any.
## Create a file named Berksfile in the ~/chef-repo/cookbooks/COOKBOOK_NAME directory
## Add the following to that file:
source "https://supermarket.chef.io"
metadata
## Install the dependencies:
berks install
## Finally upload (along with dependencies):
berks upload ## OR without SSL => berks upload --no-ssl-verify
## Option 2. This one just uploads the cookbook. Won’t download dependencies
knife cookbook upload COOKBOOK_NAME

View uploaded cookbooks:
knife cookbook list

Bootstraping the node
knife ssl fetch ##Save the SSL certificate
knife bootstrap IP_ADDRESS_OF_NODE -x ROOT_USER_NAME -P ROOT_PASSWORD --sudo ##BOOTSTRAP!!
## Verify bootstrap process was successful. Either check in chef manage console or do:
## On Windows
knife node list | findstr NODE_NAME_WINDOWS
## On Linux
knife node list | grep NODE_NAME_WINDOWS

How to reference another cookbook:
## Append following to ~/chef-repo/cookbooks/COOKBOOK_NAME/metadata.rb:
depends 'ANOTHER_COOKBOOK_NAME', '~> MAJOR.MINOR.PATCH' ## Eg: depends 'sql_server', '~> 2.4.0'

How to override third party cookbook’s attributes:
## Create a custom attribute file that overrides third party attribute values:
chef generate attribute cookbooks/COOKBOOK_NAME default
## Add override values as follows in the generated ‘cookbooks/COOKBOOK_NAME/attributes/default.rb‘:
default['ANOTHER_COOKBOOK_NAME']['ATTRIBUTE_NAME'] = ATTRIBUTE_VALUE
## Eg: default['sql_server']['accept_eula'] = true
## Eg: default['sql_server']['version'] = '2012'
## Eg: default['sql_server']['instance_name'] = 'MSSQLSERVER'

Modifying cookbook version:
## Edit ~/chef-repo/cookbooks/COOKBOOK_NAME/metadata.rb to change the version

Applying cookbook on node:
## Run the following directly on the NODE, (NOT ON THE workstation):
chef-client

Advertisements