X-Git-Url: https://osm.etsi.org/gitweb/?a=blobdiff_plain;f=examples%2Funitrun.py;h=3dfacd62e4c078592dc984246aabc2ed27cbc413;hb=refs%2Ftags%2F0.4.0;hp=7e3c49069e069de9efd2935e20bd66ff2291fc31;hpb=769d19789b142ca3c1ffd0a172e9ac29cfb4b40e;p=osm%2FN2VC.git diff --git a/examples/unitrun.py b/examples/unitrun.py index 7e3c490..3dfacd6 100644 --- a/examples/unitrun.py +++ b/examples/unitrun.py @@ -1,47 +1,47 @@ """ -Run this one against a model that has at least one unit deployed. +This example: + +1. Connects to current model and resets it. +2. Deploys one ubuntu unit. +3. Runs an action against the unit. +4. Waits for the action results to come back, then exits. """ import asyncio -import functools +import logging from juju.model import Model -from juju.unit import Unit -from juju.client.connection import Connection - - -loop = asyncio.get_event_loop() -conn = loop.run_until_complete(Connection.connect_current()) - -_seen_units = set() +from juju import loop -async def run_stuff_on_unit(unit): - if unit.Name in _seen_units: - return +async def run_command(unit): + logging.debug('Running command on unit %s', unit.name) - print('Running command on unit', unit.Name) - # unit.run() returns a client.ActionResults instance - action_results = await unit.run('unit-get public-address') - _seen_units.add(unit.Name) - action_result = action_results.results[0] + # unit.run() returns a juju.action.Action instance + action = await unit.run('unit-get public-address') + logging.debug("Action results: %s", action.results) - print('Results from unit', unit.Name) - print(action_result.__dict__) +async def main(): + model = Model() + await model.connect_current() + await model.reset(force=True) -def on_model_change(delta, old, new, model): - if isinstance(new, Unit): - task = loop.create_task(run_stuff_on_unit(new)) + app = await model.deploy( + 'ubuntu-0', + application_name='ubuntu', + series='trusty', + channel='stable', + ) - if delta.entity == 'action': - print(delta.data) - print(new) + for unit in app.units: + await run_command(unit) + await model.disconnect() -async def watch_model(): - model = Model(conn) - model.add_observer(on_model_change) - await model.watch() -loop.run_until_complete(watch_model()) +if __name__ == '__main__': + logging.basicConfig(level=logging.DEBUG) + ws_logger = logging.getLogger('websockets.protocol') + ws_logger.setLevel(logging.INFO) + loop.run(main())