Package: juju
Source code:https://github.com/juju/python-libjujuBug reports:https://github.com/juju/python-libjuju/issuesDocumentation:https://pythonlibjuju.readthedocs.io/en/latest/RequirementsPython 3.9/3.10Design NotesAsynchronous - Uses asyncio and async/await features of PythonWebsocket-level bindings are programmatically generated (indirectly) from the
Juju golang code, ensuring full api coverageProvides an OO layer which encapsulates much of the websocket api and
provides familiar nouns and verbs (e.g. Model.deploy(), Application.add_unit(),
etc.)Installationpip3installjujuQuickstartHere’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:Note : Pylibjuju requires an already bootstrapped Juju controller to connect to.#!/usr/bin/python3importloggingimportsysfromjujuimportjasynciofromjuju.modelimportModelasyncdefdeploy():# 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 modelawaitmodel.connect()try:# Deploy a single unit of the ubuntu charm, using the latest revision# from the stable channel of the Charm Store.ubuntu_app=awaitmodel.deploy('ubuntu',application_name='my-ubuntu',)if'--wait'insys.argv:# optionally block until the application is readyawaitmodel.wait_for_idle(status='active')finally:# Disconnect from the api server and cleanup.awaitmodel.disconnect()defmain():logging.basicConfig(level=logging.INFO)# 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)# Run the deploy coroutine in an asyncio event loop, using a helper# that abstracts loop creation and teardown.jasyncio.run(deploy())if__name__=='__main__':main()More examples can be found in the docs, as well as in theexamples/directory of the source tree which can be run usingtox.  For
example, to runexamples/connect_current_model.py, use:tox-eexample--examples/connect_current_model.pyREPLTo experiment with the library in a REPL, launch python in asyncio mode$python3-masyncioand then, to connect to the current model and fetch status:>>> from juju.model import Model
>>> model = Model()
>>> await model.connect_current()
>>> status = await model.get_status()VersioningThe current Pylibjuju release policy tracks the Juju release cadence.
In particular, whenever Juju makes a latest/stable release, pylibjuju pushes out
a release with the same version in the following week. Newly generated schemas
will be updated per Juju releases.Changelog3.3.1.1Thursday 15th Feb 2024## What’s ChangedThis is a patch release for fixing some build problems in the 3.3.1.0 release that rendered it unusable in some scenarios.Resolve build problems in 3.3.1.0 by @cderici inhttps://github.com/juju/python-libjuju/pull/10263.3.1.0Thursday 8th Feb 2024Remove paramiko upper-bound by @gboutry inhttps://github.com/juju/python-libjuju/pull/1005Remove explicit passing of event_loop into tests by @cderici inhttps://github.com/juju/python-libjuju/pull/1006chore: remove the upper restrictions on the websockets dependency by @tonyandrewmeyer inhttps://github.com/juju/python-libjuju/pull/1007Target ceiling version by @cderici inhttps://github.com/juju/python-libjuju/pull/1008Make it easier to run tests usingmakeby @cderici inhttps://github.com/juju/python-libjuju/pull/1012Avoid installing signal handlers to the event loop by @cderici inhttps://github.com/juju/python-libjuju/pull/1014feat: remove app block until done by @yanksyoon inhttps://github.com/juju/python-libjuju/pull/1017feat: remove app timeout by @yanksyoon inhttps://github.com/juju/python-libjuju/pull/1018Forward port latest changes from 2.9 onto 3.x by @cderici inhttps://github.com/juju/python-libjuju/pull/10223.3.0.0The main contribution of this release is the user secrets that’s released as a part of Juju 3.3.Thursday 30th Nov 2023Free pyblijuju from relying on juju client when connecting to a controller by @cderici inhttps://github.com/juju/python-libjuju/pull/984Handle FileNotFoundError on current_controller() by @DanielArndt inhttps://github.com/juju/python-libjuju/pull/937Add support for adding user secrets by @cderici inhttps://github.com/juju/python-libjuju/pull/986Complete support for user secrets by @cderici inhttps://github.com/juju/python-libjuju/pull/9873.2.3.0Thursday 26th Oct 2023Repository Maintenance Improvements by @cderici inhttps://github.com/juju/python-libjuju/pull/922Stale bot to not bother feature requests by @cderici inhttps://github.com/juju/python-libjuju/pull/926Fix linter issues by @cderici inhttps://github.com/juju/python-libjuju/pull/928Fix docstring typo by @DanielArndt inhttps://github.com/juju/python-libjuju/pull/927Fix asyncio on README by @marceloneppel inhttps://github.com/juju/python-libjuju/pull/930Fix integration/test_application.test_action by @cderici inhttps://github.com/juju/python-libjuju/pull/932Update 3.2 facade clients by @cderici inhttps://github.com/juju/python-libjuju/pull/931[JUJU-4488] Add licence headers to source files on 3.x by @cderici inhttps://github.com/juju/python-libjuju/pull/934Update async tests to use builtin python suite by @DanielArndt inhttps://github.com/juju/python-libjuju/pull/935Pass correct charm url to series selector by @cderici inhttps://github.com/juju/python-libjuju/pull/942Green CI cleanup for python-libjuju by @cderici inhttps://github.com/juju/python-libjuju/pull/939Bring forward support for nested assumes expressions on 3x by @cderici inhttps://github.com/juju/python-libjuju/pull/943Release 3.2.2.0 notes by @cderici inhttps://github.com/juju/python-libjuju/pull/945Cleanup release process for 3.x by @cderici inhttps://github.com/juju/python-libjuju/pull/946Use new DeployFromRepository endpoint for deploy by @cderici inhttps://github.com/juju/python-libjuju/pull/949Handle pending upload resources deployfromrepository by @cderici inhttps://github.com/juju/python-libjuju/pull/953Optimize connection teardown by @cderici inhttps://github.com/juju/python-libjuju/pull/952Uselog.warninginstead of the deprecatedwarnby @sed-i inhttps://github.com/juju/python-libjuju/pull/954Find controller name by endpoint on 3.x track by @cderici inhttps://github.com/juju/python-libjuju/pull/966Optimize & fix unit removal by @cderici inhttps://github.com/juju/python-libjuju/pull/967Allow switch kwarg in refresh to switch to local charms by @jack-w-shaw inhttps://github.com/juju/python-libjuju/pull/971Parse charm URLs consistantly for local charms by @jack-w-shaw inhttps://github.com/juju/python-libjuju/pull/974Juju config directory location fix on 3.x by @cderici inhttps://github.com/juju/python-libjuju/pull/976[JUJU-4779] Ensure valid charm origin for local charm switches by @jack-w-shaw inhttps://github.com/juju/python-libjuju/pull/978Application refresh with resources on 3.x by @cderici inhttps://github.com/juju/python-libjuju/pull/9733.2.2.0Wednesday 6th September 2023This is a minor release on the 3.x track, works with any Juju 3.x controller.Repository Maintenance Improvements by @cderici inhttps://github.com/juju/python-libjuju/pull/922Stale bot to not bother feature requests by @cderici inhttps://github.com/juju/python-libjuju/pull/926Fix linter issues by @cderici inhttps://github.com/juju/python-libjuju/pull/928Fix docstring typo by @DanielArndt inhttps://github.com/juju/python-libjuju/pull/927Fix asyncio on README by @marceloneppel inhttps://github.com/juju/python-libjuju/pull/930Fix integration/test_application.test_action by @cderici inhttps://github.com/juju/python-libjuju/pull/932Update 3.2 facade clients by @cderici inhttps://github.com/juju/python-libjuju/pull/931[JUJU-4488] Add licence headers to source files on 3.x by @cderici inhttps://github.com/juju/python-libjuju/pull/934Update async tests to use builtin python suite by @DanielArndt inhttps://github.com/juju/python-libjuju/pull/935Pass correct charm url to series selector by @cderici inhttps://github.com/juju/python-libjuju/pull/942Green CI cleanup for python-libjuju by @cderici inhttps://github.com/juju/python-libjuju/pull/939Bring forward support for nested assumes expressions on 3x by @cderici inhttps://github.com/juju/python-libjuju/pull/9433.2.0.1Thursday 20th July 2023This is a point release on the 3.x track, works with any Juju 3.x controller.Update readme and add some docstrings for functions by @cderici inhttps://github.com/juju/python-libjuju/pull/873Forward port subordinate utils by @cderici inhttps://github.com/juju/python-libjuju/pull/880[JUJU-3952] Revisit access control levels by @cderici inhttps://github.com/juju/python-libjuju/pull/882[JUJU-3999] Avoid parsing endpoint for overlay offers by @cderici inhttps://github.com/juju/python-libjuju/pull/887Forward port upgrade resource fixes in app refresh by @cderici inhttps://github.com/juju/python-libjuju/pull/889[JUJU-4076] Renamewait_for_unitsand make semantics clearer by @cderici inhttps://github.com/juju/python-libjuju/pull/890Stabilize sphinx build on RTD by @cderici inhttps://github.com/juju/python-libjuju/pull/899Move test utils into a separate module by @cderici inhttps://github.com/juju/python-libjuju/pull/903Remove title prefixes from issue templates by @cderici inhttps://github.com/juju/python-libjuju/pull/904[JUJU-4048] Use GetChangesMapArgs for bundle changes by @jack-w-shaw inhttps://github.com/juju/python-libjuju/pull/907Forward ports from 2.9 to 3.x by @cderici inhttps://github.com/juju/python-libjuju/pull/910Remove ceiling on pyyaml version by @cderici inhttps://github.com/juju/python-libjuju/pull/9183.2.0.0Wednesday 7th June 2023This release contains the new endpoints for Juju 3.2.0.This release works with any Juju 3.x controller.Add base.bootstrapped decorator to integration test by @cderici inhttps://github.com/juju/python-libjuju/pull/856Add mantic and lunar to list of ubuntu series by @addyess inhttps://github.com/juju/python-libjuju/pull/853[JUJU-3885] forward port ipv6 support by @cderici inhttps://github.com/juju/python-libjuju/pull/866Revisit auto documentation generation with sphinx on RTD by @cderici inhttps://github.com/juju/python-libjuju/pull/871[JUJU-3894] Forward port some fixes from 2.9 to master by @cderici inhttps://github.com/juju/python-libjuju/pull/870Revisit the secret backend integration test by @cderici inhttps://github.com/juju/python-libjuju/pull/858[JUJU-3954] Fix incorrect base channel computation by @cderici inhttps://github.com/juju/python-libjuju/pull/875[JUJU-3927] Add 3.2.0 facades  by @juanmanuel-tirado inhttps://github.com/juju/python-libjuju/pull/8743.1.2.0Friday 5th May 2023This release has been tested with Juju 3.1.2 and contains the new
endpoints for secrets backend.This release works with any Juju 3.x controller.[JUJU-3202] Add facades for 3.1.1. by @juanmanuel-tirado inhttps://github.com/juju/python-libjuju/pull/807Add destroy units by @cderici inhttps://github.com/juju/python-libjuju/pull/812[JUJU-3517] Revisit _build_facades in connection by @cderici inhttps://github.com/juju/python-libjuju/pull/826[JUJU-3527] Added 3.1.2 and 3.2-beta2 schemas. by @juanmanuel-tirado inhttps://github.com/juju/python-libjuju/pull/828[JUJU-1628] Deploy by revision by @cderici inhttps://github.com/juju/python-libjuju/pull/830[JUJU-3552] Prepare 3.1.2.1 release by @juanmanuel-tirado inhttps://github.com/juju/python-libjuju/pull/8363.1.0.1Friday 10th February 2023This release targets juju version 3.1.0 and enables the new secrets backend api.
Connectivity with juju controllers in the 3.x series is allowed, connections with different major version controllers (e.g. 2.x, 4.x, etc.) will be cancelled.This version is only tested using Juju 3.1.0.setup.py: adjust websockets versions for py38-310 by @mert-kirpici inhttps://github.com/juju/python-libjuju/pull/731[JUJU-2175] Remove juju 2.9 support on 3.1.0 by @juanmanuel-tirado inhttps://github.com/juju/python-libjuju/pull/774[JUJU-2276] Series or base for local charms by @cderici inhttps://github.com/juju/python-libjuju/pull/777[JUJU-2391] Fix wrong bases analysis. by @juanmanuel-tirado inhttps://github.com/juju/python-libjuju/pull/782[JUJU-2401] Added release candidate workflow. by @juanmanuel-tirado inhttps://github.com/juju/python-libjuju/pull/784[JUJU-2402] Prepare nightly juju edge testing. by @juanmanuel-tirado inhttps://github.com/juju/python-libjuju/pull/785[JUJU-2237] Remove charmstore charm support from pylibjuju by @cderici inhttps://github.com/juju/python-libjuju/pull/786[JUJU-2426] Secrets support by @juanmanuel-tirado inhttps://github.com/juju/python-libjuju/pull/791[JUJU-2573] Base argument for model deploy by @cderici inhttps://github.com/juju/python-libjuju/pull/798Add compatibility for juju 3.1.0 by @juanmanuel-tirado inhttps://github.com/juju/python-libjuju/pull/799Replace schemas.json with a wellformed version. by @juanmanuel-tirado inhttps://github.com/juju/python-libjuju/pull/800## New Contributors@mert-kirpici made their first contribution inhttps://github.com/juju/python-libjuju/pull/731Full Changelog:https://github.com/juju/python-libjuju/compare/3.0.4…3.1.0.13.0.4Wednesday 26th October[JUJU-2027] Local refresh with resoruces by @cderici inhttps://github.com/juju/python-libjuju/pull/757[JUJU-2026] Improve resolve charm by @cderici inhttps://github.com/juju/python-libjuju/pull/761Add owner and data to license file by @arturo-seijas inhttps://github.com/juju/python-libjuju/pull/760## New Contributors@arturo-seijas made their first contribution inhttps://github.com/juju/python-libjuju/pull/760Full Changelog:https://github.com/juju/python-libjuju/compare/3.0.3…3.0.43.0.3Saturay October 22 2022Wait for idle arg type check by @cderici inhttps://github.com/juju/python-libjuju/pull/741[JUJU-1970] Revise local refresh by @cderici inhttps://github.com/juju/python-libjuju/pull/742[JUJU-1984] Update facade schemas for juju 3.0-rc1-2 by @cderici inhttps://github.com/juju/python-libjuju/pull/745[JUJU-1992] Fix charmhub series deploy 3.0 by @cderici inhttps://github.com/juju/python-libjuju/pull/746[JUJU-2001] Fix base for local charms and bundles for CharmOrigin 3.0 by @cderici inhttps://github.com/juju/python-libjuju/pull/749[JUJU-2017] Check subordinate field value instead of existence by @cderici inhttps://github.com/juju/python-libjuju/pull/751[JUJU-2018] Update 2.9.36 facades & clients by @cderici inhttps://github.com/juju/python-libjuju/pull/752[JUJU-1705] Make sure the action status is correctly set by @cderici inhttps://github.com/juju/python-libjuju/pull/753[JUJU-2019] Small fixes for 3.0 by @cderici inhttps://github.com/juju/python-libjuju/pull/754Full Changelog:https://github.com/juju/python-libjuju/compare/3.0.2…3.0.33.0.2Wednesday October 5 2022Model name can now be accessed through model.name by @jack-w-shaw inhttps://github.com/juju/python-libjuju/pull/702[JUJU-1593] Fixunit.run()and update the old client codes by @cderici inhttps://github.com/juju/python-libjuju/pull/710Add py.typed marker by @sed-i inhttps://github.com/juju/python-libjuju/pull/709[JUJU-1664] Add force, no-wait, destroy-storage params to app.destroy by @cderici inhttps://github.com/juju/python-libjuju/pull/714snapcraft.io access should use https requests by @addyess inhttps://github.com/juju/python-libjuju/pull/715[JUJU-1680] Add issue and PR templates by @cderici inhttps://github.com/juju/python-libjuju/pull/718[JUJU-1681] Add –attach-storage parameter to model.deploy by @cderici inhttps://github.com/juju/python-libjuju/pull/720[JUJU-1706] Allow waiting forwait_for_exact_units=0by @cderici inhttps://github.com/juju/python-libjuju/pull/723[JUJU-1663] Drop Python 3.5 support from python-libjuju by @cderici inhttps://github.com/juju/python-libjuju/pull/722[JUJU-1671] Charmhub url from model config by @cderici inhttps://github.com/juju/python-libjuju/pull/724[JUJU-1733] Revisit unitrun example by @cderici inhttps://github.com/juju/python-libjuju/pull/725[JUJU-1800] Revise theapplication.upgrade_charm()(refresh) by @cderici inhttps://github.com/juju/python-libjuju/pull/729[JUJU-1893] Revisitcharmhub.info()by @cderici inhttps://github.com/juju/python-libjuju/pull/7373.0.1Thursday August 11 2022[JUJU-1593] Fixrun_actionsand facade issues by @cderici inhttps://github.com/juju/python-libjuju/pull/7063.0.0Tuesday August 9 2022Switching to semantic versioning. From this release on, at least the major release number matches
the most recent Juju supported. Hence the jump to3.0.0since this release supportsJuju 3.0.
(This also means thatpython-libjuju <= 2.9.11only support up toJuju 2.x)[JUJU-1439] Initial fixes fortest_modelto pass with juju 3.0 by @cderici inhttps://github.com/juju/python-libjuju/pull/689[JUJU-1464] More fixes for 3.0 compatibility by @cderici inhttps://github.com/juju/python-libjuju/pull/691[JUJU-1457] Merge 3.0 compatibility branch onto master by @cderici inhttps://github.com/juju/python-libjuju/pull/692Fix conditional by @sed-i inhttps://github.com/juju/python-libjuju/pull/696[JUJU-1534] Fixmodel.connect_current()by @cderici inhttps://github.com/juju/python-libjuju/pull/697[JUJU-1542] Fix run actions on units by @cderici inhttps://github.com/juju/python-libjuju/pull/698[JUJU-1577] Replace k8s bundles with machine bundles for tests by @cderici inhttps://github.com/juju/python-libjuju/pull/703[JUJU-1528] Add storage implementation by @cderici inhttps://github.com/juju/python-libjuju/pull/7012.9.11Monday July 11 2022Add REPL quickstart subsection by @sed-i inhttps://github.com/juju/python-libjuju/pull/676Revision of test onos.charm by @juanmanuel-tirado inhttps://github.com/juju/python-libjuju/pull/686[JUJU-1353] Parse assume directives. by @juanmanuel-tirado inhttps://github.com/juju/python-libjuju/pull/685Replace deprecated juju.loop() calls from examples and documentation by @ittner inhttps://github.com/juju/python-libjuju/pull/687Fixed the bundle run when the channel is None by @oEscal inhttps://github.com/juju/python-libjuju/pull/6642.9.10Thursday June 9 2022[JUJU-1155] Avoid incorrectly settingseries: kubernetesfor sidecar charms in k8s bundles by @cderici inhttps://github.com/juju/python-libjuju/pull/679[JUJU-1172] Visiting the pylibjuju CI by @cderici inhttps://github.com/juju/python-libjuju/pull/681[JUJU-1124] Avoid sending path across the wire for local resource file name by @cderici inhttps://github.com/juju/python-libjuju/pull/6782.9.9Wednesday April 26 2022[JUJU-835] Avoid ignoring asyncio exceptions in coroutines by @cderici inhttps://github.com/juju/python-libjuju/pull/658[JUJU-843] Attach-resource to check if given binary file by @cderici inhttps://github.com/juju/python-libjuju/pull/659[JUJU-858] Add quality of life feature ensure application removal at return by @cderici inhttps://github.com/juju/python-libjuju/pull/665[JUJU-965] Add a bit of client side constraint validation by @cderici inhttps://github.com/juju/python-libjuju/pull/666support python3.10 with later versions of websockets by @addyess inhttps://github.com/juju/python-libjuju/pull/673Revert “Avoid ignoring asyncio exceptions in coroutines” by @simskij inhttps://github.com/juju/python-libjuju/pull/672[JUJU-796] Add relate method and deprecate add-relation by @jack-w-shaw inhttps://github.com/juju/python-libjuju/pull/660[JUJU-981] Get series from deployed app instead of metadata when charm upgrade by @cderici inhttps://github.com/juju/python-libjuju/pull/6712.9.8Monday March 21 2022[JUJU-567] Use ModelManager instead of ControllerFacade to list available models by @cderici inhttps://github.com/juju/python-libjuju/pull/632[JUJU-573] Fix charm resolution for Juju 2.8.11 by @cderici inhttps://github.com/juju/python-libjuju/pull/633[JUJU-704] Remove non-implemented (stuıb) functions by @cderici inhttps://github.com/juju/python-libjuju/pull/646[JUJU-676] Avoid defaulting to empty string for charm origin by @cderici inhttps://github.com/juju/python-libjuju/pull/647Charmstore compatability of deploying bundles by @addyess inhttps://github.com/juju/python-libjuju/pull/650[JUJU-731] Subordinate charm num unit by @cderici inhttps://github.com/juju/python-libjuju/pull/648[JUJU-769] Facade schemas for 2.9.27 by @cderici inhttps://github.com/juju/python-libjuju/pull/652[JUJU-771] Auto switch to scale from add_unit on container based models by @cderici inhttps://github.com/juju/python-libjuju/pull/6532.9.7Friday February 11 2022[JUJU-556] Facade schemas for Juju 2.9.24 by @cderici inhttps://github.com/juju/python-libjuju/pull/626Provide extra metadata with charmstore.entity(…)  by @addyess inhttps://github.com/juju/python-libjuju/pull/6352.9.6Thursday January 27 2022[JUJU-320] Unit public address by @SimonRichardson inhttps://github.com/juju/python-libjuju/pull/600[JUJU-244] Add attach-resource by @cderici inhttps://github.com/juju/python-libjuju/pull/601[JUJU-140] Model.wait_for_idle – for apps with no units yet by @cderici inhttps://github.com/juju/python-libjuju/pull/575[JUJU-367] Improveget_charm_seriesto check the model for series for a local charm by @cderici inhttps://github.com/juju/python-libjuju/pull/607[JUJU-366] Utility for connecting directly to existing connection by @cderici inhttps://github.com/juju/python-libjuju/pull/605Use public-address key instead of public_address by @wolsen inhttps://github.com/juju/python-libjuju/pull/610[JUJU-376]wait_for_idleto support scale down by @cderici inhttps://github.com/juju/python-libjuju/pull/613[JUJU-378] Utility for block_until-ing with a custom coroutine by @cderici inhttps://github.com/juju/python-libjuju/pull/614Fallback to ‘local-fan’ by @dparv inhttps://github.com/juju/python-libjuju/pull/612Minor comments on docs for block_until related functions. by @juanmanuel-tirado inhttps://github.com/juju/python-libjuju/pull/617Additional checks in print status. by @juanmanuel-tirado inhttps://github.com/juju/python-libjuju/pull/6222.9.5Friday December 3 2021remove the event loop arguments by @cderici inhttps://github.com/juju/python-libjuju/pull/560add debug-log by @cderici inhttps://github.com/juju/python-libjuju/pull/562Model status by @juanmanuel-tirado inhttps://github.com/juju/python-libjuju/pull/563Pin cffi version to 1.14.6 for Python 3.5 by @cderici inhttps://github.com/juju/python-libjuju/pull/570Wait for applications to terminate on model reset by @balbirthomas inhttps://github.com/juju/python-libjuju/pull/572Babysitting python3.5 by @cderici inhttps://github.com/juju/python-libjuju/pull/571Deploy charmhub bundles by @cderici inhttps://github.com/juju/python-libjuju/pull/569Facade schemas for 2.9.17 by @SimonRichardson inhttps://github.com/juju/python-libjuju/pull/579Bundles with overlays by @cderici inhttps://github.com/juju/python-libjuju/pull/566Consistently getting a unit’s public address by @cderici inhttps://github.com/juju/python-libjuju/pull/573[JUJU-158] Add python3.9 to setup.py by @cderici inhttps://github.com/juju/python-libjuju/pull/585[JUJU-157] Add note for removing services by @cderici inhttps://github.com/juju/python-libjuju/pull/583Added boolean entries to normalize values. by @juanmanuel-tirado inhttps://github.com/juju/python-libjuju/pull/582[JUJU-138] Streamlining asyncio tasks/events by @cderici inhttps://github.com/juju/python-libjuju/pull/580[JUJU-234] Fix for small bug in task handling by @cderici inhttps://github.com/juju/python-libjuju/pull/589Ensure all watchers validate for the Id by @SimonRichardson inhttps://github.com/juju/python-libjuju/pull/592[JUJU-276] Facade schemas for 2.9.19 by @cderici inhttps://github.com/juju/python-libjuju/pull/594[JUJU-238] Small bug fix for old ClientFacade support by @cderici inhttps://github.com/juju/python-libjuju/pull/593[JUJU-239] Debug-log parameters by @cderici inhttps://github.com/juju/python-libjuju/pull/595[JUJU-213] Local typefileresource support by @cderici inhttps://github.com/juju/python-libjuju/pull/590[JUJU-289] Use provided series in deploy if supported by @jack-w-shaw inhttps://github.com/juju/python-libjuju/pull/596[JUJU-292] Update the charms in the tests to use Charmhub by @cderici inhttps://github.com/juju/python-libjuju/pull/597Legacy “services” for describing “applications” within bundles are no longer supported. “applications” can be used as a direct replacement for “services” in bundles.yaml.The websocket (ws) in a Connection object became a read-only property.2.9.4Tuesday October 12 2021Charmhub deploy charm by @SimonRichardson inhttps://github.com/juju/python-libjuju/pull/483add wait_for_status instead of wait_for_active by @sed-i inhttps://github.com/juju/python-libjuju/pull/517Adds resource support for charmhub deployments by @tlm inhttps://github.com/juju/python-libjuju/pull/516Fix bug #519 and #522: Add local resources for bundles by @davigar15 inhttps://github.com/juju/python-libjuju/pull/520Patching some missing kwargs by @cderici inhttps://github.com/juju/python-libjuju/pull/527Implementingbackupfunctionality by @cderici inhttps://github.com/juju/python-libjuju/pull/536Fix issue 532: Set the default_series properly by @davigar15 inhttps://github.com/juju/python-libjuju/pull/533A random small bug fix by @cderici inhttps://github.com/juju/python-libjuju/pull/541Allow ApplicationFacade set_config with non-string values by @cderici inhttps://github.com/juju/python-libjuju/pull/540Skip macaroon tests issue 534 by @cderici inhttps://github.com/juju/python-libjuju/pull/542Fix issue 530: Check the controller for unsynched models by @cderici inhttps://github.com/juju/python-libjuju/pull/539Upgrade setup-python action. by @juanmanuel-tirado inhttps://github.com/juju/python-libjuju/pull/543Fix integration tests by @cderici inhttps://github.com/juju/python-libjuju/pull/544Bring juju/juju.py into life by @cderici inhttps://github.com/juju/python-libjuju/pull/546Extract resources info from apps in locally deployed bundle by @cderici inhttps://github.com/juju/python-libjuju/pull/552Fix for simple bug in bundle deployment code self.charm -> self[‘charm’] by @jnsgruk inhttps://github.com/juju/python-libjuju/pull/558Fix integration tests continued by @cderici inhttps://github.com/juju/python-libjuju/pull/547Get the config dir resolve logic into one place by @cderici inhttps://github.com/juju/python-libjuju/pull/555Complete the backups functionality by @cderici inhttps://github.com/juju/python-libjuju/pull/5562.9.3Monday August 12 2021Bug fix - Fix ‘Default to bundle series if the charm has no series field’ #5142.9.2Monday June 28 2021Bug fix - Fix ‘metadata referenced before assignment’ error #5092.9.1Wednesday June 16 2021Bug fix - Bundle Exposed endpoints missing #502Bug fix - Fix series requirement for local charms #504Add local charm update support #5072.9.0Thursday May 27 2021Update facade methods for Juju 2.9.0Update facade methods for Juju 2.9.1Bug fix - Support for Juju client proxies (LP#1926595)Bug fix - Honor charm channel in bundles #496Remove machine workaround for Juju 2.2.32.8.6Tuesday March 23 2021Update facade methods for Juju 2.8.10Bug fix - Fix typo in param name for ScaleApplicationsIntroduction of hostname property for Machines2.8.5Monday February 8 2021Implement add_space and get_spaces.Update facade controllers.Support already archived (.charm or .zip) local charms.Introduction of wait_for_bundle method.Bug fix - Handle None in list_offers resultsBug fix - Update libraries to support Python 3.9+2.8.4Thursday October 1 2020Update facade methods for Juju 2.8.3Bug fix - Add force and max wait for destroying a modelBug fix - Fix derivation of the application status2.8.3Friday August 28 2020Bug fix - Export the CAAS model operator facade (#434)Bug fix - Allow passing controllers to prevent consume reading local filesystem (#436)2.8.2Tuesday July 14 2020Update facade methods for Juju 2.8.1Add documentation to the client API methods (using the 2.8.1 changes)Bug fix -Fixes application status being reported as unset (#430)Bug fix - Handle Network Unreachable OSErrors (#426)2.8.1Monday May 18 2020Fix positional argument usage in facade calls.Add get shim to facade types.Fix SSH await on unitFix integration testsFix tox.ini to use supported python versions.Fix constraints regex using subscript on matches (py36).Fix facade return type documentation.Fix schema objects with array values.Fix subscript lookups by using JSON keys.Add definition test.2.8.0Wednesday May 13 2020Update facade methods for Juju 2.8.0Fixes codegen for Python 3.7+Nested facade definitions are now deserialised properly (e.g. storage on ApplicationDeploy)Missing client facades are now ignored and a warning is printed (#382)Add SCP example (#383)Add watch_model_summaries method to Controller (#390)Bug fix - make_archive on Model handles symlinks (#391 #392)Add SSH support for units and machines (#393)Add connection HA support (#402)Bug fix - resolve api_endpoints from controller (#406 #407)2.7.1Thursday January 9 2020Added the missing facade type, when attempting to connect to a model.2.7.0Tuesday January 7 2020Update facade methods for Juju 2.7.0Fix an issue when querying CMR relations (#366)Fix storage support in bundles (#361)Fix reporting of unit leaders (#374)AddCloud API support (#370)2.6.3Refactor bundle handler code so that it can be more resilient against changes
to the bundle changes API.Updated the dependencies to the latest version (pyyaml)2.6.2Wednesday August 27 2019Fixes validation issue with a go interface{} type (Any type) being returned
from the Juju API server (#344)2.6.1Wednesday August 21 2019Pylibjuju now validates arguments correctly, instead of relying on default
positional argument values.2.6.0Wednesday August 14 2019Update facade methods for Juju 2.6.6Pylibjuju release now follows the cadence of Juju releases, which also
includes bumping the version number to follow suit.Pinned API facades. All facades in Pylibjuju are now pinned to a set of
facade versions that is more conservative to prevent breakages against new
features. The ability to override the pinned facades and specify your own
facade versions is possible upon connection to a controller or model.Cross model relations (CMR) when deploying and adding relations. Additionally
getting information about the CMR offers are available on the model.Cross model relations (CMR) in bundles.Ability to export bundle including overlays.Manual provisioning without a ubuntu user (#335)Addition of remote applications when adding relations via SAAS blocksApplying topological sorting to bundle changes API response, allows deployment
of complex bundles possible.Updated definitions types to include the latest information from Juju.Keyword arguments (unknown_fieldin code) are now available on Juju
responses.0.11.7Wednesday April 19 2019Update facade methods for Juju 2.6.4Support for trusted bundles and charms (See:Trustdocumentation)0.11.6Wednesday May 22 2019Disable hostname checking on controller connection (#305)Handle RedirectError payloads returned by Login RPCs (#303)0.11.5Monday April 1 2019Handle deltas of unknown types (fixes connecting to Juju 2.6 controllers) (#299)Test fixes (#298)0.11.4Monday April 1 2019Additional work with annotations. (#290)Check server cert. (#296)0.11.3Wednesday March 13 2019k8s bundles no longer have application placement (#293)Add retry for connection if all endpoints fail (#288)Support generation of registration string for model sharing. (#279)Add Twine for dist upload on release (#284)0.11.2Wednesday January 16 2019update facade methods for Juju 2.5-rc2 (#281)Add test case for redirect during connect (#275)Implement App.get_resources and pinned resources in bundles (#278)0.11.1Thursday December 13 2018Fix bundles with subordinates for Juju <2.5 (#277)0.11.0Tuesday December 11 2018Updates for new Juju version (#274)Fix wrong variable name in revoke_model function (#271)0.10.2Tuesday September 18 2018set include_stats to false to reduce request time (#266)0.10.1Monday September 17 2018Retry ssh in manual provision test (#265)Clean up lint and add lint coverage to travis config (#263)Increase the timeout for charmstore connections (#262)Fix log level ofDriver connected to jujumessage (#258)0.10.0Thursday August 16 2018Fix error due to scp extra opts order (#260)Implement set/get model constraints (#253)0.9.1Monday July 16 2018Update websockets to 6.0 to fix OS X support due to Brew update to Py3.7 (#254)0.9.0Friday June 29 2018python3.7 compatibility updates (#251)Handle juju not installed in is_bootstrapped for tests (#250)Add app.reset_config(list). (#249)Implement model.get_action_status (#248)Fixmake clientin Python 3.6 (#247)0.8.0Thursday June 14 2018Add support for adding a manual (ssh) machine (#240)Backwards compatibility fixes (#213)Implement model.get_action_output (#242)Fix JSON serialization error for bundle with lxd to unit placement (#243)Fix reference in docs to connect_current (#239)Wrap machine agent status workaround in version check (#238)Convert seconds to nanoseconds for juju.unit.run (#237)Fix spurious intermittent failure in test_machines.py::test_status (#236)Define an unused juju-zfs lxd storage pool for Travis (#235)Add support for Application get_actions (#234)0.7.5Friday May 18 2018Surface errors from bundle plan (#233)Always send auth-tag even with macaroon auth (#217)Inline jsonfile credential when sending to controller (#231)0.7.4Tuesday Apr 24 2018Always parse tags and spaces constraints to lists (#228)Doc index improvements (#211)Add doc req to force newer pymacaroons to fix RTD buildsFix dependency conflict for building docs0.7.3Tuesday Feb 20 2018Full macaroon bakery support (#206)Fix regression with deploying local charm, add test case (#209)Expose a machines series (#208)Automated test runner fixes (#205)0.7.2Friday Feb 9 2018Support deploying bundle YAML file directly (rather than just directory) (#202)0.7.1Monday Dec 18 2017Fix missed renames of model_uuids (#197)0.7.0Fri Dec 15 2017Fix race condition in adding relations (#192)Fix race condition in connection monitor test (#183)Fix example in README (#178)Fix rare hang during Unit.run (#177)Fix licensing quirks (#176)Refactor model handling (#171)Refactor users handling, add get_users (#170)Upload credential to controller when adding model (#168)Support ‘applications’ key in bundles (#165)Improve handling of thread error handling for loop.run() (#169)Fix encoding when using to_json() (#166)Fix intermittent test failures (#167)0.6.1Fri Sept 29 2017Fix failure when controller supports newer facade version (#145)Fix test failures (#163)Fix SSH key handling when adding a new model (#161)Make Application.upgrade_charm upgrade resources (#158)Expand integration tests to use stable/edge versions of juju (#155)Move docs to ReadTheDocs (https://pythonlibjuju.readthedocs.io/en/latest/)0.6.0Thu June 29 2017Implement scp functionality (#149)Add Unit.public_address property (#153)Adds support for getting/setting config on a model (#152)0.5.3Thu June 22 2017Improve handling of closed connections (#148)Configurable and larger max message size (#146)0.5.2Wed June 14 2017Fix deploying non-stable channels and explicit revs (#144)0.5.1Tue June 13 2017Update schema for Juju 2.3 alpha1 (#142)Improve API doc navigation and coverage (#141)Add type info to Model.add_machine docs (#138)0.5.0Thu June 8 2017Add machine status properties (#133)Add model context manager (#128)Implement Application.upgrade_charm method (#132)0.4.3Thu June 1 2017Accept new / unknown API fields gracefully (#131)Add support for new agent-version field in ModelInfo (#131)Replace pip with pip3 in install instructions (#129)Strip local:-prefix from local charm urls (#121)0.4.2Wed May 10 2017Support (and prefer) per-controller macaroon files (#125)0.4.1Wed Apr 27 2017Remove VERSION_MAP and rely on facade list from controller (#118)Refactor connection task management to avoid cancels (#117)Refactored login code to better handle redirects (#116)0.4.0Wed Apr 19 2017Feature/api version support (#109)Expanding controller.py with basic user functions, get_models and
destroy (#89)Added Monitor class to Connection. (#105)Support placement lists (#103)Include resources from store when deploying (#102)Allow underscore to dash translation when accessing model
attributes (#101)Added controller to ssh fix. (#100)Regen schema to pick up missing APIsImprove error handlingFix issue where we do not check to make sure that we are receiving the
correct response.Retry calls to charmstore and increase timeout to 5sMake connect_model and deploy a bit more friendlyFix model name not including userImplement Model.get_statusAdd integration tests.0.3.0Mon Feb 27 2017Fix docstrings for placement directives.Implement Model.add_machine()Bug fix - “to” parameter to Model.deploy() was brokenAdd 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.0Thu Feb 16 2017Add default ssh key to newly created model.Add loop helpers and simplify examples/deploy.pyAdd 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.2Thu Dec 22 2016Bug fix - Include docs in package0.1.1Thu Dec 22 2016Bug fix - Include VERSION file in package0.1.0Wed Dec 21 2016Initial Release