Canonical have been pushing their deployment tool, Juju for a while now, working hard to get some momentum behind it, but does the world really need another mechanism to deploy apps? What’s wrong with Puppet, Chef, Ansible and the like?
Well, they call it “game-changing” and they may well have a point. Let’s describe a typical scenario; I have an app (such as WordPress), and it needs to connect to a database (such as MySQL). In puppet, you might take existing modules for both the app and the database, and then configure the end points, somehow taking into account the orchestration of your infrastructure. Then there’s some pesky setup SQL to inject into the database. Puppet, Chef, Ansible; they’re all the same in this respect. Very good at helping you configure components, but not so smart about connecting them together.
Juju takes a different approach. The descriptors for installing the various components (called “charms”) have hooks which contain the logic to connect your components to other components. The WordPress charm, for example already contains the know-how to connect to a MySQL database. You just have to install the WordPress charm and the MySQL charm, then link them together, with a single juju command, and your configuration is all done for you. Juju also manages simple orchestration (which is how it knows how to find the various components).
It’s a beautifully simple concept, and makes Juju a pleasure to use.