CINXE.COM
Juju | Charm SDK Documentation
<!DOCTYPE html> <!-- This is a basic HTML file template to become the new homepage of the site. Currently it simply includes Vanilla styles and not much else. When you come to work on it in ernest, please remove this comment and replace index.html with this file. --> <html lang="en"> <head> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <meta name="description" content="Juju is an open source orchestration engine for software operators that enables the deployment, integration and lifecycle management of applications at any scale, on any infrastructure." /> <link rel="icon" type="image/png" href="/static/favicon.png?v=c916f6a" /> <link rel="stylesheet" href="/static/css/styles.css?v=3aec53a" /> <title> Juju | Charm SDK Documentation </title> <meta name="description" content="Juju is an open source orchestration engine for software operators that enables the deployment, integration and lifecycle management of applications at any scale, on any infrastructure"> <meta property="og:title" content="Charm SDK Documentation"/> <meta property="og:site_name" content="Juju"/> <meta property="og:type" content="website"/> <meta property="og:description" content="Juju is an open source orchestration engine for software operators that enables the deployment, integration and lifecycle management of applications at any scale, on any infrastructure"/> <meta property="og:image" content="https://assets.ubuntu.com/v1/b0441e88-Canonical%20Juju.svg" /> <meta property="og:image:width" content="1660" /> <meta property="og:image:height" content="1000" /> <meta property="og:image:alt" content="Canonical Juju banner" /> <meta property="og:url" content="https://juju.is" /> <meta property="twitter:card" content="summary_large_image" /> <meta property="twitter:site" content="@juju_devops" /> <meta property="twitter:creator" content="@juju_devops" /> <meta property="twitter:image" content="https://assets.ubuntu.com/v1/b0441e88-Canonical%20Juju.svg" /> <meta property="twitter:url" content="https://juju.is" /> <meta name="msvalidate.01" content="F922865A678BADA5E7209E29B2656AA6" /> <script src="https://assets.ubuntu.com/v1/703e23c9-lazysizes+noscript+native-loading.5.1.2.min.js" defer></script> <script src="https://buttons.github.io/buttons.js" defer></script> <!-- Google Tag Manager --> <script>(function (w, d, s, l, i) { w[l] = w[l] || []; w[l].push({ 'gtm.start': new Date().getTime(), event: 'gtm.js' }); var f = d.getElementsByTagName(s)[0], j = d.createElement(s), dl = l != 'dataLayer' ? '&l=' + l : ''; j.async = true; j.src = 'https://www.googletagmanager.com/gtm.js?id=' + i + dl; f.parentNode.insertBefore(j, f); })(window, document, 'script', 'dataLayer', 'GTM-K9KCMZ');</script> <!-- End Google Tag Manager --> </head> <body class="docs"> <!-- Google Tag Manager (noscript) --> <noscript><iframe src="https://www.googletagmanager.com/ns.html?id=GTM-K9KCMZ" height="0" width="0" style="display: none; visibility: hidden;"></iframe></noscript> <!-- End Google Tag Manager (noscript) --> <div class="l-docs"> <div class="l-docs__header"> <header id="navigation" class="p-navigation is-dark"> <div class="l-docs__subgrid"> <div class="l-docs__sidebar"> <div class="p-navigation__banner"> <div class="p-navigation__tagged-logo"> <a class="p-navigation__link" href="/"> <div class="p-navigation__logo-tag"> <img class="p-navigation__logo-icon" src="https://assets.ubuntu.com/v1/a603c7c9-Favicon - Juju.svg" alt="Canonical Juju" /> </div> <span class="p-navigation__logo-title">Canonical Juju</span> </a> </div> <ul class="p-navigation__items"> <li class="p-navigation__item"> <a href="#navigation" class="p-navigation__toggle--open" title="menu">Menu</a> <a href="#navigation-closed" class="p-navigation__toggle--close" title="close menu">Close menu</a> </li> </ul> </div> </div> <div class="l-docs__main"> <div class="p-navigation__row u-fixed-width"> <nav class="p-navigation__nav"> <ul class="p-navigation__items"> <li class="p-navigation__item"> <a class="p-navigation__link" href="/why-juju">How Juju Works</a> </li> <li class="p-navigation__item"> <a class="p-navigation__link" href="https://charmhub.io">Charmhub</a> </li> <li class="p-navigation__item"> <a class="p-navigation__link" href="https://jaas.ai">JAAS</a> </li> <li class="p-navigation__item--dropdown-toggle" id="learn-link"> <a class="p-navigation__link" href="#forum-link-menu" aria-controls="forum-link-menu">Community</a> <ul class="p-navigation__dropdown" id="forum-link-menu" aria-hidden="true"> <li> <a href="https://discourse.charmhub.io/" class="p-navigation__dropdown-item">Discourse forum</a> </li> <li> <a href="https://matrix.to/#/#charmhub:ubuntu.com" class="p-navigation__dropdown-item">Matrix chat</a> </li> <li> <a href="/operator-day" class="p-navigation__dropdown-item">Operator Day</a> </li> </ul> </li> <li class="p-navigation__item--dropdown-toggle" id="contribute-link"> <a class="p-navigation__link" href="#docs-link-menu" aria-controls="docs-link-menu">Docs</a> <ul class="p-navigation__dropdown" id="docs-link-menu" aria-hidden="true"> <li> <a href="/docs/juju" class="p-navigation__dropdown-item">Juju</a> </li> <li> <a href="/docs/sdk" class="p-navigation__dropdown-item">Charm SDK</a> </li> </ul> </li> <li class="p-navigation__item"> <a class="p-navigation__link" href="https://ubuntu.com/blog/tag/juju">Blog</a> </li> </ul> <ul class="p-navigation__items global-nav"></ul> </nav> </div> </div> </div> </header> <section id="search-docs" class="p-strip is-shallow is-bordered l-docs__subgrid"> <div class="l-docs__main"> <div class="row"> <form class="p-search-box u-no-margin--bottom" action="/docs/search"> <input type="search" class="p-search-box__input" name="q" placeholder="Search documentation" required/> <button type="button" class="p-search-box__reset" alt="reset" onclick="this.previousElementSibling.value = '';this.previousElementSibling.focus()"><i class="p-icon--close">Reset</i></button> <button type="submit" class="p-search-box__button"><i class="p-icon--search">Search</i></button> </form> </div> </div> </section> </div> <div class="l-docs__sidebar"> <div class="l-docs__sticky-container"> <nav data-js="navigation" class="p-side-navigation" id="default" style="margin-top: 0.5rem;"> <div class="u-hide--large p-strip is-shallow"> <div class="u-fixed-width"> <a href="#default" class="p-side-navigation__toggle js-drawer-toggle" aria-controls="default"> Toggle side navigation </a> </div> </div> <div class="p-side-navigation__overlay js-drawer-toggle" aria-controls="default"></div> <div class="p-side-navigation__drawer"> <div class="p-side-navigation__drawer-header"> <a href="#" class="p-side-navigation__toggle--in-drawer js-drawer-toggle" aria-controls="default"> Toggle side navigation </a> </div> <ul class="p-side-navigation__list"> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk" aria-current="page" >SDK documentation</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link is-expandable" href="/docs/sdk/tutorials" aria-expanded="false" >Tutorials</a> <button class="p-side-navigation__expand" aria-expanded="false" aria-label="show submenu for Tutorials"></button> <ul class="p-side-navigation__list"> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/write-your-first-machine-charm" >Write your first machine charm</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link is-expandable" href="/docs/sdk/from-zero-to-hero-write-your-first-kubernetes-charm" aria-expanded="false" >Write your first Kubernetes charm</a> <button class="p-side-navigation__expand" aria-expanded="false" aria-label="show submenu for Write your first Kubernetes charm"></button> <ul class="p-side-navigation__list"> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/study-your-application" >Study your application</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/set-up-your-development-environment" >Set up your development environment</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/create-a-minimal-kubernetes-charm" >Create a minimal Kubernetes charm</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/make-your-charm-configurable" >Make your charm configurable</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/expose-the-version-of-the-application-behind-your-charm" >Expose the version of the application behind your charm</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/integrate-your-charm-with-postgresql" >Integrate your charm with PostgreSQL</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/preserve-your-charms-data" >Preserve your charm’s data</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/expose-your-charms-operational-tasks-via-actions" >Expose your charm’s operational tasks via actions</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/observe-your-charm-with-cos-lite" >Observe your charm with COS Lite</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/write-unit-tests-for-your-charm" >Write unit tests for your charm</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/write-scenario-tests-for-your-charm" >Write scenario tests for your charm</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/write-integration-tests-for-your-charm" >Write integration tests for your charm</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/open-a-kubernetes-port-in-your-charm" >Open a Kubernetes port in your charm</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/publish-your-charm-on-charmhub" >Publish your charm on Charmhub</a> <ul class="p-side-navigation__list"> </ul> </li> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/write-your-first-kubernetes-charm-for-a-flask-app" >Write your first Kubernetes charm for a Flask app</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/write-your-first-kubernetes-charm-for-a-django-app" >Write your first Kubernetes charm for a Django app</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/write-your-first-kubernetes-charm-for-a-fastapi-app" >Write your first Kubernetes charm for a FastAPI app</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/write-your-first-kubernetes-charm-for-a-go-app" >Write your first Kubernetes charm for a Go app</a> <ul class="p-side-navigation__list"> </ul> </li> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link is-expandable" href="/docs/sdk/how-to" aria-expanded="false" >How-to guides</a> <button class="p-side-navigation__expand" aria-expanded="false" aria-label="show submenu for How-to guides"></button> <ul class="p-side-navigation__list"> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/build-a-12-factor-app-charm" >Build a 12-Factor app charm</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/build-and-own-a-charm-or-a-bundle" >Build and own a charm or a bundle</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/manage-bundles" >Manage bundles</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <strong class="p-side-navigation__text is-expandable" aria-expanded="false" >Set things up</strong> <button class="p-side-navigation__expand" aria-expanded="false" aria-label="show submenu for Set things up"></button> <ul class="p-side-navigation__list"> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/dev-setup" >Set up your development environment</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/set-up-a-charm-project" >Set up a charm project</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/manage-extensions" >Manage extensions</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link is-expandable" href="/docs/sdk/manage-charmcraft" aria-expanded="false" >Manage Charmcraft</a> <button class="p-side-navigation__expand" aria-expanded="false" aria-label="show submenu for Manage Charmcraft"></button> <ul class="p-side-navigation__list"> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/install-charmcraft" >Install Charmcraft</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/charmcraft-config" >Configure Charmcraft</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/remote-env-auth" >Authenticate Charmcraft in remote environments</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/change-step-behavior-in-a-charm" >Change step behavior when creating a charm</a> <ul class="p-side-navigation__list"> </ul> </li> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/include-extra-files-in-a-charm" >Include extra files in a charm</a> <ul class="p-side-navigation__list"> </ul> </li> </ul> </li> <li class="p-side-navigation__item"> <strong class="p-side-navigation__text is-expandable" aria-expanded="false" >Develop</strong> <button class="p-side-navigation__expand" aria-expanded="false" aria-label="show submenu for Develop"></button> <ul class="p-side-navigation__list"> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/logging" >Configure logging in a charm</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/resources" >Use charm resources</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/workloads" >Run workloads with a charm - machines</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/interact-with-pebble" >Run workloads with a charm - Kubernetes</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/set-the-charm-version" >Set the charm version</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/set-the-workload-version" >Set the workload version</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/actions" >Add an action to a charm</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/config" >Add a config option to a charm</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/use-storage-in-a-charm" >Use storage in a charm</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/add-a-secret-to-a-charm" >Use secrets in a charm</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link is-expandable" href="/docs/sdk/manage-libraries" aria-expanded="false" >Use charm libraries</a> <button class="p-side-navigation__expand" aria-expanded="false" aria-label="show submenu for Use charm libraries"></button> <ul class="p-side-navigation__list"> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/find-and-use-a-charm-library" >Find and use a charm library</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/create-and-publish-a-charm-library" >Create and publish a charm library</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/write-a-scenario-test-for-a-charm-library" >Write a scenario test for a charm library</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/document-your-charm-library" >Document a charm library</a> <ul class="p-side-navigation__list"> </ul> </li> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/handle-leadership" >Handle leadership</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/implement-integrations-in-a-charm" >Add an integration to a charm</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/instrument-your-charm-with-tracing-telemetry" >Observe a charm</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <strong class="p-side-navigation__text is-expandable" aria-expanded="false" >Manage interfaces</strong> <button class="p-side-navigation__expand" aria-expanded="false" aria-label="show submenu for Manage interfaces"></button> <ul class="p-side-navigation__list"> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/register-an-interface" >Register an interface</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/write-interface-tests" >Write interface tests</a> <ul class="p-side-navigation__list"> </ul> </li> </ul> </li> </ul> </li> <li class="p-side-navigation__item"> <strong class="p-side-navigation__text is-expandable" aria-expanded="false" >Test and debug</strong> <button class="p-side-navigation__expand" aria-expanded="false" aria-label="show submenu for Test and debug"></button> <ul class="p-side-navigation__list"> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/get-started-with-charm-testing" >Get started with charm testing</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/write-a-unit-test-for-a-charm" >Write a unit test for a charm</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/write-a-functional-test-for-a-charm-with-scenario" >Write a scenario test for a charm</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/write-integration-tests-for-a-charm" >Write integration tests for a charm</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/pack-a-charm" >Pack a charm</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/deploy-a-charm" >Deploy a charm</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/debug-a-charm" >Debug a charm</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/get-logs-from-a-kubernetes-charm" >Get logs from a Kubernetes charm</a> <ul class="p-side-navigation__list"> </ul> </li> </ul> </li> <li class="p-side-navigation__item"> <strong class="p-side-navigation__text is-expandable" aria-expanded="false" >Document</strong> <button class="p-side-navigation__expand" aria-expanded="false" aria-label="show submenu for Document"></button> <ul class="p-side-navigation__list"> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/add-docs-to-your-charmhub-page" >Add docs to a charm on Charmhub</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/charm-documentation" >Document a charm: The README file</a> <ul class="p-side-navigation__list"> </ul> </li> </ul> </li> <li class="p-side-navigation__item"> <strong class="p-side-navigation__text is-expandable" aria-expanded="false" >Market</strong> <button class="p-side-navigation__expand" aria-expanded="false" aria-label="show submenu for Market"></button> <ul class="p-side-navigation__list"> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/publishing" >Publish a charm</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/create-a-track-for-your-charm" >Create a track for your charm</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/create-an-icon-for-your-charm" >Create an icon for a charm</a> <ul class="p-side-navigation__list"> </ul> </li> </ul> </li> <li class="p-side-navigation__item"> <strong class="p-side-navigation__text is-expandable" aria-expanded="false" >Miscellaneous</strong> <button class="p-side-navigation__expand" aria-expanded="false" aria-label="show submenu for Miscellaneous"></button> <ul class="p-side-navigation__list"> <li class="p-side-navigation__item"> <strong class="p-side-navigation__text is-expandable" aria-expanded="false" >Align an old charm with charmcraft and ops</strong> <button class="p-side-navigation__expand" aria-expanded="false" aria-label="show submenu for Align an old charm with charmcraft and ops"></button> <ul class="p-side-navigation__list"> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/turn-a-hooks-based-charm-into-an-ops-charm" >Turn a hooks-based charm into an ops charm</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/pack-a-reactive-based-charm-with-charmcraft" >Pack a reactive-based charm with Charmcraft</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/pack-a-hooks-based-charm-with-charmcraft" >Pack a hooks-based charm with Charmcraft</a> <ul class="p-side-navigation__list"> </ul> </li> </ul> </li> </ul> </li> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link is-expandable" href="/docs/sdk/reference" aria-expanded="false" >Reference</a> <button class="p-side-navigation__expand" aria-expanded="false" aria-label="show submenu for Reference"></button> <ul class="p-side-navigation__list"> <li class="p-side-navigation__item"> <a class="p-side-navigation__link is-expandable" href="/docs/sdk/bundle" aria-expanded="false" >Bundle</a> <button class="p-side-navigation__expand" aria-expanded="false" aria-label="show submenu for Bundle"></button> <ul class="p-side-navigation__list"> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/bundle.yaml" >File <bundle>.yaml</a> <ul class="p-side-navigation__list"> </ul> </li> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link is-expandable" href="/docs/sdk/charm" aria-expanded="false" >Charm</a> <button class="p-side-navigation__expand" aria-expanded="false" aria-label="show submenu for Charm"></button> <ul class="p-side-navigation__list"> <li class="p-side-navigation__item"> <a class="p-side-navigation__link is-expandable" href="/docs/sdk/list-of-files-in-the-charm-project" aria-expanded="false" >List of files in the charm project</a> <button class="p-side-navigation__expand" aria-expanded="false" aria-label="show submenu for List of files in the charm project"></button> <ul class="p-side-navigation__list"> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/contributing-md" >File ‘CONTRIBUTING.md’</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/license" >File ‘LICENSE’</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/readme-md" >File ‘README.md’</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/actions-yaml" >File ‘actions.yaml’</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/charmcraft-yaml" >File ‘charmcraft.yaml’</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/config-yaml" >config.yaml</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/dispatch" >File ‘dispatch’</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/icon-svg" >File ‘icon.svg’</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/lxd-profile-yaml" >File ‘lxd-profile.yaml’</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/manifest-yaml" >File ‘manifest.yaml’</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/metadata-yaml" >File ‘metadata.yaml’</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/pyproject-toml" >File ‘pyproject.toml’</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/requirements-dev-txt" >File ‘requirements-dev.txt’</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/requirements-txt" >File ‘requirements.txt’</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/src-charm-py" >File ‘src/charm.py’</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/tests-unit-test-charm-py" >File ‘tests/unit/test_charm.py’</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/tests-integration-test-charm-py" >File ‘tests/integration/test_charm.py’</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/tox-ini" >File 'tox.ini</a> <ul class="p-side-navigation__list"> </ul> </li> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/the-juju-execution-flow-for-a-charm" >The Juju execution flow for a charm</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link is-expandable" href="/docs/sdk/charm-taxonomy" aria-expanded="false" >Charm taxonomy</a> <button class="p-side-navigation__expand" aria-expanded="false" aria-label="show submenu for Charm taxonomy"></button> <ul class="p-side-navigation__list"> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/12-factor-app-charm" >12-Factor app charm</a> <ul class="p-side-navigation__list"> </ul> </li> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link is-expandable" href="/docs/sdk/charm-maturity" aria-expanded="false" >Charm maturity</a> <button class="p-side-navigation__expand" aria-expanded="false" aria-label="show submenu for Charm maturity"></button> <ul class="p-side-navigation__list"> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/charm-maturity-stage-1" >Charm maturity stage 1</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/charm-maturity-stage-2" >Charm maturity stage 2</a> <ul class="p-side-navigation__list"> </ul> </li> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/naming" >Charm naming guidelines</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/styleguide" >Charm development best practices</a> <ul class="p-side-navigation__list"> </ul> </li> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link is-expandable" href="/docs/sdk/charmcraft" aria-expanded="false" >Charmcraft</a> <button class="p-side-navigation__expand" aria-expanded="false" aria-label="show submenu for Charmcraft"></button> <ul class="p-side-navigation__list"> <li class="p-side-navigation__item"> <a class="p-side-navigation__link is-expandable" href="/docs/sdk/charmcraft-cli-commands" aria-expanded="false" >List of Charmcraft CLI commands</a> <button class="p-side-navigation__expand" aria-expanded="false" aria-label="show submenu for List of Charmcraft CLI commands"></button> <ul class="p-side-navigation__list"> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/charmcraft-analyse" >charmcraft analyse</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/charmcraft-build" >charmcraft build</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/charmcraft-clean" >charmcraft clean</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/charmcraft-close" >charmcraft close</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/charmcraft-create-lib" >charmcraft create-lib</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/charmcraft-expand-extensions" >charmcraft expand-extensions</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/charmcraft-fetch-lib" >charmcraft fetch-lib</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/charmcraft-fetch-libs" >charmcraft fetch-libs</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/charmcraft-init" >charmcraft init</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/charmcraft-list-extensions" >charmcraft list-extensions</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/charmcraft-list-lib" >charmcraft list-lib</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/charmcraft-login" >charmcraft login</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/charmcraft-logout" >charmcraft logout</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/charmcraft-names" >charmcraft names</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/charmcraft-pack" >charmcraft pack</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/charmcraft-prime" >charmcraft prime</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/charmcraft-promote-bundle" >charmcraft promote-bundle</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/charmcraft-pull" >charmcraft pull</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/charmcraft-publish-lib" >charmcraft publish-lib</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/charmcraft-register" >charmcraft register</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/charmcraft-register-bundle" >charmcraft register-bundle</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/charmcraft-release" >charmcraft release</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/charmcraft-remote-build" >charmcraft remote-build</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/charmcraft-resources" >charmcraft resources</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/charmcraft-resource-revisions" >charmcraft resource-revisions</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/charmcraft-revisions" >charmcraft revisions</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/charmcraft-set-resource-architectures" >charmcraft set-resource-architectures</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/charmcraft-stage" >charmcraft stage</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/charmcraft-status" >charmcraft status</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/charmcraft-unregister" >charmcraft unregister</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/charmcraft-upload" >charmcraft upload</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/charmcraft-upload-resource" >charmcraft upload-resource</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/charmcraft-version" >charmcraft version</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/charmcraft-whoami" >charmcraft whoami</a> <ul class="p-side-navigation__list"> </ul> </li> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/charmcraft-extension-flask-framework" >Charmcraft extension ‘flask-framework’</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/charmcraft-extension-django-framework" >Charmcraft extension ‘django-framework’</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/charmcraft-extension-fastapi-framework" >Charmcraft extension ‘fastapi-framework’</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/charmcraft-extension-go-framework" >Charmcraft extension ‘go-framework’</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/charmcraft-deprecations" >Charmcraft deprecation notices</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/charmcraft-analyzers-and-linters" >Charmcraft analyzers and linters</a> <ul class="p-side-navigation__list"> </ul> </li> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/charmhub" >Charmhub</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/charm-relation-interfaces" >charm-relation-interfaces</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link is-expandable" href="/docs/sdk/event" aria-expanded="false" >Event</a> <button class="p-side-navigation__expand" aria-expanded="false" aria-label="show submenu for Event"></button> <ul class="p-side-navigation__list"> <li class="p-side-navigation__item"> <a class="p-side-navigation__link is-expandable" href="/docs/sdk/list-of-events" aria-expanded="false" >List of events</a> <button class="p-side-navigation__expand" aria-expanded="false" aria-label="show submenu for List of events"></button> <ul class="p-side-navigation__list"> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/events" >Lifecycle events</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/secret-events" >Secret events</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/relation-events" >Relation events</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/storage-events" >Storage events</a> <ul class="p-side-navigation__list"> </ul> </li> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/custom-event" >Custom event</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/charm-lifecycle" >Charm lifecycle</a> <ul class="p-side-navigation__list"> </ul> </li> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/extension" >Extension</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link is-expandable" href="/docs/sdk/library" aria-expanded="false" >Library</a> <button class="p-side-navigation__expand" aria-expanded="false" aria-label="show submenu for Library"></button> <ul class="p-side-navigation__list"> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/library-index" >Popular charm library index</a> <ul class="p-side-navigation__list"> </ul> </li> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link is-expandable" href="/docs/sdk/jhack" aria-expanded="false" >jhack</a> <button class="p-side-navigation__expand" aria-expanded="false" aria-label="show submenu for jhack"></button> <ul class="p-side-navigation__list"> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/jhack-tail" >jhack tail</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/jhack-show-relation" >jhack show-relation</a> <ul class="p-side-navigation__list"> </ul> </li> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/ops" >Ops</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/pebble" >Pebble</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/profile" >Profile</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/promotion" >Promotion</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link is-expandable" href="/docs/sdk/publication" aria-expanded="false" >Publication</a> <button class="p-side-navigation__expand" aria-expanded="false" aria-label="show submenu for Publication"></button> <ul class="p-side-navigation__list"> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/reasons-to-publish-your-charm-on-charmhub" >Reasons to publish your charm on Charmhub</a> <ul class="p-side-navigation__list"> </ul> </li> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/pytest-operator" >pytest-operator</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/revision" >Revision</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link is-expandable" href="/docs/sdk/rockcraft" aria-expanded="false" >Rockcraft</a> <button class="p-side-navigation__expand" aria-expanded="false" aria-label="show submenu for Rockcraft"></button> <ul class="p-side-navigation__list"> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/rockcraft-extension-flask-framework" >Rockcraft extension ‘flask-framework’</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/rockcraft-extension-django-framework" >Rockcraft extension ‘django-framework’</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/rockcraft-extension-fastapi-framework" >Rockcraft extension ‘fastapi-framework’</a> <ul class="p-side-navigation__list"> </ul> </li> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link is-expandable" href="/docs/sdk/scenario" aria-expanded="false" >Scenario</a> <button class="p-side-navigation__expand" aria-expanded="false" aria-label="show submenu for Scenario"></button> <ul class="p-side-navigation__list"> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/scenario-context" >Context</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/scenario-event" >Event</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/scenario-state" >State</a> <ul class="p-side-navigation__list"> </ul> </li> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/status" >Status</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/storage" >Storage</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/stored-state-uses-limitations" >StoredState: Uses, Limitations</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link is-expandable" href="/docs/sdk/testing" aria-expanded="false" >Testing</a> <button class="p-side-navigation__expand" aria-expanded="false" aria-label="show submenu for Testing"></button> <ul class="p-side-navigation__list"> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/interface-tests" >Interface tests</a> <ul class="p-side-navigation__list"> </ul> </li> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/yaml-anchors-and-aliases" >YAML anchors and aliases</a> <ul class="p-side-navigation__list"> </ul> </li> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link is-expandable" href="/docs/sdk/explanation" aria-expanded="false" >Explanation</a> <button class="p-side-navigation__expand" aria-expanded="false" aria-label="show submenu for Explanation"></button> <ul class="p-side-navigation__list"> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/history" >Charming history</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/charmed-operators-vs-kubernetes-operators" >Charmed operators vs. Kubernetes operators</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/how-and-when-to-defer-events" >How and When to Defer Events</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/holistic-vs-delta-charms" >Holistic vs delta charms</a> <ul class="p-side-navigation__list"> </ul> </li> <li class="p-side-navigation__item"> <a class="p-side-navigation__link " href="/docs/sdk/talking-to-a-workload-control-flow-from-a-to-z" >Talking to a workload: control flow from A to Z</a> <ul class="p-side-navigation__list"> </ul> </li> </ul> </li> </ul> </div> </nav> </div> </div> <div class="l-docs__title"> <div class="u-fixed-width"> <h1>Charm SDK Documentation</h1> </div> </div> <div class="l-docs__meta"> <div class="l-docs__sticky-container"> <aside class="p-table-of-contents"> <div class="p-table-of-contents__section"> <h4 class="p-table-of-contents__header">On this page</h4> <nav class="p-table-of-contents__nav" aria-label="Table of contents"> <ul class="p-table-of-contents__list"> <li class="p-table-of-contents__item"><a class="p-table-of-contents__link" href="#in-this-documentation">In this documentation</a></li> <li class="p-table-of-contents__item"><a class="p-table-of-contents__link" href="#project-and-community">Project and community</a></li> </ul> </nav> </div> </aside> </div> </div> <div class="l-docs__main u-text-max-width"> <main class="u-fixed-width"> <div class="p-strip is-shallow" style="overflow: visible;"> <div class="p-notification"> <div class="p-notification__response"> <p>The Charm SDK documentation presupposes familiarity with <a href="https://juju.is/docs/juju">Juju</a>.</p> </div> </div> <p>The Charm SDK is a toolkit for building charms.</p> <p>The SDK provides a Python library for developing and testing charms, <code>ops</code>, and a CLI tool for building, packaging and publishing charms, <code>charmcraft</code>.</p> <p>A charm can be developed in a variety of ways. However, the SDK provides useful abstractions and CLI commands so you can develop and share your charm better and faster.</p> <p>Whether you are a charm developer or a charm end user, with the Charm SDK you get a smoother experience.</p> <blockquote> <p>For a collection of existing charms, see <a href="https://charmhub.io/">Charmhub</a>. To deploy and manage an existing or new charm, see <a href="https://juju.is/docs/olm">Juju docs</a>.</p> </blockquote> <hr/> <h2><a class="p-link--anchor-heading" href="#in-this-documentation" name="in-this-documentation">In this documentation</a></h2> <div class="md-table"> <table> <thead> <tr> <th></th> <th></th> </tr> </thead> <tbody> <tr> <td><a href="/docs/sdk/tutorials">Tutorials</a><br/> Get started - a hands-on introduction to the Charm SDK for new users <br/></td> <td><a href="/docs/sdk/how-to">How-to guides</a> <br/> Step-by-step guides covering key operations and common tasks</td> </tr> <tr> <td><a href="/docs/sdk/explanation">Explanation</a> <br/> Concepts - discussion and clarification of key topics</td> <td><a href="/docs/sdk/reference">Reference</a> <br/> Technical information - specifications, APIs, architecture</td> </tr> </tbody> </table> </div><hr/> <h2><a class="p-link--anchor-heading" href="#project-and-community" name="project-and-community">Project and community</a></h2> <p>The Juju SDK is an open source project that warmly welcomes community projects, contributions, suggestions, fixes and constructive feedback.</p> <ul> <li>Learn about the <a href="/docs/sdk/roadmap">Roadmap & Releases</a></li> <li>Read our <a href="https://ubuntu.com/community/code-of-conduct">Code of Conduct</a></li> <li>Join our <a href="https://matrix.to/#/#charmhub-juju:ubuntu.com" rel="noopener nofollow ugc">Matrix chat</a></li> <li>Join the <a href="https://discourse.charmhub.io/t/welcome-to-the-charmed-operator-community/8">Discourse forum</a> to talk about <a href="https://discourse.charmhub.io/tags/c/juju/6/community-workshop">Juju</a>, <a href="https://discourse.charmhub.io/c/charm/41">charms</a>, <a href="https://discourse.charmhub.io/c/doc/22">docs</a>, or <a href="https://discourse.charmhub.io/tag/community-workshop">to meet the community</a></li> <li>Report a bug on <a href="https://github.com/canonical/operator/issues">GitHub</a> (for code) or <a href="https://github.com/juju/docs/issues">GitHub</a> (for docs)</li> <li>Contribute to the documentation on <a href="https://discourse.charmhub.io/t/documentation-guidelines-for-contributors/1245">Discourse</a></li> <li>Contribute to the code on <a href="https://github.com/canonical/operator">Github</a></li> <li>Visit the <a href="https://juju.is/careers">Juju careers page</a></li> </ul> </div> <div class="p-notification--information"> <div class="p-notification__content"> <p class="p-notification__message"> Last updated 9 days ago. <a href="https://discourse.charmhub.io/t/charm-sdk-documentation/4449">Help improve this document in the forum</a> or <a href="https://github.com/juju/docs/issues/new?title=Documentation: Charm SDK Documentation&body=Docs page: https://juju.is/docs/sdk%0A%0ADocs source: https://discourse.charmhub.io/t/charm-sdk-documentation/4449%0A%0AIssue: Please write your issue here."> File an issue </a>. </p> </div> </div> </main> </div> <div class="l-docs__footer"> <div class="p-strip--dark footer l-docs__subgrid"> <div class="l-docs__main"> <footer class="footer"> <div class="p-section"> <div class="row u-vertically-center"> <div class="col-7"> <h2>Join the community</h2> </div> <div class="col-5"> <ul class="p-inline-list u-no-margin--bottom"> <li class="p-inline-list__item"> <a href="https://github.com/juju" class="p-icon--github p-icon--github-white"></a> </li> <li class="p-inline-list__item"> <a href="https://twitter.com/ubuntu" class="p-icon--twitter"></a> </li> <li class="p-inline-list__item"> <a href="https://www.youtube.com/@UbuntuOS" class="p-icon--youtube"></a> </li> </ul> </div> </div> </div> <div class="p-section"> <div class="u-fixed-width"><hr class="p-rule is-dark"></div> <div class="row"> <div class="col-3"> <h2 class="p-heading--5">Juju</h2> <ul class="p-list"> <li class="p-list__item"> <a href="/#what-is-juju">What is Juju?</a> </li> <li class="p-list__item"> <a href="https://charmhub.io">What is Charmhub?</a> </li> <li class="p-list__item"> <a href="/docs/juju/reference">What are Charms?</a> </li> <li class="p-list__item"> <a href="/docs/sdk">What is the Charm SDK?</a> </li> </ul> </div> <div class="col-3"> <h2 class="p-heading--5">Charms</h2> <ul class="p-list"> <li class="p-list__item"> <a href="https://charmhub.io/?base=all&filter=databases,big-data">Data</a> </li> <li class="p-list__item"> <a href="https://ubuntu.com/kubernetes">Charmed Kubernetes</a> </li> <li class="p-list__item"> <a href="https://ubuntu.com/openstack">Charmed OpenStack</a> </li> <li class="p-list__item"> <a class="p-heading--5" href="https://charmhub.io/">All operators ›</a> </li> </ul> </div> <div class="col-3"> <h2 class="p-heading--5">Compare</h2> <ul class="p-list"> <li class="p-list__item"> <a href="/blog/operators-and-charmed-operators">Operators & Charms</a> </li> <li class="p-list__item"> <a href="/blog/beyond-helm-and-kustomize-the-future-of-kubernetes-apps">Helm alternative</a> </li> <li class="p-list__item"> <a href="/blog/beyond-helm-and-kustomize-the-future-of-kubernetes-apps">Kustomize alternative</a> </li> <li class="p-list__item"> <a href="/blog/ansible-vs-terraform-vs-juju-fight-or-cooperation">Ansible alternative</a> </li> <li class="p-list__item"> <a href="/blog/juju-vs-infrastructure-as-code-tools">Terraform alternative</a> </li> </ul> </div> <div class="col-3"> <h2 class="p-heading--5">Blog</h2> <ul class="p-list"> <li class="p-list__item"> <a href="/blog/ubuntu-and-canonical-at-kubecon-europe-2021">Best Practices for creating charms</a> </li> <li class="p-list__item"> <a href="/model-driven-operations-manifesto">Model Driven Operations Manifesto</a> </li> <li class="p-list__item"> <a href="/blog/beyond-helm-and-kustomize-the-future-of-kubernetes-apps">Why Helm and Kustomize aren’t enough: the future of Kubernetes apps</a> </li> <li class="p-list__item"> <a class="p-heading--5" href="/blog">Read all of our blogs ›</a> </li> </ul> </div> </div> </div> <div class="p-section"> <div class="u-fixed-width"><hr class="p-rule is-dark"></div> <div class="row"> <div class="col-3"> <p>© 2024 CC-BY-SA, Canonical Ltd.</p> </div> <div class="col-3"> <p> <a class="js-revoke-cookie-manager" href="">Manage your tracker settings</a> <br> <a href="https://www.ubuntu.com/legal">Legal Information</a> </p> </div> <div class="col-6"> <p> Ubuntu and Canonical are registered trademarks.<br> All other trademarks are the property of their respective owners. </p> </div> </div> </div> </footer> </div> </div> </div> </div> <script src="/static/js/prism.js?v=2856ef2"></script> <script src="/static/js/docs-side-nav.js?v=36b9128"></script> <script src="/static/js/build/discourse-rad-parser/discourse-rad-parser.js?v=7516a6f"></script> <script> drpNs.DiscourseRADParser(); </script> <div class="u-hide" id="contact-form-container" data-form-location="/get-in-touch" data-form-id="1337" data-lp-id="2313" data-return-url="http://juju.is/thank-you" data-lp-url=""></div> <script src="/static/js/dynamic-contact-form.js?v=9f388c0"></script> <script src="/static/js/navigation.js?v=daf4a4b"></script> <script src="/static/js/build/cookie-policy/cookie-policy.js?v=a393259"></script> <script> cpNs.cookiePolicy(); </script> <script src="/static/js/build/global-nav/global-nav.js"></script> <script> canonicalGlobalNav.createNav({ breakpoint: 900 }); initNavDropdowns(".p-navigation__item--dropdown-toggle"); </script> <script type="application/ld+json"> { "@context": "http://schema.org/", "@id": "https://juju.is/#organization", "@type": "Organization", "name": "Juju", "logo": "https://assets.ubuntu.com/v1/eeb4c506-Canonical-Juju-logo-2022.svg", "url": "https://juju.is", "sameAs": [ "https://github.com/canonical/operator/", "https://en.wikipedia.org/wiki/Juju_(software)", "https://twitter.com/juju_devops", "https://www.youtube.com/@jujucharms" ] } </script> <script type="application/ld+json"> { "@context": "http://schema.org", "@id": "https://juju.is/#website", "@type": "WebPage", "name": "Juju", "url": "https://juju.is" } </script> </body> </html>