old_contents: """
  Run this one against a model that has at least one unit deployed.
  
  """
  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()
  
  
  async def run_stuff_on_unit(unit):
      if unit.name in _seen_units:
          return
  
      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]
  
      print('Results from unit', unit.name)
      print(action_result.__dict__)
  
  
  def on_model_change(delta, old, new, model):
      if isinstance(new, Unit):
          task = loop.create_task(run_stuff_on_unit(new))
  
      if delta.entity == 'action':
          print(delta.data)
          print(new)
  
  
  async def watch_model():
      model = Model(conn)
      model.add_observer(on_model_change)
      await model.watch()
  
  logging.basicConfig(level=logging.INFO)
  loop.run_until_complete(watch_model())
  
new_contents: """
  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 logging
  
  from juju.model import Model, ModelObserver
  
  
  async def run_stuff_on_unit(unit):
      print('Running command on unit', unit.name)
  
      # unit.run() returns a client.ActionResults instance
      action_results = await unit.run('unit-get public-address')
      action_result = action_results.results[0]
  
      print('Results from unit', unit.name)
      print(action_result.__dict__)
  
  
  class MyModelObserver(ModelObserver):
      async def on_unit_add(self, delta, old, new, model):
          loop.create_task(run_stuff_on_unit(new))
  
      async def on_action_change(self, delta, old, new, model):
          print(delta.data)
  
          action = new
          if action.status == 'completed':
              await action.model.disconnect()
              action.model.loop.stop()
  
  
  async def run():
      model = Model()
      await model.connect_current()
      await model.reset(force=True)
      model.add_observer(MyModelObserver())
  
      await model.deploy(
          'ubuntu-0',
          service_name='ubuntu',
          series='trusty',
          channel='stable',
      )
  
  
  logging.basicConfig(level=logging.DEBUG)
  ws_logger = logging.getLogger('websockets.protocol')
  ws_logger.setLevel(logging.INFO)
  loop = asyncio.get_event_loop()
  loop.set_debug(False)
  loop.create_task(run())
  loop.run_forever()
  
subject: Fix unitrun example