
    P                        d Z ddlmZ ddlmZ ddlmZ ddlmZ ddlm	Z	 ddlm
Z
 ddlmZ dd	lmZ dd
lmZ ddlmZ ddlmZ ddlmZ  e	j.                  e	j0                  j2                        e	j4                   G d de	j6                                      Z e	j.                  e	j0                  j:                        e	j4                   G d de                    Zy)zUpdate an existing secret.    )absolute_import)division)unicode_literals)api)base)
exceptions)args)log)util)labels_util)map_util)
console_ioc                   @    e Zd ZdZdZdZdZdZdZe	d        Z
d Zd	 Zy
)Updatea  Update a secret's metadata.

      Update a secret's metadata (e.g. labels). This command will
      return an error if given a secret that does not exist.

      ## EXAMPLES

      Update the label of a secret named `my-secret`.

        $ {command} my-secret --update-labels=foo=bar

      Update the label of a secret using an etag.

        $ {command} my-secret --update-labels=foo=bar --etag=123

      Update a secret to have a next-rotation-time:

        $ {command} my-secret --next-rotation-time="2030-01-01T15:30:00-05:00"

      Update a secret to have a next-rotation-time and rotation-period:

        $ {command} my-secret --next-rotation-time="2030-01-01T15:30:00-05:00"
        --rotation-period="7200s"

      Update a secret to remove the next-rotation-time:

        $ {command} my-secret --remove-next-rotation-time

      Update a secret to clear rotation policy:

        $ {command} my-secret --remove-rotation-schedule

      Update version destroy ttl of a secret:

        $ {command} my-secret --version-destroy-ttl="86400s"

      Disable delayed secret version destroy:

        $ {command} my-secret --remove-version-destroy-ttl
  z9There are no changes to the secret [{secret}] for update.zxThe secret [{secret}] cannot be updated because it does not exist. Please use the create command to create a new secret.zrThis secret and all of its versions will be automatically deleted at the requested expire-time of [{expire_time}].zqThis secret and all of its versions will be automatically deleted after the requested ttl of [{ttl}] has elapsed.zThe --regional-kms-key-name or --remove-regional-kms-key-name flag can only be used when update a regional secret with "--location".c                 ,   t        j                  | ddd       t        j                  | dd       | j                  dd      }| j                  dd	      }t	        j
                  |        t        j                  | d
       t        j                  |        t        j                  |        t        j                  |        t        j                  |        t        j                  |        t        j                  |ddt        t               t        j                   |ddt               t        j"                  |dd       t        j                  |dd	t        t               t        j                   |dd	t               t        j"                  |dd	       y)zArgs is called by calliope to gather arguments for this command.

    Args:
      parser: An argparse parser that you can use to add arguments that will be
        available to this command.
    	to updateTpurpose
positionalrequiredto update secretFr   hiddenVersion AliasesmutexhelpAnnotationsupdatedactionversion-aliasesannotationsN)secrets_args	AddSecretAddLocation	add_groupr   AddUpdateLabelsFlagsAddSecretEtagAddUpdateExpirationGroupAddUpdateTopicsGroupAddUpdateRotationGroupAddUpdateVersionDestroyTTLAddUpdateRegionalKmsKeyr   AddMapUpdateFlagstrintAddMapRemoveFlagAddMapClearFlagparseraliasr#   s      lib/surface/secrets/update.pyArgszUpdate.Args\   sC    t V-?N4.?@E""M"BK$$V,vi8))&1%%f-''/++F3((0e%68I3!#e%68I3OU$57HIk=-!#k=-M[-G    c                    t        j                  | j                               }t        j                  |      }|j                  j
                  j                         }g }t        j                  j                  |      }|j                         r|j                  d       |j                  d      r|j                  d       |j                  d      s|j                  d      r|j                  d       |j                  d      s"|j                  d      s|j                  d      r|j                  d	       |j                  d
      s"|j                  d      s|j                  d      r|j                  d       |j                  d      s"|j                  d      s|j                  d      r|j                  d       |j                  d      s"|j                  d      s|j                  d      r|j                  d       |j                  d      s"|j                  d      s|j                  d      r|j                  d       |j                  d      s|j                  d      r|j                  d       |j                  d      s|j                  d      r|j                  d       |s@t        j                  g d| j                  j!                  |j#                                     |j%                  |j&                  j(                  |j*                        }|j*                  }	|j,                  r|j*                  }	|j.                  r>| j0                  j!                  |j.                         }
