
    <Z                     R   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 rSS 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)zmCommand for creating backend services.

There are separate alpha, beta, and GA command classes in this file.
    )absolute_import)division)unicode_literals)base_classes)base)
exceptions)cdn_flags_utils)flags)reference_utils)resource_manager_tags_utils)signed_url_flags)backend_services_utils)logc                    U R                   (       a  U R                   $ S nU R                  S:X  a  U" S5      $ U R                  S:X  a  U" S5      $ U R                  S:X  a  U" S5      $ U R                  S:X  a  U" S	5      $ g
)z-Determine port name if one was not specified.c                 b    [         R                  R                  SR                  U 5      5        U $ )NzWBackend-services' port_name automatically resolved to {} based on the service protocol.)r   statusPrintformat)	port_names    .lib/surface/compute/backend_services/create.py_LogAndReturn'_ResolvePortName.<locals>._LogAndReturn+   s*    JJ 99?	9JL    HTTPShttpsHTTP2http2SSLsslTCPtcphttp)r   protocol)argsr   s     r   _ResolvePortNamer%   &   sy    	^^>>
 
]]g!!	]]g!!	]]e	]]e	r   c                 0   U R                   R                  R                  5       nUR                  (       a4  UR                  U;  a$  [	        SR                  UR                  5      5      eU R                   R                  UR                  =(       d    U5      $ )NzT{} is not a supported option. See the help text of --protocol for supported options.)BackendServiceProtocolValueValuesEnumnamesr#   
ValueErrorr   )messagesr$   defaultvalid_optionss       r   _ResolveProtocolr.   <   sz    ))AAGGI-	]]t}}M9
 99?9NP P		 	 	8	8 :A9@
B Br   c                 .    [         R                  " U SS9  g )Na        Configure Identity Aware Proxy (IAP) for external HTTP(S) load balancing.
      You can configure IAP to be `enabled` or `disabled` (default). If enabled,
      you can provide values for `oauth2-client-id` and `oauth2-client-secret`.
      For example, `--iap=enabled,oauth2-client-id=foo,oauth2-client-secret=bar`
      turns IAP on, and `--iap=disabled` turns it off. For more information, see
      https://cloud.google.com/iap/.
      )help)r
   AddIap)parsers    r   
AddIapFlagr3   E   s     ,,
	r   c                   d    \ rS rSrSrSrSrSr\S 5       r	S r
