
    jH                         S r SSKJr  SSKJr  SSKJ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KJr  SSKJr  Sr " S S5      r " S S5      rg)z+Functions to add flags in rollout commands.    )absolute_import)division)unicode_literalsN)Iterator)messages)util)arg_parsers)base)parser_arguments)parser_extensions)	resources)gkehub_v1alpha_messagesz8projects/([^/]+)/platforms/gke/policies/([a-zA-Z0-9_-]+)c                      \ rS rSrSr\R                  R                  4S\R                  S\R                  4S jjr
\S 5       r\S 5       rS rS	 rS
 rS rS rS rS rS\R                  4S jrS rS rS\R                  4S jrS\R                  4S jrS\R                  4S jrS\R                  4S jrS\R                  4S jrS\R                  4S jrS\R                  4S jrS\R                  4S jrS\R                  4S jr S\R                  4S  jr!S!\R                  4S" jr"S!\R                  4S# jr#S$r$g%)&RolloutFlags)   z/Add flags to the fleet rollout command surface.parserrelease_trackc                     Xl         X l        g N_parser_release_track)selfr   r   s      @lib/googlecloudsdk/command_lib/container/fleet/rollouts/flags.py__init__RolloutFlags.__init__,   s    
 L'    c                     U R                   $ r   )r   r   s    r   r   RolloutFlags.parser4   s    <<r   c                     U R                   $ r   )r   r   s    r   r   RolloutFlags.release_track8   s    r   c                 V    [         R                  R                  U R                  5        g r   )r
   
