CINXE.COM
Get started with Juju - Juju documentation
<!doctype html> <html class="no-js" lang="en" data-content_root="../../"> <head><meta charset="utf-8"/> <meta name="viewport" content="width=device-width,initial-scale=1"/> <meta name="color-scheme" content="light dark"><meta name="viewport" content="width=device-width, initial-scale=1" /> <meta property="og:title" content="Get started with Juju" /> <meta property="og:type" content="website" /> <meta property="og:url" content="https://canonical-starter-pack.readthedocs-hosted.com/user/tutorial/" /> <meta property="og:site_name" content="Juju" /> <meta property="og:description" content="Imagine your business needs a chat service such as Mattermost backed up by a database such as PostgreSQL. In a traditional setup, this can be quite a challenge, but with Juju you’ll find yourself d..." /> <meta property="og:image" content="https://assets.ubuntu.com/v1/253da317-image-document-ubuntudocs.svg" /> <meta property="og:image:alt" content="Juju" /> <meta name="description" content="Imagine your business needs a chat service such as Mattermost backed up by a database such as PostgreSQL. In a traditional setup, this can be quite a challenge, but with Juju you’ll find yourself d..." /> <link rel="index" title="Index" href="../../genindex/" /><link rel="search" title="Search" href="../../search/" /><link rel="next" title="How-to guides" href="../howto/" /><link rel="prev" title="Juju user documentation" href="../" /> <link rel="shortcut icon" href="../../_static/favicon.png"/><!-- Generated with Sphinx 7.4.7 and Furo 2024.08.06 --> <title>Get started with Juju - Juju documentation</title> <link rel="stylesheet" type="text/css" href="../../_static/pygments.css?v=8f2a1f02" /> <link rel="stylesheet" type="text/css" href="../../_static/styles/furo.css?v=354aac6f" /> <link rel="stylesheet" type="text/css" href="../../_static/youtube.css" /> <link rel="stylesheet" type="text/css" href="../../_static/related-links.css" /> <link rel="stylesheet" type="text/css" href="../../_static/terminal-output.css" /> <link rel="stylesheet" type="text/css" href="../../_static/contributors.css" /> <link rel="stylesheet" type="text/css" href="../../_static/copybutton.css?v=76b2166b" /> <link rel="stylesheet" type="text/css" href="../../_static/sphinx-design.min.css?v=95c83b7e" /> <link rel="stylesheet" type="text/css" href="../../_static/styles/furo-extensions.css?v=302659d7" /> <link rel="stylesheet" type="text/css" href="../../_static/css/pdf.css?v=0b1c5d40" /> <link rel="stylesheet" type="text/css" href="../../_static/custom.css?v=202ba174" /> <link rel="stylesheet" type="text/css" href="../../_static/header.css?v=84f70f09" /> <link rel="stylesheet" type="text/css" href="../../_static/github_issue_links.css?v=af88fb93" /> <link rel="stylesheet" type="text/css" href="../../_static/furo_colors.css?v=9c678fc2" /> <script async type="text/javascript" src="/_/static/javascript/readthedocs-addons.js"></script><meta name="readthedocs-project-slug" content="canonical-juju" /><meta name="readthedocs-version-slug" content="latest" /><meta name="readthedocs-resolver-filename" content="/user/tutorial/" /><meta name="readthedocs-http-status" content="200" /></head> <body> <header id="header" class="p-navigation"> <div class="p-navigation__nav" role="menubar"> <ul class="p-navigation__links" role="menu"> <li> <a class="p-logo" href="https://juju.is" aria-current="page"> <img src="../../_static/logos/juju-logo-no-text.png" alt="Logo" class="p-logo-image"> <div class="p-logo-text p-heading--4">Juju </div> </a> </li> <li class="nav-ubuntu-com"> <a href="https://juju.is" class="p-navigation__link">juju.is</a> </li> <li> <a href="#" class="p-navigation__link nav-more-links">More resources</a> <ul class="more-links-dropdown"> <li> <a href="https://discourse.charmhub.io" class="p-navigation__sub-link p-dropdown__link">Discourse</a> </li> <li> <a href="https://matrix.to/#/#charmhub-juju:ubuntu.com" class="p-navigation__sub-link p-dropdown__link">Matrix</a> </li> <li> <a href="https://github.com/juju/juju" class="p-navigation__sub-link p-dropdown__link">GitHub</a> </li> </ul> </li> </ul> </div> </header> <script> document.body.dataset.theme = localStorage.getItem("theme") || "auto"; </script> <svg xmlns="http://www.w3.org/2000/svg" style="display: none;"> <symbol id="svg-toc" viewBox="0 0 24 24"> <title>Contents</title> <svg stroke="currentColor" fill="currentColor" stroke-width="0" viewBox="0 0 1024 1024"> <path d="M408 442h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8zm-8 204c0 4.4 3.6 8 8 8h480c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8H408c-4.4 0-8 3.6-8 8v56zm504-486H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zm0 632H120c-4.4 0-8 3.6-8 8v56c0 4.4 3.6 8 8 8h784c4.4 0 8-3.6 8-8v-56c0-4.4-3.6-8-8-8zM115.4 518.9L271.7 642c5.8 4.6 14.4.5 14.4-6.9V388.9c0-7.4-8.5-11.5-14.4-6.9L115.4 505.1a8.74 8.74 0 0 0 0 13.8z"/> </svg> </symbol> <symbol id="svg-menu" viewBox="0 0 24 24"> <title>Menu</title> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-menu"> <line x1="3" y1="12" x2="21" y2="12"></line> <line x1="3" y1="6" x2="21" y2="6"></line> <line x1="3" y1="18" x2="21" y2="18"></line> </svg> </symbol> <symbol id="svg-arrow-right" viewBox="0 0 24 24"> <title>Expand</title> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="feather-chevron-right"> <polyline points="9 18 15 12 9 6"></polyline> </svg> </symbol> <symbol id="svg-sun" viewBox="0 0 24 24"> <title>Light mode</title> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="feather-sun"> <circle cx="12" cy="12" r="5"></circle> <line x1="12" y1="1" x2="12" y2="3"></line> <line x1="12" y1="21" x2="12" y2="23"></line> <line x1="4.22" y1="4.22" x2="5.64" y2="5.64"></line> <line x1="18.36" y1="18.36" x2="19.78" y2="19.78"></line> <line x1="1" y1="12" x2="3" y2="12"></line> <line x1="21" y1="12" x2="23" y2="12"></line> <line x1="4.22" y1="19.78" x2="5.64" y2="18.36"></line> <line x1="18.36" y1="5.64" x2="19.78" y2="4.22"></line> </svg> </symbol> <symbol id="svg-moon" viewBox="0 0 24 24"> <title>Dark mode</title> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-moon"> <path stroke="none" d="M0 0h24v24H0z" fill="none" /> <path d="M12 3c.132 0 .263 0 .393 0a7.5 7.5 0 0 0 7.92 12.446a9 9 0 1 1 -8.313 -12.454z" /> </svg> </symbol> <symbol id="svg-sun-with-moon" viewBox="0 0 24 24"> <title>Auto light/dark, in light mode</title> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-custom-derived-from-feather-sun-and-tabler-moon"> <path style="opacity: 50%" d="M 5.411 14.504 C 5.471 14.504 5.532 14.504 5.591 14.504 C 3.639 16.319 4.383 19.569 6.931 20.352 C 7.693 20.586 8.512 20.551 9.25 20.252 C 8.023 23.207 4.056 23.725 2.11 21.184 C 0.166 18.642 1.702 14.949 4.874 14.536 C 5.051 14.512 5.231 14.5 5.411 14.5 L 5.411 14.504 Z"/> <line x1="14.5" y1="3.25" x2="14.5" y2="1.25"/> <line x1="14.5" y1="15.85" x2="14.5" y2="17.85"/> <line x1="10.044" y1="5.094" x2="8.63" y2="3.68"/> <line x1="19" y1="14.05" x2="20.414" y2="15.464"/> <line x1="8.2" y1="9.55" x2="6.2" y2="9.55"/> <line x1="20.8" y1="9.55" x2="22.8" y2="9.55"/> <line x1="10.044" y1="14.006" x2="8.63" y2="15.42"/> <line x1="19" y1="5.05" x2="20.414" y2="3.636"/> <circle cx="14.5" cy="9.55" r="3.6"/> </svg> </symbol> <symbol id="svg-moon-with-sun" viewBox="0 0 24 24"> <title>Auto light/dark, in dark mode</title> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-custom-derived-from-feather-sun-and-tabler-moon"> <path d="M 8.282 7.007 C 8.385 7.007 8.494 7.007 8.595 7.007 C 5.18 10.184 6.481 15.869 10.942 17.24 C 12.275 17.648 13.706 17.589 15 17.066 C 12.851 22.236 5.91 23.143 2.505 18.696 C -0.897 14.249 1.791 7.786 7.342 7.063 C 7.652 7.021 7.965 7 8.282 7 L 8.282 7.007 Z"/> <line style="opacity: 50%" x1="18" y1="3.705" x2="18" y2="2.5"/> <line style="opacity: 50%" x1="18" y1="11.295" x2="18" y2="12.5"/> <line style="opacity: 50%" x1="15.316" y1="4.816" x2="14.464" y2="3.964"/> <line style="opacity: 50%" x1="20.711" y1="10.212" x2="21.563" y2="11.063"/> <line style="opacity: 50%" x1="14.205" y1="7.5" x2="13.001" y2="7.5"/> <line style="opacity: 50%" x1="21.795" y1="7.5" x2="23" y2="7.5"/> <line style="opacity: 50%" x1="15.316" y1="10.184" x2="14.464" y2="11.036"/> <line style="opacity: 50%" x1="20.711" y1="4.789" x2="21.563" y2="3.937"/> <circle style="opacity: 50%" cx="18" cy="7.5" r="2.169"/> </svg> </symbol> <symbol id="svg-pencil" viewBox="0 0 24 24"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-pencil-code"> <path d="M4 20h4l10.5 -10.5a2.828 2.828 0 1 0 -4 -4l-10.5 10.5v4" /> <path d="M13.5 6.5l4 4" /> <path d="M20 21l2 -2l-2 -2" /> <path d="M17 17l-2 2l2 2" /> </svg> </symbol> <symbol id="svg-eye" viewBox="0 0 24 24"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1" stroke-linecap="round" stroke-linejoin="round" class="icon-tabler-eye-code"> <path stroke="none" d="M0 0h24v24H0z" fill="none" /> <path d="M10 12a2 2 0 1 0 4 0a2 2 0 0 0 -4 0" /> <path d="M11.11 17.958c-3.209 -.307 -5.91 -2.293 -8.11 -5.958c2.4 -4 5.4 -6 9 -6c3.6 0 6.6 2 9 6c-.21 .352 -.427 .688 -.647 1.008" /> <path d="M20 21l2 -2l-2 -2" /> <path d="M17 17l-2 2l2 2" /> </svg> </symbol> </svg> <input type="checkbox" class="sidebar-toggle" name="__navigation" id="__navigation"> <input type="checkbox" class="sidebar-toggle" name="__toc" id="__toc"> <label class="overlay sidebar-overlay" for="__navigation"> <div class="visually-hidden">Hide navigation sidebar</div> </label> <label class="overlay toc-overlay" for="__toc"> <div class="visually-hidden">Hide table of contents sidebar</div> </label> <a class="skip-to-content muted-link" href="#furo-main-content">Skip to content</a> <div class="page"> <header class="mobile-header"> <div class="header-left"> <label class="nav-overlay-icon" for="__navigation"> <div class="visually-hidden">Toggle site navigation sidebar</div> <i class="icon"><svg><use href="#svg-menu"></use></svg></i> </label> </div> <div class="header-center"> <a href="../../"><div class="brand">Juju documentation</div></a> </div> <div class="header-right"> <div class="theme-toggle-container theme-toggle-header"> <button class="theme-toggle"> <div class="visually-hidden">Toggle Light / Dark / Auto color theme</div> <svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg> <svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg> <svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg> <svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg> </button> </div> <label class="toc-overlay-icon toc-header-icon" for="__toc"> <div class="visually-hidden">Toggle table of contents sidebar</div> <i class="icon"><svg><use href="#svg-toc"></use></svg></i> </label> </div> </header> <aside class="sidebar-drawer"> <div class="sidebar-container"> <div class="sidebar-sticky"><a class="sidebar-brand" href="../../"> <span class="sidebar-brand-text">Juju documentation</span> </a><form class="sidebar-search-container" method="get" action="../../search/" role="search"> <input class="sidebar-search" placeholder="Search" name="q" aria-label="Search"> <input type="submit" value="Go"> <input type="hidden" name="check_keywords" value="yes"> <input type="hidden" name="area" value="default"> </form> <div id="searchbox"></div><div class="sidebar-scroll"><div class="sidebar-tree"> <ul class="current"> <li class="toctree-l1"><a class="reference internal" href="../">Juju user documentation</a></li> <li class="toctree-l1 current current-page"><a class="current reference internal" href="#">- Tutorial</a></li> <li class="toctree-l1 has-children"><a class="reference internal" href="../howto/">- How-to guides</a><input class="toctree-checkbox" id="toctree-checkbox-1" name="toctree-checkbox-1" role="switch" type="checkbox"/><label for="toctree-checkbox-1"><div class="visually-hidden">Toggle navigation of - How-to guides</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul> <li class="toctree-l2 has-children"><a class="reference internal" href="../howto/manage-your-deployment/">Manage your deployment</a><input class="toctree-checkbox" id="toctree-checkbox-2" name="toctree-checkbox-2" role="switch" type="checkbox"/><label for="toctree-checkbox-2"><div class="visually-hidden">Toggle navigation of Manage your deployment</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul> <li class="toctree-l3"><a class="reference internal" href="../howto/manage-your-deployment/manage-your-deployment-environment/">Manage your deployment environment</a></li> <li class="toctree-l3"><a class="reference internal" href="../howto/manage-your-deployment/harden-your-deployment/">Harden your deployment</a></li> <li class="toctree-l3"><a class="reference internal" href="../howto/manage-your-deployment/upgrade-your-deployment/">Upgrade your deployment</a></li> <li class="toctree-l3"><a class="reference internal" href="../howto/manage-your-deployment/troubleshoot-your-deployment/">Troubleshoot your deployment</a></li> <li class="toctree-l3"><a class="reference internal" href="../howto/manage-your-deployment/take-your-deployment-offline/">Take your deployment offline</a></li> </ul> </li> <li class="toctree-l2"><a class="reference internal" href="../howto/manage-juju/">Manage juju</a></li> <li class="toctree-l2"><a class="reference internal" href="../howto/manage-plugins/">Manage plugins</a></li> <li class="toctree-l2"><a class="reference internal" href="../howto/manage-the-juju-dashboard/">Manage the Juju dashboard</a></li> <li class="toctree-l2"><a class="reference internal" href="../howto/manage-clouds/">Manage clouds</a></li> <li class="toctree-l2"><a class="reference internal" href="../howto/manage-credentials/">Manage credentials</a></li> <li class="toctree-l2"><a class="reference internal" href="../howto/manage-metadata/">Manage metadata</a></li> <li class="toctree-l2"><a class="reference internal" href="../howto/manage-controllers/">Manage controllers</a></li> <li class="toctree-l2"><a class="reference internal" href="../howto/manage-users/">Manage users</a></li> <li class="toctree-l2"><a class="reference internal" href="../howto/manage-ssh-keys/">Manage SSH keys</a></li> <li class="toctree-l2"><a class="reference internal" href="../howto/manage-models/">Manage models</a></li> <li class="toctree-l2"><a class="reference internal" href="../howto/manage-logs/">Manage logs</a></li> <li class="toctree-l2"><a class="reference internal" href="../howto/manage-charms/">Manage charms or bundles</a></li> <li class="toctree-l2"><a class="reference internal" href="../howto/manage-applications/">Manage applications</a></li> <li class="toctree-l2"><a class="reference internal" href="../howto/manage-charm-resources/">Manage resources</a></li> <li class="toctree-l2"><a class="reference internal" href="../howto/manage-actions/">Manage actions</a></li> <li class="toctree-l2"><a class="reference internal" href="../howto/manage-relations/">Manage relations</a></li> <li class="toctree-l2"><a class="reference internal" href="../howto/manage-offers/">Manage offers</a></li> <li class="toctree-l2"><a class="reference internal" href="../howto/manage-units/">Manage units</a></li> <li class="toctree-l2"><a class="reference internal" href="../howto/manage-secrets/">Manage secrets</a></li> <li class="toctree-l2"><a class="reference internal" href="../howto/manage-secret-backends/">Manage secret backends</a></li> <li class="toctree-l2"><a class="reference internal" href="../howto/manage-machines/">Manage machines</a></li> <li class="toctree-l2"><a class="reference internal" href="../howto/manage-storage/">Manage storage</a></li> <li class="toctree-l2"><a class="reference internal" href="../howto/manage-storage-pools/">Manage storage pools</a></li> <li class="toctree-l2"><a class="reference internal" href="../howto/manage-spaces/">Manage spaces</a></li> <li class="toctree-l2"><a class="reference internal" href="../howto/manage-subnets/">Manage subnets</a></li> <li class="toctree-l2"><a class="reference internal" href="../howto/define-resource-tags-in-a-cloud/">Define resource tags in a cloud</a></li> <li class="toctree-l2"><a class="reference internal" href="../howto/fan-container-networking/">Fan container networking</a></li> </ul> </li> <li class="toctree-l1 has-children"><a class="reference internal" href="../reference/">- Reference</a><input class="toctree-checkbox" id="toctree-checkbox-3" name="toctree-checkbox-3" role="switch" type="checkbox"/><label for="toctree-checkbox-3"><div class="visually-hidden">Toggle navigation of - Reference</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul> <li class="toctree-l2"><a class="reference internal" href="../reference/action/">Action</a></li> <li class="toctree-l2"><a class="reference internal" href="../reference/agent/">Agent</a></li> <li class="toctree-l2"><a class="reference internal" href="../reference/application/">Application</a></li> <li class="toctree-l2"><a class="reference internal" href="../reference/bundle/">Bundle</a></li> <li class="toctree-l2 has-children"><a class="reference internal" href="../reference/charm/">Charm</a><input class="toctree-checkbox" id="toctree-checkbox-4" name="toctree-checkbox-4" role="switch" type="checkbox"/><label for="toctree-checkbox-4"><div class="visually-hidden">Toggle navigation of Charm</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul> <li class="toctree-l3"><a class="reference internal" href="../reference/charm/charm-development-best-practices/">Charm development best practices</a></li> <li class="toctree-l3"><a class="reference internal" href="../reference/charm/charm-naming-guidelines/">Charm naming guidelines</a></li> <li class="toctree-l3"><a class="reference internal" href="../reference/charm/charm-maturity/">Charm maturity</a></li> </ul> </li> <li class="toctree-l2 has-children"><a class="reference internal" href="../reference/cloud/">Cloud (substrate)</a><input class="toctree-checkbox" id="toctree-checkbox-5" name="toctree-checkbox-5" role="switch" type="checkbox"/><label for="toctree-checkbox-5"><div class="visually-hidden">Toggle navigation of Cloud (substrate)</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul> <li class="toctree-l3 has-children"><a class="reference internal" href="../reference/cloud/list-of-supported-clouds/">List of supported clouds</a><input class="toctree-checkbox" id="toctree-checkbox-6" name="toctree-checkbox-6" role="switch" type="checkbox"/><label for="toctree-checkbox-6"><div class="visually-hidden">Toggle navigation of List of supported clouds</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul> <li class="toctree-l4"><a class="reference internal" href="../reference/cloud/list-of-supported-clouds/the-amazon-ec2-cloud-and-juju/">Amazon EC2</a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/cloud/list-of-supported-clouds/the-amazon-eks-cloud-and-juju/">Amazon EKS</a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/cloud/list-of-supported-clouds/the-google-gce-cloud-and-juju/">Google GCE</a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/cloud/list-of-supported-clouds/the-google-gke-cloud-and-juju/">Google GKE</a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/cloud/list-of-supported-clouds/the-lxd-cloud-and-juju/">LXD</a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/cloud/list-of-supported-clouds/the-maas-cloud-and-juju/">MAAS</a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/cloud/list-of-supported-clouds/the-manual-cloud-and-juju/">Manual</a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/cloud/list-of-supported-clouds/the-microk8s-cloud-and-juju/">MicroK8s</a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/cloud/list-of-supported-clouds/the-microsoft-azure-cloud-and-juju/">Microsoft Azure</a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/cloud/list-of-supported-clouds/the-microsoft-aks-cloud-and-juju/">Microsoft AKS</a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/cloud/list-of-supported-clouds/the-openstack-cloud-and-juju/">OpenStack</a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/cloud/list-of-supported-clouds/the-oracle-oci-cloud-and-juju/">Oracle OCI</a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/cloud/list-of-supported-clouds/the-vmware-vsphere-cloud-and-juju/">VMware vSphere</a></li> </ul> </li> <li class="toctree-l3"><a class="reference internal" href="../reference/cloud/kubernetes-clouds-and-juju/">Kubernetes clouds and Juju</a></li> </ul> </li> <li class="toctree-l2 has-children"><a class="reference internal" href="../reference/configuration/">Configuration</a><input class="toctree-checkbox" id="toctree-checkbox-7" name="toctree-checkbox-7" role="switch" type="checkbox"/><label for="toctree-checkbox-7"><div class="visually-hidden">Toggle navigation of Configuration</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul> <li class="toctree-l3 has-children"><a class="reference internal" href="../reference/configuration/list-of-controller-configuration-keys/">List of controller configuration keys</a><input class="toctree-checkbox" id="toctree-checkbox-8" name="toctree-checkbox-8" role="switch" type="checkbox"/><label for="toctree-checkbox-8"><div class="visually-hidden">Toggle navigation of List of controller configuration keys</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul> <li class="toctree-l4"><a class="reference internal" href="../reference/configuration/controller-config-audit-log-exclude-methods/"><code class="docutils literal notranslate"><span class="pre">audit-log-exclude-methods</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/configuration/controller-config-juju-ha-space/"><code class="docutils literal notranslate"><span class="pre">juju-ha-space</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/configuration/controller-config-juju-mgmt-space/"><code class="docutils literal notranslate"><span class="pre">juju-mgmt-space</span></code></a></li> </ul> </li> <li class="toctree-l3"><a class="reference internal" href="../reference/configuration/list-of-model-configuration-keys/">List of model configuration keys</a></li> </ul> </li> <li class="toctree-l2"><a class="reference internal" href="../reference/constraint/">Constraint</a></li> <li class="toctree-l2"><a class="reference internal" href="../reference/containeragent/"><code class="docutils literal notranslate"><span class="pre">containeragent</span></code></a></li> <li class="toctree-l2"><a class="reference internal" href="../reference/controller/">Controller</a></li> <li class="toctree-l2"><a class="reference internal" href="../reference/credential/">Credential</a></li> <li class="toctree-l2"><a class="reference internal" href="../reference/high-availability/">High availability (HA)</a></li> <li class="toctree-l2"><a class="reference internal" href="../reference/hook/">Hook</a></li> <li class="toctree-l2 has-children"><a class="reference internal" href="../reference/hook-commands/">Hook commands</a><input class="toctree-checkbox" id="toctree-checkbox-9" name="toctree-checkbox-9" role="switch" type="checkbox"/><label for="toctree-checkbox-9"><div class="visually-hidden">Toggle navigation of Hook commands</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul> <li class="toctree-l3 has-children"><a class="reference internal" href="../reference/hook-commands/list-of-hook-commands/">List of hook commands</a><input class="toctree-checkbox" id="toctree-checkbox-10" name="toctree-checkbox-10" role="switch" type="checkbox"/><label for="toctree-checkbox-10"><div class="visually-hidden">Toggle navigation of List of hook commands</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul> <li class="toctree-l4"><a class="reference internal" href="../reference/hook-commands/list-of-hook-commands/action-fail/"><code class="docutils literal notranslate"><span class="pre">action-fail</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/hook-commands/list-of-hook-commands/action-get/"><code class="docutils literal notranslate"><span class="pre">action-get</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/hook-commands/list-of-hook-commands/action-log/"><code class="docutils literal notranslate"><span class="pre">action-log</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/hook-commands/list-of-hook-commands/action-set/"><code class="docutils literal notranslate"><span class="pre">action-set</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/hook-commands/list-of-hook-commands/application-version-set/"><code class="docutils literal notranslate"><span class="pre">application-version-set</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/hook-commands/list-of-hook-commands/close-port/"><code class="docutils literal notranslate"><span class="pre">close-port</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/hook-commands/list-of-hook-commands/config-get/"><code class="docutils literal notranslate"><span class="pre">config-get</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/hook-commands/list-of-hook-commands/credential-get/"><code class="docutils literal notranslate"><span class="pre">credential-get</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/hook-commands/list-of-hook-commands/goal-state/"><code class="docutils literal notranslate"><span class="pre">goal-state</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/hook-commands/list-of-hook-commands/is-leader/"><code class="docutils literal notranslate"><span class="pre">is-leader</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/hook-commands/list-of-hook-commands/juju-log/"><code class="docutils literal notranslate"><span class="pre">juju-log</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/hook-commands/list-of-hook-commands/juju-reboot/"><code class="docutils literal notranslate"><span class="pre">juju-reboot</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/hook-commands/list-of-hook-commands/network-get/"><code class="docutils literal notranslate"><span class="pre">network-get</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/hook-commands/list-of-hook-commands/open-port/"><code class="docutils literal notranslate"><span class="pre">open-port</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/hook-commands/list-of-hook-commands/opened-ports/"><code class="docutils literal notranslate"><span class="pre">opened-ports</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/hook-commands/list-of-hook-commands/relation-get/"><code class="docutils literal notranslate"><span class="pre">relation-get</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/hook-commands/list-of-hook-commands/relation-ids/"><code class="docutils literal notranslate"><span class="pre">relation-ids</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/hook-commands/list-of-hook-commands/relation-list/"><code class="docutils literal notranslate"><span class="pre">relation-list</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/hook-commands/list-of-hook-commands/relation-model-get/"><code class="docutils literal notranslate"><span class="pre">relation-model-get</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/hook-commands/list-of-hook-commands/relation-set/"><code class="docutils literal notranslate"><span class="pre">relation-set</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/hook-commands/list-of-hook-commands/resource-get/"><code class="docutils literal notranslate"><span class="pre">resource-get</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/hook-commands/list-of-hook-commands/secret-add/"><code class="docutils literal notranslate"><span class="pre">secret-add</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/hook-commands/list-of-hook-commands/secret-get/"><code class="docutils literal notranslate"><span class="pre">secret-get</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/hook-commands/list-of-hook-commands/secret-grant/"><code class="docutils literal notranslate"><span class="pre">secret-grant</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/hook-commands/list-of-hook-commands/secret-ids/"><code class="docutils literal notranslate"><span class="pre">secret-ids</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/hook-commands/list-of-hook-commands/secret-info-get/"><code class="docutils literal notranslate"><span class="pre">secret-info-get</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/hook-commands/list-of-hook-commands/secret-remove/"><code class="docutils literal notranslate"><span class="pre">secret-remove</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/hook-commands/list-of-hook-commands/secret-revoke/"><code class="docutils literal notranslate"><span class="pre">secret-revoke</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/hook-commands/list-of-hook-commands/secret-set/"><code class="docutils literal notranslate"><span class="pre">secret-set</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/hook-commands/list-of-hook-commands/state-delete/"><code class="docutils literal notranslate"><span class="pre">state-delete</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/hook-commands/list-of-hook-commands/state-get/"><code class="docutils literal notranslate"><span class="pre">state-get</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/hook-commands/list-of-hook-commands/state-set/"><code class="docutils literal notranslate"><span class="pre">state-set</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/hook-commands/list-of-hook-commands/status-get/"><code class="docutils literal notranslate"><span class="pre">status-get</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/hook-commands/list-of-hook-commands/status-set/"><code class="docutils literal notranslate"><span class="pre">status-set</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/hook-commands/list-of-hook-commands/storage-add/"><code class="docutils literal notranslate"><span class="pre">storage-add</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/hook-commands/list-of-hook-commands/storage-get/"><code class="docutils literal notranslate"><span class="pre">storage-get</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/hook-commands/list-of-hook-commands/storage-list/"><code class="docutils literal notranslate"><span class="pre">storage-list</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/hook-commands/list-of-hook-commands/unit-get/"><code class="docutils literal notranslate"><span class="pre">unit-get</span></code></a></li> </ul> </li> </ul> </li> <li class="toctree-l2 has-children"><a class="reference internal" href="../reference/juju/">Juju</a><input class="toctree-checkbox" id="toctree-checkbox-11" name="toctree-checkbox-11" role="switch" type="checkbox"/><label for="toctree-checkbox-11"><div class="visually-hidden">Toggle navigation of Juju</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul> <li class="toctree-l3"><a class="reference internal" href="../reference/juju/juju-architecture/">Juju architecture</a></li> <li class="toctree-l3"><a class="reference internal" href="../reference/juju/juju-cross-version-compatibility/">Juju component cross-version compatibility</a></li> <li class="toctree-l3"><a class="reference internal" href="../reference/juju/juju-roadmap-and-releases/">Juju Roadmap & Releases</a></li> </ul> </li> <li class="toctree-l2 has-children"><a class="reference internal" href="../reference/juju-cli/"><code class="docutils literal notranslate"><span class="pre">juju</span></code> CLI</a><input class="toctree-checkbox" id="toctree-checkbox-12" name="toctree-checkbox-12" role="switch" type="checkbox"/><label for="toctree-checkbox-12"><div class="visually-hidden">Toggle navigation of juju CLI</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul> <li class="toctree-l3 has-children"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/">List of <code class="docutils literal notranslate"><span class="pre">juju</span></code> CLI commands</a><input class="toctree-checkbox" id="toctree-checkbox-13" name="toctree-checkbox-13" role="switch" type="checkbox"/><label for="toctree-checkbox-13"><div class="visually-hidden">Toggle navigation of List of juju CLI commands</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/actions/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">actions</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/add-cloud/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">add-cloud</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/add-credential/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">add-credential</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/add-k8s/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">add-k8s</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/add-machine/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">add-machine</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/add-model/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">add-model</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/add-secret/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">add-secret</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/add-secret-backend/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">add-secret-backend</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/add-space/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">add-space</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/add-ssh-key/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">add-ssh-key</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/add-storage/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">add-storage</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/add-unit/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">add-unit</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/add-user/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">add-user</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/attach-resource/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">attach-resource</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/attach-storage/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">attach-storage</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/autoload-credentials/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">autoload-credentials</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/bind/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">bind</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/bootstrap/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">bootstrap</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/cancel-task/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">cancel-task</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/change-user-password/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">change-user-password</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/charm-resources/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">charm-resources</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/clouds/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">clouds</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/config/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">config</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/constraints/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">constraints</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/consume/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">consume</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/controller-config/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">controller-config</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/controllers/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">controllers</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/create-backup/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">create-backup</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/create-storage-pool/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">create-storage-pool</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/credentials/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">credentials</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/dashboard/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">dashboard</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/debug-code/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">debug-code</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/debug-hook/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">debug-hook</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/debug-hooks/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">debug-hooks</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/debug-log/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">debug-log</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/default-credential/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">default-credential</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/default-region/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">default-region</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/deploy/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">deploy</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/destroy-controller/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">destroy-controller</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/destroy-model/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">destroy-model</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/detach-storage/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">detach-storage</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/diff-bundle/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">diff-bundle</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/disable-command/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">disable-command</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/disable-user/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">disable-user</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/disabled-commands/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">disabled-commands</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/documentation/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">documentation</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/download/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">download</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/download-backup/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">download-backup</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/enable-command/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">enable-command</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/enable-destroy-controller/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">enable-destroy-controller</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/enable-ha/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">enable-ha</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/enable-user/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">enable-user</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/exec/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">exec</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/export-bundle/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">export-bundle</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/expose/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">expose</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/find/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">find</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/find-offers/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">find-offers</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/firewall-rules/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">firewall-rules</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/grant/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">grant</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/grant-cloud/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">grant-cloud</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/grant-secret/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">grant-secret</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/help/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">help</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/help-tool/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">help-tool</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/import-filesystem/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">import-filesystem</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/import-ssh-key/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">import-ssh-key</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/info/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">info</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/integrate/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">integrate</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/kill-controller/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">kill-controller</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/list-actions/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">list-actions</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/list-charm-resources/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">list-charm-resources</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/list-clouds/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">list-clouds</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/list-controllers/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">list-controllers</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/list-credentials/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">list-credentials</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/list-disabled-commands/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">list-disabled-commands</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/list-firewall-rules/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">list-firewall-rules</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/list-machines/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">list-machines</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/list-models/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">list-models</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/list-offers/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">list-offers</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/list-operations/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">list-operations</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/list-regions/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">list-regions</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/list-resources/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">list-resources</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/list-secret-backends/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">list-secret-backends</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/list-secrets/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">list-secrets</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/list-spaces/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">list-spaces</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/list-ssh-keys/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">list-ssh-keys</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/list-storage/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">list-storage</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/list-storage-pools/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">list-storage-pools</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/list-subnets/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">list-subnets</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/list-users/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">list-users</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/login/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">login</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/logout/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">logout</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/machines/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">machines</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/migrate/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">migrate</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/model-config/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">model-config</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/model-constraints/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">model-constraints</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/model-default/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">model-default</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/model-defaults/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">model-defaults</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/model-secret-backend/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">model-secret-backend</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/models/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">models</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/move-to-space/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">move-to-space</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/offer/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">offer</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/offers/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">offers</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/operations/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">operations</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/refresh/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">refresh</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/regions/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">regions</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/register/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">register</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/relate/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">relate</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/reload-spaces/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">reload-spaces</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/remove-application/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">remove-application</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/remove-cloud/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">remove-cloud</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/remove-credential/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">remove-credential</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/remove-k8s/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">remove-k8s</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/remove-machine/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">remove-machine</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/remove-offer/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">remove-offer</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/remove-relation/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">remove-relation</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/remove-saas/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">remove-saas</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/remove-secret/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">remove-secret</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/remove-secret-backend/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">remove-secret-backend</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/remove-space/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">remove-space</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/remove-ssh-key/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">remove-ssh-key</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/remove-storage/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">remove-storage</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/remove-storage-pool/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">remove-storage-pool</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/remove-unit/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">remove-unit</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/remove-user/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">remove-user</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/rename-space/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">rename-space</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/resolve/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">resolve</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/resolved/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">resolved</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/resources/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">resources</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/resume-relation/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">resume-relation</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/retry-provisioning/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">retry-provisioning</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/revoke/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">revoke</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/revoke-cloud/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">revoke-cloud</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/revoke-secret/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">revoke-secret</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/run/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">run</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/scale-application/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">scale-application</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/scp/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">scp</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/secret-backends/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">secret-backends</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/secrets/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">secrets</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/set-constraints/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">set-constraints</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/set-credential/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">set-credential</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/set-default-credentials/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">set-default-credentials</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/set-default-region/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">set-default-region</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/set-firewall-rule/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">set-firewall-rule</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/set-model-constraints/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">set-model-constraints</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/show-action/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">show-action</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/show-application/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">show-application</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/show-cloud/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">show-cloud</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/show-controller/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">show-controller</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/show-credential/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">show-credential</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/show-credentials/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">show-credentials</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/show-machine/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">show-machine</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/show-model/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">show-model</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/show-offer/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">show-offer</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/show-operation/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">show-operation</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/show-secret/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">show-secret</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/show-secret-backend/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">show-secret-backend</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/show-space/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">show-space</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/show-status-log/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">show-status-log</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/show-storage/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">show-storage</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/show-task/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">show-task</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/show-unit/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">show-unit</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/show-user/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">show-user</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/spaces/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">spaces</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/ssh/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">ssh</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/ssh-keys/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">ssh-keys</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/status/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">status</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/storage/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">storage</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/storage-pools/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">storage-pools</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/subnets/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">subnets</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/suspend-relation/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">suspend-relation</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/switch/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">switch</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/sync-agent-binary/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">sync-agent-binary</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/trust/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">trust</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/unexpose/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">unexpose</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/unregister/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">unregister</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/update-cloud/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">update-cloud</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/update-credential/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">update-credential</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/update-credentials/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">update-credentials</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/update-k8s/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">update-k8s</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/update-public-clouds/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">update-public-clouds</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/update-secret/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">update-secret</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/update-secret-backend/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">update-secret-backend</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/update-storage-pool/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">update-storage-pool</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/upgrade-controller/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">upgrade-controller</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/upgrade-model/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">upgrade-model</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/users/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">users</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/version/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">version</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/juju-cli/list-of-juju-cli-commands/whoami/"><code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">whoami</span></code></a></li> </ul> </li> <li class="toctree-l3"><a class="reference internal" href="../reference/juju-cli/juju-environment-variables/"><code class="docutils literal notranslate"><span class="pre">juju</span></code> environment variables</a></li> </ul> </li> <li class="toctree-l2"><a class="reference internal" href="../reference/jujuc/"><code class="docutils literal notranslate"><span class="pre">jujuc</span></code></a></li> <li class="toctree-l2"><a class="reference internal" href="../reference/jujud/"><code class="docutils literal notranslate"><span class="pre">jujud</span></code></a></li> <li class="toctree-l2"><a class="reference internal" href="../reference/juju-dashboard/"><code class="docutils literal notranslate"><span class="pre">juju-dashboard</span></code> (The Juju dashboard)</a></li> <li class="toctree-l2"><a class="reference internal" href="../reference/juju-web-cli/"><code class="docutils literal notranslate"><span class="pre">juju</span></code> web CLI</a></li> <li class="toctree-l2"><a class="reference internal" href="../reference/log/">Log</a></li> <li class="toctree-l2"><a class="reference internal" href="../reference/machine/">Machine</a></li> <li class="toctree-l2"><a class="reference internal" href="../reference/model/">Model</a></li> <li class="toctree-l2"><a class="reference internal" href="../reference/offer/">Offer</a></li> <li class="toctree-l2"><a class="reference internal" href="../reference/pebble/">Pebble</a></li> <li class="toctree-l2"><a class="reference internal" href="../reference/placement-directive/">Placement directive</a></li> <li class="toctree-l2 has-children"><a class="reference internal" href="../reference/plugin/">Plugin</a><input class="toctree-checkbox" id="toctree-checkbox-14" name="toctree-checkbox-14" role="switch" type="checkbox"/><label for="toctree-checkbox-14"><div class="visually-hidden">Toggle navigation of Plugin</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul> <li class="toctree-l3 has-children"><a class="reference internal" href="../reference/plugin/list-of-known-juju-plugins/">List of known Juju plugins</a><input class="toctree-checkbox" id="toctree-checkbox-15" name="toctree-checkbox-15" role="switch" type="checkbox"/><label for="toctree-checkbox-15"><div class="visually-hidden">Toggle navigation of List of known Juju plugins</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul> <li class="toctree-l4"><a class="reference internal" href="../reference/plugin/list-of-known-juju-plugins/plugin-juju-metadata/">Plugin <code class="docutils literal notranslate"><span class="pre">juju-metadata</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/plugin/list-of-known-juju-plugins/plugin-juju-stash/">Plugin <code class="docutils literal notranslate"><span class="pre">juju-stash</span></code></a></li> </ul> </li> <li class="toctree-l3"><a class="reference internal" href="../reference/plugin/plugin-flags/">Plugin flags</a></li> </ul> </li> <li class="toctree-l2"><a class="reference internal" href="../reference/relation/">Relation (integration)</a></li> <li class="toctree-l2"><a class="reference internal" href="../reference/removing-things/">Removing things</a></li> <li class="toctree-l2"><a class="reference internal" href="../reference/resource-charm/">Resource (charm)</a></li> <li class="toctree-l2 has-children"><a class="reference internal" href="../reference/resource-compute/">Resource (compute)</a><input class="toctree-checkbox" id="toctree-checkbox-16" name="toctree-checkbox-16" role="switch" type="checkbox"/><label for="toctree-checkbox-16"><div class="visually-hidden">Toggle navigation of Resource (compute)</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul> <li class="toctree-l3 has-children"><a class="reference internal" href="../reference/resource-compute/list-of-commands-available-on-a-compute-resource-provisioned-by-juju/">List of commands available on a compute resource provisioned by Juju</a><input class="toctree-checkbox" id="toctree-checkbox-17" name="toctree-checkbox-17" role="switch" type="checkbox"/><label for="toctree-checkbox-17"><div class="visually-hidden">Toggle navigation of List of commands available on a compute resource provisioned by Juju</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul> <li class="toctree-l4"><a class="reference internal" href="../reference/resource-compute/list-of-commands-available-on-a-compute-resource-provisioned-by-juju/juju-dumplogs/"><code class="docutils literal notranslate"><span class="pre">juju-dumplogs</span></code></a></li> <li class="toctree-l4"><a class="reference internal" href="../reference/resource-compute/list-of-commands-available-on-a-compute-resource-provisioned-by-juju/juju-exec/"><code class="docutils literal notranslate"><span class="pre">juju-exec</span></code></a></li> <li class="toctree-l4 has-children"><a class="reference internal" href="../reference/resource-compute/list-of-commands-available-on-a-compute-resource-provisioned-by-juju/juju-introspect/"><code class="docutils literal notranslate"><span class="pre">juju-introspect</span></code></a><input class="toctree-checkbox" id="toctree-checkbox-18" name="toctree-checkbox-18" role="switch" type="checkbox"/><label for="toctree-checkbox-18"><div class="visually-hidden">Toggle navigation of juju-introspect</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul> <li class="toctree-l5 has-children"><a class="reference internal" href="../reference/resource-compute/list-of-commands-available-on-a-compute-resource-provisioned-by-juju/list-of-juju-introspect-macros/">List of <code class="docutils literal notranslate"><span class="pre">juju-introspect</span></code> macros</a><input class="toctree-checkbox" id="toctree-checkbox-19" name="toctree-checkbox-19" role="switch" type="checkbox"/><label for="toctree-checkbox-19"><div class="visually-hidden">Toggle navigation of List of juju-introspect macros</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul> <li class="toctree-l6"><a class="reference internal" href="../reference/resource-compute/list-of-commands-available-on-a-compute-resource-provisioned-by-juju/list-of-juju-introspect-macros/juju_controller_agent_name/"><code class="docutils literal notranslate"><span class="pre">juju_controller_agent_name</span></code></a></li> <li class="toctree-l6"><a class="reference internal" href="../reference/resource-compute/list-of-commands-available-on-a-compute-resource-provisioned-by-juju/list-of-juju-introspect-macros/juju_cpu_profile/"><code class="docutils literal notranslate"><span class="pre">juju_cpu_profile</span></code></a></li> <li class="toctree-l6"><a class="reference internal" href="../reference/resource-compute/list-of-commands-available-on-a-compute-resource-provisioned-by-juju/list-of-juju-introspect-macros/juju_engine_report/"><code class="docutils literal notranslate"><span class="pre">juju_engine_report</span></code></a></li> <li class="toctree-l6"><a class="reference internal" href="../reference/resource-compute/list-of-commands-available-on-a-compute-resource-provisioned-by-juju/list-of-juju-introspect-macros/juju_goroutines/"><code class="docutils literal notranslate"><span class="pre">juju_goroutines</span></code></a></li> <li class="toctree-l6"><a class="reference internal" href="../reference/resource-compute/list-of-commands-available-on-a-compute-resource-provisioned-by-juju/list-of-juju-introspect-macros/juju_heap_profile/"><code class="docutils literal notranslate"><span class="pre">juju_heap_profile</span></code></a></li> <li class="toctree-l6"><a class="reference internal" href="../reference/resource-compute/list-of-commands-available-on-a-compute-resource-provisioned-by-juju/list-of-juju-introspect-macros/juju_machine_agent_name/"><code class="docutils literal notranslate"><span class="pre">juju_controller_agent_name</span></code></a></li> <li class="toctree-l6"><a class="reference internal" href="../reference/resource-compute/list-of-commands-available-on-a-compute-resource-provisioned-by-juju/list-of-juju-introspect-macros/juju_machine_lock/"><code class="docutils literal notranslate"><span class="pre">juju_machine_lock</span></code></a></li> <li class="toctree-l6"><a class="reference internal" href="../reference/resource-compute/list-of-commands-available-on-a-compute-resource-provisioned-by-juju/list-of-juju-introspect-macros/juju_metrics/"><code class="docutils literal notranslate"><span class="pre">juju_metrics</span></code></a></li> <li class="toctree-l6"><a class="reference internal" href="../reference/resource-compute/list-of-commands-available-on-a-compute-resource-provisioned-by-juju/list-of-juju-introspect-macros/juju_pubsub_report/"><code class="docutils literal notranslate"><span class="pre">juju_pubsub_report</span></code></a></li> <li class="toctree-l6"><a class="reference internal" href="../reference/resource-compute/list-of-commands-available-on-a-compute-resource-provisioned-by-juju/list-of-juju-introspect-macros/juju_start_unit/"><code class="docutils literal notranslate"><span class="pre">juju_start_unit</span></code></a></li> <li class="toctree-l6"><a class="reference internal" href="../reference/resource-compute/list-of-commands-available-on-a-compute-resource-provisioned-by-juju/list-of-juju-introspect-macros/juju_statepool_report/"><code class="docutils literal notranslate"><span class="pre">juju_statepool_report</span></code></a></li> <li class="toctree-l6"><a class="reference internal" href="../reference/resource-compute/list-of-commands-available-on-a-compute-resource-provisioned-by-juju/list-of-juju-introspect-macros/juju_statetracker_report/"><code class="docutils literal notranslate"><span class="pre">juju_statetracker_report</span></code></a></li> <li class="toctree-l6"><a class="reference internal" href="../reference/resource-compute/list-of-commands-available-on-a-compute-resource-provisioned-by-juju/list-of-juju-introspect-macros/juju_stop_unit/"><code class="docutils literal notranslate"><span class="pre">juju_stop_unit</span></code></a></li> <li class="toctree-l6"><a class="reference internal" href="../reference/resource-compute/list-of-commands-available-on-a-compute-resource-provisioned-by-juju/list-of-juju-introspect-macros/juju_unit_agent_name/"><code class="docutils literal notranslate"><span class="pre">juju_unit_agent_name</span></code></a></li> <li class="toctree-l6"><a class="reference internal" href="../reference/resource-compute/list-of-commands-available-on-a-compute-resource-provisioned-by-juju/list-of-juju-introspect-macros/juju_unit_status/"><code class="docutils literal notranslate"><span class="pre">juju_unit_status</span></code></a></li> </ul> </li> </ul> </li> </ul> </li> </ul> </li> <li class="toctree-l2"><a class="reference internal" href="../reference/rockcraft/">Rockcraft</a></li> <li class="toctree-l2"><a class="reference internal" href="../reference/scaling/">Scaling</a></li> <li class="toctree-l2"><a class="reference internal" href="../reference/script/">Script</a></li> <li class="toctree-l2"><a class="reference internal" href="../reference/secret/">Secret</a></li> <li class="toctree-l2"><a class="reference internal" href="../reference/space/">Space</a></li> <li class="toctree-l2"><a class="reference internal" href="../reference/ssh-key/">SSH key</a></li> <li class="toctree-l2"><a class="reference internal" href="../reference/status/">Status</a></li> <li class="toctree-l2"><a class="reference internal" href="../reference/storage/">Storage</a></li> <li class="toctree-l2"><a class="reference internal" href="../reference/subnet/">Subnet</a></li> <li class="toctree-l2"><a class="reference internal" href="../reference/telemetry/">Telemetry</a></li> <li class="toctree-l2"><a class="reference internal" href="../reference/unit/">Unit</a></li> <li class="toctree-l2"><a class="reference internal" href="../reference/upgrading-things/">Upgrading things</a></li> <li class="toctree-l2"><a class="reference internal" href="../reference/user/">User</a></li> <li class="toctree-l2"><a class="reference internal" href="../reference/worker/">Worker</a></li> <li class="toctree-l2"><a class="reference internal" href="../reference/zone/">Zone</a></li> </ul> </li> <li class="toctree-l1 has-children"><a class="reference internal" href="../explanation/">- Explanation</a><input class="toctree-checkbox" id="toctree-checkbox-20" name="toctree-checkbox-20" role="switch" type="checkbox"/><label for="toctree-checkbox-20"><div class="visually-hidden">Toggle navigation of - Explanation</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul> <li class="toctree-l2"><a class="reference internal" href="../explanation/application-modelling/">Application modelling</a></li> <li class="toctree-l2"><a class="reference internal" href="../explanation/charming-history/">About charming history</a></li> <li class="toctree-l2"><a class="reference internal" href="../explanation/charms-vs-kubernetes-operators/">Charms vs. Kubernetes operators</a></li> <li class="toctree-l2"><a class="reference internal" href="../explanation/juju-security/">Juju security</a></li> <li class="toctree-l2"><a class="reference internal" href="../explanation/kubernetes-in-juju/">Kubernetes in Juju</a></li> <li class="toctree-l2"><a class="reference internal" href="../explanation/performance-with-juju/">Performance with Juju</a></li> </ul> </li> <li class="toctree-l1"><a class="reference internal" href="../../contributor/">Juju contributor documentation</a></li> <li class="toctree-l1"><a class="reference internal" href="../../contributor/tutorial/">- Tutorial</a></li> <li class="toctree-l1 has-children"><a class="reference internal" href="../../contributor/howto/">- How-to guides</a><input class="toctree-checkbox" id="toctree-checkbox-21" name="toctree-checkbox-21" role="switch" type="checkbox"/><label for="toctree-checkbox-21"><div class="visually-hidden">Toggle navigation of - How-to guides</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul> <li class="toctree-l2"><a class="reference internal" href="../../contributor/howto/create-new-mongo-db-collection/">Create a new MongoDB collection</a></li> <li class="toctree-l2"><a class="reference internal" href="../../contributor/howto/create-new-mongo-db-collection/#define-a-new-collection-in-juju-db">Define a new collection in Juju DB</a></li> <li class="toctree-l2"><a class="reference internal" href="../../contributor/howto/create-new-mongo-db-collection/#define-a-new-entity-collection-structure">Define a new entity collection structure</a></li> <li class="toctree-l2"><a class="reference internal" href="../../contributor/howto/create-new-mongo-db-collection/#develop-an-api-to-manipulate-collection-entities">Develop an API to manipulate collection entities</a></li> <li class="toctree-l2"><a class="reference internal" href="../../contributor/howto/create-unit-test-suite/">Create a unit test suite</a></li> <li class="toctree-l2"><a class="reference internal" href="../../contributor/howto/debug-a-dqlite-core-dump-issue/">Debug a Dqlite core dump issue</a></li> <li class="toctree-l2"><a class="reference internal" href="../../contributor/howto/merge-forward/">Merge forward</a></li> <li class="toctree-l2"><a class="reference internal" href="../../contributor/howto/write-a-unit-test/">Write a unit test</a></li> <li class="toctree-l2"><a class="reference internal" href="../../contributor/howto/write-an-integration-test/">Write an integration test</a></li> </ul> </li> <li class="toctree-l1 has-children"><a class="reference internal" href="../../contributor/reference/">- Reference</a><input class="toctree-checkbox" id="toctree-checkbox-22" name="toctree-checkbox-22" role="switch" type="checkbox"/><label for="toctree-checkbox-22"><div class="visually-hidden">Toggle navigation of - Reference</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul> <li class="toctree-l2 has-children"><a class="reference internal" href="../../contributor/reference/testing/">Testing</a><input class="toctree-checkbox" id="toctree-checkbox-23" name="toctree-checkbox-23" role="switch" type="checkbox"/><label for="toctree-checkbox-23"><div class="visually-hidden">Toggle navigation of Testing</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul> <li class="toctree-l3 has-children"><a class="reference internal" href="../../contributor/reference/testing/integration-testing/">Integration testing</a><input class="toctree-checkbox" id="toctree-checkbox-24" name="toctree-checkbox-24" role="switch" type="checkbox"/><label for="toctree-checkbox-24"><div class="visually-hidden">Toggle navigation of Integration testing</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul> <li class="toctree-l4"><a class="reference internal" href="../../contributor/reference/testing/integration-testing/integration-test-suite/">Integration test suite</a></li> <li class="toctree-l4"><a class="reference internal" href="../../contributor/reference/testing/integration-testing/test-includes/">Test includes</a></li> </ul> </li> <li class="toctree-l3 has-children"><a class="reference internal" href="../../contributor/reference/testing/unit-testing/">Unit testing</a><input class="toctree-checkbox" id="toctree-checkbox-25" name="toctree-checkbox-25" role="switch" type="checkbox"/><label for="toctree-checkbox-25"><div class="visually-hidden">Toggle navigation of Unit testing</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul> <li class="toctree-l4"><a class="reference internal" href="../../contributor/reference/testing/unit-testing/checker/">Checker</a></li> <li class="toctree-l4"><a class="reference internal" href="../../contributor/reference/testing/unit-testing/unit-test-suite/">Unit test suite</a></li> <li class="toctree-l4"><a class="reference internal" href="../../contributor/reference/testing/unit-testing/util-suite/">Util suite</a></li> </ul> </li> </ul> </li> <li class="toctree-l2"><a class="reference internal" href="../../contributor/reference/agent/">Agent</a></li> <li class="toctree-l2"><a class="reference internal" href="../../contributor/reference/binary-containeragent/">Binary container agent</a></li> <li class="toctree-l2"><a class="reference internal" href="../../contributor/reference/catacomb-package/">Catacombs</a></li> <li class="toctree-l2"><a class="reference internal" href="../../contributor/reference/conventional-commits/">Conventional commits</a></li> <li class="toctree-l2"><a class="reference internal" href="../../contributor/reference/cve/">CVEs</a></li> <li class="toctree-l2"><a class="reference internal" href="../../contributor/reference/dependency-package/">Dependency Package</a></li> <li class="toctree-l2"><a class="reference internal" href="../../contributor/reference/tomb-package/">Tomb package</a></li> <li class="toctree-l2"><a class="reference internal" href="../../contributor/reference/worker/">Worker</a></li> <li class="toctree-l2"><a class="reference internal" href="../../contributor/reference/worker-interface/">Worker interface</a></li> <li class="toctree-l2"><a class="reference internal" href="../../contributor/reference/worker-package/">Worker package</a></li> </ul> </li> <li class="toctree-l1 has-children"><a class="reference internal" href="../../contributor/explanation/">- Explanation</a><input class="toctree-checkbox" id="toctree-checkbox-26" name="toctree-checkbox-26" role="switch" type="checkbox"/><label for="toctree-checkbox-26"><div class="visually-hidden">Toggle navigation of - Explanation</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul class="simple"> </ul> </li> <li class="toctree-l1 has-children"><a class="reference internal" href="../../contributor/unsorted/">- Unsorted</a><input class="toctree-checkbox" id="toctree-checkbox-27" name="toctree-checkbox-27" role="switch" type="checkbox"/><label for="toctree-checkbox-27"><div class="visually-hidden">Toggle navigation of - Unsorted</div><i class="icon"><svg><use href="#svg-arrow-right"></use></svg></i></label><ul> <li class="toctree-l2"><a class="reference internal" href="../../contributor/unsorted/FAQ/">Developer FAQ</a></li> <li class="toctree-l2"><a class="reference internal" href="../../contributor/unsorted/api-best-practices/">API best practices</a></li> <li class="toctree-l2"><a class="reference internal" href="../../contributor/unsorted/api-design-specification/">API Design Specification</a></li> <li class="toctree-l2"><a class="reference internal" href="../../contributor/unsorted/api-implementation-guide/">API Implementation Guide</a></li> <li class="toctree-l2"><a class="reference internal" href="../../contributor/unsorted/architectural-overview/">Juju architectural overview</a></li> <li class="toctree-l2"><a class="reference internal" href="../../contributor/unsorted/bootstrapping/">Boostrapping a model</a></li> <li class="toctree-l2"><a class="reference internal" href="../../contributor/unsorted/charms-in-action/">Charms in action</a></li> <li class="toctree-l2"><a class="reference internal" href="../../contributor/unsorted/code-review-checklists/">Code review checklist</a></li> <li class="toctree-l2"><a class="reference internal" href="../../contributor/unsorted/commands/">Commands</a></li> <li class="toctree-l2"><a class="reference internal" href="../../contributor/unsorted/cross-platform-development/">Cross-platform development</a></li> <li class="toctree-l2"><a class="reference internal" href="../../contributor/unsorted/death-and-destruction/">Death and destruction</a></li> <li class="toctree-l2"><a class="reference internal" href="../../contributor/unsorted/debugging-races/">Debugging races</a></li> <li class="toctree-l2"><a class="reference internal" href="../../contributor/unsorted/entity-creation/">Entity creation</a></li> <li class="toctree-l2"><a class="reference internal" href="../../contributor/unsorted/high_availability/">Controller high availability (HA)</a></li> <li class="toctree-l2"><a class="reference internal" href="../../contributor/unsorted/implementing-effective-config-structs/">Implementing effective config-structs</a></li> <li class="toctree-l2"><a class="reference internal" href="../../contributor/unsorted/lifecycles/">Lifecycles</a></li> <li class="toctree-l2"><a class="reference internal" href="../../contributor/unsorted/managing-complexity/">Managing complexity</a></li> <li class="toctree-l2"><a class="reference internal" href="../../contributor/unsorted/observing-mongodb-performance/">Observing MongoDB performance</a></li> <li class="toctree-l2"><a class="reference internal" href="../../contributor/unsorted/provisioning/">Provisioning</a></li> <li class="toctree-l2"><a class="reference internal" href="../../contributor/unsorted/read-before-contributing/">Read before contributing</a></li> <li class="toctree-l2"><a class="reference internal" href="../../contributor/unsorted/review-checklist/">Review checklist</a></li> <li class="toctree-l2"><a class="reference internal" href="../../contributor/unsorted/simplestreams-metadata/">Simplestreams metadata</a></li> <li class="toctree-l2"><a class="reference internal" href="../../contributor/unsorted/styleguide/">Styleguide</a></li> <li class="toctree-l2"><a class="reference internal" href="../../contributor/unsorted/system-ssh-key/">System SSH Key</a></li> <li class="toctree-l2"><a class="reference internal" href="../../contributor/unsorted/test-failure-FAQ/">Test failure FAQ</a></li> <li class="toctree-l2"><a class="reference internal" href="../../contributor/unsorted/third-party-go-clients/">How to create and use Go clients for Juju</a></li> <li class="toctree-l2"><a class="reference internal" href="../../contributor/unsorted/write-tests/">Write tests</a></li> <li class="toctree-l2"><a class="reference internal" href="../../contributor/unsorted/writing-workers/">Writing workers</a></li> </ul> </li> </ul> </div> </div> </div> </div> </aside> <div class="main"> <div class="content"> <div class="article-container"> <a href="#" class="back-to-top muted-link"> <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"> <path d="M13 20h-2V8l-5.5 5.5-1.42-1.42L12 4.16l7.92 7.92-1.42 1.42L13 8v12z"></path> </svg> <span>Back to top</span> </a> <div class="content-icon-container"> <div class="theme-toggle-container theme-toggle-content"> <button class="theme-toggle"> <div class="visually-hidden">Toggle Light / Dark / Auto color theme</div> <svg class="theme-icon-when-auto-light"><use href="#svg-sun-with-moon"></use></svg> <svg class="theme-icon-when-auto-dark"><use href="#svg-moon-with-sun"></use></svg> <svg class="theme-icon-when-dark"><use href="#svg-moon"></use></svg> <svg class="theme-icon-when-light"><use href="#svg-sun"></use></svg> </button> </div> <label class="toc-overlay-icon toc-content-icon" for="__toc"> <div class="visually-hidden">Toggle table of contents sidebar</div> <i class="icon"><svg><use href="#svg-toc"></use></svg></i> </label> </div> <article role="main" id="furo-main-content"> <section id="get-started-with-juju"> <span id="tutorial"></span><h1>Get started with Juju<a class="headerlink" href="#get-started-with-juju" title="Link to this heading">¶</a></h1> <p>Imagine your business needs a chat service such as Mattermost backed up by a database such as PostgreSQL. In a traditional setup, this can be quite a challenge, but with Juju you’ll find yourself deploying, configuring, scaling, integrating, etc., applications in no time. Let’s get started!</p> <div class="admonition note"> <p class="admonition-title">Note</p> <p>The tutorial will take about 1h to complete.</p> <p>If you’d like a quicker start:</p> <ul class="simple"> <li><p>Ignore the “Look around” expand boxes.</p></li> <li><p>Try instead <a class="reference external" href="https://github.com/juju/juju?tab=readme-ov-file#give-it-a-try">GitHub | Juju > Give it a try</a>.</p></li> </ul> <p>At any point, to ask for help or give feedback or contribute: Get in touch: <a class="reference internal" href="../../#project-and-community"><span class="std std-ref">Project and community</span></a>.</p> </div> <p><strong>What you’ll need:</strong></p> <ul class="simple"> <li><p>A workstation, e.g., a laptop, that has sufficient resources to launch a virtual machine with 4 CPUs, 8 GB RAM, and 50 GB disk space.</p></li> </ul> <p><strong>What you’ll do:</strong></p> <ul class="simple"> <li><p>Set up an isolated test environment with Multipass and the <code class="docutils literal notranslate"><span class="pre">charm-dev</span></code> blueprint, which will provide all the necessary tools and configuration for the tutorial (a localhost machine cloud and Kubernetes cloud, Juju, etc.). <em>Note: The tutorial focuses on Juju charm deployment, making how to bootstrap a Juju controller on a specific cloud out-of-scope.</em></p></li> <li><p>Plan, deploy, and maintain a chat service based on Mattermost and backed by PostgreSQL on a local Kubernetes cloud with Juju.</p></li> </ul> <section id="set-up-an-isolated-test-environment"> <h2>Set up an isolated test environment<a class="headerlink" href="#set-up-an-isolated-test-environment" title="Link to this heading">¶</a></h2> <p>On your machine, install Multipass and use it to set up an Ubuntu virtual machine (VM) called <code class="docutils literal notranslate"><span class="pre">my-juju-vm</span></code> from the <code class="docutils literal notranslate"><span class="pre">charm-dev</span></code> blueprint.</p> <blockquote> <div><p>See more: <a class="reference internal" href="../howto/manage-your-deployment/manage-your-deployment-environment/#manage-your-deployment-environment"><span class="std std-ref">Manage your deployment environment</span></a> > Set things up (automatically)</p> <p>Note: This document also contains a manual path, using which you can set things up without the Multipass VM or the <code class="docutils literal notranslate"><span class="pre">charm-dev</span></code> blueprint. However, please note that the manual path may yield slightly different results that may impact your experience of this tutorial. For best results we strongly recommend the automatic path, or else suggest that you follow the manual path in a way that stays very close to <a class="reference external" href="https://github.com/canonical/multipass-blueprints/blob/ae90147b811a79eaf4508f4776390141e0195fe7/v1/charm-dev.yaml#L134">the definition of the <code class="docutils literal notranslate"><span class="pre">charm-dev</span></code> blueprint</a>.</p> </div></blockquote> </section> <section id="plan"> <h2>Plan<a class="headerlink" href="#plan" title="Link to this heading">¶</a></h2> <p>In this tutorial your goal is to set up a chat service on a cloud.</p> <p>First, decide which cloud (i.e., anything that provides storage, compute, and networking) you want to use. Juju supports a long list of clouds; in this tutorial we will use a low-ops, minimal production Kubernetes called ‘MicroK8s’. In a terminal, open a shell into your VM and verify that you already have MicroK8s installed (<code class="docutils literal notranslate"><span class="pre">microk8s</span> <span class="pre">version</span></code>).</p> <blockquote> <div><p>See more: <a class="reference internal" href="../reference/cloud/#cloud"><span class="std std-ref">Cloud (substrate)</span></a>, <a class="reference internal" href="../reference/cloud/list-of-supported-clouds/#list-of-supported-clouds"><span class="std std-ref">List of supported clouds</span></a>, <a class="reference internal" href="../reference/cloud/list-of-supported-clouds/the-microk8s-cloud-and-juju/#cloud-kubernetes-microk8s"><span class="std std-ref">The MicroK8s cloud and Juju</span></a>, <a class="reference internal" href="../howto/manage-your-deployment/manage-your-deployment-environment/#manage-your-deployment-environment"><span class="std std-ref">Manage your deployment environment</span></a>> steps 3-4</p> </div></blockquote> <p>Next, decide which charms (i.e., software operators) you want to use. Charmhub provides a large collection. For this tutorial we will use <code class="docutils literal notranslate"><span class="pre">mattermost-k8s</span></code> for the chat service, <code class="docutils literal notranslate"><span class="pre">postgresql-k8s</span></code> for its backing database, and <code class="docutils literal notranslate"><span class="pre">self-signed-certificates</span></code> to TLS-encrypt traffic from PostgreSQL.</p> <blockquote> <div><p>See more: <a class="reference internal" href="../reference/charm/#charm"><span class="std std-ref">Charm</span></a>, <a class="reference external" href="https://charmhub.io/">Charmhub</a>, Charmhub | <a class="reference external" href="https://charmhub.io/mattermost-k8s"><code class="docutils literal notranslate"><span class="pre">mattermost-k8s</span></code></a>, <a class="reference external" href="https://charmhub.io/postgresql-k8s"><code class="docutils literal notranslate"><span class="pre">postgresql-k8s</span></code></a>, <a class="reference external" href="https://charmhub.io/self-signed-certificates"><code class="docutils literal notranslate"><span class="pre">self-signed-certificates</span></code></a></p> </div></blockquote> <details class="sd-sphinx-override sd-dropdown sd-card sd-mb-3"> <summary class="sd-summary-title sd-card-header"> <span class="sd-summary-text">Look around</span><span class="sd-summary-state-marker sd-summary-chevron-right"><svg version="1.1" width="1.5em" height="1.5em" class="sd-octicon sd-octicon-chevron-right" viewBox="0 0 24 24" aria-hidden="true"><path d="M8.72 18.78a.75.75 0 0 1 0-1.06L14.44 12 8.72 6.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018l6.25 6.25a.75.75 0 0 1 0 1.06l-6.25 6.25a.75.75 0 0 1-1.06 0Z"></path></svg></span></summary><div class="sd-summary-content sd-card-body docutils"> <p class="sd-card-text"><strong>1. Learn more about your MicroK8s cloud.</strong><br> <strong>1a.</strong> Find out more about its snap: <code class="docutils literal notranslate"><span class="pre">snap</span> <span class="pre">info</span> <span class="pre">microk8s</span></code>.<br> <strong>1b.</strong> Find out the installed version: <code class="docutils literal notranslate"><span class="pre">microk8s</span> <span class="pre">version</span></code>.<br> <strong>1c.</strong> Check its enabled addons: <code class="docutils literal notranslate"><span class="pre">microk8s</span> <span class="pre">status</span></code>.<br> <strong>1d.</strong> Inspect its <code class="docutils literal notranslate"><span class="pre">.kube/config</span></code> file: <code class="docutils literal notranslate"><span class="pre">cat</span> <span class="pre">~/.kube/config</span></code>.<br> <strong>1e.</strong> Try <code class="docutils literal notranslate"><span class="pre">microk8s</span> <span class="pre">kubectl</span></code>; you won’t need it once you have Juju, but it’s there anyway.<br></p> </div> </details></section> <section id="deploy"> <h2>Deploy<a class="headerlink" href="#deploy" title="Link to this heading">¶</a></h2> <p>You will need to install a Juju client; on the client, add your cloud and cloud credentials; on the cloud, bootstrap a controller (i.e., control plane); on the controller, add a model (i.e., canvas to deploy things on; namespace); on the model, deploy, configure, and integrate the charms that make up your chat service.</p> <p>The blueprint used to launch your VM has ensured that most of these things are already in place for you – verify that you have a Juju client, that it knows about your MicroK8s cloud and cloud credentials, that the MicroK8s cloud already has a controller bootstrapped on it, and that the Microk8s controller already has a model on it.</p> <p>Just for practice, bootstrap a new controller and model with more informative names – a controller called <code class="docutils literal notranslate"><span class="pre">31microk8s</span></code> (reflecting the version of Juju that came with your VM and the cloud that the controller lives on) and a model called <code class="docutils literal notranslate"><span class="pre">chat</span></code> (reflecting the fact that we intend to use it for applications related to a chat service).</p> <p>Finally, go ahead and deploy, configure, and integrate your charms.</p> <p>Sample session (yours should look very similar):</p> <div class="admonition tip"> <p class="admonition-title">Tip</p> <p>Split your terminal window into three. In all, access your Multipass VM shell (<code class="docutils literal notranslate"><span class="pre">multipass</span> <span class="pre">shell</span> <span class="pre">my-juju-vm</span></code>) and then:</p> <p><strong>Shell 1:</strong> Keep using it as you’ve already been doing so far, namely to type the commands in this tutorial.</p> <p><strong>Shell 2:</strong> Run <code class="docutils literal notranslate"><span class="pre">watch</span> <span class="pre">-n</span> <span class="pre">1</span> <span class="pre">-c</span> <span class="pre">juju</span> <span class="pre">status</span> <span class="pre">--relations</span> <span class="pre">--color</span></code> to watch your deployment status evolve. (Things are all right if your <code class="docutils literal notranslate"><span class="pre">App</span> <span class="pre">Status</span></code> and your <code class="docutils literal notranslate"><span class="pre">Unit</span> <span class="pre">-</span> <span class="pre">Workload</span></code> reach <code class="docutils literal notranslate"><span class="pre">active</span></code> and your <code class="docutils literal notranslate"><span class="pre">Unit</span> <span class="pre">-</span> <span class="pre">Agent</span></code> reaches <code class="docutils literal notranslate"><span class="pre">idle</span></code>. See more: <a class="reference internal" href="../reference/status/#status"><span class="std std-ref">Status</span></a>.</p> <p><strong>Shell 3:</strong> Run <code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">debug-log</span></code> to watch all the details behind your deployment status. (Especially useful when things don’t evolve as expected. In that case, please get in touch.)</p> </div> <div class="highlight-text notranslate"><div class="highlight"><pre><span></span># Verify that you have the juju client installed: ubuntu@my-juju-vm:~$ juju version 3.1.8-genericlinux-amd64 # Verify that the client already knows about your microk8s cloud: ubuntu@my-juju-vm:~$ juju clouds # (Ignore the client-controller distinction for now --it'll make sense in a bit.) Only clouds with registered credentials are shown. There are more clouds, use --all to see them. Clouds available on the controller: Cloud Regions Default Type microk8s 1 localhost k8s Clouds available on the client: Cloud Regions Default Type Credentials Source Description localhost 1 localhost lxd 1 built-in LXD Container Hypervisor microk8s 1 localhost k8s 1 built-in A Kubernetes Cluster # Verify that the client already knows about your microk8s credentials: ubuntu@my-juju-vm:~$ juju credentials # (Ignore the client-controller distinction for now --it'll make sense in a bit.) Controller Credentials: Cloud Credentials microk8s microk8s Client Credentials: Cloud Credentials localhost localhost* microk8s microk8s* ubuntu@my-juju-vm:~$ juju controllers Use --refresh option with this command to see the latest information. Controller Model User Access Cloud/Region Models Nodes HA Version lxd welcome-lxd admin superuser localhost/localhost 2 1 none 3.1.8 microk8s* welcome-k8s admin superuser microk8s/localhost 2 1 - 3.1.8 ubuntu@my-juju-vm:~$ # Bootstrap a new controller: ubuntu@my-juju-vm:~$ juju bootstrap microk8s 31microk8s Creating Juju controller "31microk8s" on microk8s/localhost Bootstrap to Kubernetes cluster identified as microk8s/localhost Creating k8s resources for controller "controller-31microk8s" Starting controller pod Bootstrap agent now started Contacting Juju controller at 10.152.183.71 to verify accessibility... Bootstrap complete, controller "31microk8s" is now available in namespace "controller-31microk8s" Now you can run juju add-model <model-name> to create a new model to deploy k8s workloads. # Create a new model: ubuntu@my-juju-vm:~$ juju add-model chat Added 'chat' model on microk8s/localhost with credential 'microk8s' for user 'admin' # Deploy mattermost-k8s: ubuntu@tutorial-vm:~$ juju deploy mattermost-k8s Located charm "mattermost-k8s" in charm-hub, revision 27 Deploying "mattermost-k8s" from charm-hub charm "mattermost-k8s", revision 27 in channel stable on <a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="cebbacbba0babb8efcfee0fefa">[email protected]</a>/stable # Deploy and configure postgresql-k8s: ubuntu@tutorial-vm:~$ juju deploy postgresql-k8s --channel 14/stable --trust --config profile=testing Located charm "postgresql-k8s" in charm-hub, revision 193 Deploying "postgresql-k8s" from charm-hub charm "postgresql-k8s", revision 193 in channel 14/stable on <a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="097c6b7c677d7c493b3b27393d">[email protected]</a>/stable # Deploy self-signed-certificates: ubuntu@my-juju-vm:~$ juju deploy self-signed-certificates Located charm "self-signed-certificates" in charm-hub, revision 72 Deploying "self-signed-certificates" from charm-hub charm "self-signed-certificates", revision 72 in channel stable on <a href="/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="601502150e14152052524e5054">[email protected]</a>/stable # Integrate self-signed-certificates with postgresql-k8s: ubuntu@tutorial-vm:~$ juju integrate self-signed-certificates postgresql-k8s # Integrate postgresql-k8s with mattermost-k8s: ubuntu@tutorial-vm:~$ juju integrate postgresql-k8s:db mattermost-k8s # Check your model's status: ubuntu@my-juju-vm:~$ juju status --relations Model Controller Cloud/Region Version SLA Timestamp chat 31microk8s microk8s/localhost 3.1.8 unsupported 13:48:04+02:00 App Version Status Scale Charm Channel Rev Address Exposed Message mattermost-k8s .../mattermost:v8.1.3-20.04... active 1 mattermost-k8s stable 27 10.152.183.131 no postgresql-k8s 14.10 active 1 postgresql-k8s 14/stable 193 10.152.183.56 no self-signed-certificates active 1 self-signed-certificates stable 72 10.152.183.119 no Unit Workload Agent Address Ports Message mattermost-k8s/0* active idle 10.1.32.155 8065/TCP postgresql-k8s/0* active idle 10.1.32.152 self-signed-certificates/0* active idle 10.1.32.154 Integration provider Requirer Interface Type Message postgresql-k8s:database-peers postgresql-k8s:database-peers postgresql_peers peer postgresql-k8s:db mattermost-k8s:db pgsql regular postgresql-k8s:restart postgresql-k8s:restart rolling_op peer postgresql-k8s:upgrade postgresql-k8s:upgrade upgrade peer self-signed-certificates:certificates postgresql-k8s:certificates tls-certificates regular </pre></div> </div> <p>From the output of <code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">status</span></code>> <code class="docutils literal notranslate"><span class="pre">Unit</span></code> > <code class="docutils literal notranslate"><span class="pre">mattermost-k8s/0</span></code>, retrieve the IP address and the port and feed them to <code class="docutils literal notranslate"><span class="pre">curl</span></code> on the template below:</p> <div class="highlight-text notranslate"><div class="highlight"><pre><span></span>curl <IP address>:<port number>/api/v4/system/ping </pre></div> </div> <p>Sample session:</p> <div class="highlight-text notranslate"><div class="highlight"><pre><span></span>ubuntu@my-juju-vm:~$ curl 10.1.32.155:8065/api/v4/system/ping {"ActiveSearchBackend":"database","AndroidLatestVersion":"","AndroidMinVersion":"","IosLatestVersion":"","IosMinVersion":"","status":"OK"} </pre></div> </div> <p>Congratulations, your chat service is up and running!</p> <p><img alt="Juju tutorial - Your deployment" src="../../_images/tutorial.png" /></p> <p><em>Your computer with your Multipass VM, your MicroK8s cloud, and a live Juju controller (the ‘charm’ in the Controller Unit is the <code class="docutils literal notranslate"><span class="pre">juju-controller</span></code> charm) + a sample deployed application on it (the ‘charm’ in the Regular Unit stands for any charm that you might deploy). If in the Regular Application you replace the charm with <code class="docutils literal notranslate"><span class="pre">mattermost-k8s</span></code> and image a few more Regular Applications where you replace the charm with <code class="docutils literal notranslate"><span class="pre">postgresql-k8s</span></code> and, respectively, <code class="docutils literal notranslate"><span class="pre">self-signed-certificates</span></code>, and if you trace the path from <code class="docutils literal notranslate"><span class="pre">postgresql-k8s</span></code>’s Unit Agent through the Controller Agent to <code class="docutils literal notranslate"><span class="pre">self-signed-certificates</span></code>’s and, respectively, <code class="docutils literal notranslate"><span class="pre">mattermost-k8s</span></code> Unit Agent, you get a full representation of your deployment. (Note: After integration, the workloads may also know how to contact each other directly; still, all communication between their respective charms goes through the Juju controller and the result of that communication is stored in the database in the form of maps known as ‘relation data bags’.)</em></p> <blockquote> <div><p>See more: <a class="reference internal" href="../howto/manage-your-deployment/manage-your-deployment-environment/#manage-your-deployment-environment"><span class="std std-ref">Manage your deployment environment</span></a>, <a class="reference internal" href="../howto/manage-juju/#manage-juju"><span class="std std-ref">How to manage the juju CLI client</span></a>, <a class="reference internal" href="../howto/manage-clouds/#manage-clouds"><span class="std std-ref">How to manage clouds</span></a>, <a class="reference internal" href="../howto/manage-credentials/#manage-credentials"><span class="std std-ref">How to manage credentials</span></a>, <a class="reference internal" href="../howto/manage-controllers/#manage-controllers"><span class="std std-ref">How to manage controllers</span></a>, <a class="reference internal" href="../howto/manage-models/#manage-models"><span class="std std-ref">How to manage models</span></a>, <a class="reference internal" href="../howto/manage-applications/#manage-applications"><span class="std std-ref">How to manage applications</span></a></p> </div></blockquote> <details class="sd-sphinx-override sd-dropdown sd-card sd-mb-3"> <summary class="sd-summary-title sd-card-header"> <span class="sd-summary-text">Look around</span><span class="sd-summary-state-marker sd-summary-chevron-right"><svg version="1.1" width="1.5em" height="1.5em" class="sd-octicon sd-octicon-chevron-right" viewBox="0 0 24 24" aria-hidden="true"><path d="M8.72 18.78a.75.75 0 0 1 0-1.06L14.44 12 8.72 6.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018l6.25 6.25a.75.75 0 0 1 0 1.06l-6.25 6.25a.75.75 0 0 1-1.06 0Z"></path></svg></span></summary><div class="sd-summary-content sd-card-body docutils"> <p class="sd-card-text"><strong>1.</strong> <strong>Learn more about <code class="docutils literal notranslate"><span class="pre">juju</span></code>.</strong> <br> <strong>1a.</strong> Find out more about its snap: <code class="docutils literal notranslate"><span class="pre">snap</span> <span class="pre">info</span> <span class="pre">juju</span></code>. <br> <strong>1b.</strong> Find out the installed version: <code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">version</span></code>. <br> <strong>1c.</strong> Quickly preview all the commands: <code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">help</span> <span class="pre">commands</span></code>. <br> <strong>1d.</strong> Filter by keyword: Use <code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">help</span> <span class="pre">commands</span> <span class="pre">|</span> <span class="pre">grep</span> <span class="pre"><keyword></span></code> to get a quick sense of the commands related to a particular keyword (e.g., “secret”). Try <code class="docutils literal notranslate"> <span class="pre">juju</span> <span class="pre">help</span> <span class="pre">commands</span> <span class="pre">|</span> <span class="pre">grep</span> <span class="pre">-v</span> <span class="pre">Alias</span></code> to exclude any aliases. <br> <strong>1e.</strong> Find out more about a specific command: <code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">help</span> <span class="pre"><command></span></code>.<br> <strong>1f.</strong> Inspect the files on your workstation associated with the client: <code class="docutils literal notranslate"><span class="pre">ls</span> <span class="pre">~/.local/share/juju</span></code>.<br> <strong>1g.</strong> Learn about other Juju clients: <a class="reference external" href="https://canonical-terraform-provider-juju.readthedocs-hosted.com/en/latest/tutorial/">terraform-provider-juju</a>, <a class="reference external" href="https://pythonlibjuju.readthedocs.io/en/latest/">Python Libjuju</a>. <p></p> <p class="sd-card-text"><strong>2.</strong> <strong>Learn more about your cloud definition and credentials <em>in</em> Juju.</strong> <br> <strong>2a.</strong> Find out more about the Juju notion of a cloud: <a class="reference internal" href="../reference/cloud/#cloud"><span class="std std-ref">Cloud (substrate)</span></a>.<br> <strong>2b.</strong> Find out all the clouds whose definitions your client has already: <code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">clouds</span></code>, <code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">clouds</span> <span class="pre">--all</span></code>. <br> <strong>2c.</strong> Take a look at how Juju has defined your MicroK8s cloud: <code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">show-cloud</span> <span class="pre">microk8s</span></code>, <code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">credentials</span></code>, <code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">show-credential</span> <span class="pre">microk8s</span> <span class="pre">microk8s</span> <span class="pre">--show-secrets</span></code>. :warning: In Juju, the term ‘credential’ is always about access to a cloud.<br> <strong>2d.</strong> Revisit the output for <code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">clouds</span></code> or <code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">credentials</span></code>. Notice the classification into client vs. controller. All this classification does is keep track of who is aware of a given cloud definition / credential – the client, the controller, or both. However, this simple distinction has important implications – can you guess which? You can use the same controllers to run multiple clouds and you can decide which cloud account to use.</p> <p class="sd-card-text"><strong>3.</strong> <strong>Learn more about Juju controllers.</strong> <br> <strong>3a.</strong> Find out all the controllers that your client is aware of already: <code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">controllers</span></code>. Switch to the LXD cloud controller, then back: <code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">switch</span> <span class="pre">lxd</span></code>, <code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">switch</span> <span class="pre">microk8s</span></code>. Get more detail on each controller: <code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">show-controller</span> <span class="pre"><controller</span> <span class="pre">name></span></code>. Take a sneak peek at their current configuration: <code class="docutils literal notranslate"><span class="pre">cat</span> <span class="pre">~/.local/share/juju/bootstrap-config.yaml</span></code>. <br> <strong>3b.</strong> Revisit the output for <code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">controllers</span></code>. Note the <code class="docutils literal notranslate"><span class="pre">User</span></code> and <code class="docutils literal notranslate"><span class="pre">Access</span></code> columns. In Juju, a user is any person able to at least log in to a Juju controller. Run <code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">whoami</span></code>, then <code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">show-user</span> <span class="pre">admin</span></code> – as you can see, your user is called <code class="docutils literal notranslate"><span class="pre">admin</span></code> and has <code class="docutils literal notranslate"><span class="pre">superuser</span></code> access to the controller. <p></p> <p class="sd-card-text"><strong>4.</strong> <strong>Learn more about Juju models, applications, units.</strong> <br> <strong>4a.</strong> Find out all the models on your <code class="docutils literal notranslate"><span class="pre">microk8s</span></code> controller: <code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">models</span></code>. <br> <strong>4b.</strong> Find out more about your <code class="docutils literal notranslate"><span class="pre">chat</span></code> model: <code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">show-model</span></code>, <code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">status</span> <span class="pre">-m</span> <span class="pre">microk8s:chat</span></code>. What do you think a model is? A model is a logical abstraction. It denotes a workspace, a canvas where you deploy, integrate, and manage applications. On a Kubernetes cloud, a Juju model corresponds to a Kubernetes namespace. Run <code class="docutils literal notranslate"><span class="pre">microk8s</span> <span class="pre">kubectl</span> <span class="pre">get</span> <span class="pre">namespaces</span></code> to verify – the output should show a namespace called <code class="docutils literal notranslate"><span class="pre">chat</span></code>, for your <code class="docutils literal notranslate"><span class="pre">chat</span></code> model, and also a namespace called <code class="docutils literal notranslate"><span class="pre">controller-microk8s</span></code>, for your <code class="docutils literal notranslate"><span class="pre">controller</span></code> model.<br> <strong>4c.</strong> Try to guess: What is the <code class="docutils literal notranslate"><span class="pre">controller</span></code> model about? Switch to it and check: <code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">switch</span> <span class="pre">microk8s:controller</span></code>, then <code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">status</span></code>. When you bootstrap a controller into a cloud, this by default creates the <code class="docutils literal notranslate"><span class="pre">controller</span></code> model and deploys to it the <code class="docutils literal notranslate"><span class="pre">juju-controller</span></code> charm, whose units (=running instances of a charm) form the <code class="docutils literal notranslate"><span class="pre">controller</span></code> application. Find out more about the controller charm: <code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">info</span> <span class="pre">juju-controller</span></code> or <a class="reference external" href="https://charmhub.io/juju-controller">Charmhub | <code class="docutils literal notranslate"><span class="pre">juju-controller</span></code></a>. Find out more about the controller application: <code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">show-application</span> <span class="pre">controller</span></code>. SSH into a controller application unit: <code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">ssh</span> <span class="pre">controller/0</span></code>, then poke around using <a class="reference external" href="https://man7.org/linux/man-pages/man1/ls.1.html"><code class="docutils literal notranslate"><span class="pre">ls</span></code></a>, <a class="reference external" href="https://man7.org/linux/man-pages/man1/cd.1p.html"><code class="docutils literal notranslate"><span class="pre">cd</span></code></a>, and <a class="reference external" href="https://man7.org/linux/man-pages/man1/cat.1.html"><code class="docutils literal notranslate"><span class="pre">cat</span></code></a> (type <code class="docutils literal notranslate"><span class="pre">exit</span></code> to exit the unit). On a Kubernetes cloud, a Juju unit corresponds to a pod: <code class="docutils literal notranslate"><span class="pre">microk8s</span> <span class="pre">kubectl</span> <span class="pre">-n</span> <span class="pre">controller-microk8s</span> <span class="pre">get</span> <span class="pre">pods</span></code> should show a <code class="docutils literal notranslate"><span class="pre">controller-0</span></code> pod, which is the Kubernetes pod corresponding to the <code class="docutils literal notranslate"><span class="pre">controller/0</span></code> unit. <br> <strong>4d.</strong> Switch back to the <code class="docutils literal notranslate"><span class="pre">chat</span></code> model. Tip: When you’re on the same controller, you can skip the controller prefix when you specify the model to switch to.</p> </div> </details></section> <section id="maintain"> <h2>Maintain<a class="headerlink" href="#maintain" title="Link to this heading">¶</a></h2> <section id="scale"> <h3>Scale<a class="headerlink" href="#scale" title="Link to this heading">¶</a></h3> <p>A database failure can be very costly. Let’s scale it!</p> <p>Sample session:</p> <div class="highlight-text notranslate"><div class="highlight"><pre><span></span>ubuntu@my-juju-vm:~$ juju scale-application postgresql-k8s 3 postgresql-k8s scaled to 3 units # Wait a minute for things to settle down, then check the result: ubuntu@my-juju-vm:~$ juju status Model Controller Cloud/Region Version SLA Timestamp chat 31microk8s microk8s/localhost 3.1.8 unsupported 15:41:34+02:00 App Version Status Scale Charm Channel Rev Address Exposed Message mattermost-k8s .../mattermost:v8.1.3-20.04... active 1 mattermost-k8s stable 27 10.152.183.131 no postgresql-k8s 14.10 active 3 postgresql-k8s 14/stable 193 10.152.183.56 no self-signed-certificates active 1 self-signed-certificates stable 72 10.152.183.119 no Unit Workload Agent Address Ports Message mattermost-k8s/0* active idle 10.1.32.155 8065/TCP postgresql-k8s/0* active idle 10.1.32.152 Primary postgresql-k8s/1 active idle 10.1.32.158 postgresql-k8s/2 active executing 10.1.32.159 self-signed-certificates/0* active idle 10.1.32.154 </pre></div> </div> <p>As you might have guessed, the result of scaling an application is that you have multiple running instances of your application – that is, multiple units.</p> <div class="admonition caution"> <p class="admonition-title">Caution</p> <p>In a production scenario: You’ll want to make sure that they are also properly distributed over multiple nodes. Our localhost MicroK8s doesn’t allow us to do this (because we only have 1 node) but, if you clusterise MicroK8s, you can use it to explore this too!</p> <blockquote> <div><p>See more: <a class="reference external" href="https://microk8s.io/docs/clustering">MicroK8s | Create a multi-node cluster</a></p> </div></blockquote> </div> <blockquote> <div><p>See more: <a class="reference internal" href="../howto/manage-applications/#manage-applications"><span class="std std-ref">How to manage applications</span></a> > Scale</p> </div></blockquote> </section> <section id="perform-a-custom-action"> <h3>Perform a custom action<a class="headerlink" href="#perform-a-custom-action" title="Link to this heading">¶</a></h3> <p>In Juju, performing most major operations looks the same for every charm. However, charmers sometimes also define additional operations specific to a given charm. These operations are called actions and often have to do with accessing an application deployed by a charm, creating a backup, etc. Below, use the <code class="docutils literal notranslate"><span class="pre">postgresql-k8s</span></code> charm’s <code class="docutils literal notranslate"><span class="pre">set-password</span></code> action to generate a password for the default, <code class="docutils literal notranslate"><span class="pre">operator</span></code> username, then use the username and password to access the PostgreSQL application.</p> <p>First, get:</p> <ul class="simple"> <li><p>the host IP address of the PostgreSQL unit: retrieve it from <code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">status</span></code> or <code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">show-unit</span></code> (in the sample outputs above, <code class="docutils literal notranslate"><span class="pre">10.1.32.152</span></code>);</p></li> <li><p>a PostgreSQL username and password: we can use the internal, default user called <code class="docutils literal notranslate"><span class="pre">operator</span></code> and set a password for it using the <code class="docutils literal notranslate"><span class="pre">set-password</span></code> action. Sample session:</p></li> </ul> <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">juju</span> <span class="n">run</span> <span class="n">postgresql</span><span class="o">-</span><span class="n">k8s</span><span class="o">/</span><span class="n">leader</span> <span class="nb">set</span><span class="o">-</span><span class="n">password</span> <span class="n">username</span><span class="o">=</span><span class="n">operator</span> <span class="n">password</span><span class="o">=</span><span class="n">mysecretpass</span> </pre></div> </div> <p>Now, use this information to access the PostgreSQL application:</p> <p>First, ssh into the PostgreSQL unit (= Kubernetes container). Sample session:</p> <div class="highlight-text notranslate"><div class="highlight"><pre><span></span>ubuntu@my-juju-vm:~$ juju ssh --container postgresql postgresql-k8s/leader bash root@postgresql-k8s-0:/# </pre></div> </div> <p>Verify that <code class="docutils literal notranslate"><span class="pre">psql</span></code> is already installed. Sample session:</p> <div class="highlight-text notranslate"><div class="highlight"><pre><span></span>root@postgresql-k8s-0:/# psql --version psql (PostgreSQL) 14.10 (Ubuntu 14.10-0ubuntu0.22.04.1) </pre></div> </div> <p>Use <code class="docutils literal notranslate"><span class="pre">psql</span></code> to view a list of the existing databases. Sample session (make sure to use your own host and password):</p> <div class="highlight-text notranslate"><div class="highlight"><pre><span></span>root@postgresql-k8s-0:/# psql --host=10.1.32.152 --username=operator --password --list Password: List of databases Name | Owner | Encoding | Collate | Ctype | Access privileges -----------+----------+----------+---------+---------+-------------------------- postgres | operator | UTF8 | C | C.UTF-8 | operator=CTc/operator + | | | | | backup=CTc/operator + | | | | | replication=CTc/operator+ | | | | | rewind=CTc/operator + | | | | | monitoring=CTc/operator + | | | | | admin=c/operator template0 | operator | UTF8 | C | C.UTF-8 | =c/operator + | | | | | operator=CTc/operator template1 | operator | UTF8 | C | C.UTF-8 | =c/operator + | | | | | operator=CTc/operator (3 rows) </pre></div> </div> <p>Finally, use <code class="docutils literal notranslate"><span class="pre">psql</span></code> to access the <code class="docutils literal notranslate"><span class="pre">postgres</span></code> database and submit a query. Sample session:</p> <div class="highlight-text notranslate"><div class="highlight"><pre><span></span>root@postgresql-k8s-0:/# psql --host=10.1.32.152 --username=operator --password postgres Password: psql (14.10 (Ubuntu 14.10-0ubuntu0.22.04.1)) Type "help" for help. postgres=# SELECT version(); version version ---------------------------------------------------------------------------------------------------------------------------------------- PostgreSQL 14.10 (Ubuntu 14.10-0ubuntu0.22.04.1) on x86_64-pc-linux-gnu, compiled by gcc (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0, 64-bit (1 row) </pre></div> </div> <p>Type <code class="docutils literal notranslate"><span class="pre">exit</span></code> to get back to your unit shell and then again to return to your Multipass VM shell.</p> <blockquote> <div><p>See more:</p> <ul class="simple"> <li><p><a class="reference external" href="https://charmhub.io/postgresql-k8s/actions#set-password">Charmhub | <code class="docutils literal notranslate"><span class="pre">postgresql-k8s</span></code> > Actions > <code class="docutils literal notranslate"><span class="pre">set-password</span></code></a> (or run <code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">actions</span> <span class="pre">postgresql-k8s</span></code> followed by <code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">show-action</span> <span class="pre">postgresql-k8s</span> <span class="pre">set-password</span></code>)</p></li> <li><p><a class="reference internal" href="../howto/manage-actions/#manage-actions"><span class="std std-ref">How to manage actions</span></a></p></li> </ul> </div></blockquote> </section> <section id="upgrade"> <h3>Upgrade<a class="headerlink" href="#upgrade" title="Link to this heading">¶</a></h3> <p>Juju releases keep coming and going but our deployment is still stuck on Juju 3.1.8 (i.e., major version 3, minor version 1, patch version 8). Time to upgrade!</p> <p>To upgrade a deployment, we must upgrade the client, the version of the Juju agents in the controller model, the version of the Juju agents in non-controller models, (if on a machine cloud, the base of the machine), and the charms.</p> <p>These upgrades don’t all have to happen at once, but it mostly makes sense to do them in this order. And, if upgrading an agent’s minor or major version of a controller / model, you must know that the only option is to upgrade the controller/model to the latest patch version of the old minor or major, then bootstrap a new controller and migrate the model to it, then upgrade the model to the current patch version of the new controller.</p> <p>Let’s give it a try!</p> <div class="admonition caution"> <p class="admonition-title">Caution</p> <p>The running processes in your Shells 2 and 3 will block your client upgrade. To prevent that, in each one, hit the <code class="docutils literal notranslate"><span class="pre">C-c</span></code> key combination to stop them for the duration of the client upgrade, the restart them by running again <code class="docutils literal notranslate"><span class="pre">watch</span> <span class="pre">-n</span> <span class="pre">1</span> <span class="pre">-c</span> <span class="pre">juju</span> <span class="pre">status</span> <span class="pre">--relations</span> <span class="pre">--color</span></code> and, respectively, <code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">debug-log</span></code>.</p> </div> <p>Sample session:</p> <div class="highlight-text notranslate"><div class="highlight"><pre><span></span># Check the current client version ubuntu@my-juju-vm:~$ juju version 3.1.8-genericlinux-amd64 # Upgrade the client to the the latest stable minor of 3: ubuntu@my-juju-vm:~$ sudo snap refresh juju --channel 3/stable juju (3/stable) 3.4.2 from Canonical✓ refreshed # Check the current controller model agent version: ubuntu@my-juju-vm:~$ juju show-controller # Partial output: 31microk8s: details: ... agent-version: 3.1.8 agent-git-commit: 810900f47952a1f3835576f57dce2f9d1aef23d0 controller-model-version: 3.1.8 ... # Upgrade the controller model agents # to the latest patch version of the same minor: # (This will be necessary in a bit for model migration.) ubuntu@my-juju-vm:~$ juju upgrade-controller --agent-version 3.1.8 # No change because 3.1.8 is already the latest patch version of 3.1: no upgrades available # Use the upgraded 3.4.2 client to bootstrap # a new controller into microk8s, '34microk8s': ubuntu@my-juju-vm:~$ juju bootstrap microk8s 34microk8s Creating Juju controller "34microk8s" on microk8s/localhost Bootstrap to Kubernetes cluster identified as microk8s/localhost Creating k8s resources for controller "controller-34microk8s" Downloading images Starting controller pod Bootstrap agent now started Contacting Juju controller at 10.152.183.187 to verify accessibility... Bootstrap complete, controller "34microk8s" is now available in namespace "controller-34microk8s" Now you can run juju add-model <model-name> to create a new model to deploy k8s workloads. # Verify the version of the new controller: ubuntu@my-juju-vm:~$ juju show-controller 34microk8s # Partial output: 34microk8s: details: ... agent-version: 3.4.2 agent-git-commit: a80becbb4da5985fa53c63824a4bd809e9d03954 controller-model-version: 3.4.2 ... # Switch back to the old controller: ubuntu@my-juju-vm:~$ juju switch 31microk8s:admin/chat 34microk8s (controller) -> 31microk8s:admin/chat # Check the current non-controller model version for the 'chat' model: ubuntu@my-juju-vm:~$ juju show-model # Partial output: chat: name: admin/chat ... agent-version: 3.1.8 # Upgrade the non-controller model agents # to the latest patch version of the same minor: ubuntu@my-juju-vm:~$ juju upgrade-model --agent-version 3.1.8 # No change because 3.1.8 is already the latest patch version of 3.1: no upgrades available # Migrate your 'chat' model to the new, 34microk8s controller: ubuntu@my-juju-vm:~$ juju migrate chat 34microk8s Migration started with ID "43c29d63-77f3-4665-82bc-e21b55ab4d6a:0" # This may take a little bit of time # but, when it's done, # your 'chat' model will disappear from the old controller # and appear on the new controller. # Switch to the new controller: ubuntu@my-juju-vm:~$ juju switch 34microk8s:admin/chat 34microk8s (controller) -> 34microk8s:admin/chat # Verify that your 'chat' model has successfully migrated: ubuntu@my-juju-vm:~$ juju models Controller: 34microk8s Model Cloud/Region Type Status Units Access Last connection chat* microk8s/localhost kubernetes available 5 admin 8 minutes ago controller microk8s/localhost kubernetes available 1 admin just now # Upgrade your 'chat' model's patch version # to match that of the new controller: ubuntu@my-juju-vm:~$ juju upgrade-model --agent-version 3.4.2 best version: 3.4.2 started upgrade to 3.4.2 # Run 'juju status' to inspect your charm's current channel, # compare to 'juju info <charm>' to find out the latest channels, # or just try: ubuntu@my-juju-vm:~$ juju refresh mattermost-k8s charm "mattermost-k8s": already up-to-date ubuntu@my-juju-vm:~$ juju refresh postgresql-k8s charm "postgresql-k8s": already up-to-date ubuntu@my-juju-vm:~$ juju refresh self-signed-certificates charm "self-signed-certificates": already up-to-date # No surprise there -- our deployment is quite fresh, # so no immediate need for charm upgrades! </pre></div> </div> <blockquote> <div><p>See more: <a class="reference internal" href="../reference/juju/juju-roadmap-and-releases/#juju-roadmap-and-releases"><span class="std std-ref">Juju Roadmap & Releases</span></a>, <a class="reference internal" href="../reference/juju/juju-cross-version-compatibility/#juju-cross-version-compatibility"><span class="std std-ref">Juju component cross-version compatibility</span></a>, <a class="reference internal" href="../howto/manage-your-deployment/upgrade-your-deployment/#upgrade-your-deployment"><span class="std std-ref">How to upgrade your deployment</span></a></p> </div></blockquote> </section> <section id="observe"> <h3>Observe<a class="headerlink" href="#observe" title="Link to this heading">¶</a></h3> <p>Our deployment hasn’t really been up very long, but we’d still like to take a closer look at our controller, to see what’s happening. Time for observability!</p> <div class="highlight-text notranslate"><div class="highlight"><pre><span></span># Add a new model to hold your observability applications: ubuntu@my-juju-vm:~$ juju add-model observability Added 'observability' model on microk8s/localhost with credential 'microk8s' for user 'admin' # Inspect the results: ubuntu@my-juju-vm:~$ juju models Controller: 34microk8s Model Cloud/Region Type Status Units Access Last connection chat microk8s/localhost kubernetes available 5 admin 9 minutes ago controller microk8s/localhost kubernetes available 1 admin just now observability* microk8s/localhost kubernetes available 6 admin 1 minute ago # Deploy to it the cos-lite bundle: ubuntu@my-juju-vm:~$ juju deploy cos-lite --trust # Partial output: Located bundle "cos-lite" in charm-hub, revision 11 Located charm "alertmanager-k8s" in charm-hub, channel latest/stable Located charm "catalogue-k8s" in charm-hub, channel latest/stable Located charm "grafana-k8s" in charm-hub, channel latest/stable Located charm "loki-k8s" in charm-hub, channel latest/stable Located charm "prometheus-k8s" in charm-hub, channel latest/stable Located charm "traefik-k8s" in charm-hub, channel latest/stable ... Deploy of bundle completed. # Offer prometheus' metrics-endpoint endpoint # for cross-model relations: ubuntu@my-juju-vm:~$ juju offer prometheus:metrics-endpoint Application "prometheus" endpoints [metrics-endpoint] available at "admin/observability.prometheus" # Switch to the controller model ubuntu@my-juju-vm:~$ juju switch controller 34microk8s:admin/observability -> 34microk8s:admin/controller # Integrate the controller application with the prometheus offer: ubuntu@my-juju-vm:~$ juju integrate controller admin/observability.prometheus # Examine the result: ubuntu@my-juju-vm:~$ juju status --relations Model Controller Cloud/Region Version SLA Timestamp controller 34microk8s microk8s/localhost 3.4.2 unsupported 17:08:10+02:00 SAAS Status Store URL prometheus active 34microk8s admin/observability.prometheus App Version Status Scale Charm Channel Rev Address Exposed Message controller active 1 juju-controller 3.4/stable 79 no Unit Workload Agent Address Ports Message controller/0* active idle 10.1.32.161 37017/TCP Integration provider Requirer Interface Type Message controller:metrics-endpoint prometheus:metrics-endpoint prometheus_scrape regular # Switch back to the observability model: ubuntu@my-juju-vm:~$ juju switch observability 34microk8s:admin/controller -> 34microk8s:admin/observability # Get an admin password for grafana: ubuntu@my-juju-vm:~$ juju run grafana/0 get-admin-password # Example output: Running operation 1 with 1 task - task 2 on unit-grafana-0 Waiting for task 2... admin-password: 0OpLUlxJXQaU url: http://10.238.98.110/observability-grafana </pre></div> </div> <p>On your local machine, open a browser window and copy-paste the Grafana URL. In the username field, enter ‘admin’. In the password field, enter the <code class="docutils literal notranslate"><span class="pre">admin-password</span></code>. If everything has gone well, you should now be logged in.</p> <p>On the new screen, in the top-right, click on the Menu icon, then <strong>Dashboards</strong>. Then, on the new screen, in the top-left, click on <strong>New</strong>, <strong>Upload dashboard JSON file</strong>, and upload the JSON Grafana-dashboard-definition file below, then, in the IL3-2 field, from the drop-down, select the suggested <code class="docutils literal notranslate"><span class="pre">juju_observability...</span></code> option.</p> <p><a class="reference external" href="https://discourse.charmhub.io/uploads/short-url/yOxvgum6eo3NmMxPaTRKLOLmbo0.json">Juju Controllers-1713888589960.json|attachment</a> (200.9 KB)</p> <p>On the new screen, at the very top, expand the Juju Metrics section and inspect the results. How many connections to the API server does your controller show?</p> <p><img alt="Juju tutorial - Observe your controller" src="../../_images/tutorial-observe.png" /></p> <p>Make a change to your controller (e.g., run <code class="docutils literal notranslate"><span class="pre">juju</span> <span class="pre">add-model</span> <span class="pre">test</span></code> to add another model and trigger some more API server connections) and refresh the page to view the updated results!</p> <p>Congratulations, you now have a functional observability setup! But your controller is not the only thing that you can monitor – go ahead and try to monitor something else, for example, your PostgreSQL!</p> <blockquote> <div><p>See more: <a class="reference internal" href="#/t/1111#heading--collect-metrics-about-a-controller"><span class="xref myst">Manage controllers > Collect metrics about a controller</span></a></p> </div></blockquote> </section> </section> <section id="tear-down-your-test-environment"> <h2>Tear down your test environment<a class="headerlink" href="#tear-down-your-test-environment" title="Link to this heading">¶</a></h2> <p>To tear things down, remove your entire Multipass Ubuntu VM, then uninstall Multipass:</p> <blockquote> <div><p>See more: <a class="reference internal" href="../howto/manage-your-deployment/manage-your-deployment-environment/#manage-your-deployment-environment"><span class="std std-ref">Manage your deployment environment</span></a> > Tear things down (automatically)</p> </div></blockquote> </section> <section id="next-steps"> <h2>Next steps<a class="headerlink" href="#next-steps" title="Link to this heading">¶</a></h2> <p>This tutorial has introduced you to the basic things you can do with <code class="docutils literal notranslate"><span class="pre">juju</span></code>. But there is a lot more to explore:</p> <div class="table-wrapper colwidths-auto docutils container"> <table class="docutils align-default"> <thead> <tr class="row-odd"><th class="head"><p>If you are wondering…</p></th> <th class="head"><p>visit our…</p></th> </tr> </thead> <tbody> <tr class="row-even"><td><p>“How do I…?”</p></td> <td><p><a class="reference internal" href="../howto/"><span class="doc std std-doc">How-to docs</span></a></p></td> </tr> <tr class="row-odd"><td><p>“What is…?”</p></td> <td><p><a class="reference internal" href="../reference/"><span class="doc std std-doc">Reference docs</span></a></p></td> </tr> <tr class="row-even"><td><p>“Why…?”, “So what?”</p></td> <td><p><a class="reference internal" href="../explanation/"><span class="doc std std-doc">Explanation docs</span></a></p></td> </tr> </tbody> </table> </div> </section> </section> </article> </div> <footer> <div class="related-pages"> </div> <div class="bottom-of-page"> <div class="left-details"> <div class="copyright"> Copyright © 2025 CC-BY-SA, Canonical Ltd. </div> <div class="last-updated"> Last updated on Mar 21, 2025</div> </div> <div> <a class="display-contributors">Thanks to the 6 contributors!</a> <div id="overlay"></div> <ul class="all-contributors"> <li> <a href="https://github.com/juju/juju/commit/60a053a31bb7f60d64a88a917eb306d3d935f2d4" class="contributor">Jack Shaw</a> </li> <li> <a href="https://github.com/juju/juju/commit/8e80141ece893c37dc17ff3c8eab262ecd1e1c32" class="contributor">Kian Parvin</a> </li> <li> <a href="https://github.com/juju/juju/commit/fb9983780b34c6536096559f6e84154eddbcc0ae" class="contributor">Teodora Mihoc</a> </li> <li> <a href="https://github.com/juju/juju/commit/699f817cfb82b6b0195f011e9cf8d6d26d7eb0a8" class="contributor">Vitaly Antonenko</a> </li> <li> <a href="https://github.com/juju/juju/commit/60a053a31bb7f60d64a88a917eb306d3d935f2d4" class="contributor">network-charles</a> </li> <li> <a href="https://github.com/juju/juju/commit/96e805d4de2cecbcc824ca0fd158f18b4b3d3d81" class="contributor">wallyworld</a> </li> </ul> </div> <div class="right-details"> </div> </div> </footer> </div> <aside class="toc-drawer"> <div class="toc-sticky toc-scroll"> <div class="toc-title-container"> <span class="toc-title"> Contents </span> </div> <div class="toc-tree-container"> <div class="toc-tree"> <ul> <li><a class="reference internal" href="#">Get started with Juju</a><ul> <li><a class="reference internal" href="#set-up-an-isolated-test-environment">Set up an isolated test environment</a></li> <li><a class="reference internal" href="#plan">Plan</a></li> <li><a class="reference internal" href="#deploy">Deploy</a></li> <li><a class="reference internal" href="#maintain">Maintain</a><ul> <li><a class="reference internal" href="#scale">Scale</a></li> <li><a class="reference internal" href="#perform-a-custom-action">Perform a custom action</a></li> <li><a class="reference internal" href="#upgrade">Upgrade</a></li> <li><a class="reference internal" href="#observe">Observe</a></li> </ul> </li> <li><a class="reference internal" href="#tear-down-your-test-environment">Tear down your test environment</a></li> <li><a class="reference internal" href="#next-steps">Next steps</a></li> </ul> </li> </ul> </div> </div> </div> </aside> </div> </div><script data-cfasync="false" src="/cdn-cgi/scripts/5c5dd728/cloudflare-static/email-decode.min.js"></script><script src="../../_static/jquery.js?v=5d32c60e"></script> <script src="../../_static/_sphinx_javascript_frameworks_compat.js?v=2cd50e6c"></script> <script src="../../_static/documentation_options.js?v=a5603611"></script> <script src="../../_static/doctools.js?v=9a2dae69"></script> <script src="../../_static/sphinx_highlight.js?v=dc90522c"></script> <script src="../../_static/scripts/furo.js?v=5fa4622c"></script> <script src="../../_static/contributors.js"></script> <script src="../../_static/clipboard.min.js?v=a7894cd8"></script> <script src="../../_static/copybutton.js?v=f281be69"></script> <script src="../../_static/design-tabs.js?v=f930bc37"></script> <script src="../../_static/header-nav.js?v=e117ad08"></script> <script> const github_url = "https://github.com/juju/juju"; </script> </body> </html>