
    %                        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lmZ  e
j$                  e
j&                  j(                        e
j*                   G d de
j,                                      Z e
j$                  e
j&                  j0                         G d de             Zy)z/Command for compute future reservations update.    )absolute_import)division)unicode_literals)base_classes)request_helper)utils)base)
exceptions)flags)utilc                   8    e Zd ZdZdZddiZed        Zd Zd Z	y)
UpdateBeta*Update Compute Engine future reservations.NEXAMPLES   
        To update total count, start and end time of a Compute Engine future reservation in ``us-central1-a'', run:

            $ {command} my-future-reservation --total-count=1000 --start-time=2021-11-10T07:00:00Z
          --end-time=2021-12-10T07:00:00Z --zone=us-central1-a
        c                     t        j                  ddddt         j                        | _        | j                  j	                  |d       t        j                  |ddddddddd	
       y 
Nzfuture reservationFFUTURE_RESERVATIONzcompute.futureReservations)resource_namepluralnamezonal_collectionzone_explanationupdate)operation_typeT)	support_fleetsupport_planning_statussupport_local_ssd_countsupport_share_settingsupport_auto_delete$support_require_specific_reservationsupport_gscsupport_cudssupport_emergent_maintenancecompute_flagsResourceArgumentZONE_PROPERTY_EXPLANATIONfr_argAddArgumentfr_flagsAddUpdateFlagsclsparsers     1lib/surface/compute/future_reservations/update.pyArgszUpdateBeta.Args0   sn    //*!5&@@CJ JJ6(; $ $" -1%)    c                 <    |sg d}t        j                  |d      y)zyValidates that at least one field to update is specified.

    Args:
      update_mask: The arguments being updated.
    )z--planning-statusz--descriptionz--name-prefixz--total-countz--min-cpu-platformz--local-ssdz--clear-local-ssdz--acceleratorz--clear-acceleratorz--maintenance-intervalz--start-timez
--end-timez
--durationz--machine-typez--share-settingz--share-withz--clear-share-settingsz'--auto-delete-auto-created-reservationsz*--no-auto-delete-auto-created-reservationsz'--auto-created-reservations-delete-timez$--auto-created-reservations-durationz--require-specific-reservationz!--no-require-specific-reservationz--reservation-namez--deployment-typez--commitment-namez--commitment-planz--previous-commitment-termsz--scheduling-typez--enable-emergent-maintenancez --no-enable-emergent-maintenancez.Please specify at least one property to updateN)r
   MinimumArgumentException)selfupdate_maskparameter_namess      r0   _ValidateArgszUpdateBeta._ValidateArgsH   s0      oB //
K E r2   c                 t
   t        j                  | j                               }|j                  }|j                  }| j
                  j                  ||t        j                  |            }|j                  j                  }|j                  j                  j                  }g }|j                  d      r|j                  d       |j                  d      r|j                  d       |j                  d      s|j                  d      r|j                  d       |j                  d	      r|j                  d	       |j                  d
      r|j                  d       |j                  d      r|j                  d       |j                  d      s|j                  d      r|j                  d       |j                  d      s|j                  d      r|j                  d       t        |d      r"|j                  d      r|j                  d       |j                  d      r|j                  d       |j                  d      r|j                  d       |j                  d      r|j                  d       |j                  d      s"|j                  d      s|j                  d      r|j                  d       |j                  d       r|j                  d!       |j                  d"      r|j                  d#       |j                  d$      r|j                  d%       |j                  d&      r|j                  d'       |j                  d(      r|j                  d)       |j                  d*      r|j                  d+       |j                  d,      r|j                  d-       |j                  d.      r|j                  d/       |j                  d0      r|j                  d1       t!        |d2d       }	|	|j                  d3       |j                  d4      r|j                  d5       | j#                  |6       t%        j&                  ||||      }
