
    /                     0   S r SSKrSSK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S.r " S S5      r\R$                  \R&                  " \R(                  R*                  5       " S S\R,                  5      5       5       rg)z<Command to get capacity advice for Compute Engine resources.    N)base_classes)utils)arg_parsers)base)
exceptions)
completers)flags)
propertiesa  
      Get capacity advice for Compute Engine resources.

      This command helps you view future resource availability for a specific
      number of VM instances, machine type, provisioning model, and zone. After
      you confirm resource availability, you can specify those configurations
      when you create VM instances. This action improves the success rate of
      your VM instance creation request.
    aq  
      To check the availability of 100 `n2-standard-32` Spot VMs in any single
      zone in the `us-central1` region, run the following command:

        $ {command}             --region="us-central1"             --provisioning-model="SPOT"             --size=100             --instance-selection-machine-types="n2-standard-32"             --target-distribution-shape="any-single-zone"

      To check the availability of 50 Spot VMs, allowing either `e2-standard-8`
      or `e2-standard-16` machine types, distributed across `us-central1-a` and
      `us-central1-b`, run the following command:

        $ {command}             --region="us-central1"             --provisioning-model="SPOT"             --size=50             --instance-selection="name=my-selection,machine-type=e2-standard-8,machine-type=e2-standard-16"             --target-distribution-shape="any"             --zones="us-central1-a,us-central1-b"

      To check the availability of 10 `ct5lp-hightpu-4t` Flex-start VMs that
      will run for 1 day in any single zone in the `us-central1` region, run the
      following command:

        $ {command}             --region="us-central1"             --provisioning-model="FLEX_START"             --max-run-duration=1d             --size=10             --instance-selection-machine-types="ct5lp-hightpu-4t"             --target-distribution-shape="any-single-zone"
      )DESCRIPTIONEXAMPLESc                   $    \ rS rSrSrS rS rSrg)ArgMultiValueDictN   zConverts argument values into multi-valued mappings.

Values for repeated keys are collected in a list. Ensures all values are
key-value pairs and handles invalid cases.
c                 z    SnSR                  US9n[        R                  " U[        R                  5      U l        g )N=z([^\s{ops}]+)\s*{ops}\s*(.*))ops)formatrecompileDOTALL_key_op_value)selfr   key_op_value_patterns      &lib/surface/compute/advice/capacity.py__init__ArgMultiValueDict.__init__U   s3    
C:AAcAJ$8"))DD    c                    UR                  S5       Vs/ s H  o"R                  5       PM     nn[        R                  " 5       nU GH2  nSU;  a%  [        R
                  " SR                  U5      5      eU R                  R                  U5      nU(       d%  [        R
                  " SR                  U5      5      eUR                  S5      R                  5       UR                  S5      R                  5       pU(       a  U(       d%  [        R
                  " SR                  U5      5      eSU;   a%  [        R
                  " SR                  U5      5      eUR                  U/ 5      R                  U5        GM5     U$ s  snf )N,r   zInvalid flag value [{0}]      )splitstripcollectionsOrderedDictr   ArgumentTypeErrorr   r   matchgroup
setdefaultappend)	r   	arg_valueitemarg_listarg_dictargr'   keyvalues	            r   __call__ArgMultiValueDict.__call__Z   sE   )2)=>)=

)=H>&&(H	C++&--c2
 	
   &&s+e++&--c2
 	
 ;;q>'')5;;q>+?+?+A5++&--c2
 	
 
++&--c2
 	
 #r"))%0+ . O3 ?s   E?)r   N)__name__
