
    i                     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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\R@                  \RB                  " \RD                  RF                  5       " S S\RH                  5      5       5       r%\RB                  " \RD                  RL                  5       " S S\%5      5       r'\RB                  " \RD                  RP                  5       " S S\'5      5       r)g)znCommands for updating backend services.

There are separate alpha, beta, and GA command classes in this file.
    )absolute_import)division)unicode_literals)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                  " U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AddIpPortDynamicForwardingAddZonalAffinityAddAllowMultinetwork)clsr   support_subsetting_subset_size"support_ip_port_dynamic_forwardingsupport_zonal_affinitysupport_allow_multinetworks         r   ArgsUpdateHelper.ArgsF   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.V$!  ( "r   c                 B    Xl         UU l        X0l        X@l        XPl        g )N)_support_subsetting_subset_size#_support_ip_port_dynamic_forwarding_support_zonal_affinity_support_allow_multinetwork_release_track)selfrg   rh   ri   rj   release_tracks         r   __init__UpdateHelper.__init__   s*     ,J(* 	, $: 'A$'r   c           	      b   [         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'  UR                  S5      (       a  UR                  UlW        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_namert   serviceLbPolicyserviceBindingsexternalManagedMigrationState)externalManagedMigrationTestingPercentagetlsSettingscustomMetricsallow_multinetwork)Xr   CopyProtoMessage
Collectionregionconnection_draining_timeoutmessagesConnectionDrainingconnectionDrainingno_custom_request_headersr{   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ApplySubsettingArgsrn   locality_lb_policyLocalityLbPolicyValueValuesEnumr   no_locality_lb_policyApplyCdnPolicyArgs!ApplyConnectionTrackingPolicyArgscompression_modeCompressionModeValueValuesEnumcompressionMode_ApplyIapArgsiapApplyFailoverPolicyArgsApplyLogConfigArgsservice_lb_policyr   BuildServiceLbPolicyUrlprojectrr   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_metricsro   IpPortDynamicForwardingrp   ZonalAffinityrq   r   allowMultinetwork)rs   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##**6E''D,<,<- - '+&=&=k#&&u%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5      (       d  [        R                  " SN5      egO)Pz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zonal_affinity_spilloverzonal_affinity_spillover_ratior   z'At least one property must be modified.N)anyr   rn   ro   rp   rq   compute_exceptionsUpdatePropertyError)rs   r   s     r   ValidateArgsUpdateHelper.ValidateArgsj  s    W./W67W 	45W 	01	W
 	'W 	&W 	56W 	12W 	9:W 	;<W 	;<W 	89W 	9:W 	34W 	-.W  	!W" 	%#W$ 	$%W& 	*+'W( 	/0)W* 	+,+W, 	#-W. 	78/W0 	451W2 	)*3W4 	)*5W6 	./7W8 	+,9W: 	23;W< 	)=W> 	./?W@ 	+,AWB 	,-CWF // 	12IWJ 	-.KWL 	&MWN 	&OWP 	)QWR 	'SWT 	)*UWV 	#WWX 	&YWZ 	+,[W\ 	23]W^ 	78_W` 	12aWb 	56cWd 	,-eWf 	/0gWh 	:;iWj 	=>kWl 	GHmWn 	)oWp 	+,qWr 	12sWt 	+,uWv 	,-wWx 	/0yWz 	+,{W| 	./}W~ 	-.W@ 	01AWB 	67CWD 	;<EWF 	HIGWH 	ABIWJ 	01KWL 	(MWN 	*+OWP 	)*QWR 	./SWT 	/0UWX 33 	56[W^ '' 	34aWd '' 	9:gWj ++ 	-.mW W Wp 22
35 5qW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.rx   Patch)r   r   backendServicebackendServiceResource)r   r  r  )r   failoverPolicyr
   InvalidArgumentExceptionapitools_clientregionBackendServicesr   (ComputeRegionBackendServicesPatchRequestr   r   NamebackendServices"ComputeBackendServicesPatchRequest)rs   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rs   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.rx   Get)r   r   r  )r   r  )
r   r  r  r   &ComputeRegionBackendServicesGetRequestr   r   r  r   ComputeBackendServicesGetRequest)rs   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)rs   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   r;   GetDefaultScopeListerr,  MakeRequestsr   getattrr   statusPrintformatnamer  r  IncludeFieldsr>   SelfLinkr"  r@   r&  )rs   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)rr   rq   ro   rn   rp   )FFFN)__name__
__module____qualname____firstlineno____doc__r3   r5   r7   r>   r@   classmethodrk   ru   r   r
  r  r"  r&  r,  r   rO  __static_attributes__ r   r   r   r   =   sy    4!X) X)z */"!&( w'r[5z@--&=D)r   r   c                   >    \ rS rSrSrSrSrSrSr\	S 5       r
S rSrg)UpdateGAi\  KUpdate a backend service.

*{command}* is used to update backend services.
Fc                     [         R                  UU R                  U R                  U R                  U R
                  S9  g )N)rg   rh   ri   rj   )r   rk   rn   ro   rp   rq   )rf   r   s     r   rk   UpdateGA.Argsi  s<    '*'J'J+.+R+R"::#&#B#B  r   c                     [         R                  " U R                  5       5      n[        U R                  U R
                  U R                  U R                  U R                  5       S9R                  X5      $ )r9  )rh   ri   rj   rt   )	r   ComputeApiHolderReleaseTrackr   rn   ro   rp   rq   rO  )rs   r   rE  s      r   rO  UpdateGA.Runs  sd    **4+<+<+>?F,,+/+S+S#;;#'#C#C'') 
c$r   rX  N)rQ  rR  rS  rT  rU  rn   ro   rp   rq   rV  rk   rO  rW  rX  r   r   rZ  rZ  \  s8    
 %*!(-%! % 	r   rZ  c                   (    \ rS rSrSrSrSrSrSrSr	g)
UpdateBetai  r[  TFrX  N
rQ  rR  rS  rT  rU  rn   ro   rp   rq   rW  rX  r   r   rc  rc    s!    
 %)!(,%  %r   rc  c                   (    \ rS rSrSrSrSrSrSrSr	g)UpdateAlphai  r[  TrX  Nrd  rX  r   r   rf  rf    s!    
 %)!(,%  $r   rf  N)*rU  
__future__r   r   r   apitools.base.pyr   googlecloudsdk.api_lib.computer   /googlecloudsdk.api_lib.compute.backend_servicesr   r  googlecloudsdk.callioper	   r
   "googlecloudsdk.command_lib.computer   rX   r  r   r;   r   r   3googlecloudsdk.command_lib.compute.backend_servicesr   4googlecloudsdk.command_lib.compute.security_policiesr9   googlecloudsdk.corer   r   objectr   UniverseCompatibleReleaseTracksr`  GAUpdateCommandrZ  BETArc  ALPHArf  rX  r   r   <module>rw     s  
 '  ' % 7& ( . K O E > ? V E$ #$\)6 \)~ D%%(()t!!  * B D%%**+	& 	& ,	& D%%++,	%* 	% -	%r   