Juju
Juju enables you to deploy services quickly and easily across multiple servers,
simplifying the configuration process, and is particularly designed with cloud
servers in mind. It is described in Chapter 31, “Ubuntu in the Cloud.”
Puppet
Puppet is a configuration management tool written in Ruby. It is designed to
make it easier to deploy servers and scale applications across a network, and
it does so using a custom declarative language. It has both open source and
commercial (closed source, or proprietary) versions.
Puppet does four basic things. First, it provides a place for you define the
desired state for your infrastructure’s configuration. Second, Puppet simulates
changes before enforcing them. Third, Puppet enforces the desired state
automatically, making corrections for drifting configurations. Finally, Puppet
gives you a report on the differences between the actual and desired states
before you make any changes.
The Puppet Forge website (http://forge.puppetlabs.com) provides access to
downloadable modules, which are bits of Puppet code for automating tasks,
such as setting up a specific type of server. Instructions there are also
available for creating and sharing your own modules.
Much of the power of Puppet is made available in its for-payment Enterprise
version, which also includes a nice GUI. The open source version works with
Amazon for provisioning, manages configurations for operating systems and
applications, lets you use Puppet modules from Puppet Forge, and has
community support via the web. If you need anything more than this, either
find a different product or pay to use Puppet’s Enterprise version, which has a
good reputation for maturity and usefulness.
Chef
Chef is a configuration management tool, also written in Ruby. It uses a
service-oriented architecture to help automate tasks. With Chef, you write
recipes that describe how you want your server or specific server software to
be configured (for example, an HTTP server or a database server). A recipe
describes each resource, such as services that should be running or packages
that should be installed, and the state in which each should be found. It then
makes sure that configuration is maintained or updated across all servers