Three Developer-Friendly Orchestration Tools

May 16 2013

Recently I have been doing all kinds of DevOps/Orchestration work setting up in-cloud servers and services. Most of the time, what I want to be able to do is quickly and repeatably create several servers all working together. But I don't need a full orchestration system. I've found three promising solutions (in alphabetical order):

Here's a very basic overview of each of those. <!--break--> First, I want to be clear on one thing: each of these tools fills a different niche. So I'm not comparing them to each other. Rather, I'm more interested in showing how different solutions exist for different provisioning needs.

Ansible

Ansible is closer to Chef or Puppet, but it has a a friendlier feel to it. It's exceedingly well documented, and the configuration language is easy to pick up. What I'm looking forward to is being able to create in-cloud servers easily with Ansible.

To me, what makes Ansible shine is that fact that you can very rapidly build basic orchestration tools -- and then build more sophisticated tools on top of those. Ansible's Playbooks are just YAML files, which means you write short and declarative files instead of writing full-on code (like in Chef, Puppet, and Fabric).

Fabric

If Ansible's virtue is staying away from procedural code, Fabric's is in turning provisioning and orchestration tasks into code.

Imagine being able to stand up servers by writing simple Python code that is then executed on remote servers over SSH. That's pretty much exactly what Fabric does. I managed to wire it up with the hpcloud Linux CLI to first create remote servers in the cloud and then provision them using SSH.

What I really liked about this setup was that I could quickly use just about any Python libraries I needed. Any Fabric's Expect-like SSH abstraction made working with the remote OS a breeze.

Stack-Kicker

Stack-Kicker's really virtue is in its deep integration with cloud provisioning. It's a breeze to tell Stack-Kicker to create several several server instances, each playing a different role in the overall setup. It integrates well with Chef and also with the Cloud-Init/Cloud-Config tooling in Ubuntu. I've been using Stack-Kicker to build a more sophisticated version of my Instant LAMP server. I'm using that cloud-config file as a basis, too.

Stack-Kicker fills a niche that I've been desperately looking to fill. It gives precise and robust access to the process of creating new servers in the cloud. But it does this simply and elegantly. That process of defining the characteristics of my compute instances and how they are related is straightforward (and native).