Newer
Older
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
# 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
```