dantswain
dantswain

Reputation: 5467

How do I share code across Chef cookbooks in a chef-repo?

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:

The last option seems like the most viable. Is there a better/more idiomatic way to do what I want?

Upvotes: 13

Views: 9701

Answers (2)

riemann
riemann

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

Emil Sit
Emil Sit

Reputation: 23512

You can use a library defined function from another cookbook but you must teach Chef that your cookbook depends 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

Related Questions