
    Z                        S 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 rS rS"S jrS rS rS rS rS rS#S jrS r S$S jr S"S jrS rS rS rS r S r!S r"S r#S  r$S! r%g)%z`Parsers given command arguments for the Cloud Run V2 command surface into configuration changes.    )base)
exceptions)flags)GenerateVolumeName)config_changes)repeated)config)
propertiesc                  ,    [         R                  " SSS9$ )z;Creates flags for creating, updating, and deleting secrets.a=  Specify secrets to provide as environment variables. For example: '--set-secrets=ENV=mysecret:latest,OTHER_ENV=othersecret:1' will create an environment variable named ENV whose value is the latest version of secret 'mysecret' and an environment variable OTHER_ENV whose value is version of 1 of secret 'othersecret'.secrets)
group_help	flag_name)r   MapFlagsNoFile     5lib/googlecloudsdk/command_lib/run/v2/flags_parser.pySecretsFlagsr      s     			K 

 
r   c                 6    [        5       R                  U 5        g)z8Adds flags for creating, updating, and deleting secrets.N)r   AddToParserparsers    r   AddSecretsFlagsr   *   s    .V$r   c           	      6    [         R                  " U SSSSSS9  g)z%Add flags for setting CloudSQL stuff.
WorkerPoolzcloudsql-instanceszCloud SQL instancesFa        These flags modify the Cloud SQL instances this WorkerPool connects to.
      You can specify a name of a Cloud SQL instance if it's in the same
      project and region as your Cloud Run worker pool; otherwise specify
      <project>:<region>:<instance> for the instance.)auto_group_helpadditional_helpN)r   AddPrimitiveArgsr   s    r   AddCloudSQLFlagsr   /   s$    
