Welcome text to Juju


Looking at the intro to Juju on its README, I don’t think the project explains what the benefits of Juju are for developers/teams clearly.

Juju enables you to use Charms to deploy your application architectures to EC2, OpenStack, Azure, GCE, your data center, and even your own Ubuntu based laptop. Moving between models is simple giving you the flexibility to switch hosts whenever you want — for free.

If you don’t understand what a “Charm” is, then it looks like the only benefit that you would get from Juju is the ability to migrate hosts. And that assumes that you are comfortable with the term “application architectures”. A smaller point is that Juju can be driven from anywhere, not just an Ubuntu-based laptop.

Here’s an alternative introduction that’s hopefully better at explaining how Juju helps (although it’s far far longer :confused: ):

Juju is a devops system that is ideal for complex software stacks. It is a configuration management system that allows you to focus on your application by freeing you from details. Instead of deploying single applications and wiring them together manually, you work with sets of applications that work as a cohesive whole. We call this working with charms.

As an example, let’s consider deploying a “simple” LAMP stack application: MediaWiki. Traditionally you would need to configure a web server, PHP and a database, plus manage their ports and security. Adding a load balancer adds more complexity. With Juju, the story is much simpler:

juju bootstrap ec2
juju deploy wiki-scalable 
juju expose loadbalancer

With these 3 lines, you would have provisioned 5 virtual machines and deployed inter-connected services running on each of them. The only VM exposed to the internet is your correctly-configured HAProxy instanced, that we’re calling loadbalancer.

Juju allows you to use the same tool to deploy to your preferred hosting environment, whether that’s bare metal, virtual machines or containers. Juju is supported by Canonical, the company that delivers Ubuntu. Charms have been developed by Canonical, its partners such as HPE & IBM, and the wider devops community.


Sounds like an improvement to me. Though I’d like @pmatulis and @rick_h to have another look over it. I’d say go ahead and put up a PR suggesting the change.


I agree the README isn’t great. In my opinion it’s job would be to get folks to jujucharms.com where we’ve got a much more rich set of information about what it is/does/intro and the like.

If you don’t mind sticking the text into a document and sharing it out I’m sure we can collaborate, edit, and come up with something that’s a nice improvement from where it stands atm.


We should probably rationalise this with what the snap says about Juju (snap info juju). It’s too wordy for that purpose IMO but some of it can be recycled.

  Juju is an open source modelling tool for operating software in the cloud.  Juju allows you to
  deploy, configure, manage, maintain, and scale cloud applications quickly and efficiently on
  public clouds, as well as on physical servers, OpenStack, and in containers. You can use Juju from
  the command line or through its GUI.
  In modern environments, applications are rarely deployed in isolation. Even simple applications
  may require several other applications in order to function - like a database and a web server,
  for example. For modeling a more complex system, e.g. OpenStack, many more applications need to be
  installed, configured and connected to each other. Juju's application modelling provides tools to
  express the intent of how to deploy such applications and to subsequently scale and manage them.
  At the lowest level, traditional configuration management tools like Chef and Puppet, or even
  general scripting languages such as Python or bash, automate the configuration of machines to a
  particular specification. With Juju, you create a model of the relationships between applications
  that make up your solution and you have a mapping of the parts of that model to machines. Juju
  then applies the necessary configuration management scripts to each machine in the model.
  Application-specific knowledge such as dependencies, scale-out practices, operational events like
  backups and updates, and integration options with other pieces of software are encapsulated in
  Juju's 'charms'. This knowledge can then be shared between team members, reused everywhere from
  laptops to virtual machines and cloud, and shared with other organizations.
  The charm defines everything you all collaboratively know about deploying that particular
  application brilliantly. All you have to do is use any available charm (or write your own), and
  the corresponding application will be deployed in seconds, on any cloud or server or virtual


Good call +1 (and more characters to make discourse happy)


From juju help basics:

Juju is model & application management software designed to leverage the power
of existing resource pools, particularly cloud-based ones. It has built-in
support for cloud providers such as Amazon EC2, Google GCE, Microsoft
Azure, OpenStack, and Rackspace. It also works very well with MAAS and
LXD. Juju allows for easy installation and management of workloads on a
chosen resource pool.

See https://jujucharms.com/docs/stable for documentation.


Some other introductions I’ve discovered via the Ubuntu blog:

12 Questions about Juju (2015)

1) What is Juju?

Juju is a state of the art, open source service modelling tool. It forms part of Ubuntu’s cloud portfolio, together with Ubuntu Server, Ubuntu OpenStack, MAAS for bare-metal provisioning, and Landscape for systems management and monitoring. Juju allows you to model, configure, manage, maintain, deploy and scale cloud services quickly and efficiently on public clouds as well as on MAAS, OpenStack, and LXD containers. You can choose to use Juju from the command line, or through its beautiful and powerful GUI.

Using Juju to manage evolving complex software (2018)

[…] Juju embraces this mindset by enabling operators to focus on the software model, rather than machines and instance details.

This model-driven approach – made possible through the use of distributed agents – dramatically reduces the complexity of managing complexity. Juju handles upgrades and changes in configuration, scale, and components out of time, removing the complexity of maintaining large estates that can often be time consuming, challenging and costly to manage.

Running Android in the Cloud with Amazon EC2 A1 instances (2018)

Running Android inside LXD containers allows running Android-based applications at high density and at an unparalleled scale. A range of Canonical products help deliver an easy, automated setup and clean operations experience. Juju provides all the necessary functionality to get the software stack deployed on AWS with a single command. The machine container hypervisor LXD brings all necessary features to isolate the individual Android systems from each other, manage and distribute containers in a cluster of multiple machines. Snaps provide the underlying packaging format for all the software being deployed via Juju. They provide a secure and easy way to deliver software and keep it up to date. (emphasis added)


Currently, the actual documentation has but a small blurb:

Juju is an open source application modeling tool. It allows you to deploy, configure, scale and operate your software on public and private clouds.

The docs used to have a much more drawn-out definition that I deemed anachronistic. Its page is still published but it’s not easily discoverable. Some of its contents were used in the snap definition I posted earlier.


Within Wikipedia, Juju has a few mentions.

From the Canonical (Company) page:

Juju, a service orchestration management tool

From the Juju (Software) page (note: this page has a warning that it’s written as an advertisement):

Juju is an open source application modeling tool developed by Canonical Ltd… Juju focuses on reducing the operation overhead of today’s software by facilitating quickly deploying, configuring, scaling, integrating, and performing operational tasks on a wide choice of public and private cloud services along with bare metal servers and local container based deployments.


From the snapcraft.yaml description:

Through the use of charms, juju provides you with shareable, re-usable, and repeatable expressions of devops best practices.


jujud has its own description from a 2012 commit that’s hilariously titled “untested sketch of jujud command” :

juju provides easy, intelligent service orchestration on top of models such as OpenStack, Amazon AWS, or bare metal. jujud is a component of juju. https://jujucharms.com/