
    \                        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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)log)
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   0   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)r0   r.   0 gpu_type)r-   appendr   ResourceLimitsChanger/   r0   GpuTypeChange)r(   r.   r)   s      r   _GetResourceLimitsChangesr8   Q   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   FlagIsExplicitlySetr:   r;   r<   r   LabelChanger=   )r(   r>   r?   s      r   _GetLabelChangesrB   k   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   _HasNetworkChangesrN   ~   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$ )NrH   rI   FrJ   rD   )
r   VpcAccessChangesrE   rF   rG   r   r@   rH   rI   rJ   r(   s    r   _GetNetworkChangerR      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_hoursrK   )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$ )NrU   rV   rW   rX   rY   rZ   rT   )r   CmekKeyChangesr   r@   rU   rV   intrW   rQ   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_secretsr5   r   SecretsEnvVarChanges)r(   r.   rh   r)   re   rU   rf   rg   s           r   _GetSecretsChangesrr      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)rt   regionrw   remove_cloudsql_instances)rt   rx   ry   clear_cloudsql_instancesset_cloudsql_instances)rt   rx   r{   )r   	GetRegionrj   r   VALUEScorert   GetEnabledCloudSqlApiRequiredCheckCloudSQLApiEnablementr@   rw   r5   r   AddCloudSQLChangesry   RemoveCloudSQLChangesrz   ClearCloudSQLChangesr{   SetCloudSQLChanges)r(   rx   rt   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)rh   r.   r/   )r/   rh   r.   r-   )r-   rh   r.   commandr(   remove_volume_mountclear_volume_mounts)removed_mountsclear_mountsrh   r.   add_volume_mount)
new_mountsrh   r.   )hasattrr   r5   r   ImageChanger   HasEnvChanges_GetEnvChangesr$   r6   r/   r-   ContainerCommandChanger   ContainerArgsChanger(   r@   RemoveVolumeMountChanger   r   HasSecretsChangesextendrr   AddVolumeMountChanger   )container_argsrh   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meshTru   )rt   	mesh_nameservice_account)r   r   r.   r   r(   r4   r3   gpu_zonal_redundancy)r   r   r   )r   r   r.   remove_volumeclear_volumes
add_volumer   )r   r.   remove_containers
containers)rh   
depends_on):r   r@   r5   r   RevisionNameChanger   
MeshChanger   r}   r~   rt   r   r   rN   rR   r\   r`   r   ServiceAccountChanger   r   r   r   r   r(   r   r   r   r   r8   r4   r7   GpuZonalRedundancyChanger   HasCloudSQLChangesr   r   r   r   r   r   RemoveVolumeChanger   rr   r   $_ValidateAndMaybeGenerateVolumeNamesAddVolumeChange_MaybeAddVolumeMountChanger   r   RemoveContainersChanger   ContainerDependenciesChanger   itemsr   r$   r   )r(   release_trackr.   r)   rh   r   dependency_changess          r    _GetTemplateConfigurationChangesr   e  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)re   rf   rg   r   )
r   EnvVarLiteralChangesr   ri   rj   set_env_varsenv_vars_filern   ro   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S/n[         R                  " X5      $ )z?Returns true iff any worker pool scaling changes are specified.	instancesscalingrK   )r(   scaling_flagss     r   _HasWorkerPoolScalingChangesr     s$     - 
		$	..r   c                    SU ;   a>  U R                   b1  U R                   R                  (       a  [        R                  " S5      eSnSU ;   a  U R                  b  U R                  nOQSU ;   aK  U R                   b>  [
        R                  " S5        [        R                  " U R                   R                  S9n[        R                  " US9$ )zEReturn the changes for instances for Worker Pools for the given args.r   Nzautomtatic scaling is deprecated for Worker Pools. Please use a positive number for --instances flag instead to specify a fixed instance count.r   z}The --scaling flag is deprecated for Worker Pools. Please use the --instances flag instead to specify a fixed instance count.)value)r   )r   auto_scalingr   rm   r   r
   warningr   InstanceValueinstance_countr   WorkerPoolInstancesChange)r(   r   s     r   _GetWorkerPoolInstancesChanger     s     4
,,
"
,,
#
#

'
'	  )DT^^7IDT\\5KK	G ##$,,*E*EFI		1	1I	FFr   c                 6    / SQn[         R                  " X5      $ )z@Returns true iff any binary authorization changes are specified.)binary_authorizationclear_binary_authorization
breakglassrK   )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@   r5   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   rQ   s    r   _GetInstanceSplitChangesr   E  s?    	^^--==--4;L;LMM r   c                    [         R                  " U S5      nU[        R                  R                  :w  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   ReleaseTrackGAr   r   rm   r   )r(   r   uses_containers_flagvolumes       r   r   r   N  s     224Fd''***// 
	--  -fVn=&. " +r   c                    U[         R                  R                  :w  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   r5   r   r   )r(   r)   r   new_volume_mountsr   volume_mount_argss         r   r   r   m  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                  [        U 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@   r5   r   DescriptionChanger   HasLabelChangesrB   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067
""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   r+   r8   rB   rN   rR   r\   r`   rr   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"/G<00N>><r   