Reputation: 5467
I would like to share a small handful of methods across recipes in a chef repo. I know that on a cookbook level I can put code in modules in the libraries directory (see related question). What I'm looking for is something like that but available across all of the cookbooks in my Chef repo.
I can think of a couple solutions:
$LOAD_PATH
in the recipe file. I have a feeling that won't work with actual deployment because the chef server doesn't know anything about the repo.The last option seems like the most viable. Is there a better/more idiomatic way to do what I want?
Upvotes: 13
Views: 9701
Reputation: 565
There are 3 distinct options allowing for sharing code in form of either chef resource (1. LWRP, 2. HWRP) or methods (3. "libraries"). I'd suggest you consider LWRPs first. I find this answer very good in explaining differences between mentioned techniques.
Upvotes: 1
Reputation: 23512
You can use a library defined function from another cookbook but you must teach Chef that your cookbook depend
s on the providing cookbook.
So, for example, if in cookbook A, you have a libraries/default.rb
that provides some function f
, you can access it from cookbook B so long as B's metadata.rb
file includes the line:
depends "A"
See the Chef documentation on metadata and libraries for more details.
Upvotes: 21