Who am I?
What is Juju?
William Reade, tech lead on juju-core
It’s a service orchestration framework written in go
Why might you need such a thing?
Your time is precious
A momentary digression
Installing software used to be a real hassle:
$ tar …
$ ./configure; make install
$ curl …
<terrifying error message>
$ sudo apt-get install …
<this usually actually works>
Juju is like apt, but for the cloud
Consider your everyday life. At any moment, you may find that:
You have to deploy Yet Another WordPress Blog.
You want to set up a wiki for a large project with many users.
You’ve heard that Big Data is Big, and you feel like maybe you ought to
do something with hadoop.
You’ve been asked to deploy a highly-available OpenStack cluster.
…but all of these things require some degree of effort and attention.
This is just like the bad old days all over again.
Juju connects services together
What’s a service?
It’s a component of a distributed system called an environment
It’s made up of some number of units, which run actual software
It can (usually) connect to other services by defining relations
It’s defined by a charm
wordpress, mongodb, cassandra, hadoop, mysql, django, ceph, varnish,
node.js, postgres, nova-compute, tomcat, nyancat, mediawiki, minecraft
A charm is essentially a directory with the following contents:
contains executable files with special names
defines possible relations with other services
defines possible user settings for a service
...but that’s pretty reductive.
juju tracks the state of the system, and notifies each unit of relevant
changes by executing particular hooks from the charm
hooks don’t accept arguments, but information flows to and from hook
processes via environment variables and executable hook tools made
available in the hook process’s $PATH
hooks can be implemented in any language; juju doesn’t impose
restrictions on your preferred tools
you can watch what’s happening globally with juju debug-log
you can specify logging config to your needs with juju set-env
you can intercept hooks on a particular unit with juju debug-hooks
you can run arbitrary commands on a unit, across all units of a service,
and across the whole environment with juju run (not yet in a stable
irc: fwereade generally in #juju and #lug-mt on freenode