
    <                     ,   S r SSKJr  SSKJr  SSKJr  SSKrSSK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  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   Sr! " S S\RD                  5      r#\RH                  \RJ                  " \RL                  RN                  \RL                  RP                  \RL                  RR                  5       " S S\RT                  5      5       5       r+SSS.\+l,        g)z2Command for converting a disk to a different type.    )absolute_import)division)unicode_literalsN)base_classes)
disks_util)	kms_utils)name_generator)poller)waiter)base)
exceptions)
completers)flags)resource_args)log)
console_io)progress_trackera>  This command will permanently convert disk {0} to disk type: {1}. Please detach the disk from all instances before continuing. Data written to the original disk during conversion will not appear on the converted disk. Please see https://cloud.google.com/compute/docs/disks/automatically-convert-disks for more details.c                   ,    \ rS rSrSrSrSrSrSrSr	Sr
g	)
_ConvertState4                      N)__name__
__module____qualname____firstlineno__SNAPSHOT_CREATEDDISK_RESTOREDORIGINAL_DISK_DELETEDORIGINAL_DISK_RECREATEDRESTORED_DISK_DELETEDSNAPSHOT_DELETED__static_attributes__r       $lib/surface/compute/disks/convert.pyr   r   4   s%    -r)   r   c                       \ rS rSrSr\R                  " SS9r\S 5       r	S r
 SS jrS	 rS
 r SS jrS rS r SS jrS rSS jrS rS rS rS rS rSrg)Convert=   zFConvert a Compute Engine Persistent Disk volume to a Hyperdisk volume.F)pluralc                     [         R                  R                  U 5        U R                  S[        R
                  SSS9  [        R                  " U SSS9  g )N--target-disk-typeTzSpecifies the type of Hyperdisk to convert to, for example,
        to convert a Hyperdisk Balanced volume, specify `hyperdisk-balanced`. To get a
        list of available disk types, run `gcloud compute disk-types list`.
        )	completerrequiredhelpdisk)region_fallthrough)r,   	_DISK_ARGAddArgumentadd_argumentr   DiskTypesCompleterkms_resource_argsAddKmsKeyResourceArg)parsers    r*   ArgsConvert.ArgsF   sT    !!&)
