diff --git a/src/charm.py b/src/charm.py index 1b36862d2b..b7a735fb2c 100755 --- a/src/charm.py +++ b/src/charm.py @@ -58,6 +58,7 @@ CharmEvents, Container, HookEvent, + JujuVersion, LeaderElectedEvent, MaintenanceStatus, ModelError, @@ -1450,6 +1451,12 @@ def promote_primary_unit(self, event: ActionEvent) -> None: event.fail("Switchover failed or timed out, check the logs for details") 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 cb7eb67060..89a64f1f10 100644 --- a/tests/unit/test_charm.py +++ b/tests/unit/test_charm.py @@ -10,6 +10,7 @@ import pytest from lightkube import ApiError from lightkube.resources.core_v1 import Endpoints, Pod, Service +from ops import JujuVersion from ops.model import ( ActiveStatus, BlockedStatus, @@ -1694,12 +1695,24 @@ def test_get_ldap_parameters(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