Juju 2.9 (LTS)¶
Currently in Security Fix Only support
April 2035: expected end of security fix support
Note
Juju 2.9 series is LTS
🔸 Juju 2.9.52 - 07 July 2025¶
🛠️ Fixes:
Fix CVE-2025-0928
Fix CVE-2025-53512
Fix CVE-2025-53513
fix: 2.9 pki for go 1.24.4 by @jameinel in https://github.com/juju/juju/pull/19972
fix(apiserver): avoid splitting untrusted data by @jub0bs in https://github.com/juju/juju/pull/18970
fix: static-analysis by @jack-w-shaw in https://github.com/juju/juju/pull/19353
See the full list in the milestone page .
🔸 Juju 2.9.51 - 30 August 2024¶
🛠️ Fixes:
Fix CVE-2024-7558
Fix CVE-2024-8037
Fix CVE-2024-8038
See the full list in the milestone page .
🔸 Juju 2.9.50¶
🗓️ 25 Jul 2024
🛠️ Fixes:
Fix CVE-2024-6984
See the full list in the milestone page .
🔸 Juju 2.9.49¶
🗓️ 8 Apr 2024
🛠️ Fixes:
Fix pebble CVE-2024-3250
See the full list in the milestone page .
🔸 Juju 2.9.47 - 18 March 2024¶
🛠️ Fixes:
model config num-provision-workers can lockup a controller (LP2053216 )
See the full list in the milestone page .
🔸 Juju 2.9.46 - 5 Dec 2023¶
🛠️ Fixes:
juju refresh to revision is ignored w/ charmhub (LP1988556 )
updated controller api addresses lost when k8s unit process restarts (LP2037478 )
Juju client is trying to reach index.docker.io when using custom caas-image-repo (LP2037744 )
juju deploy jammy when focal requested (LP2039179 )
See the full list in the milestone page .
🔸 Juju 2.9.45 - 27 Sep 2023¶
🛠️ Fixes:
panic: charm nil pointer dereference (LP2034707 )
juju storage mounting itself over itself (LP1830228 )
upgrade-series prepare puts units into failed state if a subordinate does not support the target series (LP2008509 )
data bags go missing (LP2011277 )
See the full list in the milestone page .
🔸 Juju 2.9.44¶
🗓️ 20 Jul 2023
Fixes several major bugs in 2.9.44 6 High / 1 Medium
🛠️ Fixes:
Unit is stuck in unknown/lost status when scaling down (LP1977582)
failed to migrate binaries: charm local:focal/ubuntu-8 unexpectedly assigned local:focal/ubuntu-7 (LP1983506)
Provide way for admins of controllers to remove models from other users (LP2009648)
Juju SSH doesn’t attempt to use ED25519 keys (LP2012208)
Some Relations hooks not firing over CMR (LP2022855)
Charm refresh from podspec to sidecar k8s/caas charm leaves agent lost units (LP2023117)
python-libjuju doesn’t populate the ‘charm’ field from subordinates in get_status (LP1987332)
See the full list in the milestone page .
🔸 Juju 2.9.43 - 13 June 2023¶
Fixes several major bugs in 2.9.43 5 Critical / 10 High
🛠️ Fixes:
Containers are killed before any ‘on stop/remove’ handlers have a chance to run (LP1951415 )
the target controller keeps complaining if a sidecar app was migrated due to statefulset apply conflicts in provisioner worker (LP2008744 )
migrated sidecar unit agents keep restarting due to a mismatch charmModifiedVersion (LP2009566 )
See the full list in the milestone page .
🔸 Juju 2.9.42¶
🗓️ 7 Mar 2023
Fixes several major bugs in 2.9.42.
🛠️ Fixes:
Juju forces specifying series on metadata.yaml (LP1992833 )
LXD unit binding to incorrect MAAS space with no subnets crashes with error (LP1994124 )
panic when getting juju full status (LP2002114 )
max-debug-log-duration: expected string or time.Duration (LP2003149 )
juju using Openstack provider does not remove security groups (LP1940637 )
See the full list in the milestone page .
🔸 Juju 2.9.38¶
🗓️ 17 Jan 2023
This release fixes some critical issues ending in panic and a some problems regarding the usage of lxd 5.x.
The main fixes in this release are below.
🛠️ Fixes:
Juju panics when trying to add-k8s with no obvious storage to use (LP#1996808 )
Panic after agent-logfile-max-backups-changed (LP#2001732 )
Failing to deploy lxd containers with lxd latest/stable as lxd version 5.x is promoted to latest/stable (LP#2002309 )
See the full list in the milestone page .
🔸 Juju 2.9.37 - 15 Nov 2022¶
The main fixes in this release are below. A startup issue on k8s is fixed, plus an intermittent situation where container creation can fail.
🛠️ Fixes (more on the milestone):
Provisioner worker pool errors cause on-machine provisioning to cease (LP#1994488 )
charm container crashes resulting in storage-attach hook error (LP#1993309 )
See the full list in the milestone page .
🔸 Juju 2.9.35 - 12 Oct 2022¶
🛠️ Fixes (more on the milestone):
juju series inconsistency deploying by charm vs bundle (LP1983581 )
Azure provider: New region ‘qatarcentral’ (LP1988511 )
Better error message for add-model with no credential (LP1988565 )
juju ssh does not work for non admin user for a k8s model (LP1989160 )
refresh: ERROR selecting releases: unknown series for version: “22.10” (LP1990182 )
See the full list in the milestone page .
🔸 Juju 2.9.34 - 7 Sep 2022¶
🛠️ Fixes (more on the milestone):
cloudinit-userdata doesn’t handle lists in runcmd (LP1759398 )
juju doesn’t remove KVM virtual machines on maas nodes when using
juju remove-unit(LP1982960 )juju does not honor –channel latest/* option (LP1984061 )
cannot deploy bundle, invalid fields (LP1984133 )
juju assumes lxd always available on machine nodes (LP1986877 )
See the full list in the milestone page .
🔸 Juju 2.9.33 - 9 Aug 2022¶
🛠️ Fixes (many more on the milestone):
lxd profiles not being applied (LP )
remove a unit with lxd profile doesn’t update (LP )
Instance poller reports: states changing too quickly (LP )
juju wants to use the LXD UNIX socket when configured to use HTTP (LP )
cannot pin charm revision without mention series in bundle (LP )
add retry-provisioning –all (LP )
See the full list in the milestone page .
🔸 Juju 2.9.32 - 24 June 2022¶
🛠️ Fixes:
Juju 2.9.31 breaks yaml format accepted by
juju add-credential(LP )azure failed provisioning: conflict with a concurrent request(LP )
Juju attach-resource returns ‘unsupported resource type “”’ error(LP )
OpenStack: open-port icmp doesn’t work(LP )
Juju bootstrap aks can’t find storage(LP )
See the full list in the milestone page .
🔸 Juju 2.9.31 - 31 May 2022¶
🛠️ Fixes:
juju controller doesn’t reference juju-https-proxy when deploying from charmhub (LP )
sidecar application caasapplicationprovisioner worker restarts due to status set failed (LP )
LXD container fails to start due to UNIQUE constraint on container.name (LP )
k8s application stuck in an unremoveable state (LP )
Juju keeps creating OpenStack VMs if it cannot allocate a floating IP (LP )
Instance type constraint throws “ambiguous constraints” error on GCP (LP )
See the full list in the milestone page .
🔸 Juju 2.9.29 - 30 Apr 2022¶
🛠️ Fixes:
Controller bootstrap fails on local LXD with “Certificate not found”(LP )
Juju unable to add a k8s 1.24 k8s cloud(LP )
model migration treats “TryAgain” as a fatal error(LP )
juju 2.9.26 unable to deploy centos7(LP )
See the full list in the milestone page .
🔸 Juju 2.9.28 - 08 Apr 2022¶
🛠️ Fixes:
Juju renders invalid netplan YAML for nameservers in IPv4/IPv6 dual-stack environment (LP )
juju 2.9.27 glibc errors(LP )
Juju controller keeps restarting when deployed with juju-ha-space and juju-mgmt-space (LP )
See the full list in the milestone page .
🔸 Juju 2.9.27 - 21 Mar 2022¶
Candidate release: 18 Mar 2022
🛠️ Fixes:
juju client panics during bootstrap on a k8s cloud (LP1964533 )
Controller upgrade ends up with locked upgrade (LP1942447 )
juju fails to upgrade ha controllers on for (at least) lxd controllers (LP1963924 )
See the full list in the milestone page .
🔸 Juju 2.9.26¶
🗓️ 12 Mar 2022
This release includes a fix for broken upgrades coming from a deployment with cross model relations to multiple offers hosted on an external controller (LP1964130 ).
🛠️ Fixes:
2.9.25 Upgrade Fails for Cross-Controller CMRs(LP1964130 )
Unauthorized for K8s API during charm removal(LP1941655 )
CRD creation fails in pod spec charms on juju 2.9.25(LP1962187 )
Juju prompted for a password in the middle of a bundle deploy(LP1960635 )
Unable to set snap-store-assertions on model-config (LP1961083 )
Note: This fix changes how to use log labels in model-config, extra single quotes are no longer required:
juju model-config -m controller "logging-config=#charmhub=TRACE"
See the full list in the milestone page .
🔸 Juju 2.9.25¶
🗓️ 24 Feb 2022
This release is significant because it transitions to using the juju-db snap from the 4.4/stable channel (running mongodb 4.4.11 at the time of writing) for newly bootstrapped controllers. NB the juu-db snap is not used if the default series is changed from focal to an earlier vrsion.
Existing controllers which are upgraded to this release will not change the mongo currently in use.
🛠️ Fixes:
Juju trust not working for K8s charm(LP )
cannot migration nor upgrade without manual intervention for a machine after a container is removed- (LP1960235 )
On machines exhibiting the above behavior, the agents will show as lost during the upgrade, you must kill the jujud process on the machine. This allow it to be restarted and continue the upgrade.
Also seen on machine’s having an LXD container which haven’t been removed.
destroy model fails if there’s a relation to offered application (LP )
Sidecar charm get stuck if PodSpec charm with same name was deployed previously (LP )
2.9.22 regression: local charm paths resolved wrongly in bundles (LP )
juju migrate failing with manual machines, verifying controller instance(LP )
Offer permissions are not migrated (LP )
destroy model fails if there’s a relation to offered application(LP )
See the full list in the milestone page .
🔸 Juju 2.9.22¶
🗓️ 13 Dec 2021
🛠️ Fixes:
Juju 2.9.9 fails to bootstrap on AWS (LP )
controller migration is very hard when dealing with large deployments (LP )
models not logging (LP )
ceph-osd is showing as fail (LP )
Bootstrap with Juju 2.8.11 breaks on LXD 4.0.8 (LP )
juju ssh –proxy not working on aws when targeting containers with FAN addresses (LP )
See the full list in the milestone page .
🔸 Juju 2.9.21¶
🗓️ 3 Dec 2021
🛠️ Fixes:
juju enable-ha fails to cluster on 2.9.18 manual machines (LP )
juju storage events are missing JUJU_STORAGE_ID (LP )
Juju failing to remove unit due to attached storage stuck dying (LP )
Juju creates two units for sidecar CAAS application (LP )
See the full list in the milestone page .
🔸 Juju 2.9.19¶
🗓️ 23 Nov 2021
🛠️ Fixes:
controller models with valid credentials becoming suspended (LP )
FIP created in incorrect AZ for instance when bootstrapped against OpenStack. (LP )
[2.9.16 & 2.9.17] juju trust gets lost if juju config is run on application (LP )
mongo 4.4 has a multiline –version (LP )
See the full list in the milestone page .
🔸 Juju 2.8.13¶
🗓️ 11 Nov 2021
This release fixes various issues with Juju 2.8
🛠️ Fixes:
Juju ~~2.9.9~~ fails to bootstrap on AWS (LP )
controller migration is very hard when dealing with large deployments (LP )
models not logging (LP )
ceph-osd is showing as fail (LP )
Bootstrap with Juju 2.8.11 breaks on LXD 4.0.8 (LP )
juju ssh –proxy not working on aws when targeting containers with FAN addresses (LP )
See the full list in the milestone page .
🔸 Juju 2.9.18¶
🗓️ 8 Nov 2021
🛠️ Fixes:
agent cannot be up on LXD/Fan network on OpenStack OVN/geneve mtu=1442 (LP1936842 )
no way to declare a k8s charm with metadata v2 that doesn’t need a workload container (LP1928991 )
Method to run an action in a workload container in sidecar charms (LP1923822 )
See the full list in the milestone page .
🔸 Juju 2.9.17¶
🗓️ 27 Oct 2021
This release introduces Telemetry as a configurable option per model. It also supports more OCI image registry providers for pulling images used for CAAS models.
🛠️ Fixes:
Leader role not transferred when the inital leader goes offline (LP )
if the primary node of an HA config goes down, the controller stops responding (LP )
Trust permissions not ready on install hook in sidecar charms (LP )
deployed application loses trust after charm upgrade (LP )
See the full list in the milestone page .
🔸 Juju 2.9.16¶
🗓️ 11 Oct 2021
🛠️ Fixes:
Unable to deploy workloads to lxd cloud added to k8s controller (LP )
memory usage leading to OOMs on controllers
LXD bootstrap fails with “Executable /snap/bin/juju-db.mongod not found” (LP )
Requested image’s type ‘virtual-machine’ doesn’t match instance type ‘container’ (LP )
See the full list in the milestone page .
🔸 Juju 2.9.15¶
🗓️ 28 Sep 2021
This release improves the robustness of repeated cross model relation setup / teardown. There’s also some improvements to how raft is used internally to manage leases.
🛠️ Fixes:
ceph mon does not render data to ceph-rados after redployment of ceph-radosgw only (LP )
Unable to remove offers when 2 endpoints are offered with the same application (LP )
upgrading 2.9.12 to 2.9.13 gets stuck in ‘raftlease response timeout’ (LP )
pod-spec uniter exits on pending action op when remote caas container died (LP )
See the full list in the milestone page .
🔸 Juju 2.9.14¶
🗓️ 14 Sep 2021
This release fixes an upgrade issue found during testing of the 2.9.13 release. There’s also an additional fix for an earlier regression deploying LXD containers on AWS.
🛠️ Fixes:
Juju fails to provision LXD containers with LXD >= 4.18 (LP )
Juju is unable to match machine address CIDRs to subnet CIDRs on Equinix Metal clouds (LP )
Non POSIX-compatible script used in
/etc/profile.d/juju-introspection.sh(LP )In AWS using spaces and fan network for a private network does not allow LXC containers to start(LP )
See the full list in the milestone page .
🔸 Juju 2.9.13 - Release cancelled, replaced by 2.9.14¶
This release adds support for pulling images used for CAAS models from private OCI registries! This means you can host your own jujud-operator, charm-base and juju-db images. This initial release focuses on private registries on Dockerhub, with other public cloud registry support coming in a future release. More details in this post .
🛠️ Fixes:
🔸 Juju 2.9.12¶
🗓️ 30 Aug 2021
🛠️ Fixes:
Cross-model relations broken for CAAS (LP )
Boot failure when
model-configsetssnap-proxy(LP )The
juju export-bundlecommand gives error after upgrade (LP )Several updates for the Raft engine that handles leases. These are steps to address (LP ), though that issue is not completely resolved.
See the full list in the milestone page .
🔸 Juju 2.9.11¶
🗓️ 17 Aug 2021
🛠️ Fixes:
Resource downloads are very slow in some cases (LP )
Upgrading the mongodb snap causes controller to hang without restarting mongod (LP )
OpenStack provider: retry-provisioning doesn’t work for
Quota exceeded for ...(LP )
See the full list in the milestone page .
🔸 Juju 2.9.10¶
🗓️ 3 Aug 2021
A new logging label: charmhub. To enable debugging information about Charmhub, you can now use the following:
juju model-config -m controller "logging-config='#charmhub=TRACE'"
🛠️ Fixes:
Unable to
upgrade-charma pod_spec charm to sidecar charm (LP )OOM and high load upgrading to 2.9.7 (LP )
Controller not caching agent binaries across models (LP )
Bundle with local metadata v2 k8s sidecar charm fails for “metadata v1” (LP )
The
network-gethook returns the vip as ingress address (LP )
See the full list in the milestone page .
🔸 Juju 2.9.9¶
🗓️ 19 Jul 2021
🛠️ Fixes:
Juju 2.9.8 tries to use an empty UID when deleting Kubernetes objects, and cannot remove applications (LP )
The
juju-logoutput going to machine log file instead of unit log file in Juju 2.9.5 (LP )Deployment of private charms is broken in 2.9 (was working in 2.8) (LP )
[Windows] Juju.exe and MicroK8s.exe bootstrap error (LP )
See the full list in the milestone page .
🔸 Juju 2.9.8¶
🗓️ 13 Jul 2021
This release introduces support for bootstrapping and deploying workloads to Equinix cloud. To try out the new provider:
Run
juju update-public-clouds --clientto ensure that provider API endpoint list is up to date.Add a credential for the equinix cloud (
juju add-credential equinix). You will need to specify your equinix project ID and provide an API key. You can use the equinix console to look up your project ID and generate API tokens.Select a metro area and bootstrap a new controller. For example to bootstrap to the Amsterdam data-center you may run the following command:
juju bootstrap equinix/am.
Caveats:
Due to substrate limitations, the equinix provider does not implement support for firewalls. As a result, workloads deployed to machines under the same project ID can reach each other even across Juju models.
Deployed machines are always assigned both a public and a private IP address. This means that any deployed charms are implicitly exposed and proper access control mechanisms need to be implemented to prevent unauthorized access to the deployed workloads.
This release also introduces logging labels which will help with the aggregation of logs via a label rather than a namespace.
juju model-config "logging-config='#http=TRACE'"
The above will turn on HTTP loggers to trace. This is a new UX feature to help with debugging, it’s not been full worked through Juju yet and might be subject to change.
🛠️ Fixes:
Juju fails to deploy mysql-k8s charm with its image resource (LP )
Juju 2.9 failing to create ClusterRoleBinding (LP )
Juju interprets
caas-image-repocontaining port number incorrectly (LP )
See the full list in the milestone page .
🔸 Juju 2.9.7¶
🗓️ 6 Jul 2021
🛠️ Fixes:
Juju upgrade 2.9 controller from local branch fails with wrong namespace. (LP )
Unit network data not populated on peer relations in sidecar charms (LP )
A
juju refresh --switch ./localfails for metadata v1 charm (LP )A migrated CaaS model will be left in the cluster after model destroyed (LP )
Unable to deploy postgresql-k8s charm from charmhub (LP )
Unable to deploy bundle with sidecar and pod_spec charms (LP )
IP address sometimes not set or incorrect on pebble_ready event (LP )
Improve
juju sshon k8s poor ux (LP )Support encrypted EBS volumes for bootstrapping controllers on AWS (LP )
Document and support
charmcraft’s bundle.yaml fields (LP )install hook run after juju upgrade-model 2.7.8 to 2.9.4 (LP )
controller fails to bring up
jujudmachine (LP )The
juju ssh --proxycommand is not working on aws when targeting containers with FAN addresses (LP )The
juju resourcesrevision date format uses year-date-month format instead of year-month-date (LP )Using
juju configwith empty values erroneously resets since 2.9 (LP )
See the full list in the milestone page .
🔸 Juju 2.9.5¶
Release notes here .
🔸 Juju 2.9.4¶
Release notes here .
🔸 Juju 2.9.3¶
Release notes here .
🔸 Juju 2.9.2¶
Release notes here .
🔸 Juju 2.9.0¶
Release notes here .