Getting Started

Follow the same guidelines as normal for creating a Juju charm.

Directory Layout

Structure your project should look similar to:

charm-project/
  hooks/
    install
    config-changed
    start
    stop
  tests/
    00-basic.test
  config.yaml
  metadata.yaml
  LICENSE
  README.md

Writing charm hooks

Hooks are written using perl with automatically imported helpers for convenience. When developing hooks they should reside in hooks.

A requirement for all charms using this library is to make sure to "bootstrap" the install hook. For example, edit hooks/install

#!/usr/bin/env perl
BEGIN {
 system 'sudo apt-get install -qyf cpanminus build-essential libssl-dev libxml2-dev libexpat1-dev';
 system 'cpanm -n App::CharmKit~">= 2.00"';
}

use charm;

log 'Installing dokuwiki dependenices';

pkg [
 'nginx-full', 'php-fpm',      'php-cgi',      'php-curl', 'php-gd', 'php-json',
 'php-mcrypt', 'php-readline', 'php-mbstring', 'php-xml'
],
ensure    => "present",
on_change => sub { log "All latest packages installed."; };

my $hook_path = $ENV{JUJU_CHARM_DIR};

The BEGIN block is the important bit here where we make sure that App::CharmKit is installed prior to use.

Now all other charms can simply use charm and continue the hook processing.

A typical hook starts with

#!/usr/bin/env perl

use charm;

log 'Starting install hook for database';

pkg ['mysql-server', 'nginx', 'php5-fpm'];

my $dbhost = run 'relation-get dbhost';
my $dbuser = run 'relation-get dbuser';

service 'nginx' => 'restart';