
    `                         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 S5      r " S S5      rg)z4Functions to add flags in rollout sequence commands.    )absolute_import)division)unicode_literalsN)List)messages)util)arg_parsers)base)parser_arguments)parser_extensions)	resources)yaml)gkehub_v1alpha_messagesc                       \ 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S jrS rSrg)RolloutSequenceFlags#   z7Add flags to the fleet rolloutsequence command surface.parserrelease_trackc                     Xl         X l        g N_parser_release_track)selfr   r   s      Hlib/googlecloudsdk/command_lib/container/fleet/rolloutsequences/flags.py__init__RolloutSequenceFlags.__init__&   s    
 L'    c                     U R                   $ r   )r   r   s    r   r   RolloutSequenceFlags.parser.   s    <<r   c                     U R                   $ r   )r   r    s    r   r   "RolloutSequenceFlags.release_track2   s    r   c                 V    [         R                  R                  U R                  5        g r   )r
   
ASYNC_FLAGAddToParserr   r    s    r   AddAsyncRolloutSequenceFlags.AddAsync6   s    OO,r   c                 j    U R                   R                  S[        [        R                  " S5      S9  g )Nz--display-namezS            Display name of the rollout sequence to be created (optional).
        )typehelp)r   add_argumentstrtextwrapdedentr    s    r   AddDisplayName#RolloutSequenceFlags.AddDisplayName9   s0    KK__    r   c                 b    U R                   R                  SSS[        R                  " 5       S9  g )N--labelsz Labels for the rollout sequence.z	KEY=VALUE)r+   metavarr*   )r   r,   r	   ArgDictr    s    r   	AddLabelsRolloutSequenceFlags.AddLabelsB   s.    KK/  "	  r   Nc                 b    U R                   R                  S[        R                  " 5       SSS9  g )N--stage-configTa              Path to the YAML file containing the stage configurations. The YAML
            file should contain a list of stages. Fleet projects and soak_duration are required.
            If label_selector is not specified, there is no filtering.
            A fleet project is the project where the fleet is hosted.
            Example:

            ```yaml
            - stage:
              fleet-projects:
              # Expected format: projects/{project}
              - projects/my-dev-project
              soak-duration: 604800s # 7 days
            - stage:
              fleet-projects:
              - projects/my-prod-project
              soak-duration: 604800s # 7 days
              label-selector: resource.labels.canary=='true'
            - stage:
              fleet-projects:
              # Expected format: projects/{project}
              - projects/my-prod-project
              soak-duration: 604800s # 7 days
              ```
        )r*   requiredr+   )r   r,   r	   FileContentsr    s    r   AddStageConfig#RolloutSequenceFlags.AddStageConfigJ   s0    KK%%'	  r   c                 x    [         R                  " U R                  [        R                  U R
                     S9  g )N)r   api_version)fleet_resourcesAddRolloutSequenceResourceArgr   r   VERSION_MAPr   r    s    r   rA   2RolloutSequenceFlags.AddRolloutSequenceResourceArgj   s+    11{{$$T%7%78r   r   )returnN)__name__
__module____qualname____firstlineno____doc__r
   ReleaseTrackALPHAr   ArgumentInterceptorr   propertyr   r   r'   r0   r6   r<   rA   __static_attributes__ r   r   r   r   #   s{    ?
 *.):):)@)@(22( &&(    -@r   r   c                   R   \ 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\\R,                     4S jrS\4S jrS\4S jrS\4S jrSrg)RolloutSequenceFlagParserq   z9Parse flags during fleet rolloutsequence command runtime.argsr   c                 R    Xl         X l        [        R                  " U5      U l        g r   )rS   r   r   GetMessagesModuler   )r   rS   r   s      r   r   "RolloutSequenceFlagParser.__init__t   s!     I&**=9DMr   messagerD   c                 (    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   rW   s     r   IsEmpty!RolloutSequenceFlagParser.IsEmpty{   s     d7mo%%r   c                 4    U R                  U5      (       d  U$ g)z/Trim empty messages to avoid cluttered request.N)rZ   rY   s     r   	TrimEmpty#RolloutSequenceFlagParser.TrimEmpty   s    <<  nr   c                     [         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   )fleet_messagesRolloutSequencer   RolloutSequenceNamerS   name_DisplayNamedisplayName_Labelslabels_Stagesstages)r   rollout_sequences     r   ra   )RolloutSequenceFlagParser.RolloutSequence   s_    %557 44TYY?#'#4#4#6 "lln"llnr   c                 .    U R                   R                  $ r   )rS   display_namer    s    r   rd   &RolloutSequenceFlagParser._DisplayName   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)
rS   GetSpecifiedArgsrg   r`   ra   LabelsValueitemsadditionalPropertiesappendAdditionalProperty)r   rg   labels_valuerp   rq   s        r   rf   !RolloutSequenceFlagParser._Labels   s    3355YYF!11==?Llln
''..

(
(
4
4
G
G H  % r   c                     SU R                   R                  5       ;  a  / $  [        R                  " U R                   R                  SS9n[        U[        5      (       d  [        S5      e/ nU H  n[        R                  " UR                  S5      S	9nUR                  S
5      nU(       d  [        S5      eUR                  S5      nU(       d  [        S5      e[        U[        5      (       d  [        S5      eU R                  U5      n[        R                  " UUUS9nUR                  U5        M     U$ ! [        R
                   a  n[        SU 35      UeSnAf[         a  n[        SU 35      UeSnAff = f)zParses --stage-config.r9   T)location_valuezError parsing YAML file: NzError reading config file: z0The config file should contain a list of stages.zlabel-selector)labelSelectorzsoak-durationz*soak-duration is required in the yaml filezfleet-projectsz+fleet-projects is required in the yaml filez0fleet-projects should be a list in the yaml file)clusterSelectorsoakDurationfleetProjects)rS   rr   r   loadstage_configYAMLParseError
ValueError	Exception
isinstancelistr`   ClusterSelectorgetr]   Stagerv   )	r   stage_data_listeri   
stage_datacluster_selectorsoak_durationfleet_projectsstages	            r   rh   !RolloutSequenceFlagParser._Stages   sf   tyy99;;iA		$))"8"8No ot,,IJJF%
'77"'78 !nn_5mEFF!~~&67nFGG--KLL(89""*$&e
 mmE- &0 MC  ?21#67Q> A4QC89q@As#   )D9 9E=EE=)E88E=c                 .    U R                   R                  $ r   )rS   projectr    s    r   Project!RolloutSequenceFlagParser.Project   s    99r   c                 .    U R                   R                  $ r   )rS   locationr    s    r   Location"RolloutSequenceFlagParser.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.
)rS   async_r    s    r   AsyncRolloutSequenceFlagParser.Async   s     99r   )rS   r   r   N)rE   rF   rG   rH   rI   r   	Namespacer
   rJ   r   r   MessageboolrZ   r]   r`   ra   r-   rd   rs   rf   r   r   rh   r   r   r   rN   rO   r   r   rQ   rQ   q   s    A:#--:>B>O>O:
&X-- 
&$ 
&x// ~== "C "~55AA (tN001 (Ts  	T 	r   rQ   )rI   
__future__r   r   r   r.   typingr   apitools.base.protorpcliter   &googlecloudsdk.api_lib.container.fleetr   googlecloudsdk.callioper	   r
   r   r   *googlecloudsdk.command_lib.container.fleetr   r@   googlecloudsdk.corer   4googlecloudsdk.generated_clients.apis.gkehub.v1alphar   r`   r   rQ   rO   r   r   <module>r      sM    ; &  '   / 7 / ( 4 5 S $ jK K\o or   