Deploy/destroy example
[osm/N2VC.git] / examples / deploy.py
1 """
2 Run this one against a model that has at least one unit deployed.
3
4 """
5 import asyncio
6 import logging
7
8 from juju.model import Model, ModelObserver
9 from juju.client.connection import Connection
10
11
12 loop = asyncio.get_event_loop()
13 conn = loop.run_until_complete(Connection.connect_current())
14 model = Model(conn)
15
16
17 class MyModelObserver(ModelObserver):
18 def on_unit_add(self, delta, old, new, model):
19 logging.info(
20 'New unit added: %s', new.name)
21
22 def on_change(self, delta, old, new, model):
23 for unit in model.units.values():
24 unit_status = unit.data['agent-status']['current']
25 logging.info(
26 'Unit %s status: %s', unit.name, unit_status)
27 if unit_status == 'idle':
28 logging.info(
29 'Destroying unit %s', unit.name)
30 loop.create_task(unit.destroy())
31
32 def on_unit_remove(self, delta, old, new, model):
33 app_name = old.application
34 app = model.applications[app_name]
35 if not app.units:
36 logging.info(
37 'Destroying application %s', app.name)
38 loop.create_task(app.destroy())
39
40
41 async def run():
42 model.add_observer(MyModelObserver())
43 await model.deploy(
44 'ubuntu-0',
45 service_name='ubuntu',
46 series='trusty',
47 channel='stable',
48 )
49 await model.watch()
50
51 logging.basicConfig(level=logging.INFO)
52 loop.create_task(run())
53 loop.run_forever()