
    )'                         S r SSKJr  SSKJr  SSKJr  SSKJrJrJrJ	r	J
r
  SSKJr  SSKJr  SSKJr  SS	KJr  SS
KJr  SSKJr  SSKJr  SSKJr  \R0                  R2                  S0r\r\r\r\r\r\r \r!\r"\r# " S S\RH                  5      r%\R0                  R2                  4S jr&\R0                  R2                  4S jr'\R0                  R2                  4S jr(     S4S\S\	\)   S\	\\)\)4      S\	\*   S\	\*   S\S\"4S jjr+     S4S\S\	\)   S\	\\)\)4      S\	\*   S\	\*   S\S\#4S jjr,S r-SS S!S"\-S#S4S$\)S%\	\*   S&\	\.   S'\	\*   S(\	\*   S)\
\*\\*   4   S\S\4S* jjr/S5S+ jr0     S4S,\S$\)S\	\)   S\	\\)\)4      S-\	\    S.\	\!   S\S\"4S/ jjr1     S4S,\S$\)S\	\)   S\	\\)\)4      S-\	\    S.\	\!   S\S\#4S0 jjr2S1 r3SS S!S"\3S#S4S2\)S%\	\*   S&\	\.   S'\	\*   S(\	\*   S)\
\*\\*   4   S\S\4S3 jjr4g)6zBUtilities for Backup for GKE commands to call Backup for GKE APIs.    )absolute_import)division)unicode_literals)AnyDictIterableOptionalUnion)poller)apis)waiter)base)
exceptions)log)	resources)retryv1c                       \ rS rSrSrSrg)WaitForCompletionTimeoutError.   z2The command in wait-for-completion mode timed out. N)__name__
__module____qualname____firstlineno____doc____static_attributes__r       ;lib/googlecloudsdk/api_lib/container/backup_restore/util.pyr   r   .   s    :r   r   c                 V    [         R                  " S[        R                  U 5      5      $ N	gkebackup)r   GetMessagesModuleVERSION_MAPgetrelease_tracks    r   r#   r#   2       			[__]-K	LLr   c                 V    [         R                  " S[        R                  U 5      5      $ r!   )r   GetClientClassr$   r%   r&   s    r   r*   r*   6   s    			[+//-*H	IIr   c                 V    [         R                  " S[        R                  U 5      5      $ r!   )r   GetClientInstancer$   r%   r&   s    r   r,   r,   :   r(   r   N
backup_refdescriptionlabelsretain_daysdelete_lock_daysclientreturnc                    Uc
  [        5       n[        5       nUR                  5       nU R                  5       Ul        U R                  5       R                  5       Ul        UR                  5       Ul	        U(       a  XR                  l
        U(       a  X7R                  l        U(       a  XGR                  l        U(       a  X'R                  l        UR                  R                  U5      $ )zNCreates a backup resource by calling Backup for GKE service and returns a LRO.)r,   r#   9GkebackupProjectsLocationsBackupPlansBackupsCreateRequestNamebackupIdParentRelativeNameparentBackupbackupr.   
retainDaysdeleteLockDaysr/   &projects_locations_backupPlans_backupsCreate)r-   r.   r/   r0   r1   r2   messagereqs           r   CreateBackuprC   >   s     ^ F'IIK#"#,  "//1#*~~#*(JJ'JJ 0JJJJ		6	6	=	=c	BBr   c           	         Uc
  [        5       n[        U UUUUUS9n[        R                  R	                  UR
                  S5      n[        R                  " UR                  5       SR                  U R                  5       5      SS9  [        R                  " UR                  5      n[        R                  " XSR                  U R                  5       5      5      $ )zECreates a backup resource and wait for the resulting LRO to complete.)r.   r/   r0   r1   r2   'gkebackup.projects.locations.operationsz
backup {0}Tkindis_asynczCreating backup {0})r,   rC   r   REGISTRYParseRelativeNamenamer   CreatedResourcer9   formatr6   r   CloudOperationPollerNoResourcesprojects_locations_operationsWaitFor)	r-   r.   r/   r0   r1   r2   	operationoperation_ref	op_pollers	            r   CreateBackupAndWaitForLROrT   Y   s     ^ F') $$66nn?-   "z01 44**) 
 5 < <Z__=N O
 r   c                 d    A[         R                  " SR                  U R                  5      5        g )Nz4Waiting for backup to complete... Backup state: {0}.r   PrintrM   stateresultunused_states     r   _BackupStatusUpdater\   ~   s&    ))<CC
,,r   i@w gffffff?i  i  i  r<   max_wait_msexponential_sleep_multiplier	jitter_mswait_ceiling_mssleep_msc           	         Uc
  [        5       n[        5       n[        R                  " SUUUUUS9n	[        R
                  " Xx5      n
 U	R                  U
R                  U 4U
R                  US9n[        R                  " SR                  UR                  5      5        U$ ! [        R                   a    [        S5      ef = f)z/Waits for backup resource to be terminal state.Nmax_retrialsr]   r^   r_   r`   status_update_funcfuncargsshould_retry_ifra   z#Backup completed. Backup state: {0}zTimeout waiting for backup to complete. Backup is not completed, use "gcloud container backup-restore backups describe" command to check backup status.)r,   r#   r   Retryerr   BackupPollerRetryOnResultPoll	IsNotDoner   rW   rM   rX   WaitExceptionr   )r<   r]   r^   r_   r`   status_updatera   r2   messagesretryerbackup_pollerrZ   s               r   WaitForBackupToFinishrt      s     ^ F (MM#?%&' %%f7-""Y%//	 # F II3::6<<HIM			 
'	 s   AB    C c                     Uc
  [        5       n[        5       nUR                  5       nU R                  5       Ul        UR
                  R                  U5      $ )z;Get a temporary download URL for the backup resource index.)r,   r#   LGkebackupProjectsLocationsBackupPlansBackupsGetBackupIndexDownloadUrlRequestr9   r<   r?   GetBackupIndexDownloadUrl)r-   r2   rA   rB   s       r   rw   rw      sV    ^ F'ZZ\  &&(#*33MM
r   restore_ref$volume_data_restore_policy_overridesrestore_filterc                    Uc
  [        5       n[        5       nUR                  5       nU R                  5       Ul        U R                  5       R                  5       Ul        UR                  5       Ul	        XR                  l
        U(       a  X(R                  l        U(       a  X8R                  l        U(       a  UUR                  l        U(       a  XXR                  l        UR                  R!                  U5      $ )zOCreates a restore resource by calling Backup for GKE service and returns a LRO.)r,   r#   ;GkebackupProjectsLocationsRestorePlansRestoresCreateRequestr6   	restoreIdr8   r9   r:   Restorerestorer<   r.   r/    volumeDataRestorePolicyOverridesfilter(projects_locations_restorePlans_restoresr@   )	rx   r<   r.   r/   ry   rz   r2   rq   rB   s	            r   CreateRestorer      s     ^ F (LLN#""$#-!!#002#*  "#+++)KKKK), KK0 'KK		8	8	?	?	DDr   c           
         Uc
  [        5       n[        U UUUUUUS9n[        R                  R	                  UR
                  S5      n[        R                  " UR                  5       SR                  U R                  5       5      SS9  [        R                  " UR                  5      n	[        R                  " U	USR                  U R                  5       5      5      $ )z=Creates a restore resource by calling Backup for GKE service.)r<   r.   r/   ry   rz   r2   rE   zrestore {0}TrF   zCreating restore {0})r,   r   r   rI   rJ   rK   r   rL   r9   rM   r6   r   rN   rO   rP   )
rx   r<   r.   r/   ry   rz   r2   rQ   rR   rS   s
             r   CreateRestoreAndWaitForLROr      s     ^ F+O#) $$66nn?-   " 0 0 23 44**) 
##K$4$4$67
 r   c                 d    A[         R                  " SR                  U R                  5      5        g )Nz6Waiting for restore to complete... Restore state: {0}.rV   rY   s     r   _RestoreStatusUpdater     s&    ))>EE
,,r   r   c           	         U(       d
  [        5       n[        5       n[        R                  " SUUUUUS9n	[        R
                  " Xx5      n
 U	R                  U
R                  U 4U
R                  US9n[        R                  " SR                  UR                  5      5        U$ ! [        R                   a    [        S5      ef = f)z0Waits for restore resource to be terminal state.Nrc   rf   z%Restore completed. Restore state: {0}zTimeout waiting for restore to complete. Restore is not completed, use "gcloud container backup-restore restores describe" command to check restore status.)r,   r#   r   rj   r   RestorePollerrl   rm   rn   r   rW   rM   rX   ro   r   )r   r]   r^   r_   r`   rp   ra   r2   rq   rr   restore_pollerrZ   s               r   WaitForRestoreToFinishr     s     
 F (MM#?%&' ''9.""  Z&00	 # F II5<<V\\JKM			 
'	 s   AB$ $ C)NNNNN)N)5r   
__future__r   r   r   typingr   r   r   r	   r
   /googlecloudsdk.api_lib.container.backup_restorer   googlecloudsdk.api_lib.utilr   r   googlecloudsdk.callioper   googlecloudsdk.corer   r   r   googlecloudsdk.core.utilr   ReleaseTrackALPHAr$   Clientr;   r~   	BackupRef
RestoreRef VolumeDataRestorePolicyOverridesFilter	OperationResponseErrorr   r#   r*   r,   strintrC   rT   r\   floatrt   rw   r   r   r   r   r   r   r   <module>r      s   I &  ' 7 7 B , . ( * # ) *  &&- 
	
	
#&  		;J$4$4 ; %)$5$5$;$; M "&!2!2!8!8 J %)$5$5$;$; M "&'+!%&*CC#C T#s(^$C #	C
 smC C C: "&'+!%&*""#" T#s(^$" #	"
 sm" " "J ")47#%+%*.&&#& #+5/& }	&
 c]& C#&'& & &R& "&'+ 	'+EEE #E T#s(^$	E
 +3(+E V$E E EH "&'+ 	'+((( #( T#s(^$	(
 +3(+( V$( ( (V ")47#%+&*.&&#& #+5/& }	&
 c]& C#&'& & &r   