<div dir="ltr"><div><div>Hi.<br><br></div>I've created a Snap layer for writing Juju reactive charms, allowing you to easily install snaps and keep them updated. At deployment time, the user may opt to upload the snaps as Juju resources allowing them to deploy in network restricted environments. The default is for snaps to be pulled and refreshed from the snap store.<br><br></div><div>The layer is registered at interfaces.juju.solutions and is available for use now. Code is available on <a href="https://launchpad.net/layer-snap">https://launchpad.net/layer-snap</a> and <a href="https://github.com/stub42/layer-snap">https://github.com/stub42/layer-snap</a><br><br>A simple example of a charm using this layer is available at <a href="https://git.launchpad.net/~stub/+git/rocketchat">https://git.launchpad.net/~stub/+git/rocketchat</a> (Rocketchat, not production ready due to absolutely zero configuration options and no HA).<br></div><div><br></div><div><br># Snap layer<br><div><div><br>The Snap layer for Juju enables layered charms to more easily deal with<br>snap packages in a simple and efficient manner. It provides consistent<br>configuration for users, allowing them the choice of pulling snaps<br>from the main snap store, or uploading them as Juju resources for deploys<br>in environments with limited network access.<br><br>## Configuration<br><br>To have the Snap layer install snaps automatically, declare the snaps in<br>layer.yaml:<br><br>```yaml<br>includes:<br>    - layer:basic<br>    - layer:snap<br>options:<br>    snap:<br>    telegraf:<br>        channel: stable<br>        devmode: false<br>        jailmode: false<br>        force_dangerous: false<br>        revision: null<br>```<br><br>In addition, you should declare Juju resource slots for the snaps. This<br>allows operators to have snaps distributed from their Juju controller<br>node rather than the snap store, and is necessary for when your charm<br>is deployed in network restricted environments.<br><br>```yaml<br>resources:<br>    telegraf:<br>    type: file<br>    filename: telegraf.snap<br>    description: Telegraf snap<br>```<br><br>With the Juju resource defined, the operator may deploy your charm<br>using locally provided snaps instead of the snap store:<br><br>```sh<br>juju deploy --resource telegraf=telegraf_0_19.snap cs:telegraf<br>```<br><br>If your charm needs to control installation, update and removal of<br>snaps itself then do not declare the snaps in layer.yaml. Instead, use<br>the API provided by the `charms.layer.snap` Python package.<br>            <br><br>## Usage<br><br>If you have defined your snaps in layer.yaml for automatic installation<br>and updates, there is nothing further to do.<br><br><br>### API<br>  <br>If your charm need to control installation, update and removal of snaps<br>itself, the following methods are available via the `charms.layer.snap`<br>package::<br><br>* `install(snapname, **args)`. Install the snap from the corresponding Juju<br>  resource (using --force-dangerous implicitly). If the resource is not<br>  available, download and install from the Snap store using the provided<br>  keyword arguments.<br><br>* `refresh(snapname, **args)`. Update the snap. If the snap was installed<br>  from a local resource then the resource is checked for updates and the<br>  snap updated if the snap or arguments have changed. If the snap was<br>  installed from the Snap store, `snap refresh` is run to update the snap.<br><br>* `remove(snapname)`. The snap is removed.<br><br>Keyword arguments correspond to the layer.yaml options and snap command line<br>options. See the snap command line documentation for authorative details on<br>what these options do:<br><br>* `channel` (str)<br>* `devmode` (boolean)<br>* `jailmode` (boolean)<br>* `force_dangerous` (boolean)<br>* `revision` (str)<br><br><br>## Support<br><br>This layer is maintained on Launchpad by<br>Stuart Bishop (<a href="mailto:stuart.bishop@canonical.com">stuart.bishop@canonical.com</a>).<br><br>Code is available using git at git+ssh://<a href="http://git.launchpad.net/layer-snap">git.launchpad.net/layer-snap</a>.<br><br>Bug reports can be made at <a href="https://bugs.launchpad.net/layer-snap">https://bugs.launchpad.net/layer-snap</a>.<br><br>Queries and comments can be made on the Juju mailing list, Juju IRC<br>channels, or at <a href="https://answers.launchpad.net/layer-snap">https://answers.launchpad.net/layer-snap</a>.<br><br>-- <br><div class="gmail_signature">Stuart Bishop <<a target="_blank" href="mailto:stuart.bishop@canonical.com">stuart.bishop@canonical.com</a>></div>
</div></div></div></div>