Skip to content

Commit feea515

Browse files
committed
Add update_secret
1 parent 93b0718 commit feea515

2 files changed

Lines changed: 51 additions & 5 deletions

File tree

juju/model.py

Lines changed: 36 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2614,18 +2614,18 @@ async def export_bundle(self, filename=None):
26142614
except IOError:
26152615
raise
26162616

2617-
async def add_secret(self, name, dataArgs, file="", info=""):
2617+
async def add_secret(self, name, data_args, file="", info=""):
26182618
"""Adds a secret with a list of key values
26192619
26202620
Equivalent to the cli command:
26212621
juju add-secret [options] <name> [key[#base64|#file]=value...]
26222622
26232623
:param name str: The name of the secret to be added.
2624-
:param dataArgs []str: The key value pairs to be added into the secret.
2624+
:param data_args []str: The key value pairs to be added into the secret.
26252625
:param file str: A path to a yaml file containing secret key values.
26262626
:param info str: The secret description.
26272627
"""
2628-
data = create_secret_data(dataArgs)
2628+
data = create_secret_data(data_args)
26292629

26302630
if file:
26312631
data_from_file = read_secret_data(file)
@@ -2649,6 +2649,39 @@ async def add_secret(self, name, dataArgs, file="", info=""):
26492649
raise JujuAPIError(result.error.message)
26502650
return result.result
26512651

2652+
async def update_secret(self, name, data_args=[], new_name="", file="", info=""):
2653+
"""Update a secret with a list of key values, or info.
2654+
2655+
Equivalent to the cli command:
2656+
juju add-secret [options] <name> [key[#base64|#file]=value...]
2657+
2658+
:param name str: The name of the secret to be added.
2659+
:param data_args []str: The key value pairs to be added into the secret.
2660+
:param file str: A path to a yaml file containing secret key values.
2661+
:param info str: The secret description.
2662+
"""
2663+
data = create_secret_data(data_args)
2664+
if file:
2665+
data_from_file = read_secret_data(file)
2666+
for k, v in data_from_file.items():
2667+
# Caution: key/value pairs in files overwrite the ones in the args.
2668+
data[k] = v
2669+
2670+
if client.SecretsFacade.best_facade_version(self.connection()) < 2:
2671+
raise JujuNotSupportedError("user secrets")
2672+
secretsFacade = client.SecretsFacade.from_connection(self.connection())
2673+
results = await secretsFacade.UpdateSecrets([{
2674+
'content': {'data': data},
2675+
'description': info,
2676+
'existing-label': name,
2677+
'label': new_name,
2678+
}])
2679+
if len(results.results) != 1:
2680+
raise JujuAPIError(f"expected 1 result, got {len(results.results)}")
2681+
result_error = results.results[0]
2682+
if result_error.error is not None:
2683+
raise JujuAPIError(result_error.error)
2684+
26522685
async def list_secrets(self, filter="", show_secrets=False):
26532686
"""
26542687
Returns the list of available secrets.

tests/integration/test_secrets.py

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,8 @@
99
@base.bootstrapped
1010
@pytest.mark.bundle
1111
async def test_add_secret(event_loop):
12-
1312
async with base.CleanModel() as model:
14-
secret = await model.add_secret(name='my-apitoken', dataArgs=['token=34ae35facd4'])
13+
secret = await model.add_secret(name='my-apitoken', data_args=['token=34ae35facd4'])
1514
assert secret.startswith('secret:')
1615

1716
secrets = await model.list_secrets()
@@ -37,3 +36,17 @@ async def test_list_secrets(event_loop):
3736
secrets = await model.list_secrets(show_secrets=True)
3837
assert secrets is not None
3938
assert len(secrets) == 1
39+
40+
41+
@base.bootstrapped
42+
@pytest.mark.bundle
43+
async def test_update_secret(event_loop):
44+
async with base.CleanModel() as model:
45+
secret = await model.add_secret(name='my-apitoken', data_args=['token=34ae35facd4'])
46+
assert secret.startswith('secret:')
47+
48+
await model.update_secret(name='my-apitoken', new_name='new-token')
49+
50+
secrets = await model.list_secrets()
51+
assert len(secrets) == 1
52+
assert secrets[0].label == 'new-token'

0 commit comments

Comments
 (0)