
    "                     \   d Z ddlmZ ddlmZ ddlmZ ddl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Zd Zej0                   ej2                  ej4                  j6                         G d dej8                                      Zej0                   ej2                  ej4                  j<                         G d de                    Zej0                   ej2                  ej4                  j@                         G d de                    Z!y)z0Command for creating Compute Engine commitments.    )absolute_import)division)unicode_literalsN)base_classes)request_helper)utils)apis)base)
exceptions)flags)reservation_helper)
propertieszQuota .COMMITMENTS. exceeded.+c                    t        j                  d      j                  |d       t        j                  |       t	        j
                  d|       }t        j                  |      j                  j                  |       y)zAdd common flags.Fcreate)operation_typecomputeN)	r   MakeCommitmentArgAddArgumentAddAutoRenewr	   GetMessagesModuleGetTypeMapperFlag
choice_argAddToParser)trackparsermessagess      )lib/surface/compute/commitments/create.py_CommonArgsr   &   s_    % ,,VH,MV##Iu5((#..::6B    c                   H    e Zd ZdZdZdZdZdZdZddiZ	e
d        Zd Zd Zy	)
Create"Create Compute Engine commitments.TFEXAMPLESa  
        To create a commitment called ``commitment-1'' in the ``us-central1''
        region, with a ``12-month'' plan, ``9GB'' of memory and 4 vcpu cores,
        run:

          $ {command} commitment-1 --plan=12-month --resources=memory=9GB,vcpu=4 --region=us-central1
      c                     t        d|       t        j                  || j                  | j                  | j
                  | j                  | j                         y )Nv1support_share_settingsupport_stable_fleetsupport_existing_reservation"support_reservation_sharing_policysupport_60_month_planr   r   AddCreateFlags_support_share_setting_support_stable_fleet_support_existing_reservation#_support_reservation_sharing_policy_support_60_month_planclsr   s     r   ArgszCreate.ArgsA   sJ    f	!88 66%(%F%F+.+R+R!88r   c                 ~   |j                   !|j                  t        j                  d      t	        j
                  |      }|j                  |j                        }	|j                  t        j                  |||      |j                         t	        j                  ||j                        t	        j                  ||      |	t	        j                  |      |j                   t	        j                   |j                        |	      }
t	        j"                  |      |
_        |j'                  |
||j(                        S Nz3It's not possible to merge and split in one request)	reservationsnameplan	resourcestype	autoRenewsplitSourceCommitmentmergeSourceCommitmentsexistingReservations)
commitmentprojectregionsplit_source_commitmentmerge_source_commitmentsr   ConflictingArgumentsExceptionr   r   GetEnumForChoicer<   
Commitmentr   MakeReservationsNameTranslatePlanArgr:   TranslateResourcesArgGroupTranslateAutoRenewArgForCreateTranslateMergeArgTranslateCustomEndTimeArgcustomEndTimestamp%ComputeRegionCommitmentsInsertRequestrC   selfargsr   rB   rC   commitment_refexisting_reservationsholdercommitment_type_flagcommitment_typerA   s              r   _MakeCreateRequestzCreate._MakeCreateRequestM   s'    	$$0))544
?  !228<*;;DIIFO$$'88(F
   "##Hdii8228TB66t<"::$66)) 
 3 % J %*$C$CD$IJ!99$$ :  r   c           	      \   t        j                  | j                               }|j                  }t	        j
                  d      j                  ||t        j                  |j                              }t	        j                  ||      }|j                  j                  }t        j                  j                  j                  j!                         }t        j                  j"                  j$                  j!                         }| j'                  |||||||      }	|j                  j(                  j*                  }
|j                  j,                  }|j                  j(                  j.                  }g }t1        t3        j4                  |
d|	fg|||            }t7        |      D ]n  \  }}t9        |d   d      r-t;        |d   j<                  t>              r|d   j<                  }n|d   }tA        jB                  tD        |      sb|d   |dz   f||<   p |rtG        jH                  |       |S )	NF)scope_listerInsert)requestshttp	batch_urlerrors   messager   z~ You can request commitments quota on https://cloud.google.com/compute/docs/instances/signing-up-committed-use-discounts#quota)%r   ComputeApiHolderReleaseTrackr;   r   r   ResolveAsResourcecompute_flagsGetDefaultScopeListerclientResolveExistingReservationArgsr   r   VALUESr   rC   GetcorerB   r[   apitools_clientregionCommitmentsra   r`   listr   MakeRequests	enumeratehasattr
isinstancerd   strrematch _MISSING_COMMITMENTS_QUOTA_REGEXr   RaiseToolException)rT   rU   rX   r;   rV   rW   r   rC   rB   create_requestservicera   r`   rb   resultierrorerr_msgs                     r   Runz
Create.Runx   s   **4+<+<+>?F  I,,U3EE"88G F N
 "@@i }}%%H&&--113F$$,,002G,,N mm++==G''I==((--DF##.9:		
F f%5	q9	%*U1X5E5Es*K(""(	2G	<!H;
q	 &" v&Mr   N)__name__
__module____qualname____doc__r.   r/   r0   r1   r2   detailed_helpclassmethodr5   r[   r    r   r   r!   r!   .   sS     +"&(-%   
 - 	 	)V7r   r!   c                   4    e Zd ZdZdZdZdZdZdZe	d        Z
y)
CreateBetar"   TFc                     t        d|       t        j                  || j                  | j                  | j
                  | j                  | j                         y )Nbetar&   r,   r3   s     r   r5   zCreateBeta.Args   sJ    	!88 66%(%F%F+.+R+R!88r   N)r   r   r   r   r.   r/   r0   r1   r2   r   r5   r   r   r   r   r      s7     +"&(,% 	 	r   r   c                   :    e Zd ZdZdZdZdZdZdZe	d        Z
d Zy)CreateAlphar"   Tc                     t        d|       t        j                  || j                  | j                  | j
                  | j                  | j                         y )Nalphar&   r,   r3   s     r   r5   zCreateAlpha.Args   sJ     	!88 66%(%F%F+.+R+R!88r   c                 ~   |j                   !|j                  t        j                  d      t	        j
                  |      }|j                  |j                        }	|j                  t        j                  |||      |j                         t	        j                  ||j                        t	        j                  ||      |	t	        j                  |      |j                   t	        j                   |j                        |	      }
t	        j"                  |      |
_        |j'                  |
||j(                        S r7   rD   rS   s              r   r[   zCreateAlpha._MakeCreateRequest   s'    	$$0))544
?  !228<*;;DIIFO$$'88(F
   "##Hdii8228TB66t<"::$66)) 
 3 % J  %*$C$CD$IJ!99$$ :  r   N)r   r   r   r   r.   r/   r0   r1   r2   r   r5   r[   r   r   r   r   r      s<     +"&(,%	 	*r   r   )"r   
__future__r   r   r   rw   googlecloudsdk.api_lib.computer   r   r   googlecloudsdk.api_lib.utilr	   googlecloudsdk.callioper
   r   "googlecloudsdk.command_lib.computer   rh   .googlecloudsdk.command_lib.compute.commitmentsr   googlecloudsdk.corer   ry   r   UniverseCompatibleReleaseTracksrf   GACommandr!   BETAr   ALPHAr   r   r   r   <module>r      s   7 &  ' 	 7 9 0 , ( . E @ M * $E  C D%%(()T\\  * D D%%**+  , , D%%++,?* ? - ?r   