Tips & How-To's

Accessing Chef Databag Items from within attributes

In Chef parlance, databags are global variables saved in JSON format and are stored and accessible on the Chef server. Given that these are indexed and can be searched up along with the fact that they can be encrypted make them ideal candidates to store secrets such as credentials/ssh keys.

Chef provides an easy way to search and fetch databag and databag items from within a recipe:

For ex to fetch a databag called admins, it’s as easy as:

admins = data_bag('admins')

And to fetch databag items:

admins.each do |login|
    admin = data_bag_item('admins', login)
    user_name = admin['id']
    ssh_keys = admin['ssh_keys']
    groups = admin['groups']
end

Unfortunately, the data_bag and data_bag_item helpers are not accessible from within attributes and it seems as of now, the working way is to use Chef::DataBagItem.load method like so:

credentials  = Chef::DataBagItem.load('admins','sathya')

One Comment

  1. I can’t disagree with anything you’ve written here, but I would add that when the works done, and you’re ready to play, you need to get out on an ebike from https://waveelectricbikes.com. You get all the exercise you want by riding in pedal mode, but then the fun starts when you flip on the electric motor and start traveling in the open air at 25 mph! Forget about tiring hills, just fly right up them. Buy the folding ebike and you can keep it in the trunk of your car so you’re ready for a ride any time.

Leave a Reply

Your email address will not be published. Required fields are marked *