
    )'                        d Z ddlmZ ddlmZ ddlmZ ddlmZmZmZm	Z	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j0                  j2                  diZeZeZeZeZeZeZ eZ!eZ"eZ# G d dejH                        Z%ej0                  j2                  fdZ&ej0                  j2                  fdZ'ej0                  j2                  fdZ(	 	 	 	 	 d4dede	e)   de	ee)e)f      de	e*   de	e*   dede"fdZ+	 	 	 	 	 d4dede	e)   de	ee)e)f      de	e*   de	e*   dede#fdZ,d Z-dd d!d"e-d#dfd$e)d%e	e*   d&e	e.   d'e	e*   d(e	e*   d)e
e*ee*   f   dedefd*Z/d5d+Z0	 	 	 	 	 d4d,ed$e)de	e)   de	ee)e)f      d-e	e    d.e	e!   dede"fd/Z1	 	 	 	 	 d4d,ed$e)de	e)   de	ee)e)f      d-e	e    d.e	e!   dede#fd0Z2d1 Z3dd d!d"e3d#dfd2e)d%e	e*   d&e	e.   d'e	e*   d(e	e*   d)e
e*ee*   f   dedefd3Z4y)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                       e Zd ZdZy)WaitForCompletionTimeoutErrorz2The command in wait-for-completion mode timed out.N)__name__
__module____qualname____doc__     ;lib/googlecloudsdk/api_lib/container/backup_restore/util.pyr   r   .   s    :r   r   c                 T    t        j                  dt        j                  |             S N	gkebackup)r   GetMessagesModuleVERSION_MAPgetrelease_tracks    r   r    r    2       			[__]-K	LLr   c                 T    t        j                  dt        j                  |             S r   )r   GetClientClassr!   r"   r#   s    r   r'   r'   6   s    			[+//-*H	IIr   c                 T    t        j                  dt        j                  |             S r   )r   GetClientInstancer!   r"   r#   s    r   r)   r)   :   r%   r   N
backup_refdescriptionlabelsretain_daysdelete_lock_daysclientreturnc                    |
t               }t               }|j                         }| j                         |_        | j                         j                         |_        |j                         |_	        |r||j                  _
        |r||j                  _        |r||j                  _        |r||j                  _        |j                  j                  |      S )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,   r-   r.   r/   messagereqs           r   CreateBackupr@   >   s     ^ F'IIK#"#,  "//1#*~~#*(CJJ'CJJ 0CJJCJJ		6	6	=	=c	BBr   c                    |
t               }t        | |||||      }t        j                  j	                  |j
                  d      }t        j                  |j                         dj                  | j                               d       t        j                  |j                        }t        j                  ||dj                  | j                                     S )zECreates a backup resource and wait for the resulting LRO to complete.)r+   r,   r-   r.   r/   'gkebackup.projects.locations.operationsz
backup {0}Tkindis_asynczCreating backup {0})r)   r@   r   REGISTRYParseRelativeNamenamer   CreatedResourcer6   formatr3   r   CloudOperationPollerNoResourcesprojects_locations_operationsWaitFor)	r*   r+   r,   r-   r.   r/   	operationoperation_ref	op_pollers	            r   CreateBackupAndWaitForLROrQ   Y   s     ^ F') $$66nn?-   "z01 44**) 
 5 < <Z__=N O
 r   c                 b    ~t        j                  dj                  | j                               y )Nz4Waiting for backup to complete... Backup state: {0}.r   PrintrJ   stateresultunused_states     r   _BackupStatusUpdaterY   ~   s&    ))<CC
,,r   i@w gffffff?i  i  i  r9   max_wait_msexponential_sleep_multiplier	jitter_mswait_ceiling_mssleep_msc                    |
t               }t               }t        j                  d|||||      }	t	        j
                  ||      }
	 |	j                  |
j                  | f|
j                  |      }t        j                  dj                  |j                               |S # t        j                  $ r t        d      w xY w)z/Waits for backup resource to be terminal state.Nmax_retrialsrZ   r[   r\   r]   status_update_funcfuncargsshould_retry_ifr^   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   rT   rJ   rU   WaitExceptionr   )r9   rZ   r[   r\   r]   status_updater^   r/   messagesretryerbackup_pollerrW   s               r   WaitForBackupToFinishrq      s     ^ F (MM#?%&' %%fh7-""Y%//	 # F II3::6<<HIM			 
'	    	AB# #Cc                     |
t               }t               }|j                         }| j                         |_        |j
                  j                  |      S )z;Get a temporary download URL for the backup resource index.)r)   r    LGkebackupProjectsLocationsBackupPlansBackupsGetBackupIndexDownloadUrlRequestr6   r9   r<   GetBackupIndexDownloadUrl)r*   r/   r>   r?   s       r   ru   ru      sV    ^ F'ZZ\  &&(#*33MM
r   restore_ref$volume_data_restore_policy_overridesrestore_filterc                    |
t               }t               }|j                         }| j                         |_        | j                         j                         |_        |j                         |_	        ||j                  _
        |r||j                  _        |r||j                  _        |r||j                  _        |r||j                  _        |j                  j!                  |      S )zOCreates a restore resource by calling Backup for GKE service and returns a LRO.)r)   r    ;GkebackupProjectsLocationsRestorePlansRestoresCreateRequestr3   	restoreIdr5   r6   r7   Restorerestorer9   r+   r,    volumeDataRestorePolicyOverridesfilter(projects_locations_restorePlans_restoresr=   )	rv   r9   r+   r,   rw   rx   r/   rn   r?   s	            r   CreateRestorer      s     ^ F (LLN#""$#-!!#002#*  "#+#++)CKKCKK), KK0 'CKK		8	8	?	?	DDr   c           	         |
t               }t        | ||||||      }t        j                  j	                  |j
                  d      }t        j                  |j                         dj                  | j                               d       t        j                  |j                        }	t        j                  |	|dj                  | j                                     S )z=Creates a restore resource by calling Backup for GKE service.)r9   r+   r,   rw   rx   r/   rB   zrestore {0}TrC   zCreating restore {0})r)   r   r   rF   rG   rH   r   rI   r6   rJ   r3   r   rK   rL   rM   )
rv   r9   r+   r,   rw   rx   r/   rN   rO   rP   s
             r   CreateRestoreAndWaitForLROr      s     ^ F+O#) $$66nn?-   " 0 0 23 44**) 
##K$4$4$67
 r   c                 b    ~t        j                  dj                  | j                               y )Nz6Waiting for restore to complete... Restore state: {0}.rS   rV   s     r   _RestoreStatusUpdater     s&    ))>EE
,,r   r}   c                    |s
t               }t               }t        j                  d|||||      }	t	        j
                  ||      }
	 |	j                  |
j                  | f|
j                  |      }t        j                  dj                  |j                               |S # t        j                  $ r t        d      w xY w)z0Waits for restore resource to be terminal state.Nr`   rc   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   rg   r   RestorePollerri   rj   rk   r   rT   rJ   rU   rl   r   )r}   rZ   r[   r\   r]   rm   r^   r/   rn   ro   restore_pollerrW   s               r   WaitForRestoreToFinishr     s     
 F (MM#?%&' ''9.""  Z&00	 # F II5<<V\\JKM			 
'	 rr   )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!   Clientr8   r|   	BackupRef
RestoreRef VolumeDataRestorePolicyOverridesFilter	OperationResponseErrorr   r    r'   r)   strintr@   rQ   rY   floatrq   ru   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   