
    Jh                     Z   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 Z G d de      Zej@                   ejB                  ejD                  jF                         G d dejH                                      Z% ejB                  ejD                  jL                         G d de%             Z' ejB                  ejD                  jP                         G d de'             Z)y)zqCommands 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                 2    t        j                  | d       y )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                   t    e Zd ZdZdZdZdZdZdZe	d        Z
	 	 	 	 ddZd Zd Zd Zd Zd	 Zd
 Zd Zd Zy)UpdateHelperz,Helper class that updates a backend service.Nc                 F	   t         j                  j                  |d       t        j                  |       t        j                         | _        | j
                  j                  |d       t        j                         | _        | j                  j                  |d       t        j                         | _	        | j                  j                  |d       t        j                  |       t        j                  ddt        j                  j                  d	
      | _        | j                   j                  |       t        j"                  d      | _        | j$                  j                  |       t        j&                  |d       t        j(                  |       t        j*                  |d       t        j,                  |       t        j.                  |       t        j0                  |d       t        j2                  |d       t        j4                  |d       t        j6                  |       t        j8                  |       t        j:                  |d       t        j<                  |d       t?        j@                  |dd       t        jB                  |       |rt        jD                  |       t        jF                  |d       t        jH                  |d       t        jJ                  |       t        jL                  |       t        jN                  |       t        jP                  |       t        jR                  |       tU        |       t        jV                  |dd       tY        jZ                  |dd       t        j\                  |       t        j^                  |       t        j`                  |dd       t        jb                  |dd       t        jd                  |       t        jf                  |       t        jh                  |       t        jj                  |d       t        jl                  |d       |rt        jn                  |       |rt        jp                  |       |rt        jr                  |       yy)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)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   Argsz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%	%%f-	v&	&&v$G	((DI)&&v.V$!  ( "r   c                 J    || _         || _        || _        || _        || _        y )N)_support_subsetting_subset_size#_support_ip_port_dynamic_forwarding_support_zonal_affinity_support_allow_multinetwork_release_track)selfrf   rg   rh   ri   release_tracks         r   __init__zUpdateHelper.__init__   s2     ,JD(* 	, $:D 'AD$'Dr   c                 P   t        j                  |      }g }|j                         dk(  r|j                  nd}|j                  +|j
                  j                  |j                        |_        |j                  g |_	        |j                  |j                  |_	        |j                  s|j                  d       |j                  |j                  |_        |j                  rg |_        |j                  s|j                  d       |j                  d      r|j                   |_        t#        j$                  || |      }	|	r|	|_        |j                  d      rg |_        |j                  d	       |j(                  r|j(                  |_        |j,                  r|j,                  |_        |j0                  r4|j
                  j2                  j5                  |j0                        |_        |j6                  |j6                  |_        n4|j8                  s(|j:                  rt=        j>                  d
       d|_        |j@                  T|j
                  j2                  jC                  |j@                        |_"        |j@                  dk7  r|j                  d       tG        jH                  |||       |j                  +|j
                  j                  |j                        |_        tG        jJ                  |||| jL                         |jN                  4|j
                  j2                  jQ                  |jN                        |_)        tG        jT                  |||dd|       tG        jV                  |||       |jX                  4|j
                  j2                  j[                  |jX                        |_.        | j_                  ||j`                  ||       tG        jb                  |j
                  ||       tG        jd                  |j
                  |||       |jf                  <ti        jj                  |jl                  ||jf                  | jn                        |_8        |jr                  d|_8        |j                  d       |jt                  >|jt                  D 
cg c]#  }
ti        jv                  |jl                  ||
      % c}
|_<        |jz                  g |_<        |j                  d       tG        j|                  |||       |j~                  4|j
                  j2                  j                  |j~                        |_A        |j                  |j                  |_C        |j                  0d|_A        d|_C        |j                  d       |j                  d       |j                  4|j
                  j2                  j                  |j                        |_G        |j                  .tG        j                  ||||jl                  || jn                         |j                  d|_K        |j                  d       |j                  r|j                  |_M        |j                  r|j                  |_M        |j                  rg |_M        |j                  d       | j                  rtG        j                  |||       | j                  rtG        j                  |||       | j                  r"|j                  d      r|j                  |_V        ||fS c c}
w )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)r,   apply_signed_url_cache_max_agecleared_fields)r   )project_namelocationpolicy_namerr   serviceLbPolicyserviceBindingsexternalManagedMigrationState)externalManagedMigrationTestingPercentagetlsSettingscustomMetricsallow_multinetwork)Wr   CopyProtoMessage
Collectionregionconnection_draining_timeoutmessagesConnectionDrainingconnectionDrainingno_custom_request_headersrx   custom_request_headerappendcustom_response_headerry   no_custom_response_headersIsSpecifiedrz   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LocalityLbPolicyValueValuesEnumlocalityLbPolicyApplyCdnPolicyArgs!ApplyConnectionTrackingPolicyArgscompression_modeCompressionModeValueValuesEnumcompressionMode_ApplyIapArgsiapApplyFailoverPolicyArgsApplyLogConfigArgsservice_lb_policyr   BuildServiceLbPolicyUrlprojectrp   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   ZonalAffinityro   r   allowMultinetwork)rq   r   	resourcesargsexistingbackend_service_refreplacementr   r   health_checksbinding_names              r   ModifyzUpdateHelper.Modify   sm   ++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,,T4CM!.k*+!#kN+||#||k~~!^^k}}
//
(
(
@
@
O  ""ook""t 
kk() #k(
//
(
(
G
G##% ! 
		":	:;<2264M''3'-'I'I!== (J (?k$ ..k4#G#G *
//
(
(
H
H%%' " --'+%' <<k# (
//
(
(
G
G##% ! 	vtxx;?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4VT;O##**64E''D,<,<- '+&=&=k#&&u%s   +(\#c                 
   t        g |j                  d      |j                  d      |j                  d      |j                  d      |j                  d      |j                  d      |j                  d      |j                  d      |j                  d	      |j                  d
      |j                  d      |j                  d      |j                  d      |j                  d      |j                  d      |j                  d      |j                  d      |j                  d      |j                  d      |j                  d      |j                  d      |j                  d      |j                  d      |j                  d      |j                  d      |j                  d      |j                  d      |j                  d      |j                  d      |j                  d      |j                  d      |j                  d       |j                  d!      | j                  r|j                  d"      nd#|j                  d$      |j                  d%      |j                  d&      |j                  d'      |j                  d(      |j                  d)      |j                  d*      |j                  d+      |j                  d,      |j                  d-      |j                  d.      |j                  d/      |j                  d0      |j                  d1      |j                  d2      |j                  d3      |j                  d4      |j                  d5      |j                  d6      |j                  d7      |j                  d8      |j                  d9      |j                  d:      |j                  d;      |j                  d<      |j                  d=      |j                  d>      |j                  d?      |j                  d@      |j                  dA      |j                  dB      |j                  dC      |j                  dD      |j                  dE      |j                  dF      |j                  dG      |j                  dH      | j                  r|j                  dI      nd#| j                  r|j                  dJ      nd#| j                  r|j                  dK      nd#| j
                  r|j                  dL      nd#      st        j                  dM      yN)OzValidate arguments.affinity_cookie_ttlr   r   r   rz   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   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   rl   rm   rn   ro   compute_exceptionsUpdatePropertyError)rq   r   s     r   ValidateArgszUpdateHelper.ValidateArgsg  sy    V./V67V 	45V 	01	V
 	'V 	&V 	56V 	12V 	9:V 	;<V 	;<V 	89V 	9:V 	34V 	-.V  	!V" 	%#V$ 	$%V& 	*+'V( 	/0)V* 	+,+V, 	#-V. 	78/V0 	451V2 	)*3V4 	)*5V6 	./7V8 	+,9V: 	23;V< 	)=V> 	./?V@ 	+,AVB 	,-CVF // 	12IVJ 	-.KVL 	&MVN 	&OVP 	)QVR 	'SVT 	)*UVV 	#WVX 	&YVZ 	+,[V\ 	23]V^ 	78_V` 	12aVb 	56cVd 	,-eVf 	/0gVh 	:;iVj 	=>kVl 	GHmVn 	)oVp 	+,qVr 	12sVt 	+,uVv 	,-wVx 	/0yVz 	+,{V| 	./}V~ 	-.V@ 	67AVB 	;<CVD 	HIEVF 	ABGVH 	01IVJ 	(KVL 	*+MVN 	)*OVP 	./QVR 	/0SVV 33 	56YV\ '' 	34_Vb '' 	9:eVh ++ 	-.kV Vn 22
