Skip to content

Commit a7e8af0

Browse files
Remove secret's old revision (#1127)
Signed-off-by: Marcelo Henrique Neppel <[email protected]>
1 parent cca6e6a commit a7e8af0

File tree

2 files changed

+25
-0
lines changed

2 files changed

+25
-0
lines changed

src/charm.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@
6868
HookEvent,
6969
LeaderElectedEvent,
7070
RelationDepartedEvent,
71+
SecretRemoveEvent,
7172
WorkloadEvent,
7273
)
7374
from ops.model import (
@@ -238,6 +239,7 @@ def __init__(self, *args):
238239
self.framework.observe(self.on.promote_to_primary_action, self._on_promote_to_primary)
239240
self.framework.observe(self.on.get_primary_action, self._on_get_primary)
240241
self.framework.observe(self.on.update_status, self._on_update_status)
242+
self.framework.observe(self.on.secret_remove, self._on_secret_remove)
241243

242244
self._certs_path = "/usr/local/share/ca-certificates"
243245
self._storage_path = self.meta.storages["pgdata"].location
@@ -1359,6 +1361,17 @@ def promote_primary_unit(self, event: ActionEvent) -> None:
13591361
except SwitchoverFailedError:
13601362
event.fail("Switchover failed or timed out, check the logs for details")
13611363

1364+
def _on_secret_remove(self, event: SecretRemoveEvent) -> None:
1365+
# A secret removal (entire removal, not just a revision removal) causes
1366+
# https://github.com/juju/juju/issues/20794. This check is to avoid the
1367+
# errors that would happen if we tried to remove the revision in that case
1368+
# (in the revision removal, the label is present).
1369+
if event.secret.label is None:
1370+
logger.debug("Secret with no label cannot be removed")
1371+
return
1372+
logger.debug(f"Removing secret with label {event.secret.label} revision {event.revision}")
1373+
event.remove_revision()
1374+
13621375
def _on_get_primary(self, event: ActionEvent) -> None:
13631376
"""Get primary instance."""
13641377
try:

tests/unit/test_charm.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1893,3 +1893,15 @@ def test_get_ldap_parameters(harness):
18931893
harness.charm.get_ldap_parameters()
18941894
_get_relation_data.assert_called_once()
18951895
_get_relation_data.reset_mock()
1896+
1897+
1898+
def test_on_secret_remove(harness):
1899+
event = Mock()
1900+
harness.charm._on_secret_remove(event)
1901+
event.remove_revision.assert_called_once_with()
1902+
event.reset_mock()
1903+
1904+
# No secret
1905+
event.secret.label = None
1906+
harness.charm._on_secret_remove(event)
1907+
assert not event.remove_revision.called

0 commit comments

Comments
 (0)