@@ -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.
0 commit comments