4 1. Connects to the current model
6 3. Deploys two charms and relates them
7 4. Waits for units to be idle, then exits
13 from juju
.model
import Model
, ModelObserver
16 class MyRemoveObserver(ModelObserver
):
17 async def on_change(self
, delta
, old
, new
, model
):
18 if delta
.type == 'remove':
19 assert(new
.latest() == new
)
20 assert(new
.next() is None)
24 assert(new
.previous().dead
)
25 assert(not new
.previous().current
)
26 assert(not new
.previous().connected
)
29 class MyModelObserver(ModelObserver
):
30 async def on_change(self
, delta
, old
, new
, model
):
31 if model
.all_units_idle():
32 logging
.debug('All units idle, disconnecting')
33 await model
.disconnect()
39 await model
.connect_current()
41 model
.add_observer(MyRemoveObserver())
42 await model
.reset(force
=True)
43 model
.add_observer(MyModelObserver())
47 service_name
='ubuntu',
58 await model
.add_relation(
63 logging
.basicConfig(level
=logging
.DEBUG
)
64 ws_logger
= logging
.getLogger('websockets.protocol')
65 ws_logger
.setLevel(logging
.INFO
)
66 loop
= asyncio
.get_event_loop()
68 loop
.create_task(run())