Web GUI for Juju


Juju GUI Charm

This charm makes it easy to deploy a Juju GUI into an existing environment.

Supported Browsers

The Juju GUI supports recent releases of the Chrome, Chromium and Firefox web browsers.

Demo and Staging Servers

The Juju GUI runs the Juju Charm Store on From there, you can browse charms, try the GUI, and build an example environment to export for use elsewhere.

A staging server is also available, running the latest and greatest version.

Deploying the Juju GUI

Deploying the Juju GUI is accomplished using Juju itself.

You need a configured and bootstrapped Juju environment: see the Juju docs about getting started, and then run the usual bootstrap command.

juju bootstrap

Next, you simply need to deploy the charm and expose it. (See also "Deploying with Jitsu" below, for another option.)

juju deploy juju-gui
juju expose juju-gui

Finally, you need to identify the GUI's URL. It can take a few minutes for the GUI to be built and to start; this command will let you see when it is ready to go by giving you regular status updates:

watch juju status

Eventually, at the end of the status you will see something that looks like this:

    charm: cs:precise/juju-gui-7
    exposed: true
    relations: {}
        agent-state: started
        machine: 1
        - 80/tcp
        - 443/tcp

That means you can go to the public-address in my browser via HTTPS ( in this example), and start configuring the rest of Juju with the GUI. You should see a similar web address. Accessing the GUI via HTTP will redirect to using HTTPS.

By default, the deployment uses self-signed certificates. The browser will ask you to accept a security exception once.

You will see a login form with the username fixed to "user-admin" (for juju- core) or "admin" (for pyjuju). The password is the same as your Juju environment's admin-secret, found in ~/.juju/environments.yaml.

Deploying behind a firewall

While we may change this in the future to make firewall deploys simpler, this charm pulls the latest release from the Juju GUI page on Launchpad. If you are behind a firewall, however, this may not be available to you. In this case, you can configure the charm to pull the GUI release from a location you specify.

For both Juju Core and PyJuju, you must simply do the following steps. Note that PyJuju must do these steps, plus another set described further below.

The config variable juju-gui-source allows a url: prefix which understands both http:// and file:// protocols. We will use this to load a local copy of the GUI source.

  1. Download the latest release of the Juju GUI Source from the Launchpad downloads page and save it to a location that will be accessible to the unit either via filesystem or HTTP.
  2. Set the config variable to that location using a command such as

    juju set juju-gui juju-gui-source=url:...

    where the ellipsis after the url: is your http:// or file:// URI. This may also be done during the deploy step using --config.

  3. If you had already tried to deploy the GUI and received an install error due to not being able to retrieve the source, you may also need to retry the unit with the following command (using the unit the GUI is deployed on):

    juju resolved --retry juju-gui/0

