|Written in||Python → Go|
|License||GNU Affero GPL v3 LGPL|
Juju (formerly Ensemble) is an open source service orchestration management tool developed by Canonical Ltd., the company behind Ubuntu. Juju allows software to be fast deployed, integrated and scaled on a wide choice of cloud services or servers.
The central mechanism behind Juju is called Charms. Charms can be written in any programming language that can be executed from the command line. A Charm is a collection of YAML configuration files and a selection of "hooks". A hook is a naming convention to install software, start/stop a service, manage relationships with other charms, upgrade charms, scale charms, configure charms, etc. Charms can have many properties. Charm helpers allow boiler-plate code to be automatically generated hence accelerating the creation of charms.
Juju Client and Environments
Juju has two components: a client and a bootstrap node. Currently clients exist for Ubuntu, Mac and Windows. After installing the client, one or more environments can be bootstrapped. Juju environments can be bootstrapped on many clouds: Amazon Web Services, HP Cloud Services, Microsoft Windows Azure, OpenStack, etc. By creating a Juju Provider, additional cloud environments can be supported. Juju can also be bootstrapped on bare metal servers. Large deployments can use Canonical's Metal as a Service. Small deployments can use the manual provider, which allows any SSH Ubuntu machine to be converted into a Juju-managed machine. Juju can also be installed on a local Ubuntu machine via LinuX Containers and the local provider.
Command Line and GUI
Juju has both a command line and a GUI. The base functionality is similar although the GUI is currently lagging behind, e.g. placement of services onto servers is not (yet) supported. The GUI however allows non-technical users to create complex software stacks via drag-and-drop. The latest version of the Juju GUI can be accessed via jujucharms.com. This is a fully functional GUI but is not integrated into any back-end system.
The Juju Charm Store launched on April 3, 2012. The Charm Store regularly tests charms to notify charm authors when code breaks in addition to ensuring that Juju users have access to the latest versions of charms.
Juju also has a concept of Charm Bundles. A Charm Bundle allows a collection of charms, their properties and relations to be instantly exported into a YAML file. This YAML file can later be imported into another Juju environment. The Charm Bundle allows exact copies of one environment to be distributed via a single YAML file. Bundles can also be uploaded to the charm store, allowing anybody to deploy a bundle via drag-and-drop or one command.
Juju's Strengths and Weaknesses
Juju is often compared to configuration management tools like Puppet, Chef, Ansible, etc. due to its software provisioning capabilities. This comparison however is not taking into account Juju's main strengths: instant integration and scaling. Juju allows services to be instantly integrated via relationships. By creating a relationship between, for instance, MySQL and WordPress, MySQL will share with WordPress any IPs, user, password and other configuration items. This will enable WordPress to create tables and import data automatically. Relations allow the complexity of integrating services to be abstracted from the user.
Also all complexities regarding service scaling can be abstracted. Users just need to specify the number of units they want and scaling will happen automatically. The charm will be responsible for choosing the best strategy.
Juju is also often compared to Platform as a Service. Although in definition Juju is not a platform-as-a-Service, it can be used to run multiple PaaS on top of it. Pivotal Labs jointly announced on the OpenStack Summit in Hong Kong in November 2013, support for CloudFoundry on top of Juju. Also Tsuru runs on top of Juju. Juju can be seen as a DIY PaaS that allows PaaS platforms to run next to "legacy" software stacks in order to create a customized PaaS.
Juju lacks several of the more advanced features server provisioning systems like Chef, Puppet, Ansible, etc. have. However, Juju allows Charms to be written in any language. As such, Chef, Puppet, Ansible, etc. can be used inside a charm to do the server provisioning.
Juju is currently limited to Ubuntu on the server side. Canonical has publicly announced that they are open to contributions to support other operating systems. The Python version had a community patch to support CentOS. The current Go-language version has no CentOS support at this moment.
Juju's Future Developments
Canonical does not share the roadmap for Juju publicly, but Juju providers for more public clouds as well as charms supported by their open source communities are very likely to come.
- Castro, Jorge O. (April 3, 2012). "Why the juju charm store will change the way you use Ubuntu Server – Jorge's Stompbox". Jorgecastro.org. Retrieved September 1, 2012.