|j(                  |
_        |j*                  |
_        |j/                  |j1                         |
|j2                  d7j5                  |      |j6                  8      }g }t9        t;        j<                  |d9|fg|j                  j                  j>                  |j                  j@                  |:            }|rtC        jD                  |       |S );N)scope_listerplanning_statusplanningStatustotal_countz specificSkuProperties.totalCountname_prefixclear_name_prefix
namePrefixdescriptionmin_cpu_platformz7specificSkuProperties.instanceProperties.minCpuPlatformmachine_typez4specificSkuProperties.instanceProperties.machineTypeacceleratorclear_acceleratorz9specificSkuProperties.instanceProperties.guestAccelerator	local_ssdclear_local_ssdz1specificSkuProperties.instanceProperties.localSsdmaintenance_intervalz;specificSkuProperties.intanceProperties.maintenanceInterval
start_timeztimeWindow.startTimeend_timeztimeWindow.endTimedurationztimeWindow.durationclear_share_settingsshare_setting
share_withshareSettings%auto_delete_auto_created_reservations!autoDeleteAutoCreatedReservations%auto_created_reservations_delete_time!autoCreatedReservationsDeleteTime"auto_created_reservations_durationautoCreatedReservationsDurationreservation_namereservationNamedeployment_typedeploymentTypecommitment_namezcommitmentInfo.commitmentNamecommitment_planzcommitmentInfo.commitmentPlanprevious_commitment_termsz&commitmentInfo.previousCommitmentTermsscheduling_typeschedulingTyperequire_specific_reservationspecificReservationRequiredenable_emergent_maintenanceenableEmergentMaintenance)r6   ,)futureReservationfutureReservationResourceproject
updateMaskzoneUpdate)requestshttp	batch_urlerrors)#r   ComputeApiHolderReleaseTrackclient	resourcesr)   ResolveAsResourcer&   GetDefaultScopeListermessagesapitools_clientfutureReservationsIsSpecifiedappendhasattrIsKnownAndSpecifiedgetattrr8   r   $MakeFutureReservationMessageFromArgsrA   r>   r@   &ComputeFutureReservationsUpdateRequestNamerf   joinrh   listr   MakeRequestsrk   rl   r   RaiseToolException)r5   argsholderrp   rq   fr_refrt   servicer6   r_   fr_resourcefr_update_requestrm   results                 r0   RunzUpdateBeta.Runu   s   **4+<+<+>?F]]F  I[[**"88@ + BF
 }}%%Hmm++>>G K)*)*&;<&$*:*:;N*O&&'*+
C 'OP&$*:*:;N*O
E $(8(89J(KLMt+,1A1A2 
G %/0
#-.
#./ 	/0O,L))?@<=?@<=<=:; 23*+ 12)* 1289 1289 ;<AB 12)*#*,d$  $/67 =>45;/;;)T6K #..K!--K !GG ++-"-88K([[ H  F##*;<=..33mm--		F v&Mr2   )
__name__
__module____qualname____doc__r)   detailed_helpclassmethodr1   r8   r    r2   r0   r   r      s=     3& -  .+Znr2   r   c                   ,    e Zd ZdZdZddiZed        Zy)UpdateAlphar   Nr   r   c                     t        j                  ddddt         j                        | _        | j                  j	                  |d       t        j                  |ddddddddd	
       y r   r%   r-   s     r0   r1   zUpdateAlpha.Args   sn    //*!5&@@CJ JJ6(; $ $" -1%)r2   )r   r   r   r   r)   r   r   r1   r   r2   r0   r   r      s-    2&   -  r2   r   N)r   
__future__r   r   r   googlecloudsdk.api_lib.computer   r   r   googlecloudsdk.callioper	   r
   "googlecloudsdk.command_lib.computer   r&   6googlecloudsdk.command_lib.compute.future_reservationsr+   r   ReleaseTracksro   BETADefaultUniverseOnlyUpdateCommandr   ALPHAr   r   r2   r0   <module>r      s    6 &  ' 7 9 0 ( . E T G D%%**+B## B  ,BJ D%%++,"* " -"r2   