How to manage charms or bundles
> See also: juju:charm
This document shows various ways in which you may interact with a charm or a bundle.
Query Charmhub for available charms / bundles
To query Charmhub for the charms / bundles on python-libjuju, you can use the find method on the CharmHub object that’s built-in on each Model object:
await model.charmhub.find('wordpress')
View details about a Charmhub charm / bundle
To view details about a particular Charmhub charm / bundle on python-libjuju, you can use the info method on the CharmHub object that’s built-in on each Model object:
await model.charmhub.info('wordpress')
Find out the resources available for a charm
> See more: How to manage charm resources
Deploy a charm / bundle
To deploy a Charmhub charm / bundle using python-libjuju, you can use the deploy method on the Model object:
m = model.Model()
await m.connect()
# deploy a charm
await m.deploy('mysql')
# deploy a bundle
await m.deploy('kubeflow')
# deploy a local charm
await m.deploy('./mini_ubuntu-20.04-amd64.charm')
# deploy a local charm with a resource
await m.deploy('./demo-api-charm_ubuntu-22.04-amd64.charm', resources={'demo-server-image=ghcr.io/beliaev-maksim/api_demo_server':'0.0.9'})
# deploy a local bundle
await m.deploy('./mediawiki-model-bundle.yaml')
# deploy a bundle with an overlay
await m.deploy('mediawiki', overlays=['./custom-mediawiki.yaml'])
# generic openstack example
await m.deploy('./bundle-focal-yoga.yaml', overlays=['./overlay-focal-yoga-mymaas.yaml', './overlay-focal-yoga-mymaas-shared-filesystem.yaml'])
> See more: Model.deploy()
Update a charm
To update a charm on python-libjuju, you can use the upgrade_charm (aliased as refresh) method on the Application object:
# upgrade to latest revision on the channel
await my_app.upgrade_charm()
# upgrade to the latest revision on a given channel
await my_app.upgrade_charm(channel='latest/edge')
# upgrade to a particular revision
await my_app.upgrade_charm(revision=3)
# upgrade with a local charm
await my_app.upgrade_charm(path='./path/to/juju-test')
# replace a charm completely with another charm
await my_app.upgrade_charm(switch='./path/to/juju-test')
# Note that the path and switch parameters are mutually exclusive.
> See more: Application.upgrade_charm()
Remove a charm / bundle
As a charm / bundle is just the means by which (an) application(s) are deployed, there is no way to remove the charm / bundle. What you can do, however, is remove the application / model.
> See more: Remove an application