
    <                         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 Z	 	 	 dd
Z	 ddZd Zd Zd Zd Zd Zd Zd Zd Zd Zd Z	 	 	 	 	 	 	 	 	 	 	 	 ddZy	)zJCommon utility functions to consturct compute future reservations message.    )absolute_import)division)unicode_literals)
exceptions)util)timesc                 :   t        j                  | t        |dd            }t        j                  | t        |dd            }t	        | |j
                  |j                  ||t        |dd      t        |dd      t        |dd            }t        |dd      rt        j                  ||      nd}t        | ||j                  |      }t        | t        |dd      t        |d	d      t        |d
d            }	t        | |j                  t        |dd      t        |dd            }
t        | |t        |dd            }t        | t        |dd            }d}|j                  d      rt        |d      }d}|j                  d      rt        |d      }d}|j                  d      rt        |d      }t        |dd      }t        |dd      }d}|j!                  d      rt#        | t        |dd            }t%        | |      }d}|j!                  d      rt'        | t        |dd            }d}|j!                  d      rt)        | t        |dd            }d}|j!                  d      rt        |dd      }t+        | |j-                         |
|||	|||||||||||      S )z9Construct future reservation message from args passed in.	local_ssdNacceleratorlocation_hintmaintenance_freeze_durationmaintenance_intervalsource_instance_templatetpu_version
chip_countworkload_typeend_timedurationshare_settingplanning_status%auto_delete_auto_created_reservations%auto_created_reservations_delete_time"auto_created_reservations_durationrequire_specific_reservationreservation_namedeployment_typescheduling_typereservation_modeenable_emergent_maintenance)reservation_utilMakeLocalSsdsgetattrMakeGuestAcceleratorsMakeAllocatedInstancePropertiesmachine_typemin_cpu_platformResolveSourceInstanceTemplate MakeSpecificSKUPropertiesMessagetotal_count)MakeAggregateReservationPropertiesMessageMakeTimeWindowMessage
start_timeMakeShareSettingsMakePlanningStatusIsSpecifiedIsKnownAndSpecifiedMakeDeploymentTypeMakeCommitmentInfoMakeSchedulingTypeMakeReservationModeMakeFutureReservationMessageName)messages	resourcesargsfuture_reservation_ref
local_ssdsacceleratorsallocated_instance_propertiessource_instance_template_refsku_properties aggregate_reservation_propertiestime_windowshare_settingsr   enable_auto_delete_reservationsr   r   r   r   r   commitment_infor   r   r   s                          Blib/googlecloudsdk/command_lib/compute/future_reservations/util.py$MakeFutureReservationMessageFromArgsrF      s     --h.5dK.NP*!77mT24, #B

dOT*d148d*D1	# 
14	8 44T9E  4#
"	. &OdM4(dL$'dOT*	&" &h&-dJ&E&-dJ&EG+ %Xt%,T?D%IK.&x'.t5F'MO/ %)!	=>&-5'# +/'	=>,35-) (,$	:;)02*& ")
*D" T#5t</	/0()07H$)OQO 'x6//	/0('$ 148O 	01*'$ 2D9 !%	;<")+T# 
&!!#&%+("!#
     Nc                     |y| j                   } |||||      }	|r||	_        |r
|dz  |	_        |r | j                   j                  |      |	_        |	S )zBConstructs an instance propteries for reservations message object.N)machineTypeguestAcceleratorsminCpuPlatform	localSsdsi  )9AllocationSpecificSKUAllocationReservedInstancePropertieslocationHintmaintenanceFreezeDurationHours"MaintenanceIntervalValueValuesEnummaintenanceInterval)
r7   r%   r&   r;   r<   r   freeze_durationfreeze_interval	prop_msgsinstance_propertiess
             rE   r$   r$      sz      HH !$%	
 '4$9HD9P6JJ	+	+O	< + 
rG   c                 f    ||yd}d}|r|j                         }n|}| j                  |||      S )zHConstructs a specific sku properties message object if any is specified.N)
totalCountsourceInstanceTemplateinstanceProperties)SelfLink&FutureReservationSpecificSKUProperties)r7   rU   r)   r>   
propertiessource_instance_template_urls         rE   r(   r(      sV      %A%I*!%!#?#H#H#J $J		8	89# 
9 
% %rG   c                    |sy| j                   j                  j                  | j                   j                  j                  | j                   j                  j                  d}g }| j                  |      }|j                  | j                  |             | j                  | j                   j                  ||         |      }|r | j                   j                  |      |_	        |S )z>Constructs an aggregate reservation properties message object.N)V5EV5PV6E)acceleratorCount)r   )vmFamilyreservedResources)
AllocationAggregateReservationVmFamilyValueValuesEnum(VM_FAMILY_CLOUD_TPU_LITE_POD_SLICE_CT5LP"VM_FAMILY_CLOUD_TPU_POD_SLICE_CT5P'VM_FAMILY_CLOUD_TPU_LITE_POD_SLICE_CT6E=AllocationAggregateReservationReservedResourceInfoAcceleratorappend2AllocationAggregateReservationReservedResourceInfoWorkloadTypeValueValuesEnumworkloadType)r7   r   r   r   tpu_version_to_vm_familyreserved_resourcesr   r@   s           rE   r*   r*      s    

 
1
1
I
I
r
r 
1
1
I
I
l
l 
1
1
I
I
q
q
 LL% M  
 AA! B 
 &.%L%L66NN
";
/ +	 &M &" //KK	
 %1
 
*)rG   c                 r    |r| j                  ||      S | j                  || j                  |            S )z*Constructs the time window message object.)	startTimeendTimeseconds)rr   r   )FutureReservationTimeWindowDuration)r7   r,   r   r   s       rE   r+   r+      sQ    //h 0 0 0 //x'8'8'8'J 0 L LrG   c                    |r|dk(  rW|j                  d      rt        j                  dd      | j                  | j                  j                  j
                        S |dk(  rc|j                  d      st        j                  dd      | j                  | j                  j                  j                  t        |dd      	      S yy)
