# Juju Charm usage and development This document is intended to provide a brief overview of the components included in this repository as well as recommendations for how to develop, build, and publish charms. Please read the [develper geting started guide](https://jujucharms.com/docs/2.0/developer-getting-started) before proceeding. ## Directory structure ``` . ├── builds │   └── vpe-router ├── interfaces ├── layers │   └── vpe-router └── module-blueprints ``` The source code of a charm is referred to as a "layer". This layer is compiled into a charm and placed in the `builds/` directory. Interfaces, currently unused in this context, extend relationships between applications. ## Development workflow ### Prepare your build environment ``` # Source the environment variables JUJU_REPOSITORY, INTERFACE_PATH, and # LAYER_PATH, which are needed to build a charm. You could also place these # in your $HOME/.bashrc $ source juju-env.sh ``` #### Install the `charm` command, either via apt: ``` $ sudo apt install charm ``` or with [snap](http://snapcraft.io/) ``` $ snap install charm --edge ``` To build a charm, simply run `charm build` inside of a layer. ``` $ cd $LAYER_PATH/vpe-router $ charm build $ charm deploy $JUJU_REPOSITORY/builds/vpe-router ``` ## Publishing to jujucharms.com Publishing to the Juju Charm store requires a launchpad login. With that, login to [jujucharms.com](http://www.jujucharms.com/). Next, you'll use the charm command to publish your compiled charm. This will put the charm into the store where it can be used by anyone with access. For example, if I wanted to publish the latest version of the vpe-router charm: # Step 1: Upload the charm to the "unpublished" channel ``` $ cd $JUJU_REPOSITORY/builds $ charm push vpe-router/ cs:~aisrael/vpe-router url: cs:~aisrael/vpe-router-0 channel: unpublished ``` # There are four channels to release a charm: edge, beta, candidate, and stable ``` $ charm release cs:~aisrael/vpe-router-0 --channel=edge url: cs:~aisrael/vpe-router-0 channel: edge ``` The charm can then be deployed directly from the charm store: ``` $ juju deploy cs:~aisrael/vpe-router --channel=edge ```