ASYNC_FLAGAddToParserr   r   s    r   AddAsyncRolloutFlags.AddAsync<   s    OO,r   c                 j    U R                   R                  S[        [        R                  " S5      S9  g )Nz--display-namez            Display name of the rollout to be created (optional). 4-30
            characters, alphanumeric and [ '"!-] only.
        typehelp)r   add_argumentstrtextwrapdedentr   s    r   AddDisplayNameRolloutFlags.AddDisplayName?   s0    KK__    r   c                 b    U R                   R                  SSS[        R                  " 5       S9  g )N--labelszLabels for the rollout.z	KEY=VALUE)r+   metavarr*   )r   r,   r	   ArgDictr   s    r   	AddLabelsRolloutFlags.AddLabelsI   s.    KK&  "	  r   c                     U R                   R                  S[        R                  R                  [
        R                  " S5      S9  g )N--start-timez            Start time (in the future) of the rollout.

            See $ gcloud topic datetimes for information on datetime formats.
        r)   )r   r,   r	   DatetimeParser.   r/   r   s    r   AddScheduledStartTime"RolloutFlags.AddScheduledStartTimeQ   s<    KK!!''__    r   c                     U R                   R                  S[        R                  " 5       [        R
                  " S5      S9  g )N--schedule-offsetz            Offset to shift the schedule by when resuming a paused rollout, e.g. `8h`, `7d12h`.

            See $ gcloud topic datetimes for information on duration formats.
        r)   )r   r,   r	   Durationr.   r/   r   s    r   AddScheduleOffsetRolloutFlags.AddScheduleOffset\   s9    KK!!#__    r   c                 b    U R                   R                  SS[        R                  " S5      S9  g )Nz--validate-only
store_truezS            Generate a new schedule without actually resuming the rollout.
        )actionr+   )r   r,   r.   r/   r   s    r   AddValidateOnlyRolloutFlags.AddValidateOnlyg   s0    KK__    r   c                 X    U R                   R                  SS9nU R                  U5        g )NzAConfigurations for the Rollout. Waves are assigned automatically.r+   )r   	add_group_AddSoakDurationr   managed_rollout_config_groups     r   AddManagedRolloutConfig$RolloutFlags.AddManagedRolloutConfigp   s0    #';;#8#8P $9 $  	67r   rM   c                 v    UR                  S[        R                  " S5      [        R                  " 5       SS9  g )N--soak-durationz          Soak time before starting the next wave. e.g. `4h`, `2d6h`.
          Soak duration is required for Rollouts.

          See $ gcloud topic datetimes for information on duration formats.Tr+   r*   required)r,   r.   r/   r	   r@   rL   s     r   rK   RolloutFlags._AddSoakDurationv   s>     !--__ O P
 !!# . 	r   c                 x    [         R                  " U R                  [        R                  U R
                     S9  g )N)r   api_version)fleet_resourcesAddRolloutResourceArgr   r   VERSION_MAPr   r   s    r   rX   "RolloutFlags.AddRolloutResourceArg   s+    )){{$$T%7%78r   c                 z    U R                   R                  SS9nU R                  U5        U R                  U5        g )Nz)Configuration for specific rollout types.rI   )r   add_mutually_exclusive_group_AddVersionUpgrade_AddFeatureUpdate)r   rollout_type_mutex_groups     r   AddRolloutTypeConfig!RolloutFlags.AddRolloutTypeConfig   s@    #{{GG7  H  
 	4534r   r_   c                 f    UR                  SS9nU R                  U5        U R                  U5        g )NzVersion upgrade rollout config.rI   )rJ   _AddVersionUpgradeType_AddTargetVersion)r   r_   version_upgrade_config_groups      r   r]   RolloutFlags._AddVersionUpgrade   s>     $<#E#E. $F $  	 <=78r   c                 f    UR                  SS9nU R                  U5        U R                  U5        g )Nz,Version upgrade type to use for the Rollout.rI   )r\   _AddControlPlaneUpgrade_AddConfigSyncUpgrade)r   r_    version_upgrade_type_mutex_groups      r   rc   #RolloutFlags._AddVersionUpgradeType   s?     	!==? 	> 	
 % 	  !AB?@r   re   c                 N    UR                  S[        R                  " S5      SS9  g )N--control-plane-upgradezA          Upgrade the control plane of the clusters in the fleet.rD   r+   rE   r,   r.   r/   r   re   s     r   rh   $RolloutFlags._AddControlPlaneUpgrade   s0     !--!__ E F	 . r   c                 N    UR                  S[        R                  " S5      SS9  g )N--config-sync-upgradez?          Upgrade the config sync of the clusters in the fleet.rD   rn   ro   rp   s     r   ri   "RolloutFlags._AddConfigSyncUpgrade   s0     !--__ C D	 . r   c                 X    UR                  S[        R                  " S5      [        SS9  g )N--target-versionz<          The version to upgrade clusters from the fleet to.TrR   )r,   r.   r/   r-   rp   s     r   rd   RolloutFlags._AddTargetVersion   s3     !--__ @ A . r   c                 f    UR                  SS9nU R                  U5        U R                  U5        g )Nz"Feature config to use for Rollout.rI   )r\   _AddSecurityPostureConfig_AddBinaryAuthorizationConfig)r   r_   feature_update_mutex_groups      r   r^   RolloutFlags._AddFeatureUpdate   s?     	!==5 	> 	
  	""#=>&&'ABr   r{   c                 f    UR                  SS9nU R                  U5        U R                  U5        g )NzSecurity posture config.rI   )rJ   _AddSecurityPostureMode%_AddWorkloadVulnerabilityScanningMode)r   r{   security_posture_config_groups      r   ry   &RolloutFlags._AddSecurityPostureConfig   s>     %?$H$H' %I %! 	  !>?../LMr   r   c                 T    UR                  SSS/S [        R                  " S5      S9  g )N--security-posturedisabledstandardz          To apply standard security posture to clusters in the fleet,

            $ {command} --security-posture=standard

          choicesdefaultr+   ro   r   r   s     r   r~   $RolloutFlags._AddSecurityPostureMode   s6     "..Z(__  	 / 
r   c                 T    UR                  S/ SQS [        R                  " S5      S9  g )N!--workload-vulnerability-scanningr   r   
enterprisez            To apply standard vulnerability scanning to clusters in the fleet,

              $ {command} --workload-vulnerability-scanning=standard

            r   ro   r   s     r   r   2RolloutFlags._AddWorkloadVulnerabilityScanningMode   s1     "..+6__  	 / 
r   c                 f    UR                  SS9nU R                  U5        U R                  U5        g )NzBinary Authorization config.rI   )rJ   _AddBinauthzEvaluationMode_AddBinauthzPolicyBindings)r   r{   !binary_authorization_config_groups      r   rz   *RolloutFlags._AddBinaryAuthorizationConfig   s?     )C(L(L+ )M )% 	##$EF##$EFr   r   c           	      X    UR                  SSS/S S [        R                  " S5      S9  g )N--binauthz-evaluation-moder   policy-bindingsc                 B    U R                  SS5      R                  5       $ )N_-)replacelower)xs    r   <lambda>9RolloutFlags._AddBinauthzEvaluationMode.<locals>.<lambda>  s    qyyc*002r   z          Configure binary authorization mode for clusters to onboard the fleet,

            $ {command} --binauthz-evaluation-mode=policy-bindings

          )r   r*   r   r+   ro   )r   r   s     r   r   'RolloutFlags._AddBinauthzEvaluationMode  s<     &22$./ 3__   3 r   c                     [         R                  " [        S5      nUR                  SS SS[        R
                  " S5      [         R                  " SU0S/SS9S	9  g )
