
    Wk                     6   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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 S\5      r\	R8                  \	R:                  " \	R<                  R>                  5       " S S\	R@                  5      5       5       r!\	R:                  " \	R<                  RD                  5       " S S\!5      5       r#\	R:                  " \	R<                  RH                  5       " S S\#5      5       r%g)znCommands for updating backend services.

There are separate alpha, beta, and GA command classes in this file.
    )encoding)base_classes)client)base)
exceptions)cdn_flags_utils)flags)reference_utils)signed_url_flags)backend_services_utils)logc                 .    [         R                  " U SS9  g )Nar        Change the Identity Aware Proxy (IAP) service configuration for the
      backend service. You can set IAP to 'enabled' or 'disabled', or modify
      the OAuth2 client configuration (oauth2-client-id and
      oauth2-client-secret) used by IAP. If any fields are unspecified, their
      values will not be modified. For instance, if IAP is enabled,
      '--iap=disabled' will disable IAP, and a subsequent '--iap=enabled' will
      then enable it with the same OAuth2 client configuration as the first
      time it was enabled. See
      https://cloud.google.com/iap/ for more information about this feature.
      )help)r	   AddIap)parsers    .lib/surface/compute/backend_services/update.py
AddIapFlagr   (   s     ,,

    c                       \ rS rSrSrSrSrSrSrSr	\
S 5       r     SS jrS rS rS rS	 rS
 rS rS rS rSrg)UpdateHelper:   z,Helper class that updates a backend service.Nc                 >	   [         R                  R                  USS9  [         R                  " U5        [         R                  " 5       U l        U R
                  R                  USS9  [         R                  " 5       U l        U R                  R                  USS9  [         R                  " 5       U l	        U R                  R                  USS9  [         R                  " U5        [        R                  " SS[        R                  R                  S	S
9U l        U R                   R                  U5        [        R"                  " SS9U l        U R$                  R                  U5        [         R&                  " USS9  [         R(                  " U5        [         R*                  " USS9  [         R,                  " U5        [         R.                  " U5        [         R0                  " USS9  [         R2                  " USS9  [         R4                  " USS9  [         R6                  " U5        [         R8                  " U5        [         R:                  " USS9  [         R<                  " USS9  [>        R@                  " USSS9  [         RB                  " U5        U(       a  [         RD                  " U5        [         RF                  " USS9  [         RH                  " USS9  [         RJ                  " U5        [         RL                  " U5        [         RN                  " U5        [         RP                  " U5        [         RR                  " U5        [U        U5        [         RV                  " USSS9  [X        RZ                  " USSS9  [         R\                  " U5        [         R^                  " U5        [         R`                  " USSS9  [         Rb                  " USSS9  [         Rd                  " USS9  [         Rf                  " U5        [         Rh                  " U5        [         Rj                  " USS9  [         Rl                  " USS9  U(       a  [         Rn                  " X5        U(       a  [         Rp                  " U5        U(       a  [         Rr                  " U5        gg)z1Add all arguments for updating a backend service.update)operation_typeHEALTH_CHECK)cust_metavarHTTP_HEALTH_CHECKHTTPS_HEALTH_CHECKzbackend serviceTz2The security policy that will be set for this {0}.)resourceregion_hiddenscope_flags_usageshort_help_text)r   N)default)support_stateful_affinityF )requiredunspecified_help)remove_all_flagr#   )update_command)r&   	is_update)r*   )add_clear_argument):r	   #GLOBAL_REGIONAL_BACKEND_SERVICE_ARGAddArgumentAddDescriptionHealthCheckArgumentHEALTH_CHECK_ARGHttpHealthCheckArgumentHTTP_HEALTH_CHECK_ARGHttpsHealthCheckArgumentHTTPS_HEALTH_CHECK_ARGAddNoHealthCheckssecurity_policy_flags1SecurityPolicyMultiScopeArgumentForTargetResourcecompute_flagsScopeFlagsUsageUSE_EXISTING_SCOPE_FLAGSSECURITY_POLICY_ARG+EdgeSecurityPolicyArgumentForTargetResourceEDGE_SECURITY_POLICY_ARG
AddTimeoutAddPortNameAddProtocolAddConnectionDrainingTimeoutAddEnableCdnAddCacheKeyIncludeProtocolAddCacheKeyIncludeHostAddCacheKeyIncludeQueryStringAddCacheKeyQueryStringListAddCacheKeyExtendedCachingArgsAddSessionAffinityAddAffinityCookier   AddSignedUrlCacheMaxAgeAddSubsettingPolicyAddSubsettingSubsetSizeAddConnectionDrainOnFailoverAddDropTrafficIfUnhealthyAddFailoverRatioAddEnableLoggingAddLoggingSampleRateAddLoggingOptionalAddLoggingOptionalFieldsr   AddCustomRequestHeaders	cdn_flagsAddCdnPolicyArgsAddConnectionTrackingPolicyAddCompressionModeAddServiceLoadBalancingPolicyAddServiceBindingsAddLocalityLbPolicyAddIpAddressSelectionPolicyAddExternalMigrationAddBackendServiceTlsSettingsAddBackendServiceCustomMetricsAddDynamicForwardingAddZonalAffinityAddAllowMultinetwork)clsr   support_subsetting_subset_size"support_ip_port_dynamic_forwardingsupport_forward_proxysupport_zonal_affinitysupport_allow_multinetworks          r   ArgsUpdateHelper.ArgsC   s    
--99x : )	  446C$$V.$I % = = ?C))0 * 2!&!?!?!AC**1 + 3	F#	:	:	;&+;;%%D	G  ''/II&	(     ,,V4	VT*	f	fd+	&&v.	v	$$VT:	  6	''=	$$V,	((0	"& 
FdC,,5	f%%##F+	&&vt<	##FD9	6"	6"	v&	V$	""6*v	!!&$Mv'8N	%%f-	V$	''$O	VetD	f5	%%f-	v&	&&v$G	((DI)  ?V$!  ( "r   c                 N    Xl         UU l        X0l        X@l        XPl        X`l        g )N)_support_subsetting_subset_size#_support_ip_port_dynamic_forwarding_support_forward_proxy_support_zonal_affinity_support_allow_multinetwork_release_track)selfrd   re   rf   rg   rh   release_tracks          r   __init__UpdateHelper.__init__   s0     ,J(* 	, #8#9 'A$'r   c           	         [         R                  " U5      n/ nUR                  5       S:X  a  UR                  OSnUR                  b(  UR
                  R                  UR                  S9Ul        UR                  b  / Ul	        UR                  b  UR                  Ul	        UR                  (       d  UR                  S5        UR                  b  UR                  Ul        UR                  (       a  / Ul        UR                  (       d  UR                  S5        UR                  S5      (       a  UR                   Ul        ["        R$                  " X0U5      n	U	(       a  Xl        UR                  S5      (       a  / Ul        UR                  S	5        UR(                  (       a  UR(                  Ul        UR,                  (       a  UR,                  Ul        UR0                  (       a4  UR
                  R2                  R5                  UR0                  5      Ul        UR6                  b  UR6                  Ul        O?UR8                  (       d.  UR:                  (       a  [<        R>                  " S
5        SUl        UR@                  bU  UR
                  R2                  RC                  UR@                  5      Ul"        UR@                  S:w  a  UR                  S5        [F        RH                  " XU5        UR                  b(  UR
                  R                  UR                  S9Ul        [F        RJ                  " XX`RL                  5        URN                  b4  UR
                  R2                  RQ                  URN                  5      Ul)        URT                  b  SUl)        UR                  S5        [F        RV                  " UUUSSUS9  [F        RX                  " XU5        URZ                  b4  UR
                  R2                  R]                  URZ                  5      Ul/        U Ra                  XRb                  XF5        [F        Rd                  " UR
                  X65        [F        Rf                  " UR
                  UUUS9  URh                  b:  [j        Rl                  " URn                  UURh                  U Rp                  S9Ul9        URt                  b  SUl9        UR                  S5        URv                  bA  URv                   V
s/ s H$  n
[j        Rx                  " URn                  X5      PM&     sn
Ul=        UR|                  b  / Ul=        UR                  S5        [F        R~                  " XU5        UR                  b4  UR
                  R2                  R                  UR                  5      UlB        UR                  b  UR                  UlD        UR                  b0  SUlB        SUlD        UR                  S5        UR                  S5        UR                  b4  UR
                  R2                  R                  UR                  5      UlH        UR                  b/  [F        R                  " UUUURn                  UU Rp                  5        UR                  b  SUlL        UR                  S5        UR                  (       a  UR                  UlN        UR                  (       a  UR                  UlN        UR                  (       a  / UlN        UR                  S5        U R                  (       a  [F        R                  " XU5        U R                  (       a  [F        R                  " XU5        U R                  (       a  [F        R                  " XU5        U R                  (       a'  UR                  S5      (       a  UR                  UlY        Xg4$ s  sn
f )zModify Backend Service.compute.regionBackendServicesglobalN)drainingTimeoutSeccustomRequestHeaderscustomResponseHeadersdescriptionno_health_checkshealthCheckszSetting a cache mode also enabled Cloud CDN, which was previously disabled. If this was not intended, disable Cloud CDN with `--no-enable-cdn`.TSTRONG_COOKIE_AFFINITYstrongSessionAffinityCookielocalityLbPolicy)r*   apply_signed_url_cache_max_agecleared_fields)r   )project_namelocationpolicy_namers   serviceLbPolicyserviceBindingsexternalManagedMigrationState)externalManagedMigrationTestingPercentagetlsSettingscustomMetricsallow_multinetwork)Zr   CopyProtoMessage
Collectionregionconnection_draining_timeoutmessagesConnectionDrainingconnectionDrainingno_custom_request_headersrz   custom_request_headerappendcustom_response_headerr{   no_custom_response_headersIsSpecifiedr|   r	   GetHealthCheckUrisr~   timeout
timeoutSec	port_nameportNameprotocolBackendServiceProtocolValueValuesEnum
enable_cdn	enableCDN
cache_moder   warningsession_affinitySessionAffinityValueValuesEnumsessionAffinityr   ApplyAffinityCookieArgsApplySubsettingArgsrl   locality_lb_policyLocalityLbPolicyValueValuesEnumr   no_locality_lb_policyApplyCdnPolicyArgs!ApplyConnectionTrackingPolicyArgscompression_modeCompressionModeValueValuesEnumcompressionMode_ApplyIapArgsiapApplyFailoverPolicyArgsApplyLogConfigArgsservice_lb_policyr
   BuildServiceLbPolicyUrlprojectrq   r   no_service_lb_policyservice_bindingsBuildServiceBindingUrlr   no_service_bindings!ApplyIpAddressSelectionPolicyArgs external_managed_migration_state,ExternalManagedMigrationStateValueValuesEnumr   -external_managed_migration_testing_percentager   &clear_external_managed_migration_stateload_balancing_scheme"LoadBalancingSchemeValueValuesEnumloadBalancingSchemetls_settingsApplyTlsSettingsArgsno_tls_settingsr   custom_metricsr   custom_metrics_fileclear_custom_metricsrm   IpPortDynamicForwardingrn   ForwardProxyro   ZonalAffinityrp   r   allowMultinetwork)rr   r   	resourcesargsexistingbackend_service_refreplacementr   r   health_checksbinding_names              r   ModifyUpdateHelper.Modify   s   ++H5KN&9&D&D&F*'+""08  ''3'-'I'I!== (J (?k$%%1)+k&!!-)-)C)Ck&++23"".*.*E*Ek'&&*,k',,34&& $ 0 0k,,TCM!.*++!#kN+||#||k~~!^^k}}
//
(
(
@
@
O  ""ook""t 
kk() #k(
//
(
(
G
G##% ! 
		":	:;<226M''3'-'I'I!== (J (?k$ ..k#G#G *
//
(
(
H
H%%' " !!-%)k"./--'+%' <<k# (
//
(
(
G
G##% ! 	vxx?22 --%	 )$3$K$K*22,,++	%k!   ,$(k!-.( #33% 4l 
0
01D1L1L19I3%k!
 +$&k!-.<<k ,,828//2P2P2}2}

/
/3k/ 99E

<
< ; 22>26k/>Bk;;<GH!!-
//
(
(
K
K(( %
 $11




%
%



 ' $kM*"&"5"5k"&":":k  "$kO,//44V;O""))&D##**6E''D,<,<- - '+&=&=k#&&{%s   +_c                    [        / UR                  S5      PUR                  S5      PUR                  S5      PUR                  S5      PUR                  S5      PUR                  S5      PUR                  S5      PUR                  S5      PUR                  S	5      PUR                  S
5      PUR                  S5      PUR                  S5      PUR                  S5      PUR                  S5      PUR                  S5      PUR                  S5      PUR                  S5      PUR                  S5      PUR                  S5      PUR                  S5      PUR                  S5      PUR                  S5      PUR                  S5      PUR                  S5      PUR                  S5      PUR                  S5      PUR                  S5      PUR                  S5      PUR                  S5      PUR                  S5      PUR                  S5      PUR                  S 5      PUR                  S!5      PU R                  (       a  UR                  S"5      OS#PUR                  S$5      PUR                  S%5      PUR                  S&5      PUR                  S'5      PUR                  S(5      PUR                  S)5      PUR                  S*5      PUR                  S+5      PUR                  S,5      PUR                  S-5      PUR                  S.5      PUR                  S/5      PUR                  S05      PUR                  S15      PUR                  S25      PUR                  S35      PUR                  S45      PUR                  S55      PUR                  S65      PUR                  S75      PUR                  S85      PUR                  S95      PUR                  S:5      PUR                  S;5      PUR                  S<5      PUR                  S=5      PUR                  S>5      PUR                  S?5      PUR                  S@5      PUR                  SA5      PUR                  SB5      PUR                  SC5      PUR                  SD5      PUR                  SE5      PUR                  SF5      PUR                  SG5      PUR                  SH5      PUR                  SI5      PU R                  (       a  UR                  SJ5      OS#PU R                  (       a  UR                  SK5      OS#PU R                  (       a  UR                  SL5      OS#PU R
                  (       a  UR                  SM5      OS#PU R
                  (       a  UR                  SN5      OS#PU R                  (       a  UR                  SO5      OS#P5      (       d  [        R                  " SP5      egQ)RzValidate arguments.affinity_cookie_ttlr   r   r   r|   r   cache_key_include_protocolcache_key_include_hostcache_key_include_query_string cache_key_query_string_whitelist cache_key_query_string_blacklistcache_key_include_http_headercache_key_include_named_cookiesigned_url_cache_max_agehttp_health_checksr   r   r   security_policyedge_security_policyr   r   connection_drain_on_failoverdrop_traffic_if_unhealthyfailover_ratioenable_logginglogging_sample_ratelogging_optionallogging_optional_fieldsr   https_health_checksr}   subsetting_policysubsetting_subset_sizeFrequest_coalescingr   
client_ttlno_client_ttldefault_ttlno_default_ttlmax_ttl
no_max_ttlnegative_cachingnegative_caching_policyno_negative_caching_policiesr   r   serve_while_staleno_serve_while_stalebypass_cache_on_request_headers"no_bypass_cache_on_request_headers,connection_persistence_on_unhealthy_backendstracking_modeidle_timeout_secenable_strong_affinityr   r   r   r   r   r   r   ip_address_selection_policyr   r   r   r   r   r   r   r   r   ip_port_dynamic_forwardingforward_proxy_direct_forwardingforward_proxy_cloud_runzonal_affinity_spilloverzonal_affinity_spillover_ratior   z'At least one property must be modified.N)	anyr   rl   rm   rn   ro   rp   compute_exceptionsUpdatePropertyError)rr   r   s     r   ValidateArgsUpdateHelper.ValidateArgsm  s    ]./]67] 	45] 	01	]
 	'] 	&] 	56] 	12] 	9:] 	;<] 	;<] 	89] 	9:] 	34] 	-.]  	!]" 	%#]$ 	$%]& 	*+']( 	/0)]* 	+,+], 	#-]. 	78/]0 	451]2 	)*3]4 	)*5]6 	./7]8 	+,9]: 	23;]< 	)=]> 	./?]@ 	+,A]B 	,-C]F // 	12I]J 	-.K]L 	&M]N 	&O]P 	)Q]R 	'S]T 	)*U]V 	#W]X 	&Y]Z 	+,[]\ 	23]]^ 	78_]` 	12a]b 	56c]d 	,-e]f 	/0g]h 	:;i]j 	=>k]l 	GHm]n 	)o]p 	+,q]r 	12s]t 	+,u]v 	,-w]x 	/0y]z 	+,{]| 	./}]~ 	-.]@ 	01A]B 	67C]D 	;<E]F 	HIG]H 	ABI]J 	01K]L 	(M]N 	*+O]P 	)*Q]R 	./S]T 	/0U]X 33 	56[]^ && 	:;a]d && 	23g]j '' 	34m]p '' 	9:s]v ++ 	-.y] ] ]| 22
35 5}]r   c           	         UR                  5       S:X  a(  UR                  (       a  [        R                  " SS5      eUR                  5       S:X  aU  UR                  R
                  SUR                  R                  UR                  UR                  UR                  5       US94$ UR                  R                  SUR                  R                  UR                  UR                  5       US94$ )z(Returns a backend service patch request.zcompute.backendServicesz--globalzTfailover policy parameters are only for regional passthrough Network Load Balancers.rw   Patch)r   r   backendServicebackendServiceResource)r   r  r  )r   failoverPolicyr   InvalidArgumentExceptionapitools_clientregionBackendServicesr   (ComputeRegionBackendServicesPatchRequestr   r   NamebackendServices"ComputeBackendServicesPatchRequest)rr   r   r   r   s       r   GetSetRequestUpdateHelper.GetSetRequest  s     	&&(,EE&&//
$% %
 %%'+JJ

 
 
6
6

//
B
B)11(//0557%0	 C 2  	..::'//.335#. 	; 	0 r   c                 H    [         R                  " X!S9nUR                  US9$ N)compute_client)r   )backend_service_clientr   !MakeSetSecurityPolicyRequestTuplerr   r   r   security_policy_refbackend_services        r   _GetSetSecurityPolicyRequest)UpdateHelper._GetSetSecurityPolicyRequest  s0    ,;;4O<<+ = - -r   c                 H    [         R                  " X!S9nUR                  US9$ r  )r  r   %MakeSetEdgeSecurityPolicyRequestTupler!  s        r    _GetSetEdgeSecurityPolicyRequest-UpdateHelper._GetSetEdgeSecurityPolicyRequest  s1    ,;;4O@@+ A - -r   c                 d   UR                  5       S:X  aT  UR                  R                  SUR                  R	                  UR
                  UR                  UR                  5       S94$ UR                  R                  SUR                  R                  UR
                  UR                  5       S94$ )z$Create Backend Services get request.rw   Get)r   r   r  )r   r  )
r   r  r  r   &ComputeRegionBackendServicesGetRequestr   r   r  r   ComputeBackendServicesGetRequest)rr   r   r   s      r   GetGetRequestUpdateHelper.GetGetRequest  s    %%'+JJ

 
 
6
6

//
@
@)11(//0557 A 9  	..88'//.335 	9 	7 r   c                     UGb
  UR                   n[        R                  " X!R                  US9Ul         UR                   R                  (       aA  U(       a  UR                  (       d)  [
        R                  " [        R                  " 5       5        UR                   R                  (       ab  UR                  UR                  R                  R                  R                  La*  [
        R                  " [        R                  " 5       5        gggg)zApplies IAP args.N)existing_iap_settings)r   r   GetIAPr   enabledr   r   IapBestPracticesNoticer   r   r   HTTPSIapHttpWarning)rr   r   iap_argr   r   existing_iaps         r   r   UpdateHelper._ApplyIapArgs  s    \\l.55
??,Hko		 	 ,*6*>*>*AACD
//
!
!k&:&://GGMM'N*99;<'N
! r   c                    U R                  U5        UR                  n[        R                  R	                  UUR
                  [        R                  " U5      S9nU R                  X45      nUR                  U/5      nU R                  X2R
                  UUS   U5      u  pxUS   U:X  a\  [        USS5      cK  [        USS5      c=  [        R                  R                  SR                  US   R                   5      5        U$ / n	OHU R#                  X4U5      n
UR$                  R'                  U5         UR                  U
/5      n	SSS5        [        USS5      bm  [        USS5      (       a4  U R(                  R	                  XR
                  5      R+                  5       nOSnU R-                  X4U5      nUR                  U/5      nO/ n[        USS5      bm  [        USS5      (       a4  U R.                  R	                  XR
                  5      R+                  5       nOSnU R1                  X4U5      nUR                  U/5      nO/ nW	U-   U-   $ ! , (       d  f       GN= f)9Issues requests necessary to update the Backend Services.)scope_listerr   r   Nr   z/No change requested; skipping update for [{0}].)r  r   r	   r,   ResolveAsResourcer   r8   GetDefaultScopeListerr.  MakeRequestsr   getattrr   statusPrintformatnamer  r  IncludeFieldsr;   SelfLinkr$  r=   r(  )rr   r   holderr   r   get_requestobjects
new_objectr   backend_service_resultbackend_service_requestr"  security_policy_requestsecurity_policy_resultedge_security_policy_requestedge_security_policy_results                   r   RunUpdateHelper.Run  s}   d]]F 	11CC&<<VD 	D 	F 
 $$VAK!!;-0G!%V5E5Et-4QZ9L"NJ qzZ $)4
0
8
$.
5
=

=DD
!	" ! $ 2 263=!? !!//?!'!4!46M5N!O @ t&-9	($	/	/"66HH""$$,HJ 	 # $ A A
':!<%224K3LM! t+T2>	-t	4	4";;MM""$$,HJ 	 #%)%J%J
':&<"$*$7$7'
(%*! %'!"%;;'( )A @?s   3I
I)rq   rp   rn   rm   rl   ro   )FFFFN)__name__
__module____qualname____firstlineno____doc__r0   r2   r4   r;   r=   classmethodri   rt   r   r  r  r$  r(  r.  r   rQ  __static_attributes__ r   r   r   r   :   s|    4!Y) Y)| */!"!&($z'xa5F@--&=D)r   r   c                   B    \ rS rSrSrSrSrSrSrSr	\
S 5       rS rSrg)UpdateGAie  KUpdate a backend service.

*{command}* is used to update backend services.
Fc           	          [         R                  UU R                  U R                  U R                  U R
                  U R                  S9  g )N)rd   re   rf   rg   rh   )r   ri   rl   rm   rn   ro   rp   )rc   r   s     r   ri   UpdateGA.Argss  sE    '*'J'J+.+R+R!88"::#&#B#B  r   c           	         [         R                  " U R                  5       5      n[        U R                  U R
                  U R                  U R                  U R                  U R                  5       S9R                  X5      $ )r;  )re   rf   rg   rh   rs   )
r   ComputeApiHolderReleaseTrackr   rl   rm   rn   ro   rp   rQ  )rr   r   rG  s      r   rQ  UpdateGA.Run~  sm    **4+<+<+>?F,,+/+S+S"99#;;#'#C#C'') 
c$r   rZ  N)rS  rT  rU  rV  rW  rl   rm   rn   ro   rp   rX  ri   rQ  rY  rZ  r   r   r\  r\  e  s>    
 %*!(-% ! % 
r   r\  c                   ,    \ rS rSrSrSrSrSrSrSr	Sr
g)
UpdateBetai  r]  TFrZ  NrS  rT  rU  rV  rW  rl   rm   rn   ro   rp   rY  rZ  r   r   re  re    s'    
 %)!(,%   %r   re  c                   ,    \ rS rSrSrSrSrSrSrSr	Sr
g)UpdateAlphai  r]  TrZ  Nrf  rZ  r   r   rh  rh    s'    
 %)!(,%  $r   rh  N)&rW  apitools.base.pyr   googlecloudsdk.api_lib.computer   /googlecloudsdk.api_lib.compute.backend_servicesr   r  googlecloudsdk.callioper   r   "googlecloudsdk.command_lib.computer   rU   r
  r	   r8   r
   r   3googlecloudsdk.command_lib.compute.backend_servicesr   4googlecloudsdk.command_lib.compute.security_policiesr6   googlecloudsdk.corer   r   objectr   UniverseCompatibleReleaseTracksrb  GAUpdateCommandr\  BETAre  ALPHArh  rZ  r   r   <module>rx     s    & 7& ( . K O E > ? V E$ #$h)6 h)V D%%(()!t!! ! * !H D%%**+
& 
& ,
& D%%++,
%* 
% -
%r   