Systems abstractions: Chef, Ansible, Puppet, Sandstorm.io, Docker, Saltstack & many more - what do they do?

published Feb 06, 2016 12:45   by admin ( last modified Feb 06, 2016 12:46 )

Some initial thoughts about systems such as:

& many more - what do they do?

What they all have in common is that they in some fashion abstract away the previously tedious work of configuring whole systems, including operating system, libraries, configuration management and the applications running on top of it all. The operating system with its associated libraries, configurations and services should be made into a predictable and easily configurable component, that can be extended with more components.

The idea is to talk about functionality, often in these systems called a role, instead of having to care about the nitty-gritty of how to build up the complex sub systems needed to get to that point.

They do this by having modules, sometimes called recipes, playbooks or grains, that take all the non-important decisions for you, and leave you with a few parameters that actually influence what is different from your setup as compared to others.

The grand daddy I would say from my admittedly biased perspective, and the system I have experience with in this field is actually Buildout, a python system that builds up the functionality you need completely inside a directory of your choosing on the server, where everything you need runs. It does this by using something called recipes, short ready-made python programs that take a few parameters as input for configuring the component the way you want it. Buildout does however not configure the entire server, but is still very powerful.

As an example here chromanode-regtest-backend is a buildout I made a couple of months ago that builds and configures and runs the postgresql database, the node.js application server, the supervisord process runner, bitcoind, bitcoin-abe, chromanode and a number of custom scripts to make a self contained testing environment for bitcoin and colored coins applications, with scripted mining of blocks in an isolated regtest blockchain. Nothing runs as root but as a restricted user. If you delete the directory, it is all removed from your computer, and you can also have several instances in different directories and with one configuration directive you can offset their TCP ports so that they do not clobber each other. Foundation script here.

However buildout does not take care of the operating system or version updates, and it is now time for me to move on a bit and figure out what would be the best fit for the problems I'm facing now: Repeatable deployments and power and simplicity for developing new applications.