
    mP                         S 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r " S S5      rS rS rS rS rS rS rS rS rg
)z*Utils for compute instances bulk commands.    )encoding)instance_utils)utils)InvalidArgumentException)resource_manager_tags_utils)secure_tags_utils)util)	arg_utilsNc                       \ rS rSrSrS rSrg)SupportedFeatures   z>Simple dataclass to hold status of supported features in Bulk.c                     X l         Xl        X0l        X@l        XPl        X`l        Xpl        Xl        SU l        Xl	        Xl
        Xl        Xl        UU l        Xl        g )NT)support_secure_tagssupport_display_devicesupport_numa_node_countsupport_snp_svsmsupport_max_count_per_zonesupport_custom_hostnames support_specific_then_x_affinitysupport_watchdog_timersupport_replica_zonessupport_graceful_shutdownsupport_source_snapshot_regionsupport_skip_guest_os_shutdown"support_preemption_notice_duration#support_instance_flexibility_policy support_workload_identity_config)selfr   r   r   r   r   r   r   r   r   r   r   r   r   r   s                  =lib/googlecloudsdk/command_lib/compute/instances/bulk/util.py__init__SupportedFeatures.__init__    sh    "  3"8#: ,&@#$<!,L)"8!%D%>"*H'*H'.P++ 	, -M)    )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   N)__name__
__module____qualname____firstlineno____doc__r    __static_attributes__ r"   r   r   r      s    F!Mr"   r   c                 r    U R                  S5      (       d  gUR                  X5      nUR                  5       $ )z4Get sourceInstanceTemplate value as required by API.source_instance_templateN)IsSpecifiedResolveAsResourceSelfLink)args	resourcesinstance_template_resourcerefs       r   _GetSourceInstanceTemplater3   D   s3    			4	5	5"44TE#	r"   c                    U R                  S5      (       d-  U R                  S5      (       d  U R                  S5      (       d  gUR                  5       nU R                  S5      (       d  U R                  S5      (       a(  U(       a  [        X5      Ul        O[	        X5      Ul        U R                  S5      (       a:  [
        R                  " U R                  UR                  R                  5      Ul	        U$ )z,Get locationPolicy value as required by API.location_policymax_count_per_zonetarget_distribution_shapeN)
IsKnownAndSpecifiedLocationPolicy8_GetLocationPolicyLocationsMaxCountPerZoneFeatureEnabled	locations9_GetLocationPolicyLocationsMaxCountPerZoneFeatureDisabledr
   ChoiceToEnumr7   TargetShapeValueValuesEnumtargetShape)r/   messagesmax_count_per_zone_enabledr5   s       r   _GetLocationPolicyrB   L   s     011		!	!"6	7	7&&'BCC++-/	/00D4L4L5 5 "
B  D  
9::"+"8"8&&::#O 
r"   c           
      p   / nU R                   R                  5        H~  u  p4[        R                  " XAR                  R
                  5      nUR                  UR                  R                  R                  SR                  U5      UR	                  US9S95        M     UR                  R                  US9$ )9Helper function for getting location for location policy.zones/{}
preferencekeyvalueadditionalProperties)r5   itemsr
   r=   LocationPolicyLocationPreferenceValueValuesEnumappendr9   LocationsValueAdditionalPropertyformat)r/   r@   r;   zonepolicyzone_policys         r   r<   r<   n   s    )**002ld((//IIK ..AA!!$'11[1I 	B 	
	 3 
	 	 	/	/Y	/	OOr"   c                    / nU R                   (       Ga3  U R                   R                  5        GH  u  p4[        R                  " XAR                  R
                  5      nU R                  (       a  X0R                  ;   au  UR                  UR                  R                  R                  SR                  U5      UR	                  UUR                  [        U R                  U   5      S9S9S95        M  UR                  UR                  R                  R                  SR                  U5      UR	                  US9S95        GM     [        R                  " SUR                  R
                  5      nU R                  (       a  U R                  R                  5        H  u  p7U R                   (       a  X0R                   ;  d  U R                   (       a  M8  UR                  UR                  R                  R                  SR                  U5      UR	                  UUR                  [        U5      S9S9S95        M     UR                  R                  US9$ )rD   rE   )maxCount)rG   constraintsrH   rF   allowrK   )r5   rM   r
   r=   rN   rO   r6   rP   r9   rQ   rR   rS   !LocationPolicyLocationConstraintsint)r/   r@   r;   rT   rU   rV   zone_policy_allowed_preferencecounts           r   r:   r:      s   )	,,224**
11KKk 
	 	 T-D-D%D##22EE%%d+55* ( J J!$T%<%<T%B!C !K ! 6  F 
	
 	##22EE%%d+555M F 	
# 50 $-#9#9x..HH$  
..446


4/C/C#C"""##22EE%%d+55= ( J J!$U !K ! 6  F 
	
	 7  
	 	 	/	/Y	/	OOr"   c                    0 nU(       a"  U R                  S5      (       a  U R                  n0 nU H/  nXd;   a  UR                  XF   S9XV'   M  UR                  5       XV'   M1     [        R                  " UUR
                  R                  5      $ )z4Helper function for getting per_instance_properties.per_instance_hostnames)hostname)r,   r`   /BulkInsertInstanceResourcePerInstancePropertiesr   DictToAdditionalPropertyMessageBulkInsertInstanceResourcePerInstancePropertiesValue)r/   r@   instance_namesr   r`   per_instance_propertiesnames          r   _GetPerInstancePropertiesri      s     $"2"23K"L"L!88d%

B
B-3 C  # 
B
B
D #  
	1	1))DD
 r"   c                    / nU R                  S5      (       a  [        UUSU R                  S5        OU R                  S5      (       ax  U R                   Hh  nUS   n[	        U[
        5      (       a  US   nUS   nSnSU;   a*  US   n[	        U[
        5      (       a  US   n[        U5      n[        UUUUU5        Mj     U(       d  gUR                  R                  US	9$ )
zFCreates an InstanceFlexibilityPolicy message from the given arguments. instance_selection_machine_typeszdefault-selectionNinstance_selectionrh   r   zmachine-typerankrK   )	r,   _AddInstanceSelectionrk   rl   
isinstancelistr\   InstanceFlexibilityPolicyInstanceSelectionsValue)r/   r@   instance_selectionsrl   rh   machine_typesrm   s          r    _CreateInstanceFlexibilityPolicyru      s    	899-- ,--"55'd	D$		Aw(8md	%	%!&)dD!!a$4y




 6$ 
		+	+	C	C. 
D 
 r"   c                 h   U Ha  nUR                   U:X  d  M  UR                  b  [        SS5      eUR                  U R                  R
                  R                  USS95        Mc     U R                  US9nUb  XFl        UR                  U R                  R
                  R                  UUS95        g)z4Adds instance selection to instance selections list.Nrl   z?Attempt to add multiple instance selections with the same name.rH   )machineTypes)
rI   rJ   r   removerq   rr   rR   *InstanceFlexibilityPolicyInstanceSelectionrm   rP   )r@   rs   instance_selection_namert   rm   rl   instance_selection_payloads          r   rn   rn      s     0!88		!	!	-& M
 	
   

,
,
D
D
W
W) X  0 99$ :  
 
&*#((@@SS%* T r"   c	                    U R                   n	U R                  =(       d    / n
U R                  =(       d    [        U
5      n[	        U UR
                  U
UR                  5      n[        U UR
                  UR                  5      nUnU R                  S5      (       a  U R                  n[        XU5      nUSLn[        R                  " U UUSSSSUR                  UR                  UR                   S9
n[        R"                  " X5      n[        R$                  " XSS9n[        R&                  " XU5      n[(        R*                  " U UUUUUUUS9n[        R,                  " U R.                  =(       d    / U R0                  =(       d    / -   5      (       + n[(        R2                  " XUXC5      n[(        R4                  " UR
                  U S9n[(        R6                  " UR
                  U SSUR8                  S	9n[        R:                  " U S5      n[(        R<                  " XUU5      n[        R>                  " U 5      n/ n[(        R@                  " U SUS
9(       a  U R.                  =(       d    /  H  nSUS'   M
     [(        RB                  " S-0 SU _SU_SU_SU_SU_SU_SU_SU_SU_SU_SS_SURD                  _SS_SS_SS_SS_SS_SURF                  _6nSn[        RH                  " U U5      (       a  [        RJ                  " U U5      n[        RL                  " U U5      n [(        RN                  " XS9n!Sn"U RP                  c  U RR                  ct  URT                  (       a  U RV                  cV  U RX                  cI  U RZ                  c<  U R\                  (       d+  UR^                  (       a  U R`                  c  U Rb                  b  U RX                  n#[        Rd                  " UR
                  U RP                  U RR                  URT                  (       a  U RV                  OSU#U RZ                  U R\                  UR^                  (       a  U R`                  OSU Rb                  5	      n"/ n$[g        U S S5      n%U%(       a@  U% H:  n&[h        Rj                  " UU&UUUS!9n'U$Rm                  U'Ro                  5       5        M<     Sn(URp                  (       a9  U R                  S"5      (       a#  UR
                  Rs                  U Rt                  S#9n([        Rv                  " XURx                  5      n)[        Rz                  " U UR
                  UR|                  5      n*UR
                  R                  U U R                  UU!UUUU R                  UUUUU$UU)U"S$9n+UR|                  (       a  U*(       a  U*U+lB        UR                  (       a6  U R                  (       a%  [        R                  " U R                  5      U+lG        U R                  (       a  [        R                  " U R                  5      n,U,bu  UR
                  R~                  n-U-R                  [        [        R                  " U,5      5       V.V/s/ s H   u  n.n/U-R                  R                  U.U/S%9PM"     sn/n.S&9U+lP        URp                  (       a  U((       a  U(U+lQ        U(       a  UU+lR        U R                  S'5      (       a  U R                  U+lT        U R                  S(5      (       aD  [        R                  " U R                  UR
                  R                  R                  5      U+lZ        U R                  S)5      (       a  [        R                  " X5      U+l\        UU+UUUU	US*.n0UR                  (       a:  [        XR
                  5      n1U1(       a  UR
                  R                  U1S+9n2U2U0S,'   UR
                  R                  " S-0 U0D6$ s  sn/n.f ).z"Create bulkInsertInstanceResource.	min_countNFT)support_node_affinitysupport_min_node_cpusupport_max_run_duration"support_local_ssd_recovery_timeoutr   r   r   )instance_properties)r/   resource_parsercompute_clientholderprojectlocationscopeskip_defaults)r@   r/   )r@   r/   !support_confidential_compute_type%support_confidential_compute_type_tdxr   )r/   support_disksr   romoder/   r   r   r   r   r   	image_urir   create_boot_diskboot_disk_size_gbsupport_kmsr   support_nvdimmsupport_boot_snapshot_urisupport_image_cseksupport_create_disk_snapshotsuse_disk_type_urir   )r/   r   resource_policies)r   r   r   enable_display_device)enableDisplay)canIpForwarddescriptiondisksguestAcceleratorslabelsmachineTypemetadataminCpuPlatformnetworkInterfacesserviceAccounts
schedulingtagsresourcePoliciesshieldedInstanceConfigreservationAffinityadvancedMachineFeaturesrH   rK   erase_windows_vss_signaturepost_key_revocation_action_typenetwork_performance_configs)r^   instancePropertiesminCountperInstancePropertiessourceInstanceTemplatenamePatternlocationPolicy)instanceSelectionsinstanceFlexibilityPolicyr)   )aname_patternpredefined_namesr^   lenri   r@   r   rB   r   r,   r}   r3   r   GetSchedulingr   r   r   GetTags	GetLabelsGetMetadatacreate_utilsGetBulkNetworkInterfacesUseExistingBootDiskdiskcreate_diskGetImageUri"BuildShieldedInstanceConfigMessage&BuildConfidentialInstanceConfigMessager   GetConfidentialVmTypeGetProjectServiceAccountGetBootDiskSizeGbCheckSpecifiedDiskArgsCreateDiskMessagesr   r   CheckSpecifiedMachineTypeArgsCreateMachineTypeNameGetCanIpForward$GetAcceleratorsForInstancePropertiesenable_nested_virtualizationthreads_per_corer   numa_node_countvisible_core_countenable_uefi_networkingperformance_monitoring_unitr   enable_watchdog_timer
turbo_mode$CreateAdvancedMachineFeaturesMessagegetattrmaintenance_utilParseResourcePolicyWithScoperP   Namer   DisplayDevicer   GetReservationAffinityr   #CreateWorkloadIdentityConfigMessager   InstancePropertiesr   min_cpu_platformworkloadIdentityConfigr   secure_tagsr   GetSecureTags
secureTagsresource_manager_tagsr   GetResourceManagerTagsResourceManagerTagsValuesortedsix	iteritemsrR   resourceManagerTagsdisplayDeviceconfidentialInstanceConfigr   eraseWindowsVssSignaturer
   r=   r   Instance*PostKeyRevocationActionTypeValueValuesEnumpostKeyRevocationActionTypeGetNetworkPerformanceConfignetworkPerformanceConfigr   ru   rq   rd   )3r/   r   r   r   r   r   r   r1   supported_featuresr   rf   instance_countper_instance_propsr5   instance_min_countr+   r   r   r   r   r   network_interfacesr   r   shielded_instance_configconfidential_instance_configconfidential_vm_typeservice_accountsr   r   r   machine_type_namecan_ip_forwardguest_acceleratorsadvanced_machine_featuresr   parsed_resource_policiesr   rU   resource_policy_refdisplay_devicereservation_affinityworkload_identity_configr   ret_resource_manager_tagsproperties_messagerI   rJ   kwargsinstance_selections_valueinstance_flexibility_policy_objs3                                                      r    CreateBulkInsertInstanceResourcer
    s   $ "",((.B.::4^!4.0
11	 '
33/ &	k""7
7 +$6-++
!#)- 2 L L

;
; 
?
?*  
			5$##
& ''mL(#<<%#!	 ((99?t//52
6
 &&
,g) *LL&&T
 99!**,004->>  (==dDI!::
^] %66t<
%((uM
 		Rd6l  ++   	
 & (   * ,  1FF  #'    '+!"  #$ (:'X'X%E* 11$FF&<<" "11$F.#HH #
''3				*

4
4"".

!
!
-		$	$	0

*
*

3
3((4
//
%00;;##--!!!99   '',,!88 &&OO	
 $  d$7>#,II

 %%&9&>&>&@A $ ...43C3C4 4 $,,::00 ; N (>>
.OO ,OO
99 '//BB!""*#***&/5.7! C & 99
"1I.++0@0@%6%D%D&" 
#::&&	
 
 !,)22EE0B0[0[
 !'s}}5N'O P	  !Q*#u !99LL M  !Q	  1\ 1- ..>(6%!$ 2 
344(( 0 
7886?6L6L,,((SS73
 
344224H 0
 /$1 8!'& ;; @%%! !

!
!
;
;!: <  &
 -Lf()		 	 	;	;	Ef	EEm s   /'_1
)r'   apitools.base.pyr   googlecloudsdk.api_lib.computer   /googlecloudsdk.api_lib.compute.instances.creater   r   "googlecloudsdk.calliope.exceptionsr   "googlecloudsdk.command_lib.computer   r   4googlecloudsdk.command_lib.compute.resource_policiesr	   r   $googlecloudsdk.command_lib.util.apisr
   r   r   r3   rB   r<   r:   ri   ru   rn   r
  r)   r"   r   <module>r     sd    1 & 9 Q G J @ Y : 
$M $MNDP"2Pj6"J!HqFr"   