
    /                        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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dlmZ ddlmZ ddlmZ ddlmZ ej2                  ej4                  j6                  fd       Zej2                   ej:                  ej4                  j6                         G d dej<                                      Z ej:                  ej4                  j@                         G d de             Z! ej:                  ej4                  jD                         G d de!             Z#ej                   e#_         y)z;Command for updating env vars and other configuration info.    )
k8s_object)traffic)base)config_changes)connection_context)container_parser)
exceptions)flags)messages_util)pretty_print)resource_args)resource_change_validators)serverless_operations)stages)concept_parsers)presentation_specs)
properties)progress_trackerc                    d}t        j                  |      }|j                  t        j                  d             |j                  t        j
                                |j                  t        j                                |j                  t        j                  |              |j                  t        j                                |j                  t        j                                |j                  t        j                                |j                  t        j                                |j                  t        j                                |j                  t        j                                |j                  t        j                                |j                  t        j                                |j                  t        j                                 |j                  t        j"                                |j                  t        j$                                |j                  t        j&                                |S )z=Returns an argument group with all per-container update args.z
Container Flags

    If the --container or --remove-containers flag is specified the following
    arguments may only be specified after a --container flag.
    )helpF)required)release_track)r   ArgumentGroupAddArgumentr
   ImageArgPortArg	Http2FlagMutexEnvVarsFlags
MemoryFlagCpuFlagCommandFlagArgsFlagSecretsFlagsDependsOnFlagAddVolumeMountFlagRemoveVolumeMountFlagClearVolumeMountsFlagStartupProbeFlagLivenessProbeFlagGpuFlag)r   	help_textgroups      "lib/surface/run/services/update.pyContainerArgGroupr.   %   s   ) 

)
,%ENNE23EMMO$EOO%&E++-HIE$$&'EMMO$E%%'(ENN$%E&&()E'')*E,,./E//12E//12E**,-E++-.EMMO$	,    c                   j    e Zd ZdZdddZdZed        Zed        Zd Z	d	 Z
ddZd Zd Zd Zd Zy
)UpdateHUpdate Cloud Run environment variables and other configuration settings.z"          {description}
          z          To update one or more env vars:

              $ {command} myservice --update-env-vars=KEY1=VALUE1,KEY2=VALUE2
         )DESCRIPTIONEXAMPLESzZ`--update-env-vars`, `--memory`, `--concurrency`, `--timeout`, `--connectivity`, `--image`c                 @   t        j                  |       t        j                  |       t        j                  |       t        j                  |       t        j
                  |       t        j                  |       t        j                  |       t        j                  |       t        j                  |       t        j                  |       t        j                  |       t        j                  |       t        j                  |       t        j                  |       t        j                  |       t        j                   |       t        j"                  |       t        j$                  |       t        j&                         j)                  |       t        j*                  || j-                                t        j.                  |       t        j0                  |       t        j2                  |       t        j4                  |       t         j6                  j)                  |       t9        j:                  dt=        j>                  d      ddd      }t        j@                  |       t        jB                  |       t        jD                  |       t        jF                  |       t        jH                  |       t        jJ                  |       t        jL                  |       t        jN                  |       t        jP                  |       t        jR                  |       t        jT                  |       t        jV                  |       tY        jZ                  |g      j)                  |       |j\                  j_                  d       y )NSERVICET)promptz'Service to update the configuration of.F)r   prefixesnone)0r
   AddBinAuthzPolicyFlagsAddBinAuthzBreakglassFlagAddCloudSQLFlagsAddCmekKeyFlag"AddCmekKeyRevocationActionTypeFlagAddCpuThrottlingFlagAddCustomAudiencesFlagAddDefaultUrlFlagAddEgressSettingsFlag!AddEncryptionKeyShutdownHoursFlagAddGpuTypeFlagGpuZonalRedundancyFlagAddRevisionSuffixArgAddSandboxArgAddSessionAffinityFlagAddStartupCpuBoostFlagAddVpcConnectorArgs AddVpcNetworkGroupFlagsForUpdateRemoveContainersFlagAddToParserAddVolumesFlagsReleaseTrackAddServiceMinMaxInstancesFlagAddInvokerIamCheckFlagAddScalingFlagAddEndpointVisibilityEnumCONFIG_MAP_FLAGSr   ResourcePresentationSpecr   GetServiceResourceSpecAddConcurrencyFlagAddTimeoutFlagAddAsyncFlagAddLabelsFlagsAddGeneralAnnotationFlagsAddMinInstancesFlagAddMaxInstancesFlagAddNoTrafficFlagAddDeployTagFlagAddServiceAccountFlagAddClientNameAndVersionFlagsAddIngressFlagr   ConceptParserdisplay_info	AddFormat)clsparserservice_presentations      r-   
