Python library for Juju
Project description
Source code: https://github.com/juju/python-libjuju
Bug reports: https://github.com/juju/python-libjuju/issues
Documentation: https://pythonhosted.org/juju/
Requirements
Python 3.5+
Juju 2.0+
Design Notes
Asynchronous - uses asyncio and async/await features of python 3.5
Websocket-level bindings are programmatically generated (indirectly) from the Juju golang code, ensuring full api coverage
Provides an OO layer which encapsulates much of the websocket api and provides familiar nouns and verbs (e.g. Model.deploy(), Application.add_unit(), etc.)
Installation
pip install juju
Quickstart
Here’s a simple example that shows basic usage of the library. The example connects to the currently active Juju model, deploys a single unit of the ubuntu charm, then exits.
More examples can be found in the examples/ directory of the source tree, and in the documentation.
#!/usr/bin/python3.5
import asyncio
import logging
from juju.model import Model
async def run():
# Create a Model instance. We need to connect our Model to a Juju api
# server before we can use it.
model = Model()
# Connect to the currently active Juju model
await model.connect_current()
# Deploy a single unit of the ubuntu charm, using revision 0 from the
# stable channel of the Charm Store.
ubuntu_app = await model.deploy(
'ubuntu-0',
application_name='ubuntu',
series='xenial',
channel='stable',
)
# Disconnect from the api server and cleanup.
model.disconnect()
# Stop the asyncio event loop.
model.loop.stop()
def main():
# Set logging level to debug so we can see verbose output from the
# juju library.
logging.basicConfig(level=logging.DEBUG)
# Quiet logging from the websocket library. If you want to see
# everything sent over the wire, set this to DEBUG.
ws_logger = logging.getLogger('websockets.protocol')
ws_logger.setLevel(logging.INFO)
# Create the asyncio event loop
loop = asyncio.get_event_loop()
# Queue up our `run()` coroutine for execution
loop.create_task(run())
# Start the event loop
loop.run_forever()
if __name__ == '__main__':
main()
Change Log
0.3.0
Mon Feb 27 2017
Fix docstrings for placement directives.
Implement Model.add_machine()
Bug fix - “to” parameter to Model.deploy() was broken
Add docs and examples for adding machines and containers and deploying charms to them.
Make Machine.destroy() block the current coroutine, returning only after the machine is actually removed from the remote model. This is more consistent with the way the other apis work (e.g. Model.deploy(), Application.add_unit(), etc).
Raise NotImplementedError in all unimplemented method stubs instead of silently passing.
0.2.0
Thu Feb 16 2017
Add default ssh key to newly created model.
Add loop helpers and simplify examples/deploy.py
Add support for deploying local charms, and bundles containing local charm paths.
Add ability to get cloud name for controller.
Bug fix - fix wrong api used in Model.destroy_unit()
Add error detection in bundle deploy.
0.1.2
Thu Dec 22 2016
Bug fix - Include docs in package
0.1.1
Thu Dec 22 2016
Bug fix - Include VERSION file in package
0.1.0
Wed Dec 21 2016
Initial Release
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
File details
Details for the file juju-0.3.0.tar.gz
.
File metadata
- Download URL: juju-0.3.0.tar.gz
- Upload date:
- Size: 133.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ac35676dae6ef98b033705404b3d27a3c832869fff39fdc895b7dd01a22c4751 |
|
MD5 | 6ea48fba62a1917b5ee46adcf86bd8a0 |
|
BLAKE2b-256 | f541bcdfd1eb0b7f17d183989dbc97dd85238bd1c6bd23bcc334cbf26dbf4720 |