Orchestration is, simply, the automated management of software and hardware systems. It is one of the central tools in the toolbelt of a competent sysadmin who has been given the time to do their job properly rather than suffering under a constant deluge of …could you just…s and firefighting the mess they inherited. Orchestration is also sometimes referred to as configuration management.

Over the past few years the number of frameworks has increased substantially, each trying to solve problems perceived in their predecessors. Problems which might vary from "I can't understand the configuration syntax" through "I do not like the language this is written in" to "I don't want any special agent on the target machine."

Here are a few of the currently available and in-use orchestration frameworks. You are likely to have heard of at least one or two of them:

  • CFEngine is written in C and is a well establised configuration management engine.
  • Chef is written in Ruby and Erlang. It is very popular and a lot of projects offer Chef cookbooks to help people to orchestrate their software.
  • Salt is written in Python and is quite popular among adminstrators of large environments which change regularly, for which rapid configuration deployment is needed.
  • Puppet is written in Ruby and is also often supported by software projects directly.
  • Ansible is written in Python and focusses on use-cases where the systems under management may not be able to have an agent installed on them. Ansible works directly with SSH connections or similar access methods and then runs up python code on the target system.
  • Propellor is written in Haskell and unlike the other options in this list, expects you to write your configuration in Haskell. Propellor uses the power of Haskell's type system to ensure that configurations are as consistent as they can be before they are deployed.

There are, of course, many more and you can read all about them on Wikipedia.

If you're responsible for administering any systems (and lets face it, unless you're really unlucky, you at least administer your own personal system) then you should really look into whether you could effectively use an orchestration framework to manage your systems, allowing you to keep configuration under revision control in a controlled and reproducible way.