S rS rS rS	 rS
 rS rS rSrg)CreateHelperT   z)Helper class to create a backend service.Nc                 	   UR                   R                  [        R                  5        [        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                  " XS9  [        R                  " U5        [        R                   " U5        [        R"                  " U5        [        R$                  " USS	9  [        R&                  " U5        [        R(                  " US
S9  [        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S
S	9  [        R8                  " U5        [        R:                  " U5        [=        U5        UR                   R?                  [        R@                  5        [B        RD                  " USS9  [        RF                  " U5        U(       a  [        RH                  " U5        [        RJ                  " USS	9  [        RL                  " USS	9  [        RN                  " U5        [        RP                  " U5        [        RR                  " U5        [        RT                  " U5        [        RV                  " U5        [        RX                  " U5        [        RZ                  " U5        [\        R^                  " US5        [        R`                  " U5        [        Rb                  " U5        [        Rd                  " U5        [        Rf                  " U5        U(       a  [        Rh                  " U5        U(       a  [        Rj                  " U5        U(       a  [        Rl                  " U5        [        Rn                  " U5        g)z4Add flags to create a backend service to the parser.create)operation_typeHEALTH_CHECK)cust_metavarHTTP_HEALTH_CHECKHTTPS_HEALTH_CHECK)support_identityNr,   T)support_stateful_affinityF)remove_all_flag)requiredzbackend service)8display_info	AddFormatr
   DEFAULT_LIST_FORMAT#GLOBAL_REGIONAL_BACKEND_SERVICE_ARGAddArgumentAddDescriptionHealthCheckArgumentHEALTH_CHECK_ARGHttpHealthCheckArgumentHTTP_HEALTH_CHECK_ARGHttpsHealthCheckArgumentHTTPS_HEALTH_CHECK_ARGAddServiceLoadBalancingPolicyAddBackendServiceTlsSettingsAddServiceBindings
AddTimeoutAddPortNameAddProtocolAddEnableCdnAddSessionAffinityAddAffinityCookieAddConnectionDrainingTimeoutAddLoadBalancingSchemeAddCustomRequestHeadersAddCacheKeyIncludeProtocolAddCacheKeyIncludeHostAddCacheKeyIncludeQueryStringAddCacheKeyQueryStringListAddCacheKeyExtendedCachingArgsr3   AddCacheUpdaterBackendServicesCompleterr   AddSignedUrlCacheMaxAgeAddSubsettingPolicyAddSubsettingSubsetSizeAddConnectionDrainOnFailoverAddDropTrafficIfUnhealthyAddFailoverRatioAddEnableLoggingAddLoggingSampleRateAddLoggingOptionalAddLoggingOptionalFields
AddNetworkAddLocalityLbPolicy	cdn_flagsAddCdnPolicyArgsAddConnectionTrackingPolicyAddCompressionModeAddIpAddressSelectionPolicyAddBackendServiceCustomMetricsAddIpPortDynamicForwardingAddZonalAffinityAddAllowMultinetworkAddResourceManagerTags)clsr2   support_subsetting_subset_size"support_ip_port_dynamic_forwardingsupport_zonal_affinitysupport_allow_multinetworkr>   s          r   ArgsCreateHelper.Args[   s2    !!%";";<	--99x : )	  446C$$V.$I % = = ?C))0 * 2!&!?!?!AC**1 + 3	''/	&& 
V$	V	f	fd+	v	VtD	FdC	&&v.	  (	!!&%@	$$VT:	  6	''=	$$V,	((0v
''(F(FG,,VeD	f%%##F+	&&vt<	##FD9	6"	6"	v&	V$	""6*	V	f%v'89	%%f-	V$	%%f-	((0)&&v.V$!  (	  (r   c                 N    Xl         UU l        X@l        XPl        X l        X`l        g N)_support_subsetting_subset_size#_support_ip_port_dynamic_forwarding_support_zonal_affinity_support_allow_multinetwork_release_track_support_identity)selfry   release_trackrz   r{   r|   r>   s          r   __init__CreateHelper.__init__   s0     ,J(* 	, $: 'A$'-r   c                 	   UR                   S:X  a  [        R                  " SS5      e[        R                  " U5      (       a  [        R
                  " SS5      eU R                  XU5      nUR                  nUR                  b(  UR                  R                  UR                  S9Ul        UR                  b  UR                  Ul        [        R                  " UUUSSS	9  UR                  b:  [         R"                  " UR$                  S
UR                  U R&                  S9Ul        UR*                  c3  U R,                  (       aQ  [/        US5      (       a@  UR0                  (       a/  [        R2                  " UUUUR$                  S
U R&                  5        UR4                  bB  UR4                   Vs/ s H%  n[         R6                  " UR$                  S
U5      PM'     snUl        UR:                  b4  UR                  R<                  R?                  UR:                  5      Ul         [        RB                  " XRX@RD                  5        URF                  b4  UR                  R<                  RI                  URF                  5      Ul%        [        RL                  " XRU5        URN                  b  URN                  Ul(        URR                  b  URR                  Ul*        URV                  b1  URV                  RX                  (       a  UR                  SLa  SUl        URZ                  b4  UR                  R<                  R]                  URZ                  5      Ul/        UR`                  b+  U Rc                  UR                  UR`                  5      Ul2        U Rg                  UR                  URh                  U5        UR                   S:w  a4  UR                  R<                  Rk                  UR                   5      Ul6        [        Rn                  " UR                  UU5        [        Rp                  " XRU5        [        Rr                  " X$5        U Rt                  (       a  [        Rv                  " XRU5        U Rx                  (       a  URz                  Ul>        UR                  R                  XCR$                  S9nUR                  R                  SU4/$ s  snf )z0Returns a global backend service create request.INTERNALz--regionz1Must specify --region for internal load balancer.z--globalzTfailover policy parameters are only for regional passthrough Network Load Balancers.drainingTimeoutSecFT)	is_updateapply_signed_url_cache_max_ageglobal)project_namelocationpolicy_namer   identityEXTERNAL)backendServiceprojectInsert)Bload_balancing_schemer   RequiredArgumentExceptionr   HasFailoverPolicyArgsInvalidArgumentException_CreateBackendServiceclientconnection_draining_timeoutr+   ConnectionDrainingconnectionDraining
enable_cdn	enableCDNApplyCdnPolicyArgsservice_lb_policyr   BuildServiceLbPolicyUrlr   r   serviceLbPolicytls_settingsr   hasattrr   ApplyTlsSettingsArgsservice_bindingsBuildServiceBindingUrlserviceBindingscompression_moder'   CompressionModeValueValuesEnumcompressionModeApplySubsettingArgsr   session_affinitySessionAffinityValueValuesEnumsessionAffinityApplyAffinityCookieArgscustom_request_headercustomRequestHeaderscustom_response_headercustomResponseHeaders	cdnPolicy	cacheModelocality_lb_policyLocalityLbPolicyValueValuesEnumlocalityLbPolicyresource_manager_tags_CreateBackendServiceParamsparams_ApplyIapArgsiap"LoadBalancingSchemeValueValuesEnumloadBalancingSchemeApplyLogConfigArgs!ApplyIpAddressSelectionPolicyArgsApplyCustomMetricsr   IpPortDynamicForwardingr   allow_multinetworkallowMultinetwork#ComputeBackendServicesInsertRequestapitools_clientbackendServicesr   holderr$   backend_services_refbackend_servicer   binding_namerequests           r   _CreateGlobalRequests"CreateHelper._CreateGlobalRequests   sD    !!Z/00
IK K33D99//
$% % 001EGO ]]F''3
//
,
,!%!A!A - C ( ""&//o--'+- )(7(O(O+33,,++	)o% $74#<#<11




&
&



 ( #33) 4l 
0
01E1M1M19<I3)o%
 (
//
(
(
G
G##% % ..o'K'K (
//
(
(
G
G##% % 22o !!--1-G-Go*""..2.I.Io+!!-!!++u0L"&o*
//
(
(
H
H%%' & !!-#??
//455 7o 	v/B!!Z/
//
(
(
K
K((* ) -- <<o --dD//44
 ''*.*A*Ao'ooAA&0L0L B G ##33XwGHHI)s   4,Sc                 	   UR                   (       a<  UR                  (       a+  UR                  (       a  UR                  c  UR                  b  [
        R                  " S5      eUR                  S5      (       a'  UR                  S:w  a  [        R                  " SS5      eU R                  XU5      nUR                  nUR                  b(  UR                  R                  UR                  S9Ul        UR"                  b  UR"                  Ul        UR&                  b  UR&                  Ul        [*        R,                  " UR                  X$5        UR.                  b  [
        R                  " S5      eUR0                  c3  U R2                  (       a[  [5        US5      (       aJ  UR6                  (       a9  [*        R8                  " UUUUR:                  UR<                  U R>                  5        UR@                  bL  UR@                   Vs/ s H/  n[B        RD                  " UR:                  UR<                  U5      PM1     snUl#        [*        RH                  " XRX@RJ                  5        [*        RL                  " XRU5        U RO                  UR                  URP                  U5        URR                  b4  UR                  RT                  RW                  URR                  5      Ul,        URZ                  b  URZ                  Ul.        UR                  S5      (       a<  [^        R`                  Rc                  X!Rd                  5      Rg                  5       Ul4        URj                  b4  UR                  RT                  Rm                  URj                  5      Ul7        URp                  b+  U Rs                  UR                  URt                  5      Ul;        [*        Rx                  " XRU5        [*        Rz                  " UR                  UU5        [*        R|                  " XRU5        [*        R~                  " X$5        U R                  (       a  [*        R                  " XRU5        U R                  (       a  [*        R                  " XRU5        U R                  (       a  UR                  UlF        UR                  R                  UUR<                  UR:                  S	9nUR                  R                  S
U4/$ s  snf )z2Returns a regional backend service create request.z<Custom cache key flags cannot be used for regional requests.networkr   z	--networkz6can only specify network for INTERNAL backend service.r   zE--service-lb-policy flag cannot be used for regional backend service.r   )r   regionr   r   )Jcache_key_include_hostcache_key_include_protocolcache_key_include_query_string cache_key_query_string_blacklist cache_key_query_string_whitelistcompute_exceptionsArgumentErrorIsSpecifiedr   r   r   _CreateRegionBackendServicer   r   r+   r   r   r   r   r   r   r   ApplyFailoverPolicyArgsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   !ApplyConnectionTrackingPolicyArgsr   r   r   r'   r   r   r   portNamer
   NETWORK_ARGResolveAsResource	resourcesSelfLinkr   r   r   r   r   r   resource_manager_tagr   r   r   r   r   r   r   r   ZonalAffinityr   r   r   )ComputeRegionBackendServicesInsertRequestr   regionBackendServicesr   s           r   _CreateRegionalRequests$CreateHelper._CreateRegionalRequests/  s8    ''..2200<00<,,
H  	""t'A'AZ'O//
O  66*O ]]F''3+1??+M+M!== ,N ,o( !!--1-G-Go*""..2.I.Io+22 ),, 
 $74#<#<11




&
&

%
%


 ( #33) 4l 
0
0"**"))
 4)o% ..o'K'K <<o' 	v/B(
//
(
(
G
G##% % ~~!!%o	"" % 1 1 C C
  !""*(*  *
//
(
(
H
H%%' & !!-#??
//444 6o 22o -- <<o --dD//44
 ##**6I''*.*A*Ao'ooGG&#**$,, H .G
 ##998WMNNM)s   6S0c           
      R   [         R                  " X UR                  5      nUR                  (       a  SOS nUR                  R
                  R                  UR                  UR                  5       U[        U5      [        UR                  R
                  U5      UR                  US9$ )NT)descriptionnamehealthChecksr   r#   
timeoutSecr   )r
   GetHealthCheckUrisr   r   r   r+   r'   r   Namer%   r.   timeout)r   r   r$   r   health_checksr   s         r   r   "CreateHelper._CreateBackendService  s    ,,T9I9IJMdJ==!!00$$!&&("!$'!&--"8"8$?<< 1  r   c                 2   [         R                  " X UR                  5      nUR                  R                  nUR                  UR                  UR                  5       UUR
                  R                  UR                  5      [        XRSS9UR                  S9$ )z#Creates a regional backend service.r    r?   )r   r   r   r   r#   r   )r
   r   r   r   r+   r'   r   r   r   r   r.   r   )r   r   r$   r   r   r+   s         r   r   (CreateHelper._CreateRegionBackendService  s     ,,T9I9IJM}}%%H""$$!&&("##FF**,!(%@<< # ! !r   c                    Ub  [         R                  " X!5      Ul        UR                  R                  (       a)  [        R
                  " [         R                  " 5       5        UR                  R                  (       aX  UR                  UR                  R                  R                  La*  [        R
                  " [         R                  " 5       5        g g g g r   )r   GetIAPr   enabledr   warningIapBestPracticesNoticer#   r'   r(   r   IapHttpWarning)r   r+   iap_argr   s       r   r   CreateHelper._ApplyIapArgs  s    299'Lo				$	$*AACD



%
%/*B*B((@@FF+G*99;<+G
%	 r   c                 P   UR                   n[        R                  R                  UUR                  [
        R                  " U5      S9nUR                  5       S:X  a  U R                  X!U5      nO&UR                  5       S:X  a  U R                  X!U5      nUR                  W5      $ )3Issues request necessary to create Backend Service.)scope_listerzcompute.backendServiceszcompute.regionBackendServices)r   r
   rF   r   r   compute_flagsGetDefaultScopeLister
Collectionr   r   MakeRequests)r   r$   r   r   refrequestss         r   RunCreateHelper.Run  s     ]]F

3
3
E
E"88@ F BC ~~44++F#>h		<	<--fC@hx((r   c           	          [         R                  " U5      nUR                  n[        UR	                  5       5       VVs/ s H  u  pVUR
                  R                  XVS9PM      nnnU" UR                  US9S9$ s  snnf )N)keyvalue)additionalProperties)resourceManagerTags)r   GetResourceManagerTagsBackendServiceParamssorteditemsResourceManagerTagsValueAdditionalProperty)r   r+   r   resource_manager_tags_mapr   r  r  additional_propertiess           r   r   (CreateHelper._CreateBackendServiceParams  s    #::!	
 
 **F !!:!@!@!BCCJC 	''::s:PC   ";;!6 < 
 	s   %A:)r   r   r   r   r   r   )__name__
__module____qualname____firstlineno____doc__rJ   rL   rN   classmethodr}   r   r   r   r   r   r   r  r   __static_attributes__ r   r   r5   r5   T   sZ    1H) H)T.$uIn|O|! =)r   r5   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)CreateGAi  a  Create a backend service.

*{command}* creates a backend service for a Google Cloud load balancer or
Traffic Director. A backend service defines how to distribute traffic to
backends. Depending on the load balancing scheme of the backend service,
backends can be instance groups (managed or unmanaged), zonal network endpoint
groups (zonal NEGs), serverless NEGs, or an internet NEG. For more
information, see the [backend services
overview](https://cloud.google.com/load-balancing/docs/backend-service).

After you create a backend service, you add backends by using `gcloud
compute backend-services add-backend` or `gcloud compute backend-services
edit`.

Fc           	          [         R                  UU R                  U R                  U R                  U R
                  U R                  S9  g )N)ry   rz   r{   r|   r>   )r5   r}   r   r   r   r   r   )rx   r2   s     r   r}   CreateGA.Args  sE    '*'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       U R                  S9R                  X5      $ )r  )ry   rz   r{   r|   r   r>   )
r   ComputeApiHolderReleaseTrackr5   r   r   r   r   r   r  )r   r$   r   s      r   r  CreateGA.Run  so     **4+<+<+>?F'+'K'K+/+S+S#;;#'#C#C'')// 
c$r   r%  N)r  r  r   r!  r"  r   r   r   r   r   r#  r}   r  r$  r%  r   r   r'  r'    s>      %*!(-%! % r   r'  c                   ,    \ rS rSrSrSrSrSrSrSr	Sr
g)
CreateBetai&    Create a backend service.

*{command}* creates a backend service. A backend service defines how Cloud
Load Balancing distributes traffic. The backend service configuration contains
a set of values, such as the protocol used to connect to backends, various
distribution and session settings, health checks, and timeouts. These settings
provide fine-grained control over how your load balancer behaves. Most of the
settings have default values that allow for easy configuration if you need to
get started quickly.

After you create a backend service, you add backends by using `gcloud
compute backend-services add-backend`.

For more information about the available settings, see
https://cloud.google.com/load-balancing/docs/backend-service.
TFr%  Nr  r  r   r!  r"  r   r   r   r   r   r$  r%  r   r   r/  r/  &  s'      %)!(,%  %r   r/  c                   ,    \ rS rSrSrSrSrSrSrSr	Sr
g)CreateAlphai?  r0  Tr%  Nr1  r%  r   r   r3  r3  ?  s'      %)!(,%  $r   r3  N)HTTP)&r"  
__future__r   r   r   googlecloudsdk.api_lib.computer   googlecloudsdk.callioper   r   "googlecloudsdk.command_lib.computer	   rn   r   r
   r  r   r   r   3googlecloudsdk.command_lib.compute.backend_servicesr   googlecloudsdk.corer   r%   r.   r3   objectr5   UniverseCompatibleReleaseTracksr,  GACreateCommandr'  BETAr/  ALPHAr3  r%  r   r   <module>rB     s  
 '  ' 7 ( . K O E > J ? V E #,B]6 ]@ D%%(()-t!! - * -` D%%**+  ,0 D%%++,*  -r   