CommonArgszUpdate.CommonArgsZ   s    
  (	##F+	6"	 	,,V4	v&	  (	F#	'	++F3	 	  (	v&		  (	  (	f%	**62	 ,,V4	&#"2"2"45	''/	  (	 	##F+	&&v. .FF,,D91 
V$	 	v	 	##F+	f%	f%	6"	6"	'	&&v.	 !!#7"89EEfM
!!&)r/   c                     t         j                  |       t        | j                               }t	        j
                  ||       y N)r1   ri   r.   rO   r   AddContainerFlagsrf   rg   container_argss      r-   ArgszUpdate.Args   s3    
f&s'7'7'9:N&&v~>r/   c                 |    t        j                  |t        j                  j                  | j                               S rk   )r   GetConnectionContextr
   ProductRUNrO   selfargss     r-   _ConnectionContextzUpdate._ConnectionContext   s/    22emm!2!2!4 r/   c                     |ry |r+t        |      dk(  rBt        |d   t        j                        r$t	        j
                  dj                  |            y y )N   r   zHNo configuration change requested. Did you mean to include the flags {}?)len
isinstancer   'SetClientNameAndVersionAnnotationChanger	   NoConfigurationChangeErrorformat)ru   changes
flags_textignore_emptys       r-   _AssertChangeszUpdate._AssertChanges   s]    GAJBB

 11228&2D 
 	r/   Nc                 R   t        j                  || j                               }| j                  || j                  |       |j                  dt        j                  t        j                               |j                  t        j                  | j                                      |S )Nr   )r
   GetServiceConfigurationChangesrO   r   input_flagsinsertr   DeleteAnnotationChanger   BINAUTHZ_BREAKGLASS_ANNOTATIONappendSetLaunchStageAnnotationChange)ru   rv   existing_servicer   r   s        r-   _GetBaseChangeszUpdate._GetBaseChanges   s    2249J9J9LMG!1!1<@NN	--55	
 NN55d6G6G6IJ Nr/   c                      yNF )ru   s    r-   _IsMultiRegionzUpdate._IsMultiRegion   s    r/   c                      y rk   r   )ru   r   services      r-   _GetMultiRegionRegionszUpdate._GetMultiRegionRegions   s    r/   c                 H    t        j                  |d      r|j                  S y )Niap)r
   FlagIsExplicitlySetr   rt   s     r-   _GetIapzUpdate._GetIap   s      u-XXor/   c                    	
  j                        }j                  j                  j                         t	        j
                          j                        t        j                  |      5 		j                        t        j                          j                        }t        j                         du xs t        j                   j"                  v }t%        j&                  |      } j)                  |      t+        j,                  d|xr ||du      
|rddd}nddd	}	
 f
d
}	  ||      j:                  r1t=        j>                  djA                  jB                  |             ne|r4t=        j>                  t        jD                  jF                               n/t=        j>                  djA                  jB                               cddd       S # t.        j0                  $ rZ}t	        j2                  t5        |            r.|j7                  t%        j8                  d              ||      n|Y d}~d}~ww xY w# 1 sw Y   yxY w)a   Update the service resource.

       Different from `deploy` in that it can only update the service spec but
       no IAM or Cloud build changes.

    Args:
      args: Args!

    Returns:
      googlecloudsdk.api_lib.run.Service, the updated service
    NF)include_iam_policy_setinclude_routeinclude_create_revisionregions_listinclude_iapzDeploying...zDeployment failed	deployingzUpdating...zUpdate failedupdatingc                   
 t        j                  j                        5 }j                  | 	j	                         |j                  
t        j                  d      xs t        j                  d      t        j                  j                  j                  j                         dk(  
      cd d d        S # 1 sw Y   y xY w)N)failure_messagesuppress_outputrevision_suffixtagdebug)asynprefetchgenerate_name
is_verboseiap_enabledmultiregion_regions)r   StagedProgressTrackerasync_ReleaseServicerO   r
   r   r   VALUEScore	verbosityGet)changes_trackerrv   clientdeployment_stagesr   r   r   progress_messageru   r   service_refs     r-   _ReleaseServicez#Update.Run.<locals>._ReleaseService   s    33+ KK	

 &&!;;++D2CD <..tU;#**//99==?7J"5 ' 
 
 
