
    F                         S r SSKrSSKJr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KJr  SSKJr  SSKJr  SrSr " S S5      r " S S5      rg)z)Functions to add flags in fleet commands.    N)IteratorList)messages)types)util)arg_parsers)base)
exceptions)parser_arguments)parser_extensions)concepts)errors)	arg_utils)concept_parsers)	resourcesz8projects/([^/]+)/platforms/gke/policies/([a-zA-Z0-9_-]+)z1Cannot specify --{opt} without --{prerequisite}.
c                      \ rS rSrSrS\R                  4S jr\S 5       r	\S\
\   4S j5       r\S\4S j5       r\S\R                  4S	 j5       rS
 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S rS rS rSrg)
FleetFlags1   z'Add flags to the fleet command surface.parserc                     Xl         g N_parser)selfr   s     7lib/googlecloudsdk/command_lib/container/fleet/flags.py__init__FleetFlags.__init__4   s	     L    c                     U R                   $ r   r   r   s    r   r   FleetFlags.parser:   s    <<r   returnc                 .    U R                   R                  $ )a  Returns the command name.

This provides information on the command track, command group, and the
action.

Returns:
  A list of command, for `gcloud alpha container fleet operations describe`,
  it returns `['gcloud', 'alpha', 'container', 'fleet', 'operations',
  'describe']`.
)r   command_namer    s    r   r$   FleetFlags.command_name>   s     ;;###r   c                      U R                   S   $ )N)r$   r    s    r   actionFleetFlags.actionL   s    R  r   c                     U R                   S   S:X  a  [        R                  R                  $ U R                   S   S:X  a  [        R                  R                  $ [        R                  R
                  $ )z6Returns the release track from the given command name.   alphabeta)r$   r	   ReleaseTrackALPHABETAGAr    s    r   release_trackFleetFlags.release_trackP   s`     w&$$$			1		'###!!!r   c                 V    [         R                  R                  U R                  5        g r   )r	   
ASYNC_FLAGAddToParserr   r    s    r   AddAsyncFleetFlags.AddAsyncZ   s    OO,r   c                 B    U R                   R                  S[        SS9  g )Nz--display-namezcDisplay name of the fleet to be created (optional). 4-30 characters, alphanumeric and [ '"!-] only.)typehelpr   add_argumentstrr    s    r   AddDisplayNameFleetFlags.AddDisplayName]   s$    KK:	  r   c                     U R                   R                  SS9nU R                  U5        U R                  U5        U R	                  U5        g )Nz9Default cluster configurations to apply across the fleet.r;   )r   	add_group_AddSecurityPostureConfig_AddBinaryAuthorizationConfig_AddCompliancePostureConfig)r   default_cluster_config_groups     r   AddDefaultClusterConfig"FleetFlags.AddDefaultClusterConfigg   sN    #';;#8#8H $9 $  	""#?@&&'CD$$%ABr   rG   c                 f    UR                  SS9nU R                  U5        U R                  U5        g )NzSecurity posture config.rB   )rC   _AddSecurityPostureMode%_AddWorkloadVulnerabilityScanningMode)r   rG   security_posture_config_groups      r   rD   $FleetFlags._AddSecurityPostureConfigo   s?     %A$J$J' %K %! 	  !>?../LMr   rM   c                 T    UR                  S/ SQS [        R                  " S5      S9  g )N--security-posturedisabledstandard
enterprisez          To apply standard security posture to clusters in the fleet,

            $ {command} --security-posture=standard

          choicesdefaultr;   r=   textwrapdedentr   rM   s     r   rK   "FleetFlags._AddSecurityPostureModex   s1     "..6__  	 / 
r   c                 T    UR                  S/ SQS [        R                  " S5      S9  g )N!--workload-vulnerability-scanningrQ   z            To apply standard vulnerability scanning to clusters in the fleet,

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

            rU   rX   r[   s     r   rL   0FleetFlags._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.rB   )rC   _AddBinauthzEvaluationMode_AddBinauthzPolicyBindings)r   rG   !binary_authorization_config_groups      r   rE   (FleetFlags._AddBinaryAuthorizationConfig   s?     )E(N(N+ )O )% 	##$EF##$EFr   rc   c           	      X    UR                  SSS/S S [        R                  " S5      S9  g )N--binauthz-evaluation-moderR   policy-bindingsc                 B    U R                  SS5      R                  5       $ )N_-)replacelower)xs    r   <lambda>7FleetFlags._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

          )rV   r:   rW   r;   rX   )r   rc   s     r   ra   %FleetFlags._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}`.namer+   )specrequired_keys
max_length)rW   r(   metavarr;   r:   )r   RegexpValidator_BINAUTHZ_GKE_POLICY_REGEXr=   rY   rZ   ArgDict)r   rc   platform_policy_types      r   rb   %FleetFlags._AddBinauthzPolicyBindings   sw     '66"	I
 &22$&__ M N   , "(
 3 r   c           	          UR                  SSS9nUR                  SSS/SS[        R                  " S	5      S
9  UR                  S[        R
                  " 5       SS[        R                  " S5      S9  g)z'Add compliance (posture) configuration.zCompliance configuration.T)r;   hiddenz--complianceenabledrR   Nzcompliance=MODEz          To enable compliance for clusters in the fleet,

            $ {command} --compliance=enabled

          To disable compliance for clusters in the fleet,

            $ {command} --compliance=disabled

            )rV   rW   rx   r;   z--compliance-standardszcompliance-standards=STANDARDSz          To configure compliance standards for clusters in the fleet supply a
          comma-delimited list:

            $ {command} --compliance-standards=standard-1,standard-2

          If this flag is supplied, it cannot be empty.
          )r:   rW   rx   r;   )rC   r=   rY   rZ   r   ArgList)r   rG   compliance_posture_config_groups      r   rF   &FleetFlags._AddCompliancePostureConfig   s     'C&L&L( 'M '# $00J'!__ 	 	 1   $00   "0__   1 r   c                     [         R                  " SS[        R                  U R                     U R                  5       [         R                  S9$ )Nz$gkehub.projects.locations.operations	operation)resource_nameapi_versionlocationsId
projectsId)r   ResourceSpecr   VERSION_MAPr2   _LocationAttributeConfig DEFAULT_PROJECT_ATTRIBUTE_CONFIGr    s    r   _OperationResourceSpec!FleetFlags._OperationResourceSpec   sD      .!$$T%7%78113<< r   c                     [         R                  R                  SU R                  5       SR	                  U R
                  5      SS9R                  U R                  5        U R                  R                  SS9  g )Nr   zoperation to {}.T)
group_helprequiredglobal)location)	r   ConceptParserForResourcer   formatr(   r6   r   set_defaultsr    s    r   AddOperationResourceArg"FleetFlags.AddOperationResourceArg   sd    !!--##%%,,T[[9	 . 
 k$++KKh/r   c                 ,    [         R                  " SSS9$ )z.Gets Google Cloud location resource attribute.r   z)Google Cloud location for the {resource}.)rt   	help_text)r    ResourceParameterAttributeConfigr    s    r   r   #FleetFlags._LocationAttributeConfig  s    44= r   c                 D    U R                   R                  S[        SSS9  g )Nz
--locationzThe location name.rj   )r:   r;   rW   r<   r    s    r   AddLocationFleetFlags.AddLocation  s%    KK!	  r   r   N) __name__
__module____qualname____firstlineno____doc__r   ArgumentInterceptorr   propertyr   r   r>   r$   r(   r	   r.   r2   r7   r?   rH   rD   rK   rL   rE   ra   rb   rF   r   r   r   r   __static_attributes__ r   r   r   r   1   s5   /22   $DI $ $ !c ! ! "T.. " "-CN*:*N*NN+;+O+O+;+O+OG*:*N*NG)9)M)M&)9)M)M6%*:*N*N%N0r   r   c                   v   \ 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S\R                   4S jjrS\4S jrS\4S jrS\4S jrS\R*                  4S jrS\R.                  4S jrS\R2                  4S jr SS\R6                  4S jjrS\R:                  4S jrS\\R@                     4S jr! SS\RD                  S\RD                  4S jjr# SS\RH                  4S jjr%S\&RN                  4S jr(S\4S jr)S\*4S jr+S\*4S jr,Sr-g
)FleetFlagParseri  z)Parse flags during fleet command runtime.argsr2   c                 R    Xl         X l        [        R                  " U5      U l        g r   )r   r2   r   GetMessagesModuler   )r   r   r2   s      r   r   FleetFlagParser.__init__  s!     I&**=9DMr   messager"   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   r   s     r   IsEmptyFleetFlagParser.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FleetFlagParser.TrimEmpty,  s     <<  nr   Nc                     U R                   R                  5       n[        R                  " U R	                  5       5      Ul        U R                  5       Ul        U R                  U5      Ul	        U$ )zFleet resource.)
r   Fleetr   FleetResourceNameProjectrt   _DisplayNamedisplayName_DefaultClusterConfigdefaultClusterConfig)r   existing_fleetfleets      r   r   FleetFlagParser.Fleet3  sW     MM!E''7EJ))+E!%!;!;N!KELr   c                 .    U R                   R                  $ r   )r   display_namer    s    r   r   FleetFlagParser._DisplayName<  s    99!!!r   c                 B    [         R                  " U R                  SSS9$ )Nz	--projectT)use_defaults)r   GetFromNamespacer   r    s    r   r   FleetFlagParser.Project?  s    %%dii4PPr   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FleetFlagParser.AsyncB  s     99r   c                     U R                   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   rets     r   _SecurityPostureConfig&FleetFlagParser._SecurityPostureConfigM  sD    
--
-
-
/C((*CH BBDC>>#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 --security-posture.rP   NrQ   )	r   GetSpecifiedArgsr   r   ModeValueValuesEnumDISABLEDBASIC
ENTERPRISEsecurity_posturer   	enum_typemappings      r   r   $FleetFlagParser._SecurityPostureModeS  sf     499#=#=#??33GGI&&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^   NrQ   )	r   r   r   r    VulnerabilityModeValueValuesEnumVULNERABILITY_DISABLEDVULNERABILITY_BASICVULNERABILITY_ENTERPRISEworkload_vulnerability_scanningr   s      r   r   1FleetFlagParser._VulnerabilityModeValueValuesEnumb  so     +$))2L2L2NN 	++LL  441188G
 99<<==r   c                 Z   U R                   R                  5       nU R                  5       Ul        [	        U R                  5       5      Ul        Uc  UnO>UnUR                  b  UR                  Ul        UR                  b  UR                  Ul        UR                  (       a:  UR                  (       d)  [        R                  " S[        R                  SSS95      eUR                  U R                   R                  R                  R                  :X  a  / Ul        U R                  U5      $ )z$Construct binauthz config from args.rr   zbinauthz-evaluation-modezbinauthz-policy-bindings)prerequisiteopt)r   BinaryAuthorizationConfig_EvaluationModeevaluationModelist_PolicyBindingspolicyBindingsr
   InvalidArgumentException_PREREQUISITE_OPTION_ERROR_MSGr   EvaluationModeValueValuesEnumr   r   )r   existing_binauthznew_binauthzr   s       r   _BinaryAuthorizationConfig*FleetFlagParser._BinaryAuthorizationConfigs  s    ==::<L"&"6"6"8L"&t';';'=">L  cc		$	$	0)88		$	$	0)88 #"4"4//
&
(
/
/5, 0   //MMVV c>>#r   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.rf   N)rR   rg   )r   r   r   r   r   r   POLICY_BINDINGSbinauthz_evaluation_moder   s      r   r   FleetFlagParser._EvaluationMode  sf     $499+E+E+GG 	//MM  &&$44G 995566r   c                 R   ^  T R                   R                  nUb  U 4S jU 5       $ / $ )z"Parses --binauthz-policy-bindings.c              3   \   >#    U  H!  nTR                   R                  US    S9v   M#     g7f)rt   )rt   N)r   PolicyBinding).0bindingr   s     r   	<genexpr>2FleetFlagParser._PolicyBindings.<locals>.<genexpr>  s.      (g --
%
%76?
%
;(s   ),)r   binauthz_policy_bindings)r   policy_bindingss   ` r   r   FleetFlagParser._PolicyBindings  s1    ii88O"(  Ir   existing_cfgc                    Ub  UOU R                   R                  5       nU R                  R                  c(  U R                  R                  c  U R                  U5      $ U R                  R                  Gb  U R                  R                  S;  a*  [        R                  " U R                  R                  5      eU R                  R                  S:X  a-  U R                  R                  b  [        R                  " S5      eU R                  R                  S:X  a0  U R                   R                  R                  R                  Ul        OIU R                  R                  S:X  a/  U R                   R                  R                  R                  Ul        UR                  c  [        R                  " S5      eU R                  R                  b`  U R                  R                   Vs/ s H  nU R                   R                  US9PM     nnU(       d  [        R                  " S5      eXBl        U R                  U5      $ s  snf )z0Construct compliance (posture) config from args.>   r   rR   rR   z@Cannot configure compliance standards when disabling Compliance.r   zECannot configure compliance standards without a mode first being set.)rS   z@--compliance-standards must be a non-empty comma-delimited list.)r   CompliancePostureConfigr   
compliancecompliance_standardsr   r   InvalidComplianceModeConfiguringDisabledCompliancer   ENABLEDr   r   ConfiguringMissingComplianceComplianceStandardcomplianceStandards)r   r  cfgsdesired_standardss        r   _CompliancePostureConfig(FleetFlagParser._CompliancePostureConfig  s    # 	]]224  yy#		(F(F(N^^C   yy'			%<	<**499+?+?@@ ))

*
,ii,,822N
 	
 
			*MM11EEMM 	 99:-MM11EENN 	
 xx//  yy%%1 99111a --
*
*A
*
61   11N
 	
 !2>>#s   '#I c                    Ub  UR                   OSnU R                  R                  5       nU R                  5       Ul        Ub!  U R                  UR                  5      Ul        OU R                  5       Ul        Ub!  U R                  UR                  5      Ul        OU R                  5       Ul        U R                  U5      $ )zConstruct default cluster config from args.

Args:
  existing_fleet_cfg: proto message of any currently existing configuration.

Returns:
  Proto message for the default cluster configuration.
N)
r   r   DefaultClusterConfigr   securityPostureConfigr   binaryAuthorizationConfigr  compliancePostureConfigr   )r   existing_fleet_cfgexisting_default_cluster_configr   s       r   r   %FleetFlagParser._DefaultClusterConfig  s     ) 	// $
 --
,
,
.C $ ; ; =C&2&*&E&E
)
C
C'c# '+&E&E&Gc#&2$($A$A
)
A
A%c! %)$A$A$Cc!>>#r   c                 ^    U R                   R                  R                  R                  5       $ )z#Parses resource argument operation.)r   CONCEPTSr   Parser    s    r   OperationRefFleetFlagParser.OperationRef  s!    99''--//r   c                 .    U R                   R                  $ r   )r   r   r    s    r   LocationFleetFlagParser.Location  s    99r   c                 .    U R                   R                  $ )z$Returns page size in a list request.)r   	page_sizer    s    r   PageSizeFleetFlagParser.PageSize  s    99r   c                 .    U R                   R                  $ )z Returns limit in a list request.)r   limitr    s    r   LimitFleetFlagParser.Limit  s    99??r   )r   r   r2   r   ).r   r   r   r   r   r   	Namespacer	   r.   r   r   Messageboolr   r   r   r   r>   r   r   r   r   r   (SecurityPostureConfigModeValueValuesEnumr   5SecurityPostureConfigVulnerabilityModeValueValuesEnumr   r   r   6BinaryAuthorizationConfigEvaluationModeValueValuesEnumr   r   r   r   r
  r  r  r   r   Resourcer#  r&  intr*  r.  r   r   r   r   r   r     sz   1:#--:>B>O>O:
&X-- 
&$ 
&x// %++ "C "Qs Q	T 	e&A&A /55/>BB>$ #!&&!F7CC7 x(;(;<  ;?7777$$7v ! !!!F0I.. 0  S r   r   )r   rY   typingr   r   apitools.base.protorpcliter   &googlecloudsdk.api_lib.container.fleetr   r   googlecloudsdk.callioper   r	   r
   r   r    googlecloudsdk.calliope.conceptsr   *googlecloudsdk.command_lib.container.fleetr   $googlecloudsdk.command_lib.util.apisr   (googlecloudsdk.command_lib.util.conceptsr   googlecloudsdk.corer   rz   r   r   r   r   r   r   <module>rA     sd    0  ! / 8 7 / ( . 4 5 5 = : D ) ? " b bJC Cr   