First I evaluate whether using the community cookbook is close enough to
save me effort. If so, I fork the cookbook, make my edits and contribute a
patch back to the maintainer. If the maintainer is no longer active, I
maintain my fork. If the cookbook is completely off, I’ll start from
scratch and write my own cookbook.

Or option 4 - change your requirements so that the community cookbook fits.

The main reason for considering this is that cookbooks don’t stand alone, but rather depend on each other. If you throw out one community cookbook, that may later prevent you from using a dozen other community cookbooks, too.

Especially if the cookbook in question is a very basic one, say the apache cookbook, creating your own will mean that you’ll have to recreate quite a few other cookbooks.

There also is option 5. If the original cookbook does part of what you need, you may be able to create a wrapper cookbook that calls the community cookbook and then adds your specific features.

Or option 4 - change your requirements so that the community cookbook fits.

The main reason for considering this is that cookbooks don’t stand alone, but rather depend on each other. If you throw out one community cookbook, that may later prevent you from using a dozen other community cookbooks, too.

Especially if the cookbook in question is a very basic one, say the apache cookbook, creating your own will mean that you’ll have to recreate quite a few other cookbooks.

There also is option 5. If the original cookbook does part of what you need, you may be able to create a wrapper cookbook that calls the community cookbook and then adds your specific features.

A wrapper cookbook is really just a regular cookbook; you create it the same way as any other. The recipes in the cookbook simply do whatever you need, and then call the corresponding recipe in the community cookbook with include_recipe.