
    G                     6   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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  \R<                  " SSSSS9rSr Sr! " S S5      r" " S S5      r#g)z)Functions to add flags in fleet commands.    )absolute_import)division)unicode_literalsN)IteratorList)messages)types)util)arg_parsers)base)
exceptions)parser_arguments)parser_extensions)concepts)errors)	arg_utils)concept_parsers)	resourcesz--all-membershipsstore_constTzAll memberships in the fleet.)actionconsthelpz8projects/([^/]+)/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)
FleetFlags;   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__>   s	     L    c                     U R                   $ r   r   r!   s    r"   r   FleetFlags.parserD   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_nameH   s     ;;###r%   c                      U R                   S   $ )N)r+   r'   s    r"   r   FleetFlags.actionV   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_trackZ   s`     w&$$$			1		'###!!!r%   c                 V    [         R                  R                  U R                  5        g r   )r   
ASYNC_FLAGAddToParserr   r'   s    r"   AddAsyncFleetFlags.AddAsyncd   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.)typer   r   add_argumentstrr'   s    r"   AddDisplayNameFleetFlags.AddDisplayNameg   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.AddDefaultClusterConfigq   sN    #';;#8#8H $9 $  	""#?@&&'CD$$%ABr%   rL   c                 f    UR                  SS9nU R                  U5        U R                  U5        g )NzSecurity posture config.rG   )rH   _AddSecurityPostureMode%_AddWorkloadVulnerabilityScanningMode)r!   rL   security_posture_config_groups      r"   rI   $FleetFlags._AddSecurityPostureConfigy   s?     %A$J$J' %K %! 	  !>?../LMr%   rR   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   rB   textwrapdedentr!   rR   s     r"   rP   "FleetFlags._AddSecurityPostureMode   s1     "..6__  	 / 
r%   c                 T    UR                  S/ SQS [        R                  " S5      S9  g )N!--workload-vulnerability-scanningrV   z            To apply standard vulnerability scanning to clusters in the fleet,

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

            rZ   r]   r`   s     r"   rQ   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.rG   )rH   _AddBinauthzEvaluationMode_AddBinauthzPolicyBindings)r!   rL   !binary_authorization_config_groups      r"   rJ   (FleetFlags._AddBinaryAuthorizationConfig   s?     )E(N(N+ )O )% 	##$EF##$EFr%   rh   c           	      X    UR                  SSS/S S [        R                  " S5      S9  g )N--binauthz-evaluation-moderW   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

          )r[   r@   r\   r   r]   )r!   rh   s     r"   rf   %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}`.namer1   )specrequired_keys
max_length)r\   r   metavarr   r@   )r   RegexpValidator_BINAUTHZ_GKE_POLICY_REGEXrB   r^   r_   ArgDict)r!   rh   platform_policy_types      r"   rg   %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enabledrW   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

            )r[   r\   r}   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@   r\   r}   r   )rH   rB   r^   r_   r   ArgList)r!   rL   compliance_posture_config_groups      r"   rK   &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_MAPr8   _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   r<   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}.)ry   	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.ro   )r@   r   r\   rA   r'   s    r"   AddLocationFleetFlags.AddLocation  s%    KK!	  r%   r   N) __name__
__module____qualname____firstlineno____doc__r   ArgumentInterceptorr#   propertyr   r   rC   r+   r   r   r4   r8   r=   rD   rM   rI   rP   rQ   rJ   rf   rg   rK   r   r   r   r   __static_attributes__ r%   r"   r   r   ;   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.argsr8   c                 R    Xl         X l        [        R                  " U5      U l        g r   )r   r8   r
   GetMessagesModuler   )r!   r   r8   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.TrimEmpty6  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Projectry   _DisplayNamedisplayName_DefaultClusterConfigdefaultClusterConfig)r!   existing_fleetfleets      r"   r   FleetFlagParser.Fleet=  sW     MM!E''7EJ))+E!%!;!;N!KELr%   c                 .    U R                   R                  $ r   )r   display_namer'   s    r"   r   FleetFlagParser._DisplayNameF  s    99!!!r%   c                 B    [         R                  " U R                  SSS9$ )Nz	--projectT)use_defaults)r   GetFromNamespacer   r'   s    r"   r   FleetFlagParser.ProjectI  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.AsyncL  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._SecurityPostureConfigW  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.rU   NrV   )	r   GetSpecifiedArgsr   r   ModeValueValuesEnumDISABLEDBASIC
ENTERPRISEsecurity_posturer!   	enum_typemappings      r"   r   $FleetFlagParser._SecurityPostureMode]  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.rc   NrV   )	r   r   r   r    VulnerabilityModeValueValuesEnumVULNERABILITY_DISABLEDVULNERABILITY_BASICVULNERABILITY_ENTERPRISEworkload_vulnerability_scanningr   s      r"   r   1FleetFlagParser._VulnerabilityModeValueValuesEnuml  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.rw   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._BinaryAuthorizationConfig}  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.rk   N)rW   rl   )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)ry   )ry   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   rW   rW   z@Cannot configure compliance standards when disabling Compliance.r   zECannot configure compliance standards without a mode first being set.)rX   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   r8   r   ).r   r   r   r   r   r   	Namespacer   r4   r#   r   Messageboolr   r   r	   r   rC   r   r   r   r   r   (SecurityPostureConfigModeValueValuesEnumr   5SecurityPostureConfigVulnerabilityModeValueValuesEnumr   r   r   6BinaryAuthorizationConfigEvaluationModeValueValuesEnumr   r   r  r   r  r  r  r   r   Resourcer(  r+  intr/  r3  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   
__future__r   r   r   r^   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   ArgumentALL_MEMBERSHIPS_FLAGr   r   r   r   r   r%   r"   <module>rI     s    0 &  '  ! / 8 7 / ( . 4 5 5 = : D ) }}
	(	  ? " b bJC Cr%   