PRM, the Puppet Recipe Manager, facilitates the distribution of 'recipes', canned system configurations. A recipe contains the answer to a specific configuration question like 'How do I setup a forward-only postfix server' in a form that can be easily fed into Puppet, a configuration management system. The recipe consists of one or more puppet manifests and the configuration files needed by the manifest. PRM makes it easier for system administrators to incorporate configurations from others, manage changes to their site's configuration, and share their configuration beyond their site.

PRM takes care of the details of downloading and updating recipes, deploying them at a site, and ensuring that puppet manifests and config files wind up in the proper places in the file system of the puppet server and its file server.

A recipe can be initially obtained from an 'upstream' repository, and then modifed locally to better fit the needs of the site that deploys it. Since it is likely that upstream updates to recipes need to be incorporated into a site's configuration, even after that site has made changes to the initial recipe, recipes should be kept under the control of a distributed source control system; this prototype uses Mercurial .

The lifecycle of a recipe can be illustrated as follows:

  1. Upstream maintainer publishes version 1.0 as a mercurial repository at some URL
  2. Site admin downloads and deploys recipe with 'prm get'
  3. Site admin makes local changes to recipe, and checks them into her local copy of the mercurial repo
  4. Upstream maintainer makes changes to recipe and publishes version 2.0
  5. Site admin updates recipe from upstream by running 'prm update'; this may require resolving conflicts between the upstream version and the changed local version. For now, this would have to be done manually.