Chapter 8. Lightweight Resources and Providers

Chef ships with a number of useful resources and associated providers that we can use in our recipe code to implement a great deal of functionality, such as interacting with package managers, copying files onto nodes, managing system users, and working with source code management systems such as Git. However, as you might expect, these built-in resources do not provide every single piece of functionality we might want to incorporate into our infrastructure code.

As we touched on in Think Critically, the people at Chef, Inc. are smart folks. They know there’s no way they can provide resources to cater for every possible task people might want to perform with Chef—there are just too many possibilities—so they don’t try. What they have done instead is to make it as easy as possible for us to create our own resources and providers that cater to our specific requirements—making a new provider to make the package resource work with a new package management system, for example, or creating an entirely new resource and provider to configure a high-availability database cluster.

In the last chapter, we looked at definitions, which are recipe macros that allow us to wrap one or more other resources into a reusable chunk. Definitions go some way toward allowing us to implement our own resource types but as we saw, suffer from a number of limitations—namely, that they cannot define multiple actions and cannot be notified.

In this chapter ...

Get Customizing Chef now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.