s   BCC
)gpu_zonal_redundancyzEService [{{bold}}{serv}{{reset}}] is {result_message} asynchronously.)servresult_messagez3Service [{{bold}}{serv}{{reset}}] has been updated.)r   )$rw   CONCEPTSr   Parser
   ValidateResourcer   r   Connect
GetServicer   MaybeLogDefaultGpuTypeMessager   r   ValidateClearVpcConnectorr   LATEST_REVISION_KEYspec_trafficr   AdjustsTemplater   r   ServiceStagesr	   	HttpErrorShouldRetryNoZonalRedundancystrr   GpuZonalRedundancyChanger   r   Successr~   name%GetSuccessMessageForSynchronousDeploy
no_traffic)ru   rv   conn_contextr   
has_latestcreates_revisionr   r   er   r   r   r   r   r   r   r   s   ``       @@@@@@@@r-   Runz
Update.Run   sL    **40L--''--/K	;'
,,t
C		&	&|	4!!+.g11$@$$T73g ::7DI
T/
PW88G<P<PP  (77@ 77I ..!&(7Z"2*o 
)-$()# .!'* 
$f\\. % 	
 


AA4?? 

CJJ|| K 
 e 
5	4f !! 	--dCF;
..55',
 $G,'' 	g 
5	4s9   ;CI7HB#I7I4AI/)I7/I44I77J r   )__name__
__module____qualname____doc__detailed_helpr   classmethodri   ro   rw   r   r   r   r   r   r   r   r/   r-   r1   r1   E   sp     Q		-% 
 3* 3*j ? ?


cr/   r1   c                   $    e Zd ZdZdZed        Zy)
BetaUpdater2   c`--update-env-vars`, `--memory`, `--concurrency`, `--timeout`, `--connectivity`, `--image`, `--iap`c                    | j                  |       t        j                  |       t        j                  j	                  |       t        j
                  |       t        | j                               }t        j                  ||       y rk   )
ri   r
   AddDeployHealthCheckFlagSERVICE_MESH_FLAGrM   
AddIapFlagr.   rO   r   rl   rm   s      r-   ro   zBetaUpdate.Args2  sc    NN6 
""6*	''/	V&s'7'7'9:N&&v~>r/   Nr   r   r   r   r   r   ro   r   r/   r-   r   r   )  s#    P. 
 ? ?r/   r   c                   $    e Zd ZdZdZed        Zy)AlphaUpdater2   r   c                    | j                  |       t        j                  |       t        j                  |       t        j                  |       t        j
                  |       t        j                  j                  |       t        j                  j                  |       t        j                  j                  |       t        j                  j                  |       t        j                  |       t        j                  |       t        | j                               }|j                  t        j                                 t#        j$                  ||       y rk   )ri   r
   r   r   AddRuntimeFlagAddDescriptionFlagr   rM   IDENTITY_FLAG ENABLE_WORKLOAD_CERTIFICATE_FLAGMESH_DATAPLANE_FLAGAddOverflowScalingFlagAddClearPresetFlagr.   rO   r   ReadinessProbeFlagr   rl   rm   s      r-   ro   zAlphaUpdate.ArgsG  s    NN6 
""6*	V	 	V$	''/	##F+	**66v>	))&1	  (	V$&s'7'7'9:Nu779:&&v~>r/   Nr   r   r/   r-   r   r   >  s#    P. 
 ? ?r/   r   N)$r   googlecloudsdk.api_lib.runr   r   googlecloudsdk.callioper   googlecloudsdk.command_lib.runr   r   r   r	   r
   r   r   r   r   r   r   (googlecloudsdk.command_lib.util.conceptsr   r   googlecloudsdk.corer   googlecloudsdk.core.consoler   UniverseCompatiblerO   GAr.   ReleaseTracksCommandr1   BETAr   ALPHAr   r   r/   r-   <module>r      s*   B 1 . ( 9 = ; 5 0 8 7 8 E @ 1 D G * 8 $($5$5$8$8  > D%%(()_T\\ _ * _D D%%**+? ? ,?( D%%++,?* ? -?8 nn r/   