From cc2c345a362ae8e70e7f4df3bf7072df745bec8e Mon Sep 17 00:00:00 2001 From: Dragomir Penev Date: Fri, 10 Oct 2025 17:39:13 +0300 Subject: [PATCH] Check juju version before removing revision --- src/charm.py | 7 +++++++ tests/unit/test_charm.py | 32 ++++++++++++++++++++++---------- 2 files changed, 29 insertions(+), 10 deletions(-) diff --git a/src/charm.py b/src/charm.py index abf20da132..a252973d5e 100755 --- a/src/charm.py +++ b/src/charm.py @@ -42,6 +42,7 @@ EventBase, HookEvent, InstallEvent, + JujuVersion, LeaderElectedEvent, MaintenanceStatus, ModelError, @@ -666,6 +667,12 @@ def primary_endpoint(self) -> str | None: return primary_endpoint def _on_secret_remove(self, event: SecretRemoveEvent) -> None: + if self.model.juju_version < JujuVersion("3.6.11"): + logger.warning( + "Skipping secret revision removal due to https://github.com/juju/juju/issues/20782" + ) + return + # A secret removal (entire removal, not just a revision removal) causes # https://github.com/juju/juju/issues/20794. This check is to avoid the # errors that would happen if we tried to remove the revision in that case diff --git a/tests/unit/test_charm.py b/tests/unit/test_charm.py index ed0f3e2b83..5be6ef077a 100644 --- a/tests/unit/test_charm.py +++ b/tests/unit/test_charm.py @@ -15,7 +15,7 @@ import pytest import tomli from charms.operator_libs_linux.v2 import snap -from ops import RelationEvent, Unit +from ops import JujuVersion, RelationEvent, Unit from ops.framework import EventBase from ops.model import ( ActiveStatus, @@ -2764,12 +2764,24 @@ def test_relations_user_databases_map(harness): def test_on_secret_remove(harness): - event = Mock() - harness.charm._on_secret_remove(event) - event.remove_revision.assert_called_once_with() - event.reset_mock() - - # No secret - event.secret.label = None - harness.charm._on_secret_remove(event) - assert not event.remove_revision.called + with ( + patch("ops.model.Model.juju_version", new_callable=PropertyMock) as _juju_version, + ): + event = Mock() + + # New juju + _juju_version.return_value = JujuVersion("3.6.11") + harness.charm._on_secret_remove(event) + event.remove_revision.assert_called_once_with() + event.reset_mock() + + # Old juju + _juju_version.return_value = JujuVersion("3.6.9") + harness.charm._on_secret_remove(event) + assert not event.remove_revision.called + event.reset_mock() + + # No secret + event.secret.label = None + harness.charm._on_secret_remove(event) + assert not event.remove_revision.called