35 5oVr   c                    |j                         dk(  r"|j                  rt        j                  dd      |j                         dk(  rX|j                  j
                  d|j                  j                  |j                  |j                  |j                         |      fS |j                  j                  d|j                  j                  |j                  |j                         |      fS )z(Returns a backend service patch request.zcompute.backendServicesz--globalzTfailover policy parameters are only for regional passthrough Network Load Balancers.ru   Patch)r   r   backendServicebackendServiceResource)r   r  r	  )r   failoverPolicyr
   InvalidArgumentExceptionapitools_clientregionBackendServicesr   (ComputeRegionBackendServicesPatchRequestr   r   NamebackendServices"ComputeBackendServicesPatchRequest)rq   r   r   r   s       r   GetSetRequestz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                 T    t        j                  ||      }|j                  |      S N)compute_client)r   )backend_service_clientr   !MakeSetSecurityPolicyRequestTuplerq   r   r   security_policy_refbackend_services        r   _GetSetSecurityPolicyRequestz)UpdateHelper._GetSetSecurityPolicyRequest  s2    ,;;F4O<<+ = - -r   c                 T    t        j                  ||      }|j                  |      S r  )r  r   %MakeSetEdgeSecurityPolicyRequestTupler  s        r    _GetSetEdgeSecurityPolicyRequestz-UpdateHelper._GetSetEdgeSecurityPolicyRequest  s3    ,;;F4O@@+ A - -r   c                 n   |j                         dk(  rW|j                  j                  d|j                  j	                  |j
                  |j                  |j                               fS |j                  j                  d|j                  j                  |j
                  |j                               fS )z$Create Backend Services get request.ru   Get)r   r   r  )r   r  )
