Mojo: Continuous Delivery for Juju

Mojo is a system of configuration and tools for verifying the success of Juju environment deployments. It's available as an open source project under the GPLv3 license on Launchpad.

To get started with mojo (using the mojo-how-to spec as an example):

  1. Install Mojo via the snap:

    sudo snap install --classic mojo
    

    Alternatively, Mojo is available via a PPA on trusty, xenial and bionic:

    sudo add-apt-repository ppa:mojo-maintainers/ppa
    sudo apt-get update
    sudo apt-get install mojo
    
  2. Setup Juju.

    The instructions on the Juju getting started page are good ones to follow. When ready setup a model:

    juju add-model mojo-how-to
    
  3. Export variables to save typing later on, and create a project:

    # Export mojo variables - do this each time you use mojo
    # to save having to pass extra command line options to mojo.
    export MOJO_SERIES=trusty
    export MOJO_PROJECT=mojo-how-to
    export MOJO_WORKSPACE=$MOJO_PROJECT
    export MOJO_SPEC="git+lp:~mojo-maintainers/mojo/+git/mojo-specs"
    export MOJO_STAGE=mojo-how-to/devel
    # Create our new project.
    mojo project-new -c containerless $MOJO_PROJECT
    
  4. Create a workspace:

    mojo workspace-new $MOJO_SPEC $MOJO_WORKSPACE
    
  5. Run your mojo spec to configure your environment as specified in the mojo spec:

    mojo run
    

After the mojo run completes you will have a fully deployed Juju model with a machine running this website. You can run juju status to see the deployment and load the machine ip in your web browser to verify. When you are ready you can remove it all with these steps:

    mojo project-destroy $MOJO_PROJECT
    juju destroy-model mojo-how-to

For more information on using Mojo see our more detailed README or take a look at these articles which originally appeared on Ubuntu Insights:

If you're interested in hacking on Mojo, please take a look at our hacking page.

To keep up to date with Mojo there are two mailing lists which might be of interest: