`juju refresh` does not support cross-release upgrades in k8s.
In an integration test I'm upgrading a charmhub charm (20.04) with a local charm (bumped charmcraft yaml to 22.04).
https://github.com/canonical/alertmanager-k8s-operator/blob/1ed7c1476e462dcabca9dac79db08f8c2e3a7675/tests/integration/test_upgrade_charm.py#L38
After upgrade the image is still 20.04:
```
$ k -n test-upgrade-charm-fhd8 describe pods/alertmanager-k8s-0
Containers:
charm:
Container ID: containerd://c41aa823521f9513a05d422916db1bb32ba5e5fac78a75dd6f4384b1aa03286c
Image: jujusolutions/charm-base:ubuntu-20.04
Image ID: docker.io/jujusolutions/charm-base@sha256:ce16c80092caef5439a3af0590bea671f9e85813051e37bafc8ebbb7ceaf8a21
```
And as a result I'm getting a new error that I do not see when deploying the 22.04 charm fresh:
```
13:55:47.095 WARNING unit.alertmanager-k8s/0.upgrade-charm ModuleNotFoundError: No module named '_cffi_backend'
13:55:47.095 WARNING unit.alertmanager-k8s/0.upgrade-charm thread '<unnamed>' panicked at 'Python API call failed', /github/home/.cargo/registry/src/index.crates.io-6f17d22bba15001f/pyo3-0.18.3/src/err/mod.rs:790:5
13:55:47.095 WARNING unit.alertmanager-k8s/0.upgrade-charm note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace
13:55:47.095 WARNING unit.alertmanager-k8s/0.upgrade-charm Traceback (most recent call last):
13:55:47.095 WARNING unit.alertmanager-k8s/0.upgrade-charm File "./src/charm.py", line 29, in <module>
13:55:47.095 WARNING unit.alertmanager-k8s/0.upgrade-charm from charms.observability_libs.v0.cert_handler import CertHandler
13:55:47.095 WARNING unit.alertmanager-k8s/0.upgrade-charm File "/var/lib/juju/agents/unit-alertmanager-k8s-0/charm/lib/charms/observability_libs/v0/cert_handler.py", line 41, in <module>
13:55:47.095 WARNING unit.alertmanager-k8s/0.upgrade-charm from charms.tls_certificates_interface.v2.tls_certificates import ( # type: ignore
13:55:47.095 WARNING unit.alertmanager-k8s/0.upgrade-charm File "/var/lib/juju/agents/unit-alertmanager-k8s-0/charm/lib/charms/tls_certificates_interface/v2/tls_certificates.py", line 285, in <module>
13:55:47.095 WARNING unit.alertmanager-k8s/0.upgrade-charm from cryptography import x509
13:55:47.095 WARNING unit.alertmanager-k8s/0.upgrade-charm File "/var/lib/juju/agents/unit-alertmanager-k8s-0/charm/venv/cryptography/x509/__init__.py", line 7, in <module>
13:55:47.095 WARNING unit.alertmanager-k8s/0.upgrade-charm from cryptography.x509 import certificate_transparency
13:55:47.095 WARNING unit.alertmanager-k8s/0.upgrade-charm File "/var/lib/juju/agents/unit-alertmanager-k8s-0/charm/venv/cryptography/x509/certificate_transparency.py", line 11, in <module>
13:55:47.095 WARNING unit.alertmanager-k8s/0.upgrade-charm from cryptography.hazmat.bindings._rust import x509 as rust_x509
13:55:47.095 WARNING unit.alertmanager-k8s/0.upgrade-charm pyo3_runtime.PanicException: Python API call failed
13:55:47.306 ERROR juju.worker.uniter.operation hook "upgrade-charm" (via hook dispatching script: dispatch) failed: exit status 1
```
Seems like it's "impossible" to upgrade the operating system of a deployed charm.
Recently, PYDEPS encouraged us to switch from 20.04 to 22.04
https://github.com/canonical/charmcraft/issues/1192#issuecomment-1651919462
In the future there will probably be more and more reasons to want to run the charm container on a newer ubuntu.
I have found this issue as well, in loki-k8s:
unit-loki-k8s-0: 13:40:44.893 INFO juju.worker.uniter found queued "upgrade-charm" hook k8s/0.upgrade- charm ModuleNotFoundE rror: No module named '_cffi_backend' k8s/0.upgrade- charm thread '<unnamed>' panicked at 'Python API call failed', /github/ home/.cargo/ registry/ src/index. crates. io-6f17d22bba15 001f/pyo3- 0.18.3/ src/err/ mod.rs: 790:5 k8s/0.upgrade- charm note: run with `RUST_BACKTRACE=1` environment variable to display a backtrace k8s/0.upgrade- charm Traceback (most recent call last): k8s/0.upgrade- charm File "./src/charm.py", line 33, in <module> k8s/0.upgrade- charm from charms. observability_ libs.v0. cert_handler import CertHandler k8s/0.upgrade- charm File "/var/lib/ juju/agents/ unit-loki- k8s-0/charm/ lib/charms/ observability_ libs/v0/ cert_handler. py", line 41, in <module> k8s/0.upgrade- charm from charms. tls_certificate s_interface. v2.tls_ certificates import ( # type: ignore k8s/0.upgrade- charm File "/var/lib/ juju/agents/ unit-loki- k8s-0/charm/ lib/charms/ tls_certificate s_interface/ v2/tls_ certificates. py", line 285, in <module> k8s/0.upgrade- charm from cryptography import x509 k8s/0.upgrade- charm File "/var/lib/ juju/agents/ unit-loki- k8s-0/charm/ venv/cryptograp hy/x509/ __init_ _.py", line 7, in <module> k8s/0.upgrade- charm from cryptography.x509 import certificate_ transparency k8s/0.upgrade- charm File "/var/lib/ juju/agents/ unit-loki- k8s-0/charm/ venv/cryptograp hy/x509/ certificate_ transparency. py", line 11, in <module> k8s/0.upgrade- charm from cryptography. hazmat. bindings. _rust import x509 as rust_x509 k8s/0.upgrade- charm pyo3_runtime. PanicException: Python API call failed uniter. operation hook "upgrade-charm" (via hook dispatching script: dispatch) failed: exit status 1
unit-loki-k8s-0: 13:40:45.069 WARNING unit.loki-
unit-loki-k8s-0: 13:40:45.069 WARNING unit.loki-
unit-loki-k8s-0: 13:40:45.069 WARNING unit.loki-
unit-loki-k8s-0: 13:40:45.069 WARNING unit.loki-
unit-loki-k8s-0: 13:40:45.069 WARNING unit.loki-
unit-loki-k8s-0: 13:40:45.069 WARNING unit.loki-
unit-loki-k8s-0: 13:40:45.069 WARNING unit.loki-
unit-loki-k8s-0: 13:40:45.069 WARNING unit.loki-
unit-loki-k8s-0: 13:40:45.069 WARNING unit.loki-
unit-loki-k8s-0: 13:40:45.069 WARNING unit.loki-
unit-loki-k8s-0: 13:40:45.069 WARNING unit.loki-
unit-loki-k8s-0: 13:40:45.069 WARNING unit.loki-
unit-loki-k8s-0: 13:40:45.069 WARNING unit.loki-
unit-loki-k8s-0: 13:40:45.069 WARNING unit.loki-
unit-loki-k8s-0: 13:40:45.069 WARNING unit.loki-
unit-loki-k8s-0: 13:40:45.281 ERROR juju.worker.