t3        j4                  |
d!d!"       |j6                  r>| j8                  j!                  |j6                  #      }
t3        j4                  |
d!d!"       d|v r!t;        j<                  ||j>                        }ng }g }d|v rg }|j@                  !|j&                  jC                  g $      |_         t;        jD                  ||j@                  jF                        }|jI                         D ];  \  }}|j                  |j&                  jB                  jK                  ||%             = g }d|v r|jL                  !|j&                  jO                  g $      |_&        t;        jP                  ||jL                  jF                        }|jI                         D ];  \  }}|j                  |j&                  jN                  jK                  ||%             = |jR                  r|jR                   d&}nd }|jT                  s8|jV                  s|jX                  r t        jZ                  d'| j\                        t        j^                  |(      ja                  ||	||||jb                  |j.                  |j6                  ||jd                  |jf                  ||jV                  |jT                  )      }ti        j^                         jk                  |       |S )*Nversionlabelsttlexpire_timeremove_expirationnext_rotation_timeremove_next_rotation_timeremove_rotation_schedulerotation.next_rotation_timerotation_periodremove_rotation_periodrotation.rotation_period
add_topicsremove_topicsclear_topicstopicsupdate_version_aliasesremove_version_aliasesclear_version_aliasesversion_aliasesupdate_annotationsremove_annotationsclear_annotationsr#   version_destroy_ttlremove_version_destroy_ttlregional_kms_key_nameremove_regional_kms_key_namecustomer_managed_encryptionz--clear-labelsz--remove-labelsz--update-labelsz--ttlz--expire-timez--remove-expirationz--clear-topicsz--remove-topicsz--add-topicsz--update-version-aliasesz--remove-version-aliasesz--clear-version-aliasesz--update-annotationsz--remove-annotationsz--clear-annotationsz--next-rotation-timez--remove-next-rotation-timez--rotation-periodz--remove-rotation-periodz--remove-rotation-schedulez--version-destroy-ttlz--remove-version-destroy-ttlz--remove_regional_kms_key_namez--regional-kms-key-namesecretr?   Tthrow_if_unattendedcancel_on_nor>   additionalPropertieskeyvalueslocationapi_version)
secret_refr=   rO   r#   update_masketagr?   r>   rK   rA   rE   rS   rU   secret_location)6secrets_apiGetApiFromTrackReleaseTrackGetMessagesCONCEPTSrZ   Parser   DiffFromUpdateArgsMayHaveUpdatesappendIsSpecifiedr   MinimumArgumentExceptionNO_CHANGES_MESSAGEformatNameApplySecretLabelsValuer=   needs_updater?   CONFIRM_EXPIRE_TIME_MESSAGEr   PromptContinuer>   CONFIRM_TTL_MESSAGEsecrets_utilApplyTopicsUpdaterK   versionAliasesVersionAliasesValueApplyAliasUpdatera   itemsAdditionalPropertyr#   AnnotationsValueApplyAnnotationsUpdaterS   rf   rU   rV   RequiredArgumentExceptionREGIONAL_KMS_FLAG_MESSAGESecretsr   rk   rA   rE   secrets_logUpdated)selforiginalr	   rh   messagesri   rj   labels_difflabels_updater=   msgrK   rO   version_aliases_dictr6   r<   r#   annotations_dict
annotationmetadatarS   rZ   s                         r7   
_RunUpdatezUpdate._RunUpdatez   s   --d.?.?.ABK&&{;H%%++-J K""11$7K!!#"&$*:*:;N*O'			.	/			5	63467			+	,			2	33434%)9)9* ,,^<"01T5E5E 6"%)%5%56M%N*+,-1A1A2!%!1!12E!F'-.$2B2B$3 .//0D4D4D&5 67 //4 
!
!
(
(
0A
(
B7 <  %%hoo&A&A&.oo7M__F!!##f,,33&& 4 (c
4d< xx$$+++9c
4d< ;--dHOODffOK'o		 	 	("*//"E"E!# #F #%)::
''<<>0668.%OO//BB C *	+ 9 K#				%'??!#  @  %%<<
$$99;"2"8"8":
*hOO,,??h @ 0	1 #; #778: ==""d&G&G00
d44    [9@@'YY$$HH22,,/"88 A F  !!*-Mr9   c                    t        j                  | j                               }|j                  j                  j                         }t        j                  |      j                  ||j                        }|>t        j                  d| j                  j                  |j                                     | j                  ||      S )zRun is called by calliope to update the secret.

    Args:
      args: argparse.Namespace, The arguments that this command was invoked
        with.

    Returns:
      The API call to service for secret update.
    rg   rl   rZ   rY   rm   rn   ro   rq   rZ   rr   r   	GetOrNonerf   r   InvalidArgumentExceptionSECRET_MISSING_MESSAGErz   r{   r   r   r	   rh   ri   rZ   s        r7   Runz
Update.Run  s     --d.?.?.ABK%%++-J  [9CCDMM D F
 ~//
D//66joo>O6P 
 ??64((r9   N)__name__
__module____qualname____doc__ry   r   r   r   r   staticmethodr8   r   r    r9   r7   r   r       s^    'T B > 6 8 G 
 H H:Yv)r9   r   c                   0    e Zd ZdZdZed        Zd Zd Zy)
UpdateBetaa  Update a secret's metadata.

  Update a secret's metadata (e.g. labels). This command will
  return an error if given a secret that does not exist.

  ## EXAMPLES

      Update the label of a secret named `my-secret`.

    $ {command} my-secret --update-labels=foo=bar

  Update the label of a secret using etag.

        $ {command} my-secret --update-labels=foo=bar --etag=123

  Update the expiration of a secret named 'my-secret' using a ttl.

    $ {command} my-secret --ttl="600s"

  Update the expiration of a secret named 'my-secret' using an expire-time.

    $ {command} my-secret --expire-time="2030-01-01T08:15:30-05:00"

  Remove the expiration of a secret named 'my-secret'.

    $ {command} my-secret --remove-expiration

  Update a secret to have a next-rotation-time:

    $ {command} my-secret --next-rotation-time="2030-01-01T15:30:00-05:00"

  Update a secret to have a next-rotation-time and rotation-period:

    $ {command} my-secret --next-rotation-time="2030-01-01T15:30:00-05:00"
    --rotation-period="7200s"

  Update a secret to remove the next-rotation-time:

    $ {command} my-secret --remove-next-rotation-time

  Update a secret to clear rotation policy:

    $ {command} my-secret --remove-rotation-schedule

  Update version destroy ttl of a secret:

    $ {command} my-secret --version-destroy-ttl="86400s"

  Disable delayed secret version destroy:

    $ {command} my-secret --remove-version-destroy-ttl
  z8There are no changes to the secret [{secret}] for updatec                 ,   t        j                  | ddd       t        j                  | dd       | j                  dd      }| j                  dd	      }t	        j
                  |        t        j                  | d
       t        j                  |        t        j                  |        t        j                  |        t        j                  |        t        j                  |        t        j                  |ddt        t               t        j                   |ddt               t        j"                  |dd       t        j                  |dd	t        t               t        j                   |dd	t               t        j"                  |dd	       y )Nr   Tr   r   Fr   r   r   r   r   r    r"   r#   )r$   r%   r&   r'   r   r(   r)   r*   r,   r+   r-   r.   r   r/   r0   r1   r2   r3   r4   s      r7   r8   zUpdateBeta.Argsk  sA   t V-?N4.?@E""M"BK$$V,vi8))&1''/%%f-++F3((0e%68I3!#e%68I3OU$57HIk=-!#k=-M[-Gr9   c                    t        j                  | j                               }t        j                  |      }|j                  j
                  j                         }g }t        j                  j                  |      }|j                         r|j                  d       |j                  d      r|j                  d       |j                  d      s|j                  d      r|j                  d       |j                  d      s"|j                  d      s|j                  d      r|j                  d	       |j                  d
      s"|j                  d      s|j                  d      r|j                  d       |j                  d      s"|j                  d      s|j                  d      r|j                  d       |j                  d      s"|j                  d      s|j                  d      r|j                  d       |j                  d      s"|j                  d      s|j                  d      r|j                  d       |j                  d      s|j                  d      r|j                  d       |j                  d      s|j                  d      r|j                  d       |s@t        j                  g d| j                  j!                  |j#                                     |j%                  |j&                  j(                  |j*                        }|j*                  }	|j,                  r|j*                  }	d	|v r!t/        j0                  ||j2                        }
