Add relate example
[osm/N2VC.git] / examples / relate.py
1 """
2 Deploy two charms and relate them.
3
4 """
5 import asyncio
6 import logging
7
8 from juju.model import Model, ModelObserver
9
10
11 class MyModelObserver(ModelObserver):
12 def on_change(self, delta, old, new, model):
13 if model.all_units_idle():
14 logging.debug('All units idle, disconnecting')
15 task = model.loop.create_task(model.disconnect())
16 task.add_done_callback(lambda fut: model.loop.stop())
17
18
19 async def run():
20 model = Model()
21 await model.connect_current()
22
23 await model.reset(force=True)
24 await model.block_until(
25 lambda: len(model.machines) == 0
26 )
27 model.add_observer(MyModelObserver())
28
29 await model.deploy(
30 'ubuntu-0',
31 service_name='ubuntu',
32 series='trusty',
33 channel='stable',
34 )
35 await model.deploy(
36 'nrpe-11',
37 service_name='nrpe',
38 series='trusty',
39 channel='stable',
40 num_units=0,
41 )
42 await model.add_relation(
43 'ubuntu',
44 'nrpe',
45 )
46
47
48 logging.basicConfig(level=logging.DEBUG)
49 ws_logger = logging.getLogger('websockets.protocol')
50 ws_logger.setLevel(logging.INFO)
51 loop = asyncio.get_event_loop()
52 loop.create_task(run())
53 loop.run_forever()