1 A Python library for Juju
2 =========================
4 Source code: https://github.com/juju/python-libjuju
6 Bug reports: https://github.com/juju/python-libjuju/issues
8 Documentation: https://pythonlibjuju.readthedocs.io/en/latest/
21 * Asynchronous - uses asyncio and async/await features of python 3.5
22 * Websocket-level bindings are programmatically generated (indirectly) from the
23 Juju golang code, ensuring full api coverage
24 * Provides an OO layer which encapsulates much of the websocket api and
25 provides familiar nouns and verbs (e.g. Model.deploy(), Application.add_unit(),
39 Here's a simple example that shows basic usage of the library. The example
40 connects to the currently active Juju model, deploys a single unit of the
41 ubuntu charm, then exits:
52 from juju.model import Model
56 # Create a Model instance. We need to connect our Model to a Juju api
57 # server before we can use it.
60 # Connect to the currently active Juju model
61 await model.connect_current()
64 # Deploy a single unit of the ubuntu charm, using the latest revision
65 # from the stable channel of the Charm Store.
66 ubuntu_app = await model.deploy(
68 application_name='ubuntu',
73 if '--wait' in sys.argv:
74 # optionally block until the application is ready
75 await model.block_until(lambda: ubuntu_app.status == 'active')
77 # Disconnect from the api server and cleanup.
78 await model.disconnect()
82 logging.basicConfig(level=logging.INFO)
84 # If you want to see everything sent over the wire, set this to DEBUG.
85 ws_logger = logging.getLogger('websockets.protocol')
86 ws_logger.setLevel(logging.INFO)
88 # Run the deploy coroutine in an asyncio event loop, using a helper
89 # that abstracts loop creation and teardown.
93 if __name__ == '__main__':
97 More examples can be found in the docs, as well as in the ``examples/``
98 directory of the source tree which can be run using ``tox``. For
99 example, to run ``examples/connect_current_model.py``, use:
103 tox -e example -- examples/connect_current_model.py