
    %                     2   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ddZd Zd Zd Ze	j*                   e	j,                  e	j.                  j0                         G d de	j2                                      Zee_         e	j,                  e	j.                  j8                         G d de             Zee_         e	j,                  e	j.                  j<                         G d de             Zee_        y)zCommand for creating disks.    )absolute_import)division)unicode_literals)base_classes)filter_rewrite)base)flags)log)
propertiesz9
          Create multiple Compute Engine disks.
        z
        *{command}* facilitates the creation of multiple Compute Engine
        disks with a single command. This includes cloning a set of Async PD
        secondary disks with the same consistency group policy.
        a  
        To consistently clone secondary disks with the same consistency group
        policy 'projects/example-project/regions/us-central1/resourcePolicies/example-group-policy' to target zone 'us-central1-a', run:

          $ {command} --source-consistency-group-policy=projects/example-project/regions/us-central1/resourcePolicies/example-group-policy --zone=us-central1-a
        )briefDESCRIPTIONEXAMPLESc                     t        j                  |        t         j                  j                  |        t         j                  j                  |        y N)disks_flagsAddBulkCreateArgsAlpha!SOURCE_INSTANT_SNAPSHOT_GROUP_ARGAddArgumentSOURCE_SNAPSHOT_GROUP_ARG)parsers    (lib/surface/compute/disks/bulk/create.py
_AlphaArgsr   2   s8    $$V,//;;FC''33F;    c           	         g }t        j                         j                  d|z         \  }}|r^| j                  | j                  j
                  d | j                  j
                  j                  d      |||      fg|ddd      }||fS | j                  | j                  j                  d | j                  j                  j                  d      |||      fg|ddd      }||fS )	z9Requests operations with group id matching the given one.zoperationGroupId=)
expressionList)filterzoneprojectFT)errors_to_collect
log_resultalways_return_operationno_followup)r   regionr   )r   RewriterRewriteMakeRequestsapitools_clientzoneOperationsGetRequestTyperegionOperations)	compute_clientr   operation_group_id
scope_nameis_zonalr    _operation_filteroperations_responses	            r   _GetOperationsr3   8   s.    &//199$'99 : ;! (55

(
(
7
7
N.
(
(
7
7
F
Fv
N%JI
J 	K , $ 6 $ 
/	// )55

(
(
9
96
P.
(
(
9
9
H
H
P":wH
I 	J , $ 6  
/	//r   c                     t        |d      }|r|j                  n|j                  }t        | |j                  |||      \  }}|dd}|s|sd }	t        t        |	|            |d<   |S )z?Requests operations with group id and parses them as an output.r   r   )operationGroupIdcreatedDisksCountc                 t    | j                   dk(  xr( t        | j                        dk(  xr | j                  d u S )NinsertDONE)operationTypestrstatuserror)ops    r   IsPerDiskOperationz&_GetResult.<locals>.IsPerDiskOperationd   sA    ) 4c
))// 4#%88t#34r   r6   )hasattrr   r$   r3   r   summap)
r,   requestr-   parent_errorsr/   r.   r2   errorsresultr?   s
             r   
_GetResultrG   Z   sz     Wf%('w||W^^* .~w/A:/7!9v !3K&	v4 #& 34#6F	-r   c                   F    e Zd ZdZed        Zedd       Zd ZddZd Z	y)	
BulkCreate%Create multiple Compute Engine disks.c                 .    t        j                  |       y r   r   AddBulkCreateArgsclsr   s     r   ArgszBulkCreate.Argsr       !!&)r   c                 J    t        j                  | j                         |      S r   )r   ComputeApiHolderReleaseTrack)rO   no_https     r   _GetApiHolderzBulkCreate._GetApiHolderv   s    (()9)9);WEEr   c                 $    | j                  |      S r   _Runselfargss     r   RunzBulkCreate.Runz       99T?r   c           	         | j                         }|j                  }t        |dd       }t        j                  j
                  j                  j                         }|s|j                  d      r]|j                  j                  ||j                  |j                  j                  |            }|j                  j                  d|f}n|j                  j                  ||j                   |j                  j                  |            }|j                  j"                  d|f}nt$        j&                  j)                  ||j*                  t-        j.                  |            }|+|j                  j1                  |j3                               }	nd }	t$        j4                  j)                  ||j*                        }
