
    wO                         d Z ddlmZ ddlmZ ddlmZ ddlmZ ddlm	Z	 ddl
mZ ddl
mZ d	 Zd
 Zd Zd ZddZd Zd Zd Zd Zd Zd dZd Z	 d!dZ	 ddZd Zd Zd Zd Zd Zd Z d Z!y)"z`Parsers given command arguments for the Cloud Run V2 command surface into configuration changes.    )base)
exceptions)flags)config_changes)repeated)config)
propertiesc                  0    t        j                  dd      S )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    t               j                  |        y)z8Adds flags for creating, updating, and deleting secrets.N)r   AddToParserparsers    r   AddSecretsFlagsr   )   s    .V$r   c                 :    t        j                  | ddddd       y)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                     d| v rv| j                  d      xs | j                  d      }|j                  dt        j                  |r| j                  nd|r| j
                  nt        j                               yy)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                    g }d| v r<| j                   r0|j                  t        j                  | j                   |             d| v r<| j                  r0|j                  t        j                  | j                  |             d| v rp| j
                  rd|j                  t        j                  | j
                  |             | j
                  dk(  r%|j                  t        j                  d	             |S )
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   _GetResourceLimitsChangesr6   O   s    '$++NN++;;1A	

 d]txxNN+++;	

 d]txxNN+++;	

 xx3nn^112>?	.r   c                 2   i }t        j                  | d      r| j                  }n"t        j                  | d      r| j                  }t        j                  | d      r| j                  ng }t        j                  ||d| v r| j                        S d      S )z-Returns the label changes for the given args.labelsupdate_labelsremove_labelsclear_labelsF)	additionssubtractionsr;   )r   FlagIsExplicitlySetr8   r9   r:   r   LabelChanger;   )r&   r<   r=   s      r   _GetLabelChangesr@   i   s    )
tX.I  7""I 
	"	"4	9  
 
	#	#(6$(>4$$
  EJ
 r   c                 6    g d}t        j                  | |      S )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   _HasNetworkChangesrL   |   s    - 
		$	..r   c           	         t        j                  | j                  | j                  | j                  t        j                  | d      r| j                  ng d| v r| j                  ndd| v r| j                        S d      S )NrF   rG   FrH   rB   )
r   VpcAccessChangesrC   rD   rE   r   r>   rF   rG   rH   r&   s    r   _GetNetworkChangerP      s|    		(	(ll[[		"	"4	8 $$*9T*AD&&u		% 00
  
 r   c                 6    g d}t        j                  | |      S )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_hoursrI   )r&   cmek_key_flagss     r   _HasCmekKeyChangesrZ      s    . 
		$	//r   c                    t        j                  t        j                  | d      r| j                  nd t        j                  | d      r| j
                  nd t        j                  | d      rt        | j                        nd t        j                  | d      t        j                  | d      t        j                  | d            S )NrS   rT   rU   rV   rW   rX   rR   )r   CmekKeyChangesr   r>   rS   rT   intrU   rO   s    r   _GetCmekKeyChanger^      s    		&	&//e<$(($		"	"4)J	K '+&J&J		"	"4)H	I %((J(J$K))$<,1,E,E
7- +0*C*C
5+
 r   Nc           	         g }t        j                  t        | dd      xs | j                  xs i       }|D ](  }|j	                  d      st        j                  d       t        j                  t        | dd      xs g       }|D ](  }|j	                  d      st        j                  d       t        | j                  xs | j                        }|s|s|r)|j                  t        j                  |||||             |S )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_secretsr3   r   SecretsEnvVarChanges)r&   r,   rf   r'   rc   rS   rd   re   s           r   _GetSecretsChangesrp      s    'OOd$d+Et/?/?E2' c
~~c))
G   OOGD*:DAGRH'c
~~c))
G   d&&<$*<*<=,<NN++%)-	
 
.r   c                    t        j                  |       }t        | dd      xs4 t        j                  j
                  j                  j                  d      }t        j                  |       rt        j                          g }t        j                  | d      r?| j                  r3|j                  t        j                  ||| j                               |S t        j                  | d      r?| j                  r3|j                  t        j                   ||| j                               |S t        j                  | d	      r1| j"                  r%|j                  t        j$                                |S t        j                  | d
      r=| j&                  r1|j                  t        j(                  ||| j&                               |S )z1Returns the Cloud SQL changes for the given args.projectNTrequiredadd_cloudsql_instances)rr   regionru   remove_cloudsql_instances)rr   rv   rw   clear_cloudsql_instancesset_cloudsql_instances)rr   rv   ry   )r   	GetRegionrh   r	   VALUEScorerr   GetEnabledCloudSqlApiRequiredCheckCloudSQLApiEnablementr>   ru   r3   r   AddCloudSQLChangesrw   RemoveCloudSQLChangesrx   ClearCloudSQLChangesry   SetCloudSQLChanges)r&   rv   rr   changes       r   _GetCloudSQLChangesr      s   ??4 &