r   r  r  r   &ComputeRegionBackendServicesGetRequestr   r   r  r   ComputeBackendServicesGetRequest)rq   r   r   s      r   GetGetRequestzUpdateHelper.GetGetRequest  s    %%'+JJ

 
 
6
6

//
@
@)11(//0557 A 9  	..88'//.335 	9 	7 r   c                    ||j                   }t        j                  ||j                  |      |_         |j                   j                  r5|r|j                  s't        j                  t        j                                |j                   j                  r_|j                  |j                  j                  j                  j                  ur(t        j                  t        j                                yyyy)zApplies IAP args.N)existing_iap_settings)r   r   GetIAPr   enabledr   r   IapBestPracticesNoticer   r   r   HTTPSIapHttpWarning)rq   r   iap_argr   r   existing_iaps         r   r   zUpdateHelper._ApplyIapArgs  s    \\l.55
6??,Hko		 	 ,*6*>*>*AACD
//
!
!k&:&://GGMM'N*99;<'N
! r   c                    | j                  |       |j                  }t        j                  j	                  ||j
                  t        j                  |            }| j                  ||      }|j                  |g      }| j                  ||j
                  ||d   |      \  }}|d   |k(  rZt        |dd      Jt        |dd      =t        j                  j                  dj                  |d   j                                |S g }	nI| j#                  |||      }
|j$                  j'                  |      5  |j                  |
g      }	ddd       t        |dd      jt        |dd      r5| j(                  j	                  ||j
                        j+                         }nd}| j-                  |||      }|j                  |g      }ng }t        |dd      jt        |dd      r5| j.                  j	                  ||j
                        j+                         }nd}| j1                  |||      }|j                  |g      }ng }	|z   |z   S # 1 sw Y   xY w)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  )rq   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   RunzUpdateHelper.Run  s   d]]F 	11CC&<<VD 	D 	F 
 $$V-@AK!!;-0G!%VV5E5Et-4QZ9L"NJ qzZ $)4
0
8
$.
5
=

=DD
!	" ! $ 2 26;N3=!? !!//?!'!4!46M5N!O @ t&-9	($	/"66HH&""$$,HJ 	 # $ A A
%':!<%224K3LM! t+T2>	-t	4";;MM&""$$,HJ 	 #%)%J%J
%':&<"$*$7$7'
(%*! %'!"%;;'( )A @?s   6II)FFFN)__name__
__module____qualname____doc__r2   r4   r6   r=   r?   classmethodrj   rs   r   r  r  r  r  r#  r   rD   r   r   r   r   =   sy    4!X) X)z */"!&( t'lZ5x@--&=D)r   r   c                   6    e Zd ZdZdZdZdZdZed        Z	d Z
y)UpdateGAOUpdate a backend service.

  *{command}* is used to update backend services.
  Fc                     t         j                  || j                  | j                  | j                  | j
                         y )N)rf   rg   rh   ri   )r   rj   rl   rm   rn   ro   )re   r   s     r   rj   zUpdateGA.Argse  s<    '*'J'J+.+R+R"::#&#B#B  r   c                     t        j                  | j                               }t        | j                  | j
                  | j                  | j                  | j                               j                  ||      S )r.  )rg   rh   ri   rr   )	r   ComputeApiHolderReleaseTrackr   rl   rm   rn   ro   rD  )rq   r   r:  s      r   rD  zUpdateGA.Runo  sf    **4+<+<+>?F,,+/+S+S#;;#'#C#C'') 
c$r   N)rE  rF  rG  rH  rl   rm   rn   ro   rI  rj   rD  rJ  r   r   rL  rL  X  s8    
 %*!(-%! % 	r   rL  c                        e Zd ZdZdZdZdZdZy)
UpdateBetarM  TFNrE  rF  rG  rH  rl   rm   rn   ro   rJ  r   r   rS  rS  {  s!    
 %)!(,%  %r   rS  c                        e Zd ZdZdZdZdZdZy)UpdateAlpharM  TNrT  rJ  r   r   rV  rV    s!    
 %)!(,%  $r   rV  N)*rH  
__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   rW   r  r   r:   r   r   3googlecloudsdk.command_lib.compute.backend_servicesr   4googlecloudsdk.command_lib.compute.security_policiesr8   googlecloudsdk.corer   r   objectr   UniverseCompatibleReleaseTracksrQ  GAUpdateCommandrL  BETArS  ALPHArV  rJ  r   r   <module>rg     s  
 '  ' % 7& ( . K O E > ? V E$ #$X)6 X)v D%%(()t!!  * B D%%**+	& 	& ,	& D%%++,	%* 	% -	%r   