These steps are sufficient for Juju Core. If you are using PyJuju, you need to do another set of steps in addition.

  1. Use bzr to branch lp:~hazmat/juju/rapi-rollup locally ("bzr branch lp:~hazmat/juju/rapi-rollup") and copy the branch to the gui service machine.

  2. Use "juju set juju-gui juju-api-branch=PATH_TO_LOCAL_BZR_BRANCH" (where the path is not a file:// URI).

  3. Retry as described in the step 3 above (juju resolved --retry juju-gui/0).

Deploying to a chosen machine

The instructions above cause you to use a separate machine to work with the GUI. If you'd like to reduce your machine footprint (and perhaps your costs), you can colocate the GUI with the Juju bootstrap node.

This approach might change in the future (possibly with the Juju shipped with Ubuntu 13.10), so be warned.

The instructions differ depending on the Juju implementation.


Replace "juju deploy cs:precise/juju-gui" from the previous instructions with this:

juju deploy --force-machine 0 cs:precise/juju-gui


Colocation support is not included by default in the pyjuju implementation; to activate it, you will need to install Jitsu:

sudo apt-get install juju-jitsu

and then replace "juju deploy cs:precise/juju-gui" from the previous instructions with this:

jitsu deploy-to 0 cs:precise/juju-gui

Contacting the Developers

If you run into problems with the charm, please feel free to contact us on the Juju mailing list, or on Freenode's IRC network on #juju. We're not always around (working hours in Europe and North America are your best bets), but if you send us a mail or ping "jujugui" we will eventually get back to you.

If you want to help develop the charm, please see the charm's


(string) Set the GUI server log level. Possible values are debug, info, warning and error. The log file is placed in /var/log/upstart/guiserver.log.
(string) Used by the nrpe-external-master subordinate charm. A string that will be prepended to instance name to set the host name in nagios. So for instance the hostname would be something like: juju-myservice-0 If you're running multiple environments with the same services in them this allows you to differentiate between them.
(boolean) Set to false to serve the GUI over an insecure HTTP connection. Do not set unless you understand and accept the risks.
(string) The contents of the certificate file to be used in SSL connections to the GUI. Both ssl-cert-contents and ssl-key-contents must be provided. If not, cetificates will be automatically generated.
(string) The charm depends on several software packages that are not packaged in Ubuntu. In order to ensure that only versions known to work with our charm are used, there is a single PPA where all packages are kept. The juju-gui-charmers team supports 'stable' and 'devel' versions. Only stable should be used for production. For enterprise deployments that do not allow access to resources outside of their control, the location can be any specification as long as it is recognizable by 'add-apt-repository'.
(boolean) There are deployment modes for Juju GUI which are not intended as regular use mode. In these cases, login/logout are disabled and instead there is a link to
(boolean) Whether or not the GUI is in read-only mode. Note that read-only mode is advisory, and enforced only in the client. If someone can access the websocket and has the password, they can send commands over the websocket to mutate the environment.
(boolean) Connect the Juju GUI to the staging backend (i.e. a simulated Juju environment). Currently juju-core does not support the staging backend. For this reason, this option is ignored if the charm is deployed using juju-core.
(boolean) Enable the built-in server, disabling both haproxy and Apache. This is a temporary option: the built-in server will be the only server in the future.
(string) The contents of the private key file to be used in SSL connections to the GUI. Both ssl-cert-contents and ssl-key-contents must be provided. If not, cetificates will be automatically generated.
(boolean) Whether or not the console should be enabled for the browser.
(string) The Juju API Bazaar branch (implementing the WebSocket server). Since juju-core includes the WebSocket API server out of the box, this option is ignored if the charm is deployed using juju-core.
(string) The path to the directory where the SSL certificates are stored.
(boolean) Whether or not the GUI unit tests are exposed. If this option is enabled, unit tests can be run in the browser by visiting the URL "https://[Juju GUI address]/test/".
(boolean) The team developing the Juju GUI benefits from understanding how different deployments use the tool. By enabling this setting, anonymized usage data is reported back using Google Analytics. The type of data collected includes the charms that are deployed and the number of units per service. Use of analytics is optional but we hope you will allow us to improve our tool based on your experience.
(string) The log file where stdout and stderr should be sent for all commands that are run by charm hooks.
(string) The URL of the charm catalog site ("charmworld") from which charm catalog data will be drawn.
(string) The environment JSON export used by the staging server. This option can be used to change the topology of the simulated Juju environment. Possible values are 'sample' and 'large'. Currently juju-core does not support the staging backend. For this reason, this option is ignored if the charm is deployed using juju-core.
(string) What the charmbrowser's default viewmode should be. Possible options are: - 'sidebar' (default): the charmwbrowser will appear as a sidebar. This is also known as build mode. - 'fullscreen': the charmbrowser will appear in full screen, hiding the canvas. This is also known as browse mode. - 'minimized': the charmbrowser will be minimized by default, and hidden.
(string) Where to install Juju GUI from. Possible values are: - 'stable' (default): the latest stable release will be deployed; - 'trunk': the latest trunk release will be deployed; - a stable version (e.g '0.1.0'): the specified stable version will be deployed; - a trunk version (e.g '0.1.0+build.1'): the specified trunk version will be deployed; - a Bazaar branch (e.g. 'lp:juju-gui'): a release will be created and deployed from the specified Bazaar branch. 'http://' prefixed branches work as well. It is also possible to include the specific branch revision, e.g. 'lp:juju-gui:42' will checkout revno 42. - a 'url:' prefixed url (ex: url:http://...) of a specific location to pull a release from.
(boolean) Run using an in-memory sandbox rather than a real (or even improv) Juju backend. Sandbox is a client side construct running entirely in the client. Sandbox does not currently support imported environment simulation and is exclusive to the staging: true configuration. If staging is true it will be used in preference to sandbox at this time.
(string) The help text shown to the user on the login screen.
The password is the admin-secret from the Juju environment. This can often be found by looking in ~/.juju/environments.yaml.