Yoshikadokawa Magpie

  • By Yoshi Kadokawa
Channel Version Revision Published Runs on
latest/stable 14 14 19 Mar 2021
Ubuntu 20.04 Ubuntu 19.10 Ubuntu 18.04 Ubuntu 16.04 Ubuntu 14.04
juju deploy yoshikadokawa-magpie
Show information
You will need Juju 2.9 to be able to run this command. Learn how to upgrade to Juju 2.9.


14.04 16.04 18.04 19.10 20.04


Magpie layer to test networking - ICMP and DNS Read more

Discuss this charm

Share your thoughts on this charm with the community on discourse.

Join the discussion

Leadership Layer for Juju Charms

The Leadership layer is for charm-tools and 'charm build', making it easier for layered charms to deal with Juju leadership.

This layer will initialize charms.reactive states, allowing you to write handlers that will be activated by these states. It allows you to completely avoid writing leader-elected and leader-settings-changed hooks. As a simple example, these two handlers are all that is required to make the leader unit generate a password if it is not already set, and have the shared password stored in a file on all units:

import charms.leadership
from charmhelpers.core.host import pwgen

def generate_secret():

def store_secret():
    write_file('/etc/foopass', leader_get('admin_password'))


The following states are set appropriately on startup, before any @hook decorated methods are invoked:

  • leadership.is_leader

    This state is set when the unit is the leader. The unit will remain the leader for the remainder of the hook, but may not be leader in future hooks.

  • leadership.set.{varname}

    This state is set for each leadership setting (ie. the leadership.set.foo state will be set if the leader has set the foo leadership setting to any value). It will remain set for the remainder of the hook, unless the unit is the leader and calls reactive.leadership.leader_set() and resets the value to None.

  • leadership.changed.{varname}

    This state is set for each leadership setting that has changed since the last hook. It will remain set for the remainder of the hook. It will not be set in the next hook, unless the leader has changed the leadership setting yet again.

  • leadership.changed

    One or more leadership settings has changed since the last hook. This state will remain set for the remainder of the hook. It will not be set in the next hook, unless the leader has made further changes.


The charms.leadership module exposes the leader_set() and leader_get() methods, which match the methods found in the charmhelpers.core.hookenv module. reactive.leadership.leader_set() should be used instead of the charmhelpers function to ensure that the reactive state is updated when the leadership settings are. If you do not do this, then you risk handlers waiting on these states to not be run on the leader (because when the leader changes settings, it triggers leader-settings-changed hooks on the follower units but no hooks on itself).


This layer is maintained on Launchpad by Stuart Bishop (stuart.bishop@canonical.com).

Code is available using git at git+ssh://git.launchpad.net/layer-leadership.

Bug reports can be made at https://bugs.launchpad.net/layer-leadership.

Queries and comments can be made on the Juju mailing list, Juju IRC channels, or at https://answers.launchpad.net/layer-leadership.