NzsGKE policy resource names have the following format: `projects/{project_number}/platforms/gke/policies/{policy_id}`--binauthz-policy-bindingsappendzname=BINAUTHZ_POLICYz          The relative resource name of the Binary Authorization policy to audit
          and/or enforce. GKE policies have the following format:
          `projects/{project_number}/platforms/gke/policies/{policy_id}`.name   )specrequired_keys
max_length)r   rE   r4   r+   r*   )r	   RegexpValidator_BINAUTHZ_GKE_POLICY_REGEXr,   r.   r/   r5   )r   r   platform_policy_types      r   r   'RolloutFlags._AddBinauthzPolicyBindings  sw     '66"	I
 &22$&__ M N   , "(
 3 r   r   N)%__name__
__module____qualname____firstlineno____doc__r
   ReleaseTrackALPHAr   ArgumentInterceptorr   propertyr   r   r&   r0   r6   r<   rA   rF   rN   rK   rX   r`   r]   rc   rh   ri   rd   r^   ry   r~   r   rz   r   r   __static_attributes__ r   r   r   r   )   s   7
 *.):):)@)@(22( &&(    -		8*:*N*N59&6&J&J9
A&6&J&J
A*:*N*N*:*N*N	*:*N*N	
C&6&J&J
CN(8(L(LN+;+O+O+;+O+OG(8(L(LG)9)M)M&)9)M)Mr   r   c                   <   \ rS rSrSrS\R                  S\R                  4S jr	S\
R                  S\4S jrS\
R                  4S	 jrS\R                   4S
 jrS\4S jrS\R                   R&                  4S jrS\4S jrS\R,                  4S jrS\4S jrS\R2                  4S jrS\R2                  R6                  4S jrS\4S jrS\R<                  4S jrS\R@                  4S jr!S\R@                  RD                  4S jr#S\R@                  RH                  4S jr%S\RL                  4S jr'S\RL                  RP                  4S jr)S\*\RV                     4S jr,S\-R\                  4S jr/S\4S jr0S\4S jr1S\4S jr2S\4S jr3S\4S jr4S r5g!)"RolloutFlagParseri2  z1Parse flags during fleet rollout command runtime.argsr   c                 R    Xl         X l        [        R                  " U5      U l        g r   )r   r   r   GetMessagesModuler   )r   r   r   s      r   r   RolloutFlagParser.__init__5  s!     I&**=9DMr   messagereturnc                 (    U[        U5      " 5       :H  $ )zDetermines if a message is empty.

Args:
  message: A message to check the emptiness.

Returns:
  A bool indictating if the message is equivalent to a newly initialized
  empty message instance.
)r*   r   r   s     r   IsEmptyRolloutFlagParser.IsEmpty<  s     d7mo%%r   c                 4    U R                  U5      (       d  U$ g)z/Trim empty messages to avoid cluttered request.N)r   r   s     r   	TrimEmptyRolloutFlagParser.TrimEmptyH  s     <<  nr   c                 v   [         R                  " 5       n[        R                  " U R                  5      Ul        U R                  5       Ul        U R                  5       Ul	        U R                  5       Ul        U R                  5       Ul        U R                  5       Ul        U R!                  5       Ul        U$ r   )fleet_messagesRolloutr   RolloutNamer   r   _DisplayNamedisplayName_Labelslabels_ManagedRolloutConfigmanagedRolloutConfig_VersionUpgradeversionUpgrade_FeatureUpdatefeature_ScheduledStartTimescheduledStartTime)r   rollouts     r   r   RolloutFlagParser.RolloutO  s    $$&G##DII.GL++-G\\^GN#'#=#=#?G !113G))+GO!%!9!9!;GNr   c                 .    U R                   R                  $ r   )r   display_namer   s    r   r   RolloutFlagParser._DisplayNameZ  s    99!!!r   c                 ^   SU R                   R                  5       ;  a  gU R                   R                  n[        R                  R                  5       nUR                  5        HE  u  p4UR                  R                  [        R                  R
                  R                  X4S95        MG     U$ )zParses --labels.r3   N)keyvalue)
r   GetSpecifiedArgsr   r   r   LabelsValueitemsadditionalPropertiesr   AdditionalProperty)r   r   labels_valuer   r   s        r   r   RolloutFlagParser._Labels]  s    3355YYF!))557Llln
''..

 
 
,
,
?
? @  % r   c                     SU R                   R                  5       ;  a  gU R                   R                  R                  S5      $ )zParses --start-time.

Accepts ISO 8601 datetime format. To read more,
https://cloud.google.com/sdk/gcloud/reference/topic/

Returns:
  str, in ISO 8601 datetime format.
r9   Nz%Y-%m-%dT%H:%M:%SZ)r   r   
start_timestrftimer   s    r   r   %RolloutFlagParser._ScheduledStartTimel  s8     TYY779999(()=>>r   c                 x    [         R                  " 5       nU R                  5       Ul        U R	                  U5      $ r   )r   ManagedRolloutConfig_SoakDurationsoakDurationr   )r   managed_rollout_configs     r   r   'RolloutFlagParser._ManagedRolloutConfigy  s3    +@@B*.*<*<*>'>>011r   c                     SU R                   R                  5       ;  a  gSR                  U R                   R                  5      $ )zParses --soak-duration.

Accepts ISO 8601 durations format. To read more,
https://cloud.google.com/sdk/gcloud/reference/topic/

Returns:
  str, in standard duration format, in unit of seconds.
rQ   N{}s)r   r   formatsoak_durationr   s    r   r   RolloutFlagParser._SoakDuration~  s5     		 : : <<<<		//00r   c                     [         R                  " 5       nU R                  5       Ul        U R	                  5       Ul        U R                  U5      $ )z"Constructs message VersionUpgrade.)r   VersionUpgrade_VersionUpgradeTyper*   _VersionUpgradeDesiredVersiondesiredVersionr   )r   version_upgrades     r   r   !RolloutFlagParser._VersionUpgrade  sA    $335O335O%)%G%G%IO">>/**r   c                    [         R                  R                  nSU R                  R	                  5       ;   a)  SU R                  R	                  5       ;   a  [        S5      eSU R                  R	                  5       ;   a  UR                  $ SU R                  R	                  5       ;   a  UR                  $ UR                  $ )z9Parses --control-plane-upgrade and --config-sync-upgrade.rm   rs   zQ--control-plane-upgrade and --config-sync-upgrade cannot be set at the same time.)	r   r   TypeValueValuesEnumr   r   
ValueErrorTYPE_CONTROL_PLANETYPE_CONFIG_SYNCTYPE_UNSPECIFIED)r   	enum_types     r   r   %RolloutFlagParser._VersionUpgradeType  s     --AAI!TYY%?%?%AA#tyy'A'A'CC  !DII$>$>$@@)))$))"<"<">>'''%%%r   c                 l    SU R                   R                  5       ;  a  gU R                   R                  $ )zParses --target-version.rv   N)r   r   target_versionr   s    r   r   /RolloutFlagParser._VersionUpgradeDesiredVersion  s*    !;!;!==99###r   c                     [         R                  " 5       nU R                  5       Ul        U R	                  5       Ul        U R                  U5      $ )z!Constructs message FeatureUpdate.)r   FeatureUpdate_SecurityPostureConfigsecurityPostureConfig_BinaryAuthorzationConfigbinaryAuthorizationConfigr   )r   feature_updates     r   r    RolloutFlagParser._FeatureUpdate  sA    #113N+/+F+F+HN(/3/M/M/ON,>>.))r   c                     [         R                  " 5       nU R                  5       Ul        U R	                  5       Ul        U R                  U5      $ r   )r   SecurityPostureConfig_SecurityPostureModemode!_VulnerabilityModeValueValuesEnumvulnerabilityModer   )r   security_posture_configs     r   r	  (RolloutFlagParser._SecurityPostureConfig  sI    ,BBD#'#<#<#> ..0 - >>122r   c                     SU R                   R                  5       ;  a  g[        R                  R                  nUR
                  UR                  S.nX R                   R                     $ )zParses --security-posture.r   N)r   r   )r   r   r   r  ModeValueValuesEnumDISABLEDBASICsecurity_posturer   r  mappings      r   r  &RolloutFlagParser._SecurityPostureMode  sY     499#=#=#??44HHI&&OOG 99--..r   c                     SU R                   R                  5       ;  a  gU R                  R                  R                  nUR
                  UR                  UR                  S.nX R                   R                     $ )z)Parses --workload-vulnerability-scanning.r   Nr   )	r   r   r   r   VulnerabilityModeValueValuesEnumVULNERABILITY_DISABLEDVULNERABILITY_BASICVULNERABILITY_ENTERPRISEworkload_vulnerability_scanningr  s      r   r  3RolloutFlagParser._VulnerabilityModeValueValuesEnum  so     +$))2L2L2NN 	++LL  441188G
 99<<==r   c                     [         R                  " 5       nU R                  5       Ul        [	        U R                  5       5      Ul        U R                  U5      $ r   )r   BinaryAuthorizationConfig_EvaluationModeevaluationModelist_PolicyBindingspolicyBindingsr   )r   binary_authorization_configs     r   r  +RolloutFlagParser._BinaryAuthorzationConfig  sL     #1"J"J"L151E1E1G.15d6J6J6L1M.>>566r   c                     SU R                   R                  5       ;  a  gU R                  R                  R                  nUR
                  UR                  S.nX R                   R                     $ )z"Parses --binauthz-evaluation-mode.r   N)r   r   )r   r   r   r'  EvaluationModeValueValuesEnumr  POLICY_BINDINGSbinauthz_evaluation_moder  s      r   r(  !RolloutFlagParser._EvaluationMode  sf     $499+E+E+GG 	//MM  &&$44G 995566r   c                     SU R                   R                  5       ;  a  / $ U R                   R                  nS U 5       $ )z"Parses --binauthz-policy-bindings.r   c              3   P   #    U  H  n[         R                  " US    S9v   M     g7f)r   )r   N)r   PolicyBinding).0bindings     r   	<genexpr>4RolloutFlagParser._PolicyBindings.<locals>.<genexpr>  s&      &G 	$$'&/:&s   $&)r   r   binauthz_policy_bindings)r   policy_bindingss     r   r+  !RolloutFlagParser._PolicyBindings  s=    #499+E+E+GGiii88O& r   c                 ^    U R                   R                  R                  R                  5       $ )z#Parses resource argument operation.)r   CONCEPTS	operationr;   r   s    r   OperationRefRolloutFlagParser.OperationRef  s!    99''--//r   c                 .    U R                   R                  $ r   )r   projectr   s    r   ProjectRolloutFlagParser.Project  s    99r   c                 .    U R                   R                  $ r   )r   locationr   s    r   LocationRolloutFlagParser.Location  s    99r   c                 .    U R                   R                  $ )zParses --async flag.

The internal representation of --async is set to args.async_, defined in
calliope/base.py file.

Returns:
  bool, True if specified, False if unspecified.
)r   async_r   s    r   AsyncRolloutFlagParser.Async  s     99r   c                     SU R                   R                  5       ;  a  gSR                  U R                   R                  5      $ )zParses --schedule-offset.

Accepts ISO 8601 durations format. To read more,
https://cloud.google.com/sdk/gcloud/reference/topic/

Returns:
  str, in standard duration format, in unit of seconds.
r?   Nr   )r   r   r   schedule_offsetr   s    r   ScheduleOffset RolloutFlagParser.ScheduleOffset  s5     $))"<"<">><<		1122r   c                 .    U R                   R                  $ )zParses --validate-only flag.)r   validate_onlyr   s    r   ValidateOnlyRolloutFlagParser.ValidateOnly  s    99"""r   )r   r   r   N)6r   r   r   r   r   r   	Namespacer
   r   r   r   Messageboolr   r   r   r   r-   r   r   r   r   r   r   r   r   r   r   r   r   r  r   r  r	  r  r  r   r  r'  r  r0  r(  r   r6  r+  r   ResourcerA  rE  rI  rM  rQ  rU  r   r   r   r   r   r   2  s   9:#--:>B>O>O:
&X-- 
&$ 
&x// 	~-- 	"C "~--99 ?3 ?2^%H%H 2
1S 1+~<< +&$$88&&$S $*n:: *3n&J&J 3/++??/>++LL>"7//77//MM7 
x(D(DE 
0I.. 0s  	T 	3c 3#D #r   r   )r   
__future__r   r   r   r.   typingr   apitools.base.protorpcliter   &googlecloudsdk.api_lib.container.fleetr   googlecloudsdk.callioper	   r
   r   r   *googlecloudsdk.command_lib.container.fleetr   rW   googlecloudsdk.core4googlecloudsdk.generated_clients.apis.gkehub.v1alphar   r   r   r   r   r   r   r   <module>rc     sY    2 '  '   / 7 / ( 4 5 S ) j ? F FRo# o#r   