Units

For api docs, see juju.unit.Unit.

Running Commands

Run arbitrary commands on a unit with the juju.unit.Unit.run() method. This method blocks the current coroutine until a result is available, and returns a juju.action.Action instance.

from juju.model import Model

model = Model()
await model.connect_current()

app = await model.deploy(
    'ubuntu',
    application_name='ubuntu',
    series='trusty',
    channel='stable',
)

for unit in app.units:
    action = await unit.run('unit-get public-address')
    print(action.results)

    action = await unit.run('uname -a')
    print(action.results)

Running Actions

Run actions on a unit with the juju.unit.Unit.run_action() method. This method returns a juju.action.Action instance immediately. To block until the action completes, use the juju.action.Action.wait() method, as in the example below.

from juju.model import Model

model = Model()
await model.connect_current()

app = await model.deploy(
    'git',
    application_name='git',
    series='trusty',
    channel='stable',
)

for unit in app.units:
    # run the 'add-repo' action, passing a 'repo' param
    action = await unit.run_action('add-repo', repo='myrepo')
    # wait for the action to complete
    action = await action.wait()

    print(action.results)