It 9%%))4)8 
 %%d+	$$&&&>?

%
%
MM))#'#>#>	
D 
-5 &AB

(
(
MM,,&*&D&D	
. 
- &@A

'
'
MM.5578 
- &>?

%
%
MM))#'#>#>	
 
-r   c                    g }t        | d      r=| j                  1|j                  t        j                  | j                  ||             t        j                  |       r|j                  t        | ||             | j                  d      r1|j                  t        j                  | j                  ||             | j                  d      r1|j                  t        j                  | j                  ||             | j                  d      r1|j                  t        j                  | j                  ||             | j                  d      r1|j                  t        j                  | j                  ||             t        j                   | d	      st        j                   | d
      r<|j                  t        j"                  | j$                  | j&                  ||             t        j(                  |       r|j+                  t-        | ||             t        j                   | d      r1|j                  t        j.                  | j0                  ||             |S )z,Returns per-container configuration changes.image)rf   r,   r-   )r-   rf   r,   r+   )r+   rf   r,   commandr&   remove_volume_mountclear_volume_mounts)removed_mountsclear_mountsrf   r,   add_volume_mount)
new_mountsrf   r,   )hasattrr   r3   r   ImageChanger   HasEnvChanges_GetEnvChangesr"   r4   r-   r+   ContainerCommandChanger   ContainerArgsChanger&   r>   RemoveVolumeMountChanger   r   HasSecretsChangesextendrp   AddVolumeMountChanger   )container_argsrf   r,   r'   s       r   !_GetContainerConfigurationChangesr     s#    ' ^W%.*>*>*JNN""  )-	
 (NN)-	
 &NN++"")-	
 )NN++!(()-	
 	*NN--"")-	
 'NN**)-	
 +  1FGNN..)==';;)-		
 ^,NN)-	
 ~/ABNN++%66)-	
 
.r   c                    g }t        j                  | d      r.|j                  t        j                  | j
                               t        j                  | d      rb|j                  t        j                  t        j                  j                  j                  j                  d      | j                               t        |       r|j                  t        |              t        |       r|j                  t!        |              d| v r;| j"                  r/|j                  t        j$                  | j"                               t'        | d      r<| j(                  0|j                  t        j*                  | j(                  |	             d
| v r<| j,                  0|j                  t        j.                  | j,                  |	             d| v r<| j0                  0|j                  t        j2                  | j0                  |	             t        j4                  |       r|j                  t7        | |	             |j9                  t;        | |	             d| v r;| j<                  r/|j                  t        j>                  | j<                               t        j                  | d      r/|j                  t        j@                  | jB                               t        jD                  |       r|j9                  tG        |              t        j                  | d      st        j                  | d      r;|j                  t        jH                  | jJ                  | jL                  |             t        j                  | d      r| jN                  s"t        j                  | d      rE| jP                  r9|j                  t        jR                  | jN                  | jP                               t        jT                  |       r|j9                  tW        | |	             t        j                  | d      r;| jX                  r/|j                  t        jZ                  | jX                  |             t        j                  | d      r<| j\                  r0|j                  t        j^                  | j\                  |             t        j                  | d      rQ|j                  t        j`                  | jb                               |j                  t        jd                                t        j                  | d      r>| jf                  ji                         D ]!  \  }}|j9                  tk        ||             # t        j                  | d      rn| jf                  ji                         D ci c]#  \  }}|jm                  d      r||jn                  % }}}|r$|j                  t        jd                  |             |S c c}}w )zOReturns a list of changes shared by multiple resources, based on the flags set.revision_suffixmeshTrs   )rr   	mesh_nameservice_account)r   r   r,   r   r&   r2   r1   gpu_zonal_redundancy)r   r   r   )r   r   r,   remove_volumeclear_volumes
add_volumer   )r   r,   remove_containers
containers)rf   
depends_on)8r   r>   r3   r   RevisionNameChanger   
MeshChanger	   r{   r|   rr   r}   r   rL   rP   rZ   r^   r   ServiceAccountChanger   r   r   r   r   r&   r   r   r   r   r6   r2   r5   GpuZonalRedundancyChanger   HasCloudSQLChangesr   r   r   r   r   r   RemoveVolumeChanger   rp   r   AddVolumeChanger   r   RemoveContainersChanger   ContainerDependenciesChanger   itemsr   r"   r   )r&   release_trackr,   r'   rf   r   dependency_changess          r    _GetTemplateConfigurationChangesr   c  s    '
t%6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>$9IJK	..7GH 4DMMNN>//GH
t%;<NN//!%!:!:	
 d#NN&t,-

