
    @                         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rS rS	 rS
 rS r SS jrS r    SS jr      SS jrS rS rS rS rS rS rS rS rS rg)zCCommon utility functions to construct compute reservations message.    )
exceptions)flags)scope)util)timesNc                    [        U [        USS5      5      n[        U [        USS5      5      n[        X[        USS5      5      nUR	                  S5      (       a  [        X5      OSn[        U UR                  UUUR                  UR                  [        USS5      [        USS5      [        USS5      U5
      n[        U U[        US	S5      U5      n	Sn
UR	                  S
5      (       a  [        US
S5      n
SnUR	                  S5      (       a  [        USS5      n[        U UR                  5       UUU	UR                  UR                  [        USS5      [        USS5      [        USS5      [        USS5      U
U5      $ )z2Construct reservation message from args passed in.acceleratorN	local_ssdshare_settingsource_instance_templatelocation_hintmaintenance_freeze_durationmaintenance_intervalresource_policiesscheduling_typeearly_access_maintenancedelete_at_timedelete_after_durationreservation_sharing_policyenable_emergent_maintenance)MakeGuestAcceleratorsgetattrMakeLocalSsdsMakeShareSettingsWithArgsIsKnownAndSpecifiedResolveSourceInstanceTemplate!MakeSpecificSKUReservationMessagevm_countmachine_typemin_cpu_platformMakeResourcePoliciesMakeReservationMessageNamerequire_specific_reservationzone)messagesargsreservation_ref	resourcesaccelerators
local_ssdsshare_settingssource_instance_template_refspecific_reservationr   r   r   s               ;lib/googlecloudsdk/command_lib/compute/reservations/util.pyMakeReservationMessageFromArgsr0      s   &mT2, Xwt[$'GH*,gdOT:.
 
	!	!"<	=	= $D4 
 ;
mm

dOT*d148d*D1" +d'.	 /	/00d$5t<O!	899&t-GN	
''d$d+d+T2d0$7d148
     c                     [         R                  " SS[         R                  R                  SSS9R	                  X[
        R                  R                  S9$ )Nz--source-instance-templatezinstance templatezcompute.instanceTemplateszcompute.regionInstanceTemplates)resource_namescope_flags_usageglobal_collectionregional_collection)default_scope)compute_flagsResourceArgumentScopeFlagsUsageDONT_USE_SCOPE_FLAGSResolveAsResourcecompute_scope	ScopeEnumGLOBAL)r'   r)   s     r/   r   r   T   sS    		'	'"'%55JJ3;
 
]%<%<%C%C  r1   c                 t    Uc  / $ / nU H*  nU R                  US   US   S9nUR                  U5        M,     U$ )z4Constructs the repeated accelerator message objects.counttype)acceleratorCountacceleratorType)AcceleratorConfigappend)r&   accelerator_configsr*   ams        r/   r   r   `   sV     I,a""7QvY 	# 	A 	  
r1   c                    Uc  / $ / nU R                   nUR                  nU H  nUS   R                  5       S:X  a  UR                  nO;US   R                  5       S:X  a  UR                  nO[
        R                  " SS5      eU" US   US9nUR                  SS	5      nUS	:  a  [
        R                  " SS
5      eUR                  U/U-  5        M     U$ )z2Constructs the repeated local_ssd message objects.	interfaceNVMESCSIz--local-ssdzNMust specify a valid interface (NVME, SCSI) for SSDs attached to the instance.size)
diskSizeGbrK   rA      zGMust specify a valid count (>= 1) for SSDs attached to the reservation.)	FAllocationSpecificSKUAllocationAllocatedInstancePropertiesReservedDiskInterfaceValueValuesEnumupperrL   rM   r   InvalidArgumentExceptiongetextend)	r&   ssd_configsr+   disk_msginterface_msgsrK   rI   
partitionss	            r/   r   r   p   s    I*UU  33-a~'$$i	
;			6	)$$i//
 
 	AfI;Aw"JA~//
 
 qcJ&'' * 
r1   c                    U(       Ga  US:X  a-  U R                  U R                   R                  R                  S9$ US:X  a`  UR                  U5      (       a  US:w  a  [        R
                  " SS5      eU R                  U R                   R                  R                  S9$ US:X  ay  UR                  U5      (       d  [        R
                  " SS5      eS	nUS:w  a  [        U [        XS	5      5      nU R                  U R                   R                  R                  US
9$ US:X  ao  UR                  U5      (       d  [        R
                  " SS5      eU R                  U R                   R                  R                  [        U [        XS	5      5      S9$ g	UR                  U5      (       a  [        R
                  " SS5      eg	)zDConstructs the share settings message object from raw args as input.organization	shareTypelocalremove_share_with--share_with_The scope this reservation is to be shared with must not be specified with share setting local.projectsEThe projects this reservation is to be shared with must be specified.Nr_   
projectMapfoldersDThe folders this reservation is to be shared with must be specified.r_   	folderMap--share_setting6Please specify share setting if specifying share with.)ShareSettingsShareTypeValueValuesEnumORGANIZATIONIsSpecifiedr   rT   LOCALMakeProjectMapFromProjectListr   SPECIFIC_PROJECTS&DIRECT_PROJECTS_UNDER_SPECIFIC_FOLDERSMakeFolderMapFromFolderListr   )r&   r'   setting_configs
share_withproject_maps        r/   r   r      s    .(##**CCPP $   '!			*	%	%*8K*K112
 	

 ##**CCII $   *$j))11
 	

 k	*	*3gd5
 ##**CCUU  $   )#j))11
 	

 ##**CCjj/$7 $   $ 
++//

B  r1   c           
      n   U(       Ga  US:X  a-  U R                  U R                   R                  R                  S9$ US:X  aX  SUR                  5       ;   a  [        R
                  " SS5      eU R                  U R                   R                  R                  S9$ US:X  ar  SUR                  5       ;  a  [        R
                  " SS5      eU R                  U R                   R                  R                  [        XR                  SS	5      5      S
9$ US:X  ar  SUR                  5       ;  a  [        R
                  " SS5      eU R                  U R                   R                  R                  [        XR                  SS	5      5      S9$ g	SUR                  5       ;   a  [        R
                  " SS5      eg	)zKConstructs the share settings message object from dictionary form of input.r]   r^   r`   rx   rb   rc   rd   re   Nrf   rh   ri   rj   rl   rm   )rn   ro   rp   keysr   rT   rr   rt   rs   rU   ru   rv   )r&   
dictionaryrw   s      r/   MakeShareSettingsWithDictr}      s   .(##**CCPP $   '!	*	*112
 	

 ##**CCII $   *$	Z__.	.11
 	

 ##**CCUU2|T: $   )#	Z__.	.11
 	

 ##**CCjj/|T: $   $ z((//

B  r1   c
                     U R                   n
U	(       a  U R                  UU	R                  5       SS9$ U
" UUUUS9nU(       a
  US-  Ul        U(       a   U R                   R	                  U5      Ul        U(       a  Xkl        U R                  XS9$ )z<Constructs a single specific sku reservation message object.N)rA   sourceInstanceTemplateinstanceProperties)guestAccelerators	localSsdsmachineTypeminCpuPlatformi  )rA   r   )9AllocationSpecificSKUAllocationReservedInstanceProperties AllocationSpecificSKUReservationSelfLinkmaintenanceFreezeDurationHours"MaintenanceIntervalValueValuesEnummaintenanceIntervallocationHint)r&   r   r*   r+   r   r    r   freeze_durationfreeze_intervalr-   	prop_msgsinstance_propertiess               r/   r   r      s     PP)!44;DDF 5   $& '	 
T
! 8 080r0r  1V  1V
1- )6&44 5  r1   c                 d   U R                  UUUUS9nU(       a  X-l        U(       a  XMl        U(       a  [        R                  " U5      Ul        U(       a  U R                  US9Ul        U	(       a  [        X	5      Ul	        U
b  Xl
        Ub  [        X5      Ul        Ub  [        X5      Ul        U$ )z0Constructs a single reservations message object.)namespecificReservationspecificReservationRequiredr%   )seconds)ReservationshareSettingsresourcePoliciesr   FormatDateTimedeleteAtTimeDurationdeleteAfterDuration#MakeReservationSharingPolicyMessagereservationSharingPolicyenableEmergentMaintenanceMakeSchedulingTypeschedulingTypeMakeEarlyAccessMaintenanceearlyAccessMaintenance)r&   reservation_namer,   r.   r   r$   reservation_zoner   r   r   r   r   r   reservation_messages                 r/   r"   r"   )  s      !,,.">	 -  (6%+<(',';';N'K$.6.?.?% /@ /+  +	
 0 !,4O1 );*& )1K2. 
r1   c                     US:X  a-  U R                  U R                   R                  R                  S9$ US:X  a-  U R                  U R                   R                  R                  S9$ g )NDISALLOW_ALL)serviceShareType	ALLOW_ALL)"AllocationReservationSharingPolicyServiceShareTypeValueValuesEnumr   r   )r&   r   s     r/   r   r   c  ss    >166!DDddqq 7   "[066!DDddnn 7   r1   c           
          / nU HC  nUR                  U R                  R                  R                  UU R	                  US9S95        ME     U R                  R                  US9$ )N)	projectIdkeyvalueadditionalProperties)rF   rn   ProjectMapValueAdditionalPropertyShareSettingsProjectConfig)r&   rd   additional_propertiesprojects       r/   rs   rs   p  sw    g  ..AA555H 	B 	
  
			/	/0 
0 
 r1   c           
          / nU HC  nUR                  U R                  R                  R                  UU R	                  US9S95        ME     U R                  R                  US9$ )N)folderIdr   r   )rF   rn   FolderMapValuer   ShareSettingsFolderConfig)r&   rh   r   folders       r/   rv   rv   ~  sw    f  --@@44f4E 	A 	
  
			.	.0 
/ 
 r1   c                    Uc  gU R                   R                  [        [        R                  " U5      5       VVs/ s H3  u  pEU R                   R                  R                  U[        X5U5      S9PM5     snnS9$ s  snnf )z1Constructs the resource policies message objects.Nr   r   )r   ResourcePoliciesValuesortedsix	iteritemsr   MakeUrl)r&   r(   resource_policy_dictionaryr)   r   r   s         r/   r!   r!     s      '				3	3
 #3==1K#LM	 Njc 


4
4
G
GWYG H  N	 
4 
 s   :A<
c                     US:X  a   U R                   R                  R                  $ US:X  a   U R                   R                  R                  $ US:X  a   U R                   R                  R                  $ g)zAConstructs the maintenance scope message object for reservations.allunusedrunningN)%ReservationsPerformMaintenanceRequestMaintenanceScopeValueValuesEnumALLUNUSED_CAPACITYRUNNING_VMSr&   maintenance_scopes     r/    MakeReservationsMaintenanceScoper     sq    %66VVZZ H$66VVff I%66VVbb r1   c                     US:X  a   U R                   R                  R                  $ US:X  a   U R                   R                  R                  $ US:X  a   U R                   R                  R                  $ g)zGConstructs the maintenance scope message object for reservation blocks.r   r   r   N)+ReservationsBlocksPerformMaintenanceRequestr   r   r   r   r   s     r/   %MakeReservationBlocksMaintenanceScoper     sq    %<<\\`` H$<<\\ll I%<<\\hh r1   c                     U(       aL  US:X  a   U R                   R                  R                  $ US:X  a   U R                   R                  R                  $ g)z*Constructs the scheduling type enum value.GROUPEDINDEPENDENTN)r   SchedulingTypeValueValuesEnumr   r   )r&   r   s     r/   r   r     sH    )#!!??GGG-'!!??KKK	r1   c                     U(       ar  US:X  a   U R                   R                  R                  $ US:X  a   U R                   R                  R                  $ US:X  a   U R                   R                  R                  $ g)z3Constructs the early access maintenance enum value.NO_EARLY_ACCESSWAVE1WAVE2N)r   %EarlyAccessMaintenanceValueValuesEnumr   r   r   )r&   r   s     r/   r   r     sm    #44



D
D
T
T  7*!!GGMMM7*!!GGMMM	r1   c                 t    [         R                  " U UUR                  UR                  S9R	                  5       $ )N)r   r%   )maintenance_utilParseResourcePolicyWithZoner   r%   r   )r)   r   r(   s      r/   r   r     s6    		5	5%%	

 HJr1   )rx   )NNNN)NNNNNN)__doc__googlecloudsdk.callioper   "googlecloudsdk.command_lib.computer   r8   r   r=   4googlecloudsdk.command_lib.compute.resource_policiesr   r   googlecloudsdk.core.utilr   r   r0   r   r   r   r   r}   r   r"   r   rs   rv   r!   r   r   r   r   r    r1   r/   <module>r      s    J / E E Y * 
7t	 F 1=6r1v !%'d # $!7t
"$$r1   