ng }
g }d|v r|j4                  !|j&                  j7                  g        |_        t/        j8                  ||j4                  j:                        }|j=                         D ];  \  }}|j                  |j&                  j6                  j?                  ||!             = g }d|v rg }|j@                  !|j&                  jC                  g        |_         t/        jD                  ||j@                  j:                        }|j=                         D ];  \  }}|j                  |j&                  jB                  j?                  ||!             = |jF                  r>| jH                  j!                  |jF                  "      }tK        jL                  |d#d#$       |jN                  r>| jP                  j!                  |jN                  %      }tK        jL                  |d#d#$       |jR                  r|jR                   d&}nd }|jT                  s8|jV                  s|jX                  r t        jZ                  d'| j\                        t        j^                  |(      ja                  ||	||||jb                  |jF                  |jN                  |
|jd                  |jf                  ||jV                  |jT                  )      }ti        j^                         jk                  |       |S )*Nr;   r=   r>   r?   r@   rH   rI   rJ   rK   rA   rB   rC   rD   rE   rF   rG   rL   rM   rN   rO   rP   rQ   rR   r#   rS   rT   rU   rV   rW   rX   rY   r`   rb   r[   Tr\   r_   re   rf   rg   )ri   r=   rj   rO   r#   rk   r?   r>   rK   rA   rE   rS   rU   rl   )6rm   rn   ro   rp   rq   rZ   rr   r   rs   rt   ru   rv   rw   r   rx   ry   rz   r{   r|   r}   r~   r=   r   r   r   rK   r   r   r   ra   r   r   r#   r   r   r?   r   r   r   r>   r   rS   rf   rU   rV   r   r   r   r   rk   rA   rE   r   r   )r   r   r	   rh   r   ri   rj   r   r   r=   rK   rO   r   r6   r<   r#   r   r   r   r   rS   rZ   s                         r7   r   zUpdateBeta._RunUpdate  s   --d.?.?.ABK&&{;H%%++-J K""11$7K!!#"&$*:*:;N*O'%)9)9* ,,^<"			.	/			5	63467			+	,			2	3343401T5E5E 6"%)%5%56M%N*+,-1A1A2!%!1!12E!F'-.$2B2B$3 .//0D4D4D&5 67 //4 
!
!
(
(
0A
(
B7 <  %%hoo&A&A&.oo7M__F!!##f;--dHOODffOK'		 	 	("*//"E"E!# #F #
 *::
''<< 1668.%OO//BB C 	
 9 K#k				%'??!#  @  
 &<<
$$99 #3"8"8":
*hOO,,??h @ 	
 #; ,,33&& 4 c 
4d xx$$+++9c
4d #778: ==""d&G&G00
d44    [9@@'YY$$HH22,,/"88 A F  !!*-Mr9   c                    t        j                  | j                               }|j                  j                  j                         }t        j                  |      j                  ||j                        }|>t        j                  d| j                  j                  |j                                     | j                  ||      S )Nrg   r   rZ   rY   r   r   s        r7   r   zUpdateBeta.Run*  s    --d.?.?.ABK%%++-J  [9CCDMM D F
 ~//
D//66joo>O6P 
 ??64((r9   N)	r   r   r   r   ry   r   r8   r   r   r   r9   r7   r   r   /  s5    3l A  H H.eN)r9   r   N)r   
__future__r   r   r   googlecloudsdk.api_lib.secretsr   rm   googlecloudsdk.callioper   r   "googlecloudsdk.command_lib.secretsr	   r$   r
   r   r   r   $googlecloudsdk.command_lib.util.argsr   r   googlecloudsdk.core.consoler   ReleaseTracksro   GADefaultUniverseOnlyUpdateCommandr   BETAr   r   r9   r7   <module>r      s    ! &  ' = ( . C A C < 9 2 D%%(()J)T J)  *J)Z D%%**+G) G)  ,G)r9   