Deploying charms offline


#1

This page is concerned with using Juju charms offline. See the Working offline page for background information.

Clouds that do not enjoy a connection to the internet can nonetheless make use of charms provided that the client prepares local copies of them in advance. The client has the ability to point to a local charm during deployment. This passes the charm on to the controller. Recall that, by default, the controller manages the access and distribution of charms.

These instructions are concerned strictly with how to obtain local copies of Juju charms. In particular, they do not take into account:

  • how individual charms may be adversely affected when deployed in an offline context. For instance, some charms download files from internet-based sources (e.g. GitHub). In such cases, the charm must be appropriately modified prior to usage.
  • other required cloud ingredients such as operating system (or container) images.

There are also scenarios where the charms are only available locally, such as:

  • The charms are newly-written and have not been published online.
  • The charms exist online but they have been customized locally.

Maintaining charms locally with Charm Tools

For the situation when the charms are not already available locally, the steps described here involve both the installation of the Charm Tools software and the download of charms from the Charm Store. These tasks are to be performed on an internet-connected system prior to being migrated to the internet-deprived network.

Installation and overview

Charm Tools is add-on software that is useful for interacting with local charms. It is primarily meant for charm authors but it is also useful for just downloading charms from the Charm Store.

Local charms originating from the Store require some degree of maintenance (updating). Merely downloading a charm once will allow the charm to get stale. To update a charm, simply overwrite the existing charm directory by downloading it to the same location.

See Charm Tools for information on installation as well as for command syntax and general usage.

Storing a charm locally

Storing a charm locally involves downloading the charm to the local filesystem. This is done by means of the Charm Tools pull command.

For example, to download the mysql charm and put its files under the ~/charms/mysql directory:

charm pull mysql ~/charms/mysql

Now that the Charm Tools and the desired charms are available the administrative system can be placed in the offline environment.

Deploying from a local charm

After having created a Juju controller, deploy from a local charm by supplying the path to the charm’s directory when invoking the juju deploy command.

To deploy the previously downloaded mysql charm:

juju deploy ~/charms/mysql

To deploy vsftpd while specifying the series (you do not have to specify the series if the local charm contains a series declaration):

juju deploy ~/charms/vsftpd --series trusty

A default series can be configured at the model level:

juju model-config -m mymodel default-series=trusty

Charms hosted on the Charm Store always have an implied series.

See the Deploying applications page for a comprehensive treatment of the juju deploy command and Configuring models for more details on model level configuration.

The juju status command shows how a charm was installed. Below, MySQL was installed from a local charm and PostgreSQL came from the Charm Store:

App         Version  Status  Scale  Charm       Store       Rev  OS      Notes
mysql       5.7.20   active      1  mysql       local       326  ubuntu  
postgresql  9.5.10   active      1  postgresql  jujucharms  164  ubuntu  

Ignoring files

When deploying a local charm the files comprising the charm need to be uploaded to the controller. This is done by first archiving the charm’s directory so that a single file is transported. Some of the files, however, may not need to be sent. Indeed, some files may even cause an error to be thrown. To overcome this, starting in v.2.5.3, it is possible to ignore certain files. The idea is based on gitignore files.

Juju starts with a default set of ignore rules and appends the contents of a possible .jujuignore file present in the charm root directory. Take note of the ignore syntax.


Deploying applications
Applications
Configuring Juju for offline usage