
    }                        S 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KJr   " S S5      r " S S5      rg)z4Functions to add flags in rollout sequence commands.    )annotationsN)List)messages)util)arg_parsers)base)parser_arguments)parser_extensions)	resources)yaml)gkehub_v1alpha_messages)gkehub_v1beta_messagesc                      \ rS rSrSr\R                  R                  4   S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.c                    Xl         X l        g N_parser_release_track)selfparserrelease_tracks      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_track1   s    r   c                V    [         R                  R                  U R                  5        g r   )r   
ASYNC_FLAGAddToParserr   r   s    r   AddAsyncRolloutSequenceFlags.AddAsync5   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.AddDisplayName8   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.AddLabelsA   s.    KK/  "	  r   c                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: 7d # Or 168h or 604800s
            - stage:
              fleet-projects:
              - projects/my-prod-project
              soak-duration: 3600s
              label-selector: resource.labels.canary=='true'
            - stage:
              fleet-projects:
              # Expected format: projects/{project}
              - projects/my-prod-project
              soak-duration: 30m
              ```
        )r)   requiredr*   )r   r+   r   FileContentsr   s    r   AddStageConfig#RolloutSequenceFlags.AddStageConfigI   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   r@   2RolloutSequenceFlags.AddRolloutSequenceResourceArgi   s+    11{{$$T%7%78r   r   N)r   z$parser_arguments.ArgumentInterceptorr   base.ReleaseTrack)returnNone)__name__
__module____qualname____firstlineno____doc__r   ReleaseTrackBETAr   propertyr   r   r&   r/   r5   r;   r@   __static_attributes__ r   r   r   r   "   so    ?
 *.):):)?)?(2( '(    -@r   r   c                      \ rS rSrSr    SS jrSS jrSS jr  SS jrSS jr	  SS jr
  SS	 jrSS
 jrSS jrSS jrSrg)RolloutSequenceFlagParserp   z9Parse flags during fleet rolloutsequence command runtime.c                R    Xl         X l        [        R                  " U5      U l        g r   )argsr   r   GetMessagesModuler   )r   rT   r   s      r   r   "RolloutSequenceFlagParser.__init__s   s!     I&**=9DMr   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   messages     r   IsEmpty!RolloutSequenceFlagParser.IsEmptyz   s     d7mo%%r   c                4    U R                  U5      (       d  U$ g)z/Trim empty messages to avoid cluttered request.N)rZ   rX   s     r   	TrimEmpty#RolloutSequenceFlagParser.TrimEmpty   s    <<  nr   c                   U R                   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   )r   RolloutSequencer   RolloutSequenceNamerT   name_DisplayNamedisplayName_Labelslabels_Stagesstages)r   rollout_sequences     r   r`   )RolloutSequenceFlagParser.RolloutSequence   se     }}446 44TYY?#'#4#4#6 "lln"llnr   c                .    U R                   R                  $ r   )rT   display_namer   s    r   rc   &RolloutSequenceFlagParser._DisplayName   s    99!!!r   c                v   SU R                   R                  5       ;  a  gU R                   R                  nU R                  R                  R                  5       nUR                  5        HK  u  p4UR                  R                  U R                  R                  R
                  R                  X4S95        MM     U$ )zParses --labels.r2   N)keyvalue)
rT   GetSpecifiedArgsrf   r   r`   LabelsValueitemsadditionalPropertiesappendAdditionalProperty)r   rf   labels_valuero   rp   s        r   re   !RolloutSequenceFlagParser._Labels   s    
 3355YYF==00<<>Llln
''..
--
'
'
3
3
F
F G  % 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U R                  R                  UR                  S5      S	9nUR                  S
5      nU(       d  [        S5      e [        R                  " 5       " U5       S3nUR                  S5      nU(       d  [        S5      e[        U[        5      (       d  [        S5      eU R#                  U5      nU R                  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! [        R                  [         4 a     Nf = f)zParses --stage-config.r8   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 fileszfleet-projectsz+fleet-projects is required in the yaml filez0fleet-projects should be a list in the yaml file)clusterSelectorsoakDurationfleetProjects)rT   rq   r   loadstage_configYAMLParseError
ValueError	Exception
isinstancelistr   ClusterSelectorgetr   DurationArgumentTypeError	TypeErrorr]   Stageru   )	r   stage_data_listerh   
stage_datacluster_selectorsoak_durationfleet_projectsstages	            r   rg   !RolloutSequenceFlagParser._Stages   s    tyy99;;iA		$))"8"8No ot,,IJJF%
66"'78 7  !nn_5mEFF&//1-@AC "~~&67nFGG--KLL(89mm!!*$& " e
 mmE= &@ MS  ?21#67Q> A4QC89q@A& ++Y7  	s5   )E" >F)"F&6FF&F!!F&)GGc                .    U R                   R                  $ r   )rT   projectr   s    r   Project!RolloutSequenceFlagParser.Project   s    99r   c                .    U R                   R                  $ r   )rT   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.
)rT   async_r   s    r   AsyncRolloutSequenceFlagParser.Async   s     99r   )rT   r   r   N)rT   zparser_extensions.Namespacer   rC   )rY   messages.MessagerD   bool)rY   r   )rD   zJfleet_messages_alpha.RolloutSequence | fleet_messages_beta.RolloutSequence)rD   r,   )rD   zbfleet_messages_alpha.RolloutSequence.LabelsValue | fleet_messages_beta.RolloutSequence.LabelsValue)rD   z<List[fleet_messages_alpha.Stage | fleet_messages_beta.Stage])rD   r   )rF   rG   rH   rI   rJ   r   rZ   r]   r`   rc   re   rg   r   r   r   rN   rO   r   r   rQ   rQ   p   sd    A:-:>O:
&,"8$2C2h	r   rQ   )rJ   
__future__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   fleet_messages_alpha3googlecloudsdk.generated_clients.apis.gkehub.v1betar   fleet_messages_betar   rQ   rO   r   r   <module>r      sJ    ; "   / 7 / ( 4 5 S $ p mK K\A Ar   