diff --git a/src/charm.py b/src/charm.py index 75b8eeecb1..687f820aa7 100755 --- a/src/charm.py +++ b/src/charm.py @@ -62,7 +62,7 @@ from lightkube.models.core_v1 import ServicePort, ServiceSpec from lightkube.models.meta_v1 import ObjectMeta from lightkube.resources.core_v1 import Endpoints, Node, Pod, Service -from ops import main +from ops import JujuVersion, main from ops.charm import ( ActionEvent, HookEvent, @@ -1365,6 +1365,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 084fe7cc01..a7fedef4a5 100644 --- a/tests/unit/test_charm.py +++ b/tests/unit/test_charm.py @@ -11,6 +11,7 @@ from charms.postgresql_k8s.v0.postgresql import PostgreSQLUpdateUserPasswordError from lightkube import ApiError from lightkube.resources.core_v1 import Endpoints, Pod, Service +from ops import JujuVersion from ops.model import ( ActiveStatus, BlockedStatus, @@ -1905,13 +1906,25 @@ def test_get_ldap_parameters(harness): _get_relation_data.reset_mock() -def test_on_secret_remove(harness): - event = Mock() - harness.charm._on_secret_remove(event) - event.remove_revision.assert_called_once_with() - event.reset_mock() +def test_on_secret_remove(harness, only_with_juju_secrets): + with ( + patch("ops.model.Model.juju_version", new_callable=PropertyMock) as _juju_version, + ): + event = Mock() - # No secret - event.secret.label = None - harness.charm._on_secret_remove(event) - assert not event.remove_revision.called + # 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