//	   **4r)   c                    [         R                  " U R                  5       5      U l        U R                  R                  R
                  U l        U R                  R                  R                  U l        S U l        0 U l        SU l	        U R                  R                  UU R                  R                  [        R                  " U R                  R                  5      S9U l        U R                  R!                  5       S:X  a  ["        R$                  " SS5      eUR&                  S:X  a  ["        R$                  " SS5      eUR&                  U l        [(        R*                  " U R                  U R                  U R                  5      nUR-                  5       nUR.                  (       a  ["        R0                  " S	5      e[2        R4                  " [6        R8                  " [:        R=                  U R                  R?                  5       U R&                  5      5      S
S9   U RA                  U R                  R?                  5       5         U RC                  U R                  U R&                  URD                  [F        RH                  " XR                  S 5      S9nS S S 5        U RM                  5         U R                  (       a  U R                  [N        RP                  [N        RR                  [N        RT                  4;   a"  [V        RX                  " U R                  5        W$ [V        RZ                  " U R                  5        W$ ! , (       d  f       N= f! [J         a  nUeS nAff = f! U RM                  5         U R                  (       a  U R                  [N        RP                  [N        RR                  [N        RT                  4;   a!  [V        RX                  " U R                  5        f [V        RZ                  " U R                  5        f f = f)N )scope_listerzcompute.regionDisksz--regionz2Regional disks are not supported for this command.zhyperdisk-mlr0   z/Hyperdisk ML is not supported for this command.zHDisk is attached to instances. Please detach the disk before converting.T)messagecancel_on_nodisk_encryption_key).r   ComputeApiHolderReleaseTrackholderclientapitools_clientmessagesstatecreated_resourcesuser_messagesr6   ResolveAsResource	resourcesr   GetDefaultScopeListerdisk_ref
Collectionr   InvalidArgumentExceptiontarget_disk_typer   GetDiskInfoGetDiskResourceusersToolExceptionr   PromptContinuetextwrapdedentCONTINUE_WITH_CONVERT_PROMPTformatName_CreateProgressTracker_ConvertDisksizeGbr   MaybeGetKmsKey	Exception_CleanUpr   r%   r&   r'   r   warningerror)selfargs	disk_infooriginal_diskresultes         r*   RunConvert.RunV   s   //0A0A0CDDK++$$44DKKK&&//DMDJDDNN44001C1CD 5 DM }}!%:://

> 
 .//

;  !11D &&t{{DMM3I--/M$$  (//""$d&;&;

 (&&t}}'9'9';<""MM400-2F2F ) 8 8mmT! # 
 = mmo			::-??'=='88: : ++d((
) M ))D&&
'M' =<  g mmo			::-??'=='88: : ++d((
)
))D&&
' 
sJ   )M AMM 
MM M' M 
M$MM$$M' 'B"P	Nc                 2   U R                  U5      U l        U R                  XR                  5      nU R                  R                  R                  U R                  SUR                  0SS9nU R                  [        R                  U5        U R                  U5      U l
        U R                  R                  R                  U R                  UR                  UR                  S.SS9nU R                  UUUUUS9=(       d    UnU R                  [        R                  U5        U R                  U5      =(       d    UnU R                  [        R                  5        U R!                  UR#                  5       UUS9=(       d    UnU R                  [        R$                  5        U R                  U5      =(       d    UnU R                  [        R&                  5        U R)                  U5      =(       d    UnU R                  [        R*                  5        U$ )Nprojectzcompute.snapshots)params
collection)rq   zonezcompute.disksrD   )_GenerateNamesnapshot_name_InsertSnapshotrH   rP   Parserq   _UpdateStater   r"   restored_disk_namert   _RestoreDiskFromSnapshotr#   _DeleteDiskr$   
_CloneDiskr_   r%   r&   _DeleteSnapshotr'   )rh   rR   rU   size_gbrE   rl   snapshot_refrestored_disk_refs           r*   ra   Convert._ConvertDisk   s    ++H5D!!(,>,>?F;;((..8++,& / L
 	m44lC"00:D--33#++X]]C" 4  	%% 3 	& 	
 	   	m113DEh'16Fm99: 	MMO 3 	 	
 	
   	m;;< /0:FFm99: !!,/96Fm445Mr)   c           	      ,   U R                   R                  UR                  U R                   R                  UUR	                  5       U R                   R                  R
                  R                  S9S9nU R                  U R                  R                  SU5      nU R                  R                  R                  UR                  SS9n[        R                  " [         R"                  " U R                  R                  5      UU R%                  5       S S9$ )N)name
sourceDisksnapshotType)rq   snapshotInsertcompute.globalOperationsrs   custom_trackermax_wait_ms)rK   ComputeSnapshotsInsertRequestrq   SnapshotSelfLinkSnapshotTypeValueValuesEnumSTANDARD_MakeRequestrI   	snapshotsrH   rP   rx   selfLinkr   WaitForr
   Poller_CreateNoOpProgressTracker)rh   rR   rv   request	operationoperation_refs         r*   rw   Convert._InsertSnapshot   s    mm99  ''((*//KKTT ( 
 : G !!$++"7"77KIKK))//- 0 M >>dkk++,668	 r)   c                    U R                   R                  UR                  5       UR                  S9nU R	                  U R
                  R                  SU5      nU R                  R                  R                  UR                  SS9n[        R                  " [        R                  " U R
                  R                  5      UU R                  5       S S9$ )N)r   rq   Deleter   r   r   )rK   ComputeSnapshotsDeleteRequestr_   rq   r   rI   r   rH   rP   rx   r   r   r   r
   DeletePollerr   )rh   r   r   r   r   s        r*   r~   Convert._DeleteSnapshot   s    mm99""$$$ : G !!$++"7"77KIKK))//- 0 M >>DKK112668	 r)   c           	      v   0 nU(       a  XVS'   U R                   R                  " SUR                  5       [        R                  " X1U R
                  5      UUR                  5       S.UD6nU R                   R                  UUR                  UR                  S9nU R                  U R                  R                  SU5      n	U R
                  R                  R                  U	R                  SS9n
[         R"                  " [$        R&                  " U R                  R                  5      U
U R)                  5       S S9$ )	NdiskEncryptionKey)r   typerb   sourceSnapshotr4   rq   rt   r   compute.zoneOperationsr   r   r   )rK   Diskr_   r   GetDiskTypeUrirH   r   ComputeDisksInsertRequestrq   rt   r   rI   disksrP   rx   r   r   r   r
   r   r   )rh   r   r   	disk_typer   rE   kwargsr4   r   r   r   s              r*   r{    Convert._RestoreDiskFromSnapshot   s"    F$7 !== ##%&&$++
 #,,. D mm55!))## 6 G
 !!$++"3"3XwGIKK))//+ 0 M >>dkk''(668	 r)   c                 X    [         R                  " 5        SUR                  5        3S S $ )N-@   )r	   GenerateRandomNamer_   )rh   resource_refs     r*   ru   Convert._GenerateName  s.    //12!L4E4E4G3HI#2NNr)   c                    U R                   R                  UR                  5       UR                  UR                  S9nU R                  U R                  R                  SU5      nU R                  R                  R                  UR                  SS9n[        R                  " [        R                  " U R                  R                  5      UU R!                  5       S S9$ )Nr   r   r   r   r   )rK   ComputeDisksDeleteRequestr_   rq   rt   r   rI   r   rH   rP   rx   r   r   r   r
   r   r   )rh   rR   r   r   r   s        r*   r|   Convert._DeleteDisk  s    mm55]]_  ]] 6 G
 !!$++"3"3XwGIKK))//+ 0 M >>DKK--.668	 r)   c                    0 nU(       a  X4S'   U R                   R                  " SUUR                  5       S.UD6nU R                   R                  UUR                  UR
                  S9nU R                  U R                  R                  SU5      nU R                  R                  R                  UR                  SS9n[        R                  " U R                  R                  5      n	[        R                   " U	UU R#                  5       S S9$ )	Nr   )r   r   r   r   r   r   r   r   )rK   r   r   r   rq   rt   r   rI   r   rH   rP   rx   r   r
   r   r   r   r   )