z-Constructs the share settings message object.local
share_withz--share_withz_The scope this reservation is to be shared with must not be specified with share setting local.)	shareTypeprojectszEThe projects this reservation is to be shared with must be specified.N)r{   r|   )r/   r   InvalidArgumentExceptionShareSettingsShareTypeValueValuesEnumLOCALSPECIFIC_PROJECTSr"   )r7   r9   setting_configss      rE   r-   r-      s    '!			,	'1123 	3 ##h.D.D%=%=ee $ E E*$l+11 	 ##**CC4t4 $ 6 6 % rG   c                     |rJ|dk(  r | j                   j                  j                  S |dk(  r | j                   j                  j                  S y)z*Constructs the planning status enum value.	SUBMITTEDDRAFTN)FutureReservationPlanningStatusValueValuesEnumr   r   )r7   r   s     rE   r.   r.     sH    +%''EEOOO'!''EEKKK	rG   c                     |rJ|dk(  r | j                   j                  j                  S |dk(  r | j                   j                  j                  S y)z*Constructs the deployment type enum value.DENSEFLEXIBLEN)r   DeploymentTypeValueValuesEnumr   r   )r7   r   s     rE   r1   r1     sH    '!''EEKKK*$''EENNN	rG   c                 
   t        |dd      }d}|j                  d      rt        | t        |dd            }d}|j                  d      rt        | t        |dd            }t	        |||g      r| j                  |||      S y)z.Constructs the commitment info message object.commitment_nameNcommitment_planprevious_commitment_terms)commitmentNamecommitmentPlanpreviousCommitmentTerms)r"   r0   MakeCommitmentPlanMakePreviousCommitmentTermsanyFutureReservationCommitmentInfo)r7   r9   r   r   r   s        rE   r2   r2   '  s    D"3T://	/0()07H$)OQO"	9: ;'$ ;TB! 	/?,E	FG33&& 9 4  
 
rG   c                     |rJ|dk(  r | j                   j                  j                  S |dk(  r | j                   j                  j                  S y)z*Constructs the commitment plan enum value.TWELVE_MONTHTHIRTY_SIX_MONTHN)r   CommitmentPlanValueValuesEnumr   r   )r7   r   s     rE   r   r   =  sL    .(66TTl,,66TT!	rG   c                 R    |r%|dk(  r | j                   j                  j                  S y)z4Constructs the previous commitment terms enum value.EXTENDN)r   &PreviousCommitmentTermsValueValuesEnumr   )r7   r   s     rE   r   r   I  s)     H,66]]v	rG   c                     |rJ|dk(  r | j                   j                  j                  S |dk(  r | j                   j                  j                  S y)z*Constructs the scheduling type enum value.GROUPEDINDEPENDENTN)r   SchedulingTypeValueValuesEnumr   r   )r7   r   s     rE   r3   r3   R  sI    )#''EEMMM-'((FF{	rG   c                     |rJ|dk(  r | j                   j                  j                  S |dk(  r | j                   j                  j                  S y)z+Constructs the reservation mode enum value.CALENDARDEFAULTN)r   ReservationModeValueValuesEnumr   r   )r7   r   s     rE   r4   r4   ]  sH    :%''FFOOO9$''FFNNN	rG   c                 ^   | j                  |||      }|r||_        |r||_        |r||_        |||_        |t        j                  |      |_        |	| j                  |	      |_	        |
|
|_
        |||_        |||_        |||_        |||_        |||_        |||_        |S )z/Constructs a future reservation message object.)name
timeWindowplanningStatusrt   )r   aggregateReservationspecificSkuPropertiesshareSettings!autoDeleteAutoCreatedReservationsr   FormatDateTime!autoCreatedReservationsDeleteTimerw   autoCreatedReservationsDurationspecificReservationRequiredreservationNamedeploymentTypecommitmentInfoschedulingTypereservationModeenableEmergentMaintenance)r7   future_reservation_namerA   rB   r   r@   r?   rC   r   r   r   r   r   rD   r   r   r   future_reservation_messages                     rE   r5   r5   g  s   (  (99"$  :   &( 3 7E4/=,$0' @ +6BC @ (3"DE > "-$ : !1A. 0?- 0?- 0?-!1A. ,# 8 
$#rG   )NNN)N)NNNNNNNNNNNN)__doc__
__future__r   r   r   googlecloudsdk.callioper   /googlecloudsdk.command_lib.compute.reservationsr   r    googlecloudsdk.core.utilr   rF   r$   r(   r*   r+   r-   r.   r1   r2   r   r   r3   r4   r5    rG   rE   <module>r      s    Q &  ' . T *pp 374848D "&	%,,*^L2,	  &*$(*.'+!% $#E$rG   