I have been trying to understand how is that juju works, and I have found errors in any single instruction at the official howto, at the end I got a system with several components in pending state, I still belive juju is nice, but maybe it should be more user friendly.

The first bad thing is to not support libcloud I would love to deploy some servers in digitalocean to check juju.

I have been using salt-stack for a while now, first in a really strange way, but now with all the normal architecture, without Pillars but almost all the stack, it was really a nice tool but there are still some things that I don’t like about it.

Summarizing my thoughts in SaltStack:

  • I love the concept of state and modules. Is pretty natural to check when you need a module and when a state.

  • I love to have minions which are completely ignorant of what’s going to happen with them, basically all servers start in the same state and I can create a image in my cloud provider with the basic configuration for the minion, and just change the id.

  • The python api is still very poor, compared with the power of the cli command, the api from python is almost useless, ie, you can’t execute a tasks and wait for the result in an async way, that sucks, I thought I was going to be able to replace celery but it was impossible.

  • The master is a single point of failure, and there is no easy way to distrubute it, and every time I have to think in a heart beat solution I feel like in the 80’s.

SaltStack seems overwhelming for small architectures, for example, if I just want to control the state of a single server it doesn’t seem to fit pretty well. And I don’t feel good controlling hundred of servers from a single master with no distribution on its tasks.

I started a project called espresso some time ago, it never get to a mature point since I decided to use more salt stack, but I want to come back to espresso and give it a try again.

What do I want?

  • I want a masterless way of orchestration. Basically I want to create a control network between my servers, in which all of them sare the orchestration resposability.

  • I want to be able to connect to any server in the architecture and ask/request info or changes to the architecture.

  • I want to describe the architecture as yaml/dsl files.

  • I want a nice API for any kind of language python/ruby/c++/etc.

  • Espresso must be a thin layer of C++ code running as a daemon in each node.

  • From saltstack I want the cli way of execute commands in the system and enforce states.

  • From juju I want the way to connect services and dynamically change the architecture.

  • From puppet I want the nice dsl to describe the architecture.

I would like to have more time to develop all this, but I will do my best to finish this.