4 1. Connects to the current model
6 3. Deploy a charm and waits until it's idle
7 4. Destroys the unit and application
13 from juju
.model
import Model
, ModelObserver
16 class MyModelObserver(ModelObserver
):
17 async def on_unit_add(self
, delta
, old
, new
, model
):
19 'New unit added: %s', new
.name
)
21 async def on_change(self
, delta
, old
, new
, model
):
22 for unit
in model
.units
.values():
23 unit_status
= unit
.data
['agent-status']['current']
25 'Unit %s status: %s', unit
.name
, unit_status
)
26 if unit_status
== 'idle':
28 'Destroying unit %s', unit
.name
)
29 loop
.create_task(unit
.destroy())
31 async def on_unit_remove(self
, delta
, old
, new
, model
):
32 app_name
= old
.application
33 app
= model
.applications
[app_name
]
36 'Destroying application %s', app
.name
)
37 loop
.create_task(app
.destroy())
38 await model
.block_until(
39 lambda: len(model
.applications
) == 0
41 await model
.disconnect()
47 await model
.connect_current()
49 await model
.reset(force
=True)
50 model
.add_observer(MyModelObserver())
54 service_name
='ubuntu',
60 logging
.basicConfig(level
=logging
.DEBUG
)
61 ws_logger
= logging
.getLogger('websockets.protocol')
62 ws_logger
.setLevel(logging
.INFO
)
63 loop
= asyncio
.get_event_loop()
65 loop
.create_task(run())