9r   c                    SU ;   a  U R                  S5      =(       d    U R                  S5      nUR                  S[        R                  " U(       a  U R                  OSU(       a  U R
                  O[        R                  S95        gg)zJSet client name and version regardless of whether or not it was specified.client_nameclient_versionr   gcloud)r    r!   N)IsSpecifiedinsertr   SetClientNameAndVersionChanger    r!   r	   CLOUD_SDK_VERSION)argschangesis_either_specifieds      r   "_PrependClientNameAndVersionChanger*   ?   sx    d**=9 T=M=M> NN	44,?((X"  ..))		
	 r   c                    / nSU ;   a?  U R                   (       a.  UR                  [        R                  " U R                   US95        SU ;   a?  U R                  (       a.  UR                  [        R                  " U R                  US95        SU ;   ar  U R
                  (       aa  UR                  [        R                  " U R
                  US95        U R
                  S:X  a#  UR                  [        R                  " SS	95        U$ )
z7Returns the resource limits changes for the given args.memory)r,   non_ingress_typecpu)r.   r-   gpu)r/   r-   0 gpu_type)r,   appendr   ResourceLimitsChanger.   r/   GpuTypeChange)r'   r-   r(   s      r   _GetResourceLimitsChangesr7   P   s    '$++NN++;;1A	

 d]txxNN+++;	

 d]txxNN+++;	

 xx3nn^112>?	.r   c                 P   0 n[         R                  " U S5      (       a  U R                  nO([         R                  " U S5      (       a  U R                  n[         R                  " U S5      (       a  U R                  O/ n[
        R                  " UUSU ;   a  U R                  S9$ SS9$ )z-Returns the label changes for the given args.labelsupdate_labelsremove_labelsclear_labelsF)	additionssubtractionsr<   )r   FlagIsExplicitlySetr9   r:   r;   r   LabelChanger<   )r'   r=   r>   s      r   _GetLabelChangesrA   j   s    )
tX..I  77""I 
	"	"4	9	9  
 
	#	#(6$(>4$$
  EJ
 r   c                 6    / SQn[         R                  " X5      $ )z3Returns true iff any network changes are specified.
vpc_egressnetworksubnetnetwork_tagsclear_networkclear_network_tagsr   
HasChanges)r'   network_flagss     r   _HasNetworkChangesrM   }   s    - 
		$	..r   c           	         [         R                  " U R                  U R                  U R                  [
        R                  " U S5      (       a  U R                  O/ SU ;   a  U R                  OSSU ;   a  U R                  S9$ SS9$ )NrG   rH   FrI   rC   )
r   VpcAccessChangesrD   rE   rF   r   r?   rG   rH   rI   r'   s    r   _GetNetworkChangerQ      s    		(	(ll[[		"	"4	8	8 $$*9T*AD&&u		% 00
  
 r   c                 6    / SQn[         R                  " X5      $ )z4Returns true iff any CMEK key changes are specified.keypost_key_revocation_action_typeencryption_key_shutdown_hours	clear_key%clear_post_key_revocation_action_type#clear_encryption_key_shutdown_hoursrJ   )r'   cmek_key_flagss     r   _HasCmekKeyChangesr[      s    . 
		$	//r   c                    [         R                  " [        R                  " U S5      (       a  U R                  OS [        R                  " U S5      (       a  U R
                  OS [        R                  " U S5      (       a  [        U R                  5      OS [        R                  " U S5      [        R                  " U S5      [        R                  " U S5      S9$ )NrT   rU   rV   rW   rX   rY   rS   )r   CmekKeyChangesr   r?   rT   rU   intrV   rP   s    r   _GetCmekKeyChanger_      s    		&	&//e<<$(($		"	"4)J	K	K '+&J&J		"	"4)H	I	I %((J(J$K))$<,1,E,E
7- +0*C*C
5+
 r   Nc           
      t   / n[         R                  " [        U SS5      =(       d    U R                  =(       d    0 5      nU H/  nUR	                  S5      (       d  M  [
        R                  " S5      e   [         R                  " [        U SS5      =(       d    / 5      nU H/  nUR	                  S5      (       d  M  [
        R                  " S5      e   [        U R                  =(       d    U R                  5      nU(       d  U(       d  U(       a'  UR                  [        R                  " UUUUUS95        U$ )z/Returns the secrets changes for the given args.update_secretsN/z;Secrets volume mount is not supported for Worker Pools yet.remove_secrets)updatesremovesclear_otherscontainer_namer-   )r   	StripKeysgetattrset_secrets
startswithr   ConfigurationError	MapLStripboolclear_secretsr4   r   SecretsEnvVarChanges)r'   r-   rg   r(   rd   rT   re   rf   s           r   _GetSecretsChangesrq      s   'OOd$d+Et/?/?E2' c
~~c))
G   OOGD*:DAGRH'c
~~c))
G   d&&<$*<*<=,<NN++%)-	
 
.r   c                    [         R                  " U 5      n[        U SS5      =(       d1    [        R                  R
                  R                  R                  SS9n[         R                  " U 5      (       a  [         R                  " 5         / n[         R                  " U S5      (       aB  U R                  (       a1  UR                  [        R                  " UUU R                  S95        U$ [         R                  " U S5      (       aB  U R                  (       a1  UR                  [        R                   " UUU R                  S95        U$ [         R                  " U S	5      (       a7  U R"                  (       a&  UR                  [        R$                  " 5       5        U$ [         R                  " U S
5      (       a@  U R&                  (       a/  UR                  [        R(                  " UUU R&                  S95        U$ )z1Returns the Cloud SQL changes for the given args.projectNTrequiredadd_cloudsql_instances)rs   regionrv   remove_cloudsql_instances)rs   rw   rx   clear_cloudsql_instancesset_cloudsql_instances)rs   rw   rz   )r   	GetRegionri   r
   VALUEScorers   GetEnabledCloudSqlApiRequiredCheckCloudSQLApiEnablementr?   rv   r4   r   AddCloudSQLChangesrx   RemoveCloudSQLChangesry   ClearCloudSQLChangesrz   SetCloudSQLChanges)r'   rw   rs   changes       r   _GetCloudSQLChangesr      s   ??4 &
It 9%%))4)8 
 %%d++	$$&&&>??

%
%
MM))#'#>#>	
D 
-5 &ABB

(
(
MM,,&*&D&D	
. 
- &@AA

'
'
MM.5578 
- &>??

%
%
MM))#'#>#>	
 
-r   c           	         / n[        U S5      (       a<  U R                  b/  UR                  [        R                  " U R                  UUS95        [
        R                  " U 5      (       a  UR                  [        U UUS95        U R                  S5      (       a/  UR                  [        R                  " U R                  UUS95        U R                  S5      (       a/  UR                  [        R                  " U R                  UUS95        U R                  S5      (       a/  UR                  [        R                  " U R                  UUS95        U R                  S5      (       a/  UR                  [        R                  " U R                  UUS95        [
        R                   " U S	5      (       d  [
        R                   " U S
5      (       a:  UR                  [        R"                  " U R$                  U R&                  UUS95        [
        R(                  " U 5      (       a  UR+                  [-        U UUS95        [
        R                   " U S5      (       a/  UR                  [        R.                  " U R0                  UUS95        U$ )z,Returns per-container configuration changes.image)rg   r-   r.   )r.   rg   r-   r,   )r,   rg   r-   commandr'   remove_volume_mountclear_volume_mounts)removed_mountsclear_mountsrg   r-   add_volume_mount)
new_mountsrg   r-   )hasattrr   r4   r   ImageChanger   HasEnvChanges_GetEnvChangesr#   r5   r.   r,   ContainerCommandChanger   ContainerArgsChanger'   r?   RemoveVolumeMountChanger   r   HasSecretsChangesextendrq   AddVolumeMountChanger   )container_argsrg   r-   r(   s       r   !_GetContainerConfigurationChangesr     sC    ' ^W%%.*>*>*JNN""  )-	
 ((NN)-	
 &&NN++"")-	
 ))NN++!(()-	
 	**NN--"")-	
 ''NN**)-	
 +   1FGGNN..)==';;)-		
 ^,,NN)-	
 ~/ABBNN++%66)-	
 
.r   c                 N   / n[         R                  " U S5      (       a/  UR                  [        R                  " U R
                  5      5        [         R                  " U S5      (       a]  UR                  [        R                  " [        R                  R                  R                  R                  SS9U R                  S95        [        U 5      (       a  UR                  [        U 5      5        [        U 5      (       a  UR                  [!        U 5      5        SU ;   a>  U R"                  (       a-  UR                  [        R$                  " U R"                  S95        ['        U S5      (       a;  U R(                  b.  UR                  [        R*                  " U R(                  US	95        S
U ;   a;  U R,                  b.  UR                  [        R.                  " U R,                  US	95        SU ;   a;  U R0                  b.  UR                  [        R2                  " U R0                  US	95        [         R4                  " U 5      (       a  UR                  [7        XS	95        UR9                  [;        XS	95        SU ;   a>  U R<                  (       a-  UR                  [        R>                  " U R<                  S95        [         R                  " U S5      (       a-  UR                  [        R@                  " U RB                  S95        [         RD                  " U 5      (       a  UR9                  [G        U 5      5        [         R                  " U S5      (       d  [         R                  " U S5      (       a9  UR                  [        RH                  " U RJ                  U RL                  US95        [         R                  " U S5      (       a  U RN                  (       d-  [         R                  " U S5      (       aK  U RP                  (       a:  UR                  [        RR                  " U RN                  U RP                  5      5        [         RT                  " U 5      (       a  UR9                  [W        XS	95        [         R                  " U S5      (       aX  U RX                  (       aG  [[        X5        UR                  [        R\                  " U RX                  U5      5        [_        XU5        [         R                  " U S5      (       a?  U R`                  (       a.  UR                  [        Rb                  " U R`                  US95        [         R                  " U S5      (       aS  UR                  [        Rd                  " U Rf                  5      5        UR                  [        Rh                  " 5       5        [         R                  " U S5      (       a;  U Rj                  Rm                  5        H  u  pEUR9                  [o        XTS95        M     [         R                  " U S5      (       a|  U Rj                  Rm                  5        VVs0 s H)  u  pEURq                  S5      (       d  M  XERr                  _M+     nnnU(       a%  UR                  [        Rh                  " U5      5        U$ s  snnf )zOReturns a list of changes shared by multiple resources, based on the flags set.revision_suffixmeshTrt   )rs   	mesh_nameservice_account)r   r   r-   r   r'   r3   r2   gpu_zonal_redundancy)r   r   r   )r   r   r-   remove_volumeclear_volumes
add_volumer   )r   r-   remove_containers
containers)rg   
depends_on):r   r?   r4   r   RevisionNameChanger   
MeshChanger
   r|   r}   rs   r~   r   rM   rQ   r[   r_   r   ServiceAccountChanger   r   r   r   r   r'   r   r   r   r   r7   r3   r6   GpuZonalRedundancyChanger   HasCloudSQLChangesr   r   r   r   r   r   RemoveVolumeChanger   rq   r   $_ValidateAndMaybeGenerateVolumeNamesAddVolumeChange_MaybeAddVolumeMountChanger   r   RemoveContainersChanger   ContainerDependenciesChanger   itemsr   r#   r   )r'   release_trackr-   r(   rg   r   dependency_changess          r    _GetTemplateConfigurationChangesr   d  s    '
t%677NN>44T5I5IJK
tV,,NN!!%%**22666Eii	
 NN$T*+NN$T*+$4#7#7NN++ 00	
 T7

 6NN""JJ)9	

 $4<<3NN--LL+;	

 t^		-NN**II(8	

 NN>$JK	..H 4DMMNN>//GH
t%;<<NN//!%!:!:	
 d##NN&t,-

!   '<==NN..3311-	
 o664;M;Mo664;M;MNN)) 2 2	

 T""NN%dNO
t\22t(=NN&&tF tm<&899


NN++,,-	
 t%899NN--d.D.DE NN>==?@ t\22*.//*?*?*A&nn
+ +B t\22 /3oo.C.C.E.E*N%%l3 	2111.E  
 nn

4
45G
H 
.s    Z! Z!c                    [         R                  " S[        R                  " [	        U SS5      =(       d(    U R
                  =(       d    U R                  =(       d    0 5      [        R                  " [	        U SS5      =(       d    / 5      [        U R
                  =(       d    U R                  =(       d    U R                  5      S.UD6$ )z7Returns the env var literal changes for the given args.update_env_varsNremove_env_vars)rd   re   rf   r   )
r   EnvVarLiteralChangesr   rh   ri   set_env_varsenv_vars_filerm   rn   clear_env_vars)r'   kwargss     r   r   r     s    		,	, 
oo
$)4
0  	 oogd,=tDJK



Ht11
HT5H5H
 	
 r   c                 6    / SQn[         R                  " X5      $ )z?Returns true iff any worker pool scaling changes are specified.)minmaxscalingrJ   )r'   scaling_flagss     r   _HasWorkerPoolScalingChangesr     s    -
 
		$	..r   c                    U[         R                  R                  :X  aB  U R                  (       a1  U R                  R                  (       a  [
        R                  " S5      e[        R                  " SU ;   a  U R                  b  U R                  OSSU ;   a  U R                  b  U R                  OSSU ;   a  U R                  b  U R                  S9$ SS9$ )zPReturn the changes for engine-level scaling for Worker Pools for the given args.z+Automatic scaling is not supported in BETA.r   Nr   r   )min_instance_countmax_instance_countr   )r   ReleaseTrackBETAr   auto_scalingr   rl   r   WorkerPoolScalingChanger   r   )r'   r   s     r   _GetWorkerPoolScalingChanger     s     d'',,,||11))
7  
	/	/	$488/ 	$488/ 	d	t||7 ll

 
 

 
r   c                 6    / SQn[         R                  " X5      $ )z@Returns true iff any binary authorization changes are specified.)binary_authorizationclear_binary_authorization
breakglassrJ   )r'   bin_auth_flagss     r   _HasBinaryAuthorizationChangesr     s    .
 
		$	//r   c                    / n[         R                  " U S5      (       a-  UR                  [        R                  " U R
                  S95        [         R                  " U S5      (       a#  UR                  [        R                  " SS95        [         R                  " U S5      (       a-  UR                  [        R                  " U R                  S95        U$ )z<Returns the binary authorization changes for the given args.r   )policyr   T)r   r   )breakglass_justification)r   r?   r4   r   BinaryAuthorizationChanger   r   )r'   r(   s     r   _GetBinaryAuthorizationChangesr   $  s    '
t%;<<NN00,,	

 t%ABBNN00'+	

 t\22NN00%)__	

 
.r   c                     U R                   (       a  [        R                  " SS9$ U R                  (       a  [        R                  " U R                  S9$ g)z6Returns the instance split changes for the given args.T)	to_latest)to_revisionsN)r   r   InstanceSplitChanger   rP   s    r   _GetInstanceSplitChangesr   <  s?    	^^--==--4;L;LMM r   c                    [         R                  " U S5      nU[        R                  R                  :X  aR  U R
                   HA  nSU;   d  M  U(       a  [        R                  " S5      eSU;  d  M0  [        US   5      US'   MC     gg)a  Validates used of the volumes shortcut and generates volume names when needed.

Specifically, it checks that the 'mount-path' parameter is not being used
with the --containers flag and that the volume type is an allowed type. If
validation succeeds and the volume also needs a name, one is generated.

Args:
  args: The argparse namespace containing the parsed command line arguments.
  release_track: The current release track (e.g., base.ReleaseTrack.ALPHA).
r   
mount-pathzWhen using the --containers flag, "mount-path" cannot be specified under the --add-volume flag. Instead, specify "mount-path" using the --add-volume-mount flag after the --container flag of the container the volume should be mounted to.nametypeN)	r   r?   r   r   ALPHAr   r   rl   r   )r'   r   uses_containers_flagvolumes       r   r   r   E  s     224Fd''---// 
	--  -fVn=&. " .r   c                    U[         R                  R                  :X  am  / nU R                   H/  nSU;   d  M  SU;   d  M  US   US   S.nUR	                  U5        M1     U(       a$  UR	                  [
        R                  " US95        ggg)a	  Adds a VolumeMountChange to the list of changes if applicable.

This function checks if new volume mounts should be added based on the
`--add-volume` flag in ALPHA release track. If a volume in `args.add_volume`
has a 'mount-path', a corresponding AddVolumeMountChange
is appended to the `changes` list.

Args:
  args: The argparse namespace containing the parsed command line arguments.
  changes: A list of configuration changes to append to.
  release_track: The current release track (e.g., base.ReleaseTrack.ALPHA).
r   r   )r   r   )r   N)r   r   r   r   r4   r   r   )r'   r(   r   new_volume_mountsr   volume_mount_argss         r   r   r   d  s     d''---//		Ff$4Vn .
 	  !23 " nn

-
-*  .r   c                    / n[         R                  " U S5      (       a/  UR                  [        R                  " U R
                  5      5        [         R                  " U 5      (       a  UR                  [        U 5      5        [        U 5      (       a  UR                  [        U 5      5        UR                  [        XSS95        [        U 5      (       a  UR                  [        X5      5        [         R                  " U 5      (       a  UR                  [        U 5      5        SU ;   a5  U R                   (       a$  UR                  [        R"                  " 5       5        [%        X5        U$ )zLReturns a list of changes to the worker pool config, based on the flags set.descriptionTr   
no_promote)r   r?   r4   r   DescriptionChanger   HasLabelChangesrA   r   r   r   r   r   r   HasInstanceSplitChangesr   r   NoPromoteChanger*   )r'   r   r(   s      r   !GetWorkerPoolConfigurationChangesr     s   '
t]33NN>33D4D4DEF
4  NN#D)*#D))NN1$78	..&
 "$''NN.tCD
""4((NN+D12TdooNN>1134$T3	.r   )F)FN)NT)&__doc__googlecloudsdk.callioper   googlecloudsdk.command_lib.runr   r   -googlecloudsdk.command_lib.run.config_changesr   !googlecloudsdk.command_lib.run.v2r   $googlecloudsdk.command_lib.util.argsr   googlecloudsdk.corer	   r
   r   r   r   r*   r7   rA   rM   rQ   r[   r_   rq   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>r      s    g ( 5 0 L < 9 & *%
 "4&
/
0&B0h ;?Tp +0CL"/*00N>><r   