rh   original_disk_namer   rE   r   r4   r   r   r   operation_pollers
             r*   r}   Convert._CloneDisk1  s    F$7 !== $--/ D
 mm55!))## 6 G
 !!$++"3"3XwGIKK))//+ 0 M }}T[[%6%67>>668	 r)   c                     / nU R                   R                  R                  XU4/U5      nU(       a  [        R                  " U5      eU(       d  [        R
                  " S5      eUS   $ )NzNo response receivedr   )rH   rI   AsyncRequestscore_exceptions
MultiErrorInternalError)rh   resource_clientmethodr   errors_to_collect	responsess         r*   r   Convert._MakeRequestN  sf    ""00
7	+,.?I &&'899))*@AAQ<r)   c                 <    Xl         U(       a  X R                  U'   g g N)rL   rM   )rh   rL   created_resources      r*   ry   Convert._UpdateStateY  s    J&6U# r)   c                 f   U R                   (       d  SU R                  5       -   U l        g U R                   [        R                  :X  aS  SU R
                   S3U R                  5       -   U l        U R                  U R                  [        R                     5        g U R                   [        R                  :X  a  SU R                  R                  5        S3U R                  5       -   U R                  5       -   U l        U R                  U R                  [        R                     5        U R                  U R                  [        R                     5        g U R                   [        R                  :X  a  SU R                  R                  5        SU R                  R                  5        SU R                  R                   SU R                   S	U R                    S
U R
                   SU R                    SU R                  R                   S3U l        g U R                   [        R"                  :X  a8  SU R                    S3U R                  5       -   U R                  5       -   U l        g U R                   [        R$                  :X  a'  SU R
                   S3U R                  5       -   U l        g g )NzCreating snapshot failed.zCreating disk from snapshot z	 failed. zDeleting original disk zRecreating original disk z1 failed. Please run `gcloud compute disks create  --zone=z --type=z --source-disk=zM` to recreate the original disk. Please run `gcloud compute snapshots delete zL` to delete the temporary snapshot. Please run `gcloud compute disks delete z` to delete the temporary disk.z;Conversion completed successfully, Deleting temporary disk z failed.z?Conversion completed successfully. Deleting temporary snapshot )rL   _BuildCleanupSnapshotMessagerN   r   r"   rv   r~   rM   r#   rR   r_   _BuildCleanupDiskMessager|   r$   rt   rU   rz   r%   r&   rh   s    r*   re   Convert._CleanUp^  s   ::
%(I(I(K
K  zz]333 )););(<I
F--/0  

 
 !?!?
@ 
}22	2 $DMM$6$6$8#9
C))+,--/0 
 t--m.I.IJK


 
 !?!?
@ 
}::	: &dmm&8&8&:%; <mm  "#8DMM,>,>+?xH]H]G^^mnr  oF  oF  nG G#112 3%%&ht}}/A/A.B C!!  
}<<	<%%&h0))+, --/0  
}::	:  !+--/0  
;r)   c                 4    [         R                  " SU S3SS9$ )NzConverting disk z...zConversion aborted.)rB   aborted_message)r   ProgressTracker)rh   	disk_names     r*   r`   Convert._CreateProgressTracker  s$    ++"9+S1- r)   c                 ,    [         R                  " SSS9$ )NTr@   )interruptabler   )r   NoOpProgressTrackerr   s    r*   r   "Convert._CreateNoOpProgressTracker  s    //B r)   c                 "    SU R                    S3$ )Nz- Please run `gcloud compute snapshots delete z6` to delete the temporary snapshot if it still exists.)rv   r   s    r*   r   $Convert._BuildCleanupSnapshotMessage  s     
78J8J7K L= 	=r)   c                 P    SU R                    SU R                  R                   S3$ )Nz) Please run `gcloud compute disks delete r   z2` to delete the temporary disk if it still exists.)rz   rR   rt   r   s    r*   r    Convert._BuildCleanupDiskMessage  s4    	##$HT]]-?-?,@ A.	.r)   )
rI   rM   rR   rH   rK   rz   rv   rL   rU   rN   r   )r   r   r    r!   __doc__disks_flagsMakeDiskArgr6   staticmethodr=   rn   ra   rw   r~   r{   ru   r|   r}   r   ry   re   r`   r   r   r   r(   r   r)   r*   r,   r,   =   s    
 O%%U3) AH FJ5n*. $LO& HL:	7
3j
r)   r,   a
   Convert Compute Engine Persistent Disk volumes to Hyperdisk volumes.

 *{command}* converts a Compute Engine Persistent Disk volume to a Hyperdisk volume. For a comprehensive guide, refer to: https://cloud.google.com/sdk/gcloud/reference/compute/disks/convert.
    zThe following command converts a Persistent Disk volume to a Hyperdisk Balanced volume:

        $ {command} my-disk-1 --zone=ZONE --target-disk-type=hyperdisk-balanced
        )DESCRIPTIONEXAMPLES)-r   
__future__r   r   r   enumr[   googlecloudsdk.api_lib.computer   r   r   r	   )googlecloudsdk.api_lib.compute.operationsr
   googlecloudsdk.api_lib.utilr   googlecloudsdk.callioper   r   "googlecloudsdk.command_lib.computer   r   (googlecloudsdk.command_lib.compute.disksr   googlecloudsdk.command_lib.kmsr   r:   googlecloudsdk.corer   r   googlecloudsdk.core.consoler   r   r]   Enumr   DefaultUniverseOnlyReleaseTracksrG   ALPHABETAGARestoreCommandr,   detailed_helpr   r)   r*   <module>r      s    9 &  '   7 5 4 9 < . ( . 9 4 I M = # 2 8 DII  D%%++%%**%%((*hd!! h* hX
 r)   