Welcome to the Library of Chef Patterns and Practices (aka 'LOPP': Library of Patterns and Practices).
About "Patterns" and "Best Practices":
- Design patterns are solutions to software design problems you find again and again in real-world application development. Patterns are about reusable designs and interactions. You will not use and often cannot use every pattern, and many of them are mutually exclusive. The inspiration comes from TK 'Design Pattterns' and Christopher Alexander's 'Pattern Language'.
- Anti-patterns are commonly adopted practices that end up being counter-productive. They often have their root in good design patterns but are often taken to an extreme or miss a key element that subvert their good intent.
- Best Practices are often conflated with mediocritiy, thanks in part to the work of Scott Adams. We have nonetheless identified Chef best practices that all sites should adopt unless there are uniquely compelling circumstances.
The term 'pattern' herein is used for any single topic describing a single pattern, antipattern or best practice.
This repo is an interim home to the LOPP, pending transition to a yet-to-be-determined LOPP platform. For the time being:
- all patterns are described in file in the top level directory
- the patterns are organized around general topics as follows:
- language patterns: apply to using the Chef and Ruby language within a cookbook (lump in with cookbook?)
- cookbook patterns: apply to using cookbooks together as units describing and application or infrastructure. This includes using roles, environments, policyfiles, etc. since those are all about getting cookbooks to work together rationally in the context of converging a node to do usefule work.
- server patterns: apply to running your Chef server, or Hosted Chef, or doing without a server entirely
- operating patterns: apply to using Chef servers and clients together, including orchestration (lump in with implementation?)
- implementation patterns: apply to using these technologies together in ways that aren't captured by above topics.
- cultural patterns: apply to technology-independent patterns of success.
- each pattern should be named as
topic_(bp|ap|pat)-short-description.md
to enable rational sorting, where bp='bestpractice', ap='anitpattern', pat='pattern'. Examples:- 'language_pat-use-common-idioms.md'
- 'cultural_pat-demonstrate-relentlessly.md'
- 'server_ap-scaling-early.md'
- 'implementation_bp-version-contral-all-the-things.md'
- pattern template: See pattern template
Candidate patterns should be added to the relevant wiki pages. As of this time, all patterns are candidate patterns.
When we formally adopt patterns through a yet-to-be-determined process, new patterns should be submitted as PRs following standard Github workflow, using the template and the naming conventions described above. Updating this index file will be the responsibility of the maintainers.
Feel free to submit issues that describe candidate patterns prior to the full pattern, but please do so with the intent of writing the pattern if subsequent discussion is encouraging.
- Pattern Template
- LOPP Platform: What the final home for LOPP should be.
- Original README: A dumping ground that was the genesis for the LOPP.
Chef Patterns are in the public domain. In jurisdictions that do not allow for this, they are available under CC0. To the extent possible under law, the person who associated CC0 with their work has waived all copyright and related or neighboring rights to their work.
Peter Burkholder (pburkholder)
Josh O'brien
Mike Tyler
``
etc....