!  '<=NN..3311-	
 o64;M;Mo64;M;MNN)) 2 2	

 T"NN%d=MNO
t\2tNN&&tF &89


NN++,,-	
 t%89NN--d.D.DE NN>==?@ t\2*.//*?*?*A&nn
+^ +B t\2 /3oo.C.C.E.E*NN%%l3 	111.E  
 nn

4
45G
H 
.s   6(X	c                 R   t        j                  dt        j                  t	        | dd      xs | j
                  xs | j                  xs i       t        j                  t	        | dd      xs g       t        | j
                  xs | j                  xs | j                        d|S )z7Returns the env var literal changes for the given args.update_env_varsNremove_env_vars)rc   rd   re   r   )
r   EnvVarLiteralChangesr   rg   rh   set_env_varsenv_vars_filerl   rm   clear_env_vars)r&   kwargss     r   r   r     s    		,	, 
oo
$)4
0  	 oogd,=tDJK



Ht11
HT5H5H
 	
 r   c                 6    g d}t        j                  | |      S )z?Returns true iff any worker pool scaling changes are specified.)minmaxscalingrI   )r&   scaling_flagss     r   _HasWorkerPoolScalingChangesr     s    -
 
		$	..r   c                    |t         j                  j                  k(  r7| j                  r+| j                  j                  rt        j                  d      t        j                  d| v r| j                  | j                  ndd| v r| j                  | j                  ndd| v r| j                  | j                        S d      S )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   rk   r   WorkerPoolScalingChanger   r   )r&   r   s     r   _GetWorkerPoolScalingChanger     s     d'',,,||11))
7  
	/	/	$488/ 	$488/ 	d	t||7 ll

 
 

 
r   c                 6    g d}t        j                  | |      S )z@Returns true iff any binary authorization changes are specified.)binary_authorizationclear_binary_authorization
breakglassrI   )r&   bin_auth_flagss     r   _HasBinaryAuthorizationChangesr     s    .
 
		$	//r   c                    g }t        j                  | d      r/|j                  t        j                  | j
                               t        j                  | d      r%|j                  t        j                  d             t        j                  | d      r/|j                  t        j                  | j                               |S )z<Returns the binary authorization changes for the given args.r   )policyr   T)r   r   )breakglass_justification)r   r>   r3   r   BinaryAuthorizationChanger   r   )r&   r'   s     r   _GetBinaryAuthorizationChangesr      s    '
t%;<NN00,,	

 t%ABNN00'+	

 t\2NN00%)__	

 
.r   c                     | j                   rt        j                  d      S | j                  r t        j                  | j                        S y)z6Returns the instance split changes for the given args.T)	to_latest)to_revisionsN)r   r   InstanceSplitChanger   rO   s    r   _GetInstanceSplitChangesr   8  s?    	^^--==--4;L;LMM r   c                    g }t        j                  | d      r.|j                  t        j                  | j
                               t        j                  |       r|j                  t        |              t        |       r|j                  t        |              |j                  t        | |d             t        |       r|j                  t        | |             t        j                  |       r|j                  t        |              d| v r/| j                   r#|j                  t        j"                                t%        | |       |S )zLReturns a list of changes to the worker pool config, based on the flags set.descriptionTr   
no_promote)r   r>   r3   r   DescriptionChanger   HasLabelChangesr@   r   r   r   r   r   r   HasInstanceSplitChangesr   r   NoPromoteChanger)   )r&   r   r'   s      r   !GetWorkerPoolConfigurationChangesr   A  s    '
t]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$T73	.r   )F)FN)NT)"__doc__googlecloudsdk.callioper   googlecloudsdk.command_lib.runr   r   !googlecloudsdk.command_lib.run.v2r   $googlecloudsdk.command_lib.util.argsr   googlecloudsdk.corer   r	   r   r   r   r)   r6   r@   rL   rP   rZ   r^   rp   r   r   r   r   r   r   r   r   r   r   r   r   r   <module>r      s    g ( 5 0 < 9 & *%
 "4&
/
0&B0h ;?Tp +0@F"/*00Nr   