|
+|j                  j7                  |
j3                         	      }nd }|j                  d      r^|j                  j                  ||j                  |j                  j                  ||	|
            }|j                  j                  d|f}n]|j                  j                  ||j                   |j                  j                  ||	|
            }|j                  j"                  d|f}g }|j9                  |g|dd      }|rXt;        t=        |            D ]A  }||   }t?        |      }tA        |d   d      r|d   jB                  |d<   tE        |      ||<   C || _#        |sy |d   jH                  }tK        ||d   ||      }|d   jL                  r|d   jL                  |d<   |S )Nsource_consistency_group_policyr   )sourceConsistencyGroupPolicy)r   r   bulkInsertDiskResource
BulkInsert)r   r$   rb   )scope_lister)sourceInstantSnapshotGroup)sourceSnapshotGroup)ra   instantSnapshotGroupParameterssnapshotGroupParametersT)r    r#   r"      messager      statusMessage)'rV   clientgetattrr   VALUEScorer   	GetOrFailIsSpecifiedmessagesComputeDisksBulkInsertRequestr   BulkInsertDiskResourcer(   disks#ComputeRegionDisksBulkInsertRequestr$   regionDisksr   r   ResolveAsResource	resourcesr	   GetDefaultScopeListerInstantSnapshotGroupParametersSelfLinkr   SnapshotGroupParametersr'   rangelenlistr@   rj   tuple_errorsr5   rG   rl   )r[   r\   support_multiple_source_restorecompute_holderrm   
policy_urlr   rC   isg_ref
isg_paramsssg_ref
ssg_paramsr    responseierror_tuple
error_listr-   rF   s                      r   rY   zBulkCreate._Run}   s   '')N""F@$GJ$$,,668G*			&	!//??#)??#I#I-7 $J $9 @ :
 ))//wG//EE;;#)??#I#I-7 $J $9 F :
 ))55|WM==OO


"
"226: P g
 
	__CC'.'7'7'9 D 

 
55GG


"
"g 
	__<< ' 0 0 2 = 

 
			&	!//??#)??#I#I-7/9(2 $J $4 @ 5 ))//wG//EE;;#)??#I#I-7/9(2 $J $4 F 5 ))55|WM""G95F/3;? # AH S*+,!'*+&

 :a=),$Q-//*Q-$Z0! - %DL!!55
,>)+F {   ( 9 9f_Mr   c                 j    ~| j                   r&t        j                  | j                   d   d          y y )Nr   ri   )r   r
   r=   )r[   resources_were_displayeds     r   EpilogzBulkCreate.Epilog   s*     ||	iiQ"# r   N)F)
__name__
__module____qualname____doc__classmethodrP   rV   r]   rY   r    r   r   rI   rI   m   s@     .* * F FYv$r   rI   c                   &    e Zd ZdZed        Zd Zy)BulkCreateBetarJ   c                 .    t        j                  |       y r   rL   rN   s     r   rP   zBulkCreateBeta.Args   rQ   r   c                 $    | j                  |      S r   rX   rZ   s     r   r]   zBulkCreateBeta.Run   r^   r   Nr   r   r   r   r   rP   r]   r   r   r   r   r      s    -* *r   r   c                   &    e Zd ZdZed        Zd Zy)BulkCreateAlpharJ   c                     t        |       y r   )r   rN   s     r   rP   zBulkCreateAlpha.Args   s
    vr   c                 (    | j                  |d      S )NT)r   rX   rZ   s     r   r]   zBulkCreateAlpha.Run   s    99T59  ; ;r   Nr   r   r   r   r   r      s    - ;r   r   N) r   
__future__r   r   r   googlecloudsdk.api_lib.computer   r   googlecloudsdk.callioper   "googlecloudsdk.command_lib.computer	   (googlecloudsdk.command_lib.compute.disksr   googlecloudsdk.corer
   r   DETAILED_HELPr   r3   rG   DefaultUniverseOnlyReleaseTracksrT   GACommandrI   detailed_helpBETAr   ALPHAr   r   r   r   <module>r      s   " &  ' 7 9 ( 4 I # *			*<0D& D%%(()l$ l$ * l$\ )
  D%%**+Z  ,  -  D%%++,	;j 	; -	; !. r   