Skip to content

Commit 8268fc2

Browse files
committed
Add remove-secret
1 parent feea515 commit 8268fc2

2 files changed

Lines changed: 35 additions & 0 deletions

File tree

juju/model.py

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2693,6 +2693,28 @@ async def list_secrets(self, filter="", show_secrets=False):
26932693
})
26942694
return results.results
26952695

2696+
async def remove_secret(self, secret_name, revision=-1):
2697+
"""Remove an existing secret.
2698+
2699+
:param secret_name str: ID|name of the secret to remove.
2700+
:param revision int: remove the specified revision.
2701+
"""
2702+
if client.SecretsFacade.best_facade_version(self.connection()) < 2:
2703+
raise JujuNotSupportedError("user secrets")
2704+
remove_secret_arg = {
2705+
'label': secret_name,
2706+
}
2707+
if revision >= 0:
2708+
remove_secret_arg['revisions'] = [revision]
2709+
2710+
secretsFacade = client.SecretsFacade.from_connection(self.connection())
2711+
results = await secretsFacade.RemoveSecrets([remove_secret_arg])
2712+
if len(results.results) != 1:
2713+
raise JujuAPIError(f"expected 1 result, got {len(results.results)}")
2714+
result_error = results.results[0]
2715+
if result_error.error is not None:
2716+
raise JujuAPIError(result_error.error)
2717+
26962718
async def _get_source_api(self, url, controller_name=None):
26972719
controller = Controller()
26982720
if url.has_empty_source():

tests/integration/test_secrets.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,3 +50,16 @@ async def test_update_secret(event_loop):
5050
secrets = await model.list_secrets()
5151
assert len(secrets) == 1
5252
assert secrets[0].label == 'new-token'
53+
54+
55+
@base.bootstrapped
56+
@pytest.mark.bundle
57+
async def test_remove_secret(event_loop):
58+
async with base.CleanModel() as model:
59+
secret = await model.add_secret(name='my-apitoken', data_args=['token=34ae35facd4'])
60+
assert secret.startswith('secret:')
61+
62+
await model.remove_secret('my-apitoken')
63+
64+
secrets = await model.list_secrets()
65+
assert len(secrets) == 0

0 commit comments

Comments
 (0)