4

I am playing around with orchestration and set mysef the challenge to:

  • build a chef server
  • build loads of nodes after that that are configured by the chef server

The issue is that the chef server will need to be built with all the relevant cookbooks that I need to configure the rest of the environment. Since it seems a bit silly to git clone a whole bunch of stuff on the chef server, then do a knife cookbook upload to localhost, I was wondering if cookbooks where simple directories somewhere on the filesystem of the chef server, so that one could simply download a single repo as part of an instance being built, and drop all the cookbooks into a location, which the chef server would then "host". I have searched high and low on Ubuntu 12.04 and chef server v11.12.8, but haven't been able to find any files whatsoever, despite having one recipe present on the server (which I can see in the cookbook list).

I am starting to think they are stored in some other format (perhaps binary), which would mean that I can't achieve what I want in the way that I want.

Has anyone come across the files before?

Also, I have already seen this, which didn't really help: https://stackoverflow.com/questions/15330678/where-are-the-cookbooks-stored-in-chef-server

1 Answer 1

3

Chef-Server use a build-in S3 API compatible object store implemented in Erlang, called Bookshelf. The default storage path should be

/var/opt/opscode/bookshelf/data

Chef-Server uses chef cookbooks to configure itself. The default config is available in the following attribute file:

https://github.com/chef/chef-server/blob/master/omnibus/files/private-chef-cookbooks/private-chef/attributes/default.rb

You can see the Bookshelf default data_dir attribute at:

https://github.com/chef/chef-server/blob/master/omnibus/files/private-chef-cookbooks/private-chef/attributes/default.rb#L486

Hope this helps.

3
  • Thanks. I did find that directory, but has a lot of subdirs with hex codes for names, and seemingly arbitrary data within them. I take it that is where the cookbooks would be, meaning that I won't be able to simply find a directory with cookbooks in the normal directory format?
    – seeafish
    May 25, 2015 at 8:45
  • Hm true. This is the bucket/object storage format. But what is your original problem? Uploading/downloading a lot of cookbooks can be done easily with e.g. "knife cookbook upload --all" or (all cookbooks below the current directory) with "knife cookbook upload ." See docs.chef.io/knife_cookbook.html#upload and docs.chef.io/knife_upload.html for e.g. roles
    – Roland
    May 27, 2015 at 17:46
  • Originally, I wanted to orchestrate a chef server that would be spun up and have all the cookbooks needed for the rest of the environment available upon boot. My idea was to create a repo with all the cookbooks and their deps, and simply git clone those down to the chef server on boot. But since it doesn't store cookbooks in the standard filesystem format, I guess that isn't possible! :( Not sure how I would do it using knife, as I'd need to git clone the cookbooks, configure a knife.rb and keys, then do a knife upload from the server to itself?
    – seeafish
    May 28, 2015 at 9:45

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .