Skip to main content

Helpers for Juju Charms to load external resources

Project description

Juju Resources provides helpers for charms to load binary resources from external sources, as well as tools for creating mirrors of external resources for network-restricted deployments.

This is intended as a stop-gap until Juju has core support for resources, as well as to prototype what features are needed.

Installing

Install Juju Resources using pip:

pip install jujuresources

Charm Usage

A charm using Juju Resources will need to define a resources.yaml, such as:

resources:
    my_resource:
        url: http://example.com/path/to/my_resource.tgz
        hash: b377b7cccdd281bc5e4c4071f80e84a3
        hash_type: sha256
optional_resources:
    my_optional_resource:
        url: http://example.com/path/to/my_optional_resource.tgz
        hash: 476881ef4012262dfc8adc645ee786c4
        hash_type: sha256

Then, once the charm has installed Juju Resources, it can fetch and verify resources, either in Python:

from jujuresources import fetch, verify, config_get

if not fetch(base_url=config_get('resources_mirror')):
    print "Mandatory resources did not download; check resources_mirror option"
    sys.exit(1)

fetch('my_optional_resource', base_url=config_get('resources_mirror'))
if verify('my_optional_resource'):
    install_tgz(resource_path('my_optional_resource'))

Or via the command-line / bash:

if ! juju-resources fetch -u `config-get resources_mirror`; then
    echo "Mandatory resources did not download; check resources_mirror option"
    exit 1
fi

juju-resources fetch -u `config-get resources_mirror` my_optional_resource
if juju-resources verify my_optional_resource; then
    actions/install_tgz `juju-resources resource_path my_optional_resource`
fi

Mirroring Resources

If you will need to deploy charms in an environment with limited network access, you can create a mirror ahead of time, or on a gateway node which has access:

mkdir local_mirror
juju-resources fetch --all -d local_mirror -r http://github.com/me/my-charm/blob/master/resources.yaml
juju-resources serve -d local_mirror

You will then have a lightweight HTTP server running to which you can set the charm’s resources_mirror (or equivalent) config option to point to, serving all (--all, optional as well as required) resources defined in the remote resources.yaml (-r <url-or-file>), which are cached in the local_mirror directory (-d local_mirror).

Note that the charms will need to be able to see the machine you create the mirror on, and the charms must support a config option to point Juju Resources to the mirror (as well as handle the possibility that their resources may not be available when they are first deployed).

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

jujuresources-0.1.tar.gz (5.9 kB view hashes)

Uploaded Source

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page