2. Welcome
●
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
3. A momentary digression
●
Installing software used to be a real hassle:
○
○
$ tar …
○
$ ./configure; make install
○
●
$ curl …
<terrifying error message>
Compare:
○
$ sudo apt-get install …
○
<this usually actually works>
4. 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.
5. 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
Some examples?
●
wordpress, mongodb, cassandra, hadoop, mysql, django, ceph, varnish,
node.js, postgres, nova-compute, tomcat, nyancat, mediawiki, minecraft
7. So… charms
A charm is essentially a directory with the following contents:
●
hooks/
○
●
metadata.yaml
○
●
contains executable files with special names
defines possible relations with other services
config.yaml
○
defines possible user settings for a service
...but that’s pretty reductive.
8. Running charms
●
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
10. Debugging charms
●
you can watch what’s happening globally with juju debug-log
●
you can specify logging config to your needs with juju set-env
logging-config=”<root>=WARNING; juju.worker.
uniter=INFO”
●
you can intercept hooks on a particular unit with juju debug-hooks
<unit>
●
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
release)