
    /o                        S r SSKJr  SSKJr  SSKJr  SSKrSSK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rSSKJr  S r " S S\5      r\R:                  " \R<                  R>                  5      \R@                   " S S\RB                  5      5       5       r"\R:                  " \R<                  RF                  5       " S S\"5      5       r$\R:                  " \R<                  RJ                  5       " S S\$5      5       r&SRO                  \RP                  S9SS.\"l)        \"RR                  \$l)        \$RR                  \&l)        S r*S r+S r,S r-S  r.S! r/g)"z&Command for creating forwarding rules.    )absolute_import)division)unicode_literalsN)base_classes)	constants)forwarding_rules_utils)arg_parsers)base)
exceptions)flags)log)rangec                    [         R                  " U SSS9  [         R                  " X5        [         R                  " U 5        [         R                  " U 5        [         R
                  " U SS9  [         R                  " U 5        [         R                  " U 5        [         R                  " U 5        [         R                  " U 5        [         R                  " U 5        [         R                  " U 5        U R                  SSS9  [         R                  " U 5        [         R                  " 5       nUR                  U SS	9  U R                   R#                  [         R$                  5        U$ )
z*Add the flags to create a forwarding rule.T)include_psc_google_apis!include_target_service_attachmentF)
for_updatez--service-labela  (Only for Internal Load Balancing): https://cloud.google.com/load-balancing/docs/dns-names/
The DNS label to use as the prefix of the fully qualified domain name for this forwarding rule. The full name will be internally generated and output as dnsName. If this field is not specified, no DNS record will be generated and no DNS name will be output. You cannot use the `--service-label` flag  if the forwarding rule references an internal IP address that has the `--purpose=SHARED_LOADBALANCER_VIP` flag set.)helpcreate)operation_type)r   AddCreateArgsAddIPProtocolsAddDescriptionAddPortsAndPortRangeAddNetworkTierAddAllowGlobalAccessAddAllowPscGlobalAccessAddSourceIpRangesAddDisableAutomateDnsZoneAddIsMirroringCollectorAddServiceDirectoryRegistrationadd_argumentAddAddressesAndIPVersionsForwardingRuleArgumentAddArgumentdisplay_infoAddCacheUpdaterForwardingRulesCompleter)parsersupport_all_protocolforwarding_rule_args      .lib/surface/compute/forwarding_rules/create.py_Argsr,   &   s    "(,
 v4vV$v%0V$'&!!!&)'''/6  
7 !!&)446!!&!B%%e&D&DE	    c                   V    \ 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g)CreateHelperK   z)Helper class to create a forwarding rule.Nc                 *    Xl         X l        UU l        g N_holder_support_all_protocol%_support_sd_registration_for_regional)selfholderr)   $support_sd_registration_for_regionals       r+   __init__CreateHelper.__init__P   s     L!5, 	.r-   c                 $    [        X5      U l        g)z,Inits the class args for supported features.N)r,   FORWARDING_RULE_ARG)clsr(   r)   s      r+   ArgsCreateHelper.Args\   s     $FACr-   c                 p    UR                   (       a%  UR                  R                  UR                   5      $ g r2   )ip_protocolForwardingRuleIPProtocolValueValuesEnum)r7   messagesargss      r+   ConstructProtocolCreateHelper.ConstructProtocola   s+    $$>>t?O?OPPr-   c                    U R                   R                  nU R                  R                  UU R                   R                  [
        R                  " U5      S9nUR                  5       S:X  a'  U R                  X R                   R                  X5      nO:UR                  5       S:X  a&  U R                  X R                   R                  X5      nUR                  W5      $ )z5Issues requests necessary to create Forwarding Rules.)scope_listerzcompute.globalForwardingRulescompute.forwardingRules)r4   clientr=   ResolveAsResource	resourcescompute_flagsGetDefaultScopeLister
Collection_CreateGlobalRequests_CreateRegionalRequestsMakeRequests)r7   rF   rL   forwarding_rule_refrequestss        r+   RunCreateHelper.Rung   s    \\  F22DD"88@ E B
 %%'+JJ++FLL4J4J,0Gh		'	'	)-F	F--fll6L6L.2Ih x((r-   c                 &
   [        US5      =(       a    UR                  nSn[        US5      (       a  UR                  (       a  U(       d  [        R                  " SS5      e[
        R                  " SUR                  5      nU(       d  [        R                  " SS5      eUR                  S5      nUR                  S	5      n	UR                  S
5      n
XR                  :w  a  [        R                  " SS5      eUR                  R                  XS9n[        UR                  5      u  p[        UR                  U5      n[        X1R                  U5      nXR                  R                   R"                  R$                  :X  a  [&        R(                  " S5      eXR                  R                   R"                  R*                  :X  a  UR,                  (       dK  UR.                  (       d:  UR0                  (       d)  UR2                  (       d  Sn[&        R(                  " U5      eUR4                  (       a  [&        R(                  " S5      eUR6                  (       d  [&        R(                  " S5      eU(       Ga  UR9                  5       n[;        U5      S:  d-  US   R=                  5       (       d  UR?                  5       (       d  [&        R(                  " S5      eU(       a  [        R                  " SS5      eU(       a  [        R                  " SS5      eUR                  [@        RB                  ;   a  UR                  nOSRE                  [@        RB                  5      n[        R                  " SSU-   5      e[F        RH                  " X#5      nURK                  5       nU(       a  [        R                  " SS5      eU(       d  [        R                  " SS5      eU RM                  UR                  U5      nU RO                  X#[P        RR                  RT                  RV                  U5      nUR                  R!                  URX                  UR9                  5       UUUU[[        UR                  U5      US9nU R]                  XX4U5        U(       a  UR^                  Ra                  U5        URc                  S5      (       a  URd                  Ul3        UR                  Ri                  UUR                  S9nURj                  Rl                  S U4/$ )!z!Create a globally scoped request.target_google_apis_bundleNservice_directory_registration --service-directory-registrationzCan only be specified for regional forwarding rules or Private Service Connect forwarding rules targeting a Google APIs bundle.z<^projects/([^/]+)/locations/([^/]+)(?:/namespaces/([^/]+))?$zoMust be of the form projects/PROJECT/locations/REGION or projects/PROJECT/locations/REGION/namespaces/NAMESPACE         z3Must be in the same project as the forwarding rule.)serviceDirectoryRegion	namespacezSYou cannot specify internal [--load-balancing-scheme] for a global forwarding rule.zYou must specify either [--target-http-proxy], [--target-https-proxy], [--target-grpc-proxy] or [--target-tcp-proxy] for an INTERNAL_SELF_MANAGED [--load-balancing-scheme].zUYou cannot specify [--subnet] for an INTERNAL_SELF_MANAGED [--load-balancing-scheme].zSYou must specify [--address] for an INTERNAL_SELF_MANAGED [--load-balancing-scheme]   r   z~A forwarding rule to Google APIs must have a name that is between  1-20 characters long, alphanumeric, starting with a letter.--portsz=[--ports] is not allowed for PSC-GoogleApis forwarding rules.--load-balancing-schemezTThe --load-balancing-scheme flag is not allowed for PSC-GoogleApis forwarding rules.z, z--target-google-apis-bundlez4The valid values for target-google-apis-bundle are: z;[--ports] cannot be set to ALL for global forwarding rules.z2[--ports] is required for global forwarding rules.)descriptionname	IPAddress
IPProtocol	portRangetargetnetworkTierloadBalancingSchemeallow_global_access)forwardingRuleprojectInsert)7hasattrrZ   r[   r   InvalidArgumentExceptionrematchgroupro   rE   *ForwardingRuleServiceDirectoryRegistration_ExtractPortsAndAllports_MakeSingleUnifiedPortRange
port_range_GetLoadBalancingSchemerC   "LoadBalancingSchemeValueValuesEnumINTERNALfw_exceptionsArgumentErrorINTERNAL_SELF_MANAGEDtarget_http_proxytarget_https_proxytarget_grpc_proxytarget_tcp_proxysubnetaddressNamelenisdigitisalnumr   PSC_GOOGLE_APIS_BUNDLESjoinutilsGetGlobalTargetSelfLinkrG   _ResolveAddressrO   compute_scope	ScopeEnumGLOBALre   _ConstructNetworkTier_ProcessCommonArgsserviceDirectoryRegistrationsappendIsSpecifiedrm   allowGlobalAccess)ComputeGlobalForwardingRulesInsertRequestapitools_clientglobalForwardingRules)r7   rL   rN   rF   rU   is_psc_google_apissd_registrationrt   ro   regionra   ports_all_specified
range_listrz   load_balancing_schemetarget_error_message_with_tcp	rule_nametarget_as_strbundles_list
target_refprotocolr   forwarding_rulerequests                           r+   rR   "CreateHelper._CreateGlobalRequestsy   s    	12 	+** 
 Ot5  7711. N
 	

 hh
I

-
-/e 11.}
 	
 Ag{{1~f++a.i	//	/11.AC 	C RR!' S >o ':$**&E#,T__jIJ 4D//4FH!?!?	+	+HH	5''  	!?!?	+	+,A,A	B$$T-D-D$$T-B-B? 	&
 ))*GHH	)))* 	* \\))() 	) %**,i	Y"		! 4 4 ! !  ""))KL 	L 
11KM 	M 
11%!" 	"
 
	'	'5+H+H	H66yy!>!>?11)B 	 ((9j ))+m	11IK 	K 11KM 	M %%foot<H""9#0#>#>#H#H#O#O#68G oo44$$ %%')&//4@1 5 3O 	Ft+-33::?K-..*.*B*Bo'ooGG&0C0K0K H MG ##998WMNNr-   c           
      f   [        US5      =(       a    UR                  n[        R                  " XX45      u  pgUR                  (       d  U(       a  Xsl        U R                  UR                  U5      nU R                  X#[        R                  R                  R                  U5      n	[        X1R                  U5      n
U(       a  U
(       a  [        R                  " SS5      eXR                  R                  R                   R"                  :X  a'  UR$                  (       a  [&        R(                  " S5      eXR                  R                  R                   R*                  :X  a  [&        R(                  " S5      eUR                  R                  UR,                  UR/                  5       U	U[1        UR                  U5      U
S9nUR2                  (       a  UR2                  Ul        U R7                  XX4U5        [9        UR:                  5      u  pUR=                  5       S:X  a  UR?                  5       Ul         SUl!        OSUl         UR?                  5       Ul!        UR=                  5       S:X  d  UR=                  5       S	:X  a^  URD                  S
:X  aN  U(       a	  SUl#        GOU(       a5  [I        U5       Vs/ s H  n[J        RL                  " U5      PM     snUl        GO\UR=                  5       S:X  d  UR=                  5       S:X  aG  URD                  S
:X  a7  [I        U5       Vs/ s H  n[J        RL                  " U5      PM     snUl        GOURD                  S
:X  a  [        R                  " SS5      eURD                  S:X  a  [O        UR$                  U5      Ul(        GOURD                  S:X  a  [O        UR$                  U5      Ul(        GOlUR=                  5       S:X  a  URD                  S:X  d  URD                  (       d  U(       a	  SUl#        GO'U(       ad  [S        U5      S:  a6  [I        U5       Vs/ s H  n[J        RL                  " U5      PM     snUl        O[J        RL                  " US   5      Ul(        OUR$                  (       a  [O        UR$                  U5      Ul(        OUR=                  5       S:X  d  UR=                  5       S	:X  aL  URD                  S:X  d  URD                  (       d+  U(       a  SUl#        O7[O        UR$                  U5      Ul(        O[O        UR$                  U5      Ul(        [        US5      (       a  URT                  Ul+        URY                  S5      (       a  URZ                  Ul.        URY                  S5      (       a  UR^                  Ul0        URY                  S5      (       a2  [b        Rd                  Rg                  X25      R?                  5       Ul4        URY                  S5      (       a  URj                  Ul6        [        US5      (       a  URn                  Ul8        [        US5      (       Ga	  URr                  (       Ga  U(       a  [t        Rv                  " SURr                  5      nU(       d  [        R                  " SS5      eURy                  S5      nURy                  S5      nUURz                  :w  d  UUR                  :w  a  [        R                  " SS 5      eUR                  R}                  URy                  S!5      S"9nUR~                  R                  U5        GOU R                  (       d  [        R                  " SS#5      e[t        Rv                  " S$URr                  5      nU(       d  [        R                  " SS%5      eURy                  S5      nURy                  S5      nUURz                  :w  d  UUR                  :w  a  [        R                  " SS 5      eUR                  R}                  URy                  S!5      URy                  S&5      S'9nUR~                  R                  U5        UR                  R                  UURz                  UR                  S(9nUR                  R                  S)U4/$ s  snf s  snf s  snf )*z#Create a regionally scoped request.target_service_attachmentrd   zMThe --load-balancing-scheme flag is not allowed for PSC-ILB forwarding rules.zYou cannot specify [--port-range] for a forwarding rule whose [--load-balancing-scheme] is internal, please use [--ports] flag instead.zeYou cannot specify an INTERNAL_SELF_MANAGED [--load-balancing-scheme] for a regional forwarding rule.)re   rf   rg   rh   rk   rl   zcompute.regionBackendServicesNzcompute.targetInstancesr}   Tzcompute.regionTargetHttpProxiesz compute.regionTargetHttpsProxieszgOnly target instances and backend services should be specified as a target for internal load balancing.INTERNAL_MANAGEDEXTERNAL_MANAGEDEXTERNALr]   r   zcompute.targetPoolservice_labelrm   allow_psc_global_accessip_collectiondisable_automate_dns_zoneis_mirroring_collectorr[   z7^projects/([^/]+)/locations/([^/]+)/namespaces/([^/]+)$r\   zRIf set, must be of the form projects/PROJECT/locations/REGION/namespaces/NAMESPACEr^   z]Service Directory registration must be in the same project and region as the forwarding rule.r_   )ra   zflag is available in one or more alternate release tracks. Try:

  gcloud alpha compute forwarding-rules create --service-directory-registration
  gcloud beta compute forwarding-rules create --service-directory-registrationzH^projects/([^/]+)/locations/([^/]+)/namespaces/([^/]+)/services/([^/]+)$z[Must be of the form projects/PROJECT/locations/REGION/namespaces/NAMESPACE/services/SERVICE   )ra   service)rn   ro   r   rp   )Erq   r   r   GetRegionalTargetr   rG   rE   r   rO   r   r   REGIONr{   r   rr   rC   r|   r}   rz   r~   r   r   re   r   r   source_ip_rangessourceIpRangesr   rw   rx   rQ   r   backendServicerj   r   allPorts_GetPortListsix	text_typery   ri   r   r   serviceLabelr   rm   r   r   allowPscGlobalAccessr   IP_COLLECTION_ARGrM   ipCollectionr   noAutomateDnsZoner   isMirroringCollectorr[   rs   rt   ru   ro   rv   r   r   r6   #ComputeForwardingRulesInsertRequestr   forwardingRules)r7   rL   rN   rF   rU   
is_psc_ilbr   
region_refr   r   r   r   r   r   prt   ro   r   r   r   s                       r+   rS   $CreateHelper._CreateRegionalRequests  s    	12 	+** 
 #444J ;;:k%%foot<H""9#0#>#>#H#H#O#O#68G 4D//4>@ +//
# 
 	!?!?	+	+HH	5	))12 	2
 	!?!?	+	+,A,A	B''FG G oo44$$ %%')&//4@1 5 3O '+'<'<o$Ft+- ':$**&E#"AA'1':':'<o$#o (,o$)224o				 $C	C				 $=	=""j0
 
#' &2:&>!
&>CMM!&>!
   "&GG  "&HH

$
$

2 %1$<$<q#--
$<o 
	#	#z	1 //
#23 3 
	#	#'9	9"=
//:#'o		#	#'9	9"=
//:#'o  "&EE&&*4** 
#' z?Q )5Z(@#(@1cmmA(@#/
 '*mmJqM&B/
#??$?OOZ%)!  "&::  "&??&&*4** 
#' $?OOZ%)! #>
//:#'o t_%%%)%7%7o"-..*.*B*Bo'122-1-I-Io*((%*%<%<%N%N
&#8: " 344*.*H*Ho't-..-1-H-Ho*t5  777	F//1 330b  ++a.Q)111V?R?Y?Y5Y330m 
 !//TTkk!n U &55<<_M99330R  W//1 330k  ++a.Q)111V?R?Y?Y5Y330m 
 !//TTkk!nekk!n U >55<<_MooAA&#++")) B +G
 ##33XwGHHk!
@#s   9 b$( b); b.c                    UR                   nUb7   [        R                  " [        R                  " UR                   5      5        U$ U$ ! [
         a    U[        R                  R                  R                  :X  aG  UR                  (       d6  UR                  (       d%  UR                  5       S:X  a  UR                  Ul        [        R                  " 5       R!                  X!US9nUR#                  5       n U$ f = f)zResolve address resource.rK   )default_scope)r   	ipaddress
ip_networkr   r   
ValueErrorrO   r   r   r   global_addressaddress_regionrQ   r   r   
AddressArgrM   r   )r7   rN   rF   scoperU   r   address_refs          r+   r   CreateHelper._ResolveAddress  s    
 llG)S]]4<<89 N7N  	) M//99@@@$$T-@-@"--/3LL$7$>$>d!&&(::5 ; 2&&(N	)s   4A	 	B,C98C9c                    UR                   (       a4  UR                  R                  R                  UR                   5      Ul        UR
                  (       a7  [        R                  " 5       R                  X25      R                  5       Ul        UR                  (       ai  UR                  (       d%  UR                  5       S:X  a  UR                  Ul        [        R                  R                  X25      R                  5       Ul        gg)a2  Processes common arguments for global and regional commands.

Args:
  client: The client used by gcloud.
  resources: The resource parser.
  args: The arguments passed to the gcloud command.
  forwarding_rule_ref: The forwarding rule reference.
  forwarding_rule: The forwarding rule to set properties on.
rK   N)
ip_versionrE   rC   IpVersionValueValuesEnum	ipVersionnetworkr   
NetworkArgrM   r   r   subnet_regionrQ   r   
SUBNET_ARG
subnetwork)r7   rL   rN   rF   rU   r   s         r+   r   CreateHelper._ProcessCommonArgs  s     
//
(
(
A
Aoo  || % 0 0 2 D D
!#8: {{  

(
(
*.G
G077#(#3#3#E#E
$#8:  	 r-   r3   )__name__
__module____qualname____firstlineno____doc__r=   r:   classmethodr?   rG   rW   rR   rS   r   r   __static_attributes__ r-   r+   r/   r/   K   sJ    1
 B B)$GORcIJ.&r-   r/   c                   6    \ rS rSrSrSrSr\S 5       rS r	Sr
g)Createi  FCreate a forwarding rule to direct network traffic to a load balancer.Fc                 B    [         R                  XR                  5        g r2   )r/   r?   r5   )r>   r(   s     r+   r?   Create.Args   s    f778r-   c                     [         R                  " U R                  5       5      n[        UU R                  U R
                  5      R                  U5      $ r2   )r   ComputeApiHolderReleaseTrackr/   r5   r6   rW   )r7   rF   r8   s      r+   rW   
Create.Run$  sH    **4+<+<+>?F""22 
c$i	r-   r   N)r   r   r   r   r   r5   r6   r   r?   rW   r   r   r-   r+   r   r     s+     O*/'9 9r-   r   c                        \ rS rSrSrSrSrSrg)
CreateBetai-  r   FTr   Nr   r   r   r   r   r5   r6   r   r   r-   r+   r   r   -  s    N*.'r-   r   c                        \ rS rSrSrSrSrSrg)CreateAlphai4  r   Tr   Nr   r   r-   r+   r   r   4  s    N*.'r-   r   a|  
*{{command}}* is used to create a forwarding rule. {overview}

When creating a forwarding rule, exactly one of  ``--target-instance'',
``--target-pool'', ``--target-http-proxy'', ``--target-https-proxy'',
``--target-grpc-proxy'', ``--target-ssl-proxy'', ``--target-tcp-proxy'',
``--target-vpn-gateway'', ``--backend-service'' or ``--target-google-apis-bundle''
must be specified.)overviewaK  
    To create a global forwarding rule that will forward all traffic on port
    8080 for IP address ADDRESS to a target http proxy PROXY, run:

      $ {command} RULE_NAME --global --target-http-proxy=PROXY --ports=8080 --address=ADDRESS

    To create a regional forwarding rule for the subnet SUBNET_NAME on the
    default network that will forward all traffic on ports 80-82 to a
    backend service SERVICE_NAME, run:

      $ {command} RULE_NAME --load-balancing-scheme=INTERNAL --backend-service=SERVICE_NAME --subnet=SUBNET_NAME --network=default --region=REGION --ports=80-82
)DESCRIPTIONEXAMPLESc                     U (       d  g[        U 5      nUR                  S5      nU  H  n UR                  U5      nM     U$ ! [        R                   a    [
        R                  " SS5      ef = f)z>Return a single port range by combining a list of port ranges.)NNr   rc   z,Must specify consecutive ports at this time.)sortedpopCombiner	   Errorr   rr   )ports_range_listrx   combined_port_rangerz   s       r+   _UnifyPortRangeFromListOfRangesr  W  s~    	
!
"%		!$jE/77
C % 
  E//
CE EEs   A,A.c                 H    U (       a  U R                   U R                  4$ S/ 4$ )NF)all_specifiedranges)ports_with_alls    r+   rw   rw   f  s&    '')>)>>>"9r-   c                     U (       a-  [         R                  " SU 5        [        R                  " U 5      $ U(       a*  [	        U5      nU(       a  [        R                  " U5      $ S$ g)zHReconciles the deprecated --port-range arg with ranges from --ports arg.zDThe --port-range flag is deprecated. Use equivalent --ports=%s flag.N)r   warningr   r   r  )arg_port_rangerange_list_from_arg_portsr   s      r+   ry   ry   m  sS    KK	 " ==(( 01JKJ(23==$<< !r-   c           
          / nU  H>  nUR                  [        [        UR                  UR                  S-   5      5      5        M@     [        U5      $ )zECreates list of singleton port numbers from list of ports and ranges.r]   )extendlistr   startendr   )r   rx   rz   s      r+   r   r   y  sB    
%j	LLeJ,,jnnq.@ABC 	r-   c                 X   U R                   (       d)  U(       a  S$ UR                  R                  R                  $ U R                   S:X  a   UR                  R                  R                  $ U R                   S:X  a   UR                  R                  R                  $ U R                   S:X  a   UR                  R                  R
                  $ U R                   S:X  a   UR                  R                  R                  $ U R                   S:X  a   UR                  R                  R                  $ g)zGet load balancing scheme.Nr}   r   r   r   r   )r   rC   r|   r   r}   r   r   r   )rF   rE   is_pscs      r+   r{   r{     s    		#	#4bx66YYbbb	:-""EENNN!!Z/""EENNN!!%77""EEVVV!!%<<##FF""$!!%77##FF	r-   c                    UR                   (       aw  UR                   R                  5       nU[        R                  ;   a%  U R                  R                  UR                   5      $ [        R                  " SSR                  US95      eg)zGet network tier.z--network-tierzInvalid network tier [{tier}])tierN)	network_tierupperr   !NETWORK_TIER_CHOICES_FOR_INSTANCErC   NetworkTierValueValuesEnumr   rr   format)rE   rF   r  s      r+   r   r     s    	$$**,LyBBB$$??


  //

)
0
0l
0
CE E r-   )0r   
__future__r   r   r   r   rs   googlecloudsdk.api_lib.computer   r   r   r   googlecloudsdk.callioper	   r
   r   "googlecloudsdk.command_lib.computer   rO   3googlecloudsdk.command_lib.compute.forwarding_rulesr~   googlecloudsdk.corer   r   	six.movesr   r,   objectr/   ReleaseTracksr   GAUniverseCompatibleCreateCommandr   BETAr   ALPHAr   r  FORWARDING_RULES_OVERVIEWdetailed_helpr  rw   ry   r   r{   r   r   r-   r+   <module>r)     s`   - &  '  	 7 4 J / ( . E [ E # 
 "JK&6 K&\ D%%(()T   *$ D%%**+/ / ,/ D%%++,/* / -/ fe&E&EfF	 0 "//
 &44 	=(r-   