Skip to content

Commit 9e0c39f

Browse files
Remove secret's old revision (#1128)
Signed-off-by: Marcelo Henrique Neppel <marcelo.neppel@canonical.com>
1 parent 6317a84 commit 9e0c39f

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
@@ -65,6 +65,7 @@
6565
RelationDepartedEvent,
6666
SecretChangedEvent,
6767
SecretNotFoundError,
68+
SecretRemoveEvent,
6869
Unit,
6970
UnknownStatus,
7071
WaitingStatus,
@@ -247,6 +248,7 @@ def __init__(self, *args):
247248
self.framework.observe(self.on.promote_to_primary_action, self._on_promote_to_primary)
248249
self.framework.observe(self.on.get_primary_action, self._on_get_primary)
249250
self.framework.observe(self.on.update_status, self._on_update_status)
251+
self.framework.observe(self.on.secret_remove, self._on_secret_remove)
250252

251253
self._certs_path = "/usr/local/share/ca-certificates"
252254
self._storage_path = str(self.meta.storages["data"].location)
@@ -1439,6 +1441,17 @@ def promote_primary_unit(self, event: ActionEvent) -> None:
14391441
except SwitchoverFailedError:
14401442
event.fail("Switchover failed or timed out, check the logs for details")
14411443

1444+
def _on_secret_remove(self, event: SecretRemoveEvent) -> None:
1445+
# A secret removal (entire removal, not just a revision removal) causes
1446+
# https://github.com/juju/juju/issues/20794. This check is to avoid the
1447+
# errors that would happen if we tried to remove the revision in that case
1448+
# (in the revision removal, the label is present).
1449+
if event.secret.label is None:
1450+
logger.debug("Secret with no label cannot be removed")
1451+
return
1452+
logger.debug(f"Removing secret with label {event.secret.label} revision {event.revision}")
1453+
event.remove_revision()
1454+
14421455
def _on_get_primary(self, event: ActionEvent) -> None:
14431456
"""Get primary instance."""
14441457
try:

tests/unit/test_charm.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1691,3 +1691,15 @@ def test_get_ldap_parameters(harness):
16911691
harness.charm.get_ldap_parameters()
16921692
_get_relation_data.assert_called_once()
16931693
_get_relation_data.reset_mock()
1694+
1695+
1696+
def test_on_secret_remove(harness):
1697+
event = Mock()
1698+
harness.charm._on_secret_remove(event)
1699+
event.remove_revision.assert_called_once_with()
1700+
event.reset_mock()
1701+
1702+
# No secret
1703+
event.secret.label = None
1704+
harness.charm._on_secret_remove(event)
1705+
assert not event.remove_revision.called

0 commit comments

Comments
 (0)