Make observers async; make model.reset() blocking
[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 async def on_change(self, delta, old, new, model):
13 if model.all_units_idle():
14 logging.debug('All units idle, disconnecting')
15 await model.disconnect()
16 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 model.add_observer(MyModelObserver())
25
26 await model.deploy(
27 'ubuntu-0',
28 service_name='ubuntu',
29 series='trusty',
30 channel='stable',
31 )
32 await model.deploy(
33 'nrpe-11',
34 service_name='nrpe',
35 series='trusty',
36 channel='stable',
37 num_units=0,
38 )
39 await model.add_relation(
40 'ubuntu',
41 'nrpe',
42 )
43
44 logging.basicConfig(level=logging.DEBUG)
45 ws_logger = logging.getLogger('websockets.protocol')
46 ws_logger.setLevel(logging.INFO)
47 loop = asyncio.get_event_loop()
48 loop.set_debug(False)
49 loop.create_task(run())
50 loop.run_forever()