__module____qualname____firstlineno____doc__r   r2   __static_attributes__ r   r   r   r   N   s    E
r   r   c                   J    \ rS rSrSr\r\R                  r	\
S 5       rS rSrg)Capacityw   z1Get capacity advice for Compute Engine resources.c           	         [         R                  " U 5        [         R                  " U 5        [         R                  " U 5        U R	                  S[
        SSS9  U R                  SSS9nUR	                  S[        R                  " 5       SS	S
S9  UR	                  SSS[        5       S
S9  [         R                  " U 5        U R	                  S[        R                  " 5       [        R                  SSSS9  g)z!Registers flags for this command.z--sizeTz>The total number of VMs being requested in the capacity query.)typerequiredhelpz=Specifies the machine types for which advice is being sought.)r@   rA   "--instance-selection-machine-typesMACHINE_TYPEzZSpecifies a comma-separated list of preferred machine types for creating virtual machines.r*   )r?   metavarrA   action--instance-selectionzNamed selection of machine types. For example, --instance-selection="name=instance-selection-1,machine-type=e2-standard-8,machine-type=t2d-standard-8".INSTANCE_SELECTION)rA   rD   r?   rE   z--zonesZONEFzA comma-separated list of zones to query within the specified region, for example, `us-central1-a,us-central1-b`. If you omit this flag, then you view availability for your requested capacity across all zones in the region.)r?   	completerrD   r@   rA   N)r	   AddRegionFlagAddProvisioningModelFlagAddMaxRunDurationFlagadd_argumentint	add_groupr   ArgListr   AddTargetDistributionShapeFlagr   ZonesCompleter)parserinstance_selection_groups     r   ArgsCapacity.Args   s    
	""6*	'
M	    &//L  0   )),  "% *  ))C %  *  
((0
  "++/  r   c                 
   [         R                  " U R                  5       5      nUR                  nUR                  n[
        R                  " XR                  5        UR                  S5      (       a,  UR                  S5      (       a  [        R                  " S5      eUR                  (       a0  [        UR                  5      S:  a  [        R                  " SS5      eUR                  (       a0  [        UR                  5      S:  a  [        R                  " SS5      eUR                  (       a@  UR                   H0  nUR                  S	5      (       a  M  [        R                  " SS
5      e   [         R"                  R$                  R&                  R)                  5       nUR*                  nU(       d4  UR,                  (       a#  [.        R0                  " UR,                  S   5      nU=(       d2    [         R"                  R2                  R*                  R5                  5       nU(       d  [        R6                  " SS5      eUR9                  UR8                  R;                  UR<                  5      S9nUR<                  S:X  a-  UR                  S5      (       d  [        R6                  " SS5      eUR                  S5      (       a  UR>                   S3Ul         URC                  US9n	Sn
UR                  S5      (       a%  URD                  RG                  URH                  5      n
SnUR,                  (       a^  / nUR,                   HL  nUR                  RK                  USU0SS9nURM                  URO                  URQ                  5       S95        MN     URE                  U
S9nU(       a  Xl        0 nUR                  (       a  [S        UR                  5       H  u  nnUR                  S5      nU(       a  US   OSRU                  US-   5      nUU;   a&  [        R                  " SSRU                  U5      5      eURW                  UR                  S	5      S9UU'   M     UR                  (       aE  [S        UR                  5       H,  u  nnSRU                  US-   5      nURW                  US9UU'   M.     / nURY                  5        H9  u  nnURM                  URZ                  R\                  R_                  UUS 95        M;     URZ                  R]                  US!9nUR[                  US"9nURa                  UUU	URb                  S#9nURe                  UUUS$9nURf                  Rh                  Rk                  U5      $ )%z!Runs the capacity advice command.instance_selection instance_selection_machine_typesz3Exactly one 'instance-selection' must be specified.r    rF   zbMultiple instance selections are not supported. Please provide only one --instance-selection flag.rB   zpMultiple instance selections are not supported. Please provide only one --instance-selection-machine-types flag.zmachine-typezPAt least one 'machine-type' must be specified in each --instance-selection flag.r   z--regionz*The [compute/region] property must be set.)provisioningModel
FLEX_STARTmax_run_durationz--max_run_durationzRThe --max-run-duration flag is required when the provisioning model is FLEX_START.s)
schedulingNtarget_distribution_shapeprojectzcompute.zones)params
collection)zone)targetShapenamezinstance-selection-{}z1Duplicate instance selection name [{}] specified.)machineTypes)r0   r1   )additionalProperties)instanceSelections)distributionPolicyinstanceFlexibilityPolicyinstancePropertiessize)r`   regioncapacityAdviceRequest)6r   ComputeApiHolderReleaseTrackclientmessagesr	   ValidateZonesAndRegionFlags	resourcesIsSpecifiedr   ConflictingArgumentsExceptionrX   lenInvalidArgumentExceptionrY   getr
   VALUEScorer`   	GetOrFailrm   zonesr   ZoneNameToRegionNamecomputeGetRequiredArgumentException1CapacityAdviceRequestInstancePropertiesScheduling ProvisioningModelValueValuesEnumprovisioning_modelr\   maxRunDuration'CapacityAdviceRequestInstanceProperties'CapacityAdviceRequestDistributionPolicyTargetShapeValueValuesEnumr_   Parser*   8CapacityAdviceRequestDistributionPolicyZoneConfigurationSelfLink	enumerater   ?CapacityAdviceRequestInstanceFlexibilityPolicyInstanceSelectionitems.CapacityAdviceRequestInstanceFlexibilityPolicyInstanceSelectionsValueAdditionalPropertyCapacityAdviceRequestrl   ComputeAdviceCapacityRequestapitools_clientadvicer<   )r   argsholderrq   rr   	selectionr`   rm   r^   instance_propertiestarget_shapezone_configsrc   zone_refdistribution_policyselections_mapiselection_name_listselection_namemachine_types_listadditional_propertiesr0   r1   instance_selections_valueinstance_flexibility_policyinner_requestouter_requests                              r   RunCapacity.Run   so   **4+<+<+>?F]]FH	%%d,<,<=,--$2B2B*3 3 44
?  3t'>'>#?!#C//
 ,  	--556://
.:  ..)}}^,,33$,  / $$,,668G[[Fdjj ))$**Q-8f=z((0077;;=F00
BD D KK"TTuu##
 L J ,.t7G7G8 8 00
  *++%)%:%:$;1"=j"JJ K  L344

:
:
U
U,,.  Lzzl**$##))w'& * ( 	MM&&( N *	+  #JJ  K "".N#D$;$;<,!Y'mmF3 #  "(//A6 	
 ^+33$AHH   TT&]]>: U  	~& =& ,,#,

/
/$
! 177A>TT/ U  	~&	$ $**,
U""

A
A
Y
Y
l
lU m $ - 	??WW!6 	X 	
  	??8 	@ 	
   22."=.YY	 3 M 99+ : M !!((11-@@r   r:   N)r4   r5   r6   r7   r8   DETAILED_HELPdetailed_helpr   COMPUTE_CATEGORYcategorystaticmethodrU   r   r9   r:   r   r   r<   r<   w   s1     :-""(/ /b^Ar   r<   )r8   r$   r   googlecloudsdk.api_lib.computer   r   googlecloudsdk.callioper   r   r   "googlecloudsdk.command_lib.computer   )googlecloudsdk.command_lib.compute.advicer	   googlecloudsdk.corer
   r   r   DefaultUniverseOnlyReleaseTracksrp   ALPHACommandr<   r:   r   r   <module>r      s    C  	 7 0 / ( . 9 ; *"
-`& &R D%%++,VAt|| VA - VAr   