
    E$                     ,   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r\R0                  " \R2                  R4                  5      \R6                   " S S\R8                  5      5       5       r\R0                  " \R2                  R<                  5       " S S\5      5       r\R0                  " \R2                  R@                  5       " S S\5      5       r!SSSS.\l"        g)z$Command for creating firewall rules.    )absolute_import)division)unicode_literals)base_classes)firewalls_utils)utils)apis)base)
exceptions)resource_manager_tags_utils)flagsprogress_trackerNc                   B    \ rS rSrSrSrSr\S 5       rS r	S r
S rSrg)	Create"   &Create a Compute Engine firewall rule.Nc                 >   [         R                  " S[        R                  5      nUR                  R                  [        R                  5        [        R                  " 5       U l	        U R                  R                  USS9  [        R                  " SSS9U l        [        R                  " USSSS9  [        R                   " USS	9  [        R"                  " U5        [        R$                  " X5        UR                  R'                  [        R(                  5        g 
Ncomputecreate)operation_typez+The network to which this rule is attached.F)requiredT)
for_updatewith_egress_supportwith_service_account)r   )r	   GetMessagesModulecompute_apiCOMPUTE_GA_API_VERSIONdisplay_info	AddFormatr   DEFAULT_LIST_FORMATFirewallRuleArgumentFIREWALL_RULE_ARGAddArgumentnetwork_flagsNetworkArgumentForOtherResourceNETWORK_ARGr   AddCommonArgsAddArgsForServiceAccountAddEnableLoggingAddLoggingMetadataAddCacheUpdaterFirewallsCompleterclsparsermessagess      ,lib/surface/compute/firewall_rules/create.pyArgsCreate.Args*   s    %%i&1&H&HJH
!!%";";<!668C%%fX%F#CC5GCO!! !	#
 ,,VF	6"	V.
''(@(@A    c           
      &	   UR                   nUR                  (       a'  UR                  (       a  [        R                  " S5      e[        UR                  5      [        UR                  5      -  (       a  [        R                  " S5      e[        R                  " UR                  UR                  [        R                  R                  5      nU R                  R                  X!R                  5      nU R                  R                  X!R                  5      nUR                  R                  UUR!                  5       UR"                  UR%                  5       UR&                  UR(                  UR*                  S9nUR,                  b  UR,                  Ul        S Ul        UR.                  (       a@  UR.                  S;   a0  UR                  R                  R0                  R2                  Ul        O/UR                  R                  R0                  R4                  Ul        UR6                  Ul        UR8                  Ul        / n/ nUR                  (       dE  [        R                  " UR                  UR                  [        R                  R                  5      nOUR                  S:X  aE  [        R                  " UR                  UR                  [        R                  R                  5      nOTUR                  S:X  aD  [        R                  " UR                  UR                  [        R                  R<                  5      nXGl        Xl         URB                  Ul"        URF                  Ul$        URK                  S5      (       a(  URL                  (       d  [N        RP                  " SS	5      eURK                  S
5      (       a}  UR                  RS                  URL                  S9n	URK                  S5      (       a>  [T        RV                  " UR                  5      RY                  URZ                  5      U	l.        Xl/        URK                  S5      (       a+  U Ra                  UR                  URb                  5      Ul2        XvRf                  4$ )Nz8Can NOT specify --rules and --allow in the same request.z#Must specify --rules with --action.)allowednamedescriptionnetworksourceRanges
sourceTags
targetTags)EGRESSOUTALLOWDENYlogging_metadataz--logging-metadataz9cannot toggle logging metadata if logging is not enabled.enable_logging)enableresource_manager_tags)4clientrulesallowr   ArgumentValidationErrorboolaction
ParseRulesr2   
ActionTyperA   r(   ResolveAsResource	resourcesr$   FirewallNamer:   SelfLinksource_rangessource_tagstarget_tagsdisabled	directionDirectionValueValuesEnumr?   INGRESSprioritydestination_rangesdestinationRangesrB   r8   deniedsource_service_accountssourceServiceAccountstarget_service_accountstargetServiceAccountsIsSpecifiedrD   r   InvalidArgumentExceptionFirewallLogConfigr   GetLoggingMetadataArgGetEnumForChoicerC   metadata	logConfig_CreateFirewallParamsrF   paramsproject)
selfholderargsrG   r8   network_reffirewall_reffirewallr^   
log_configs
             r3   _CreateFirewallCreate._CreateFirewall=   s   ]]Fzzdjj33
DF F DKK4

++33
/1 1 ((V__)8)C)C)I)IKG ""44T;K;KLK));; L '' $$$$&''#### ( %H }} --hH~~$..,==
//
"
"
;
;
B
B  //
"
"
;
;
C
C  H!%!8!8HGF;;**
**foo'A'A'G'GIg		**
**foo'A'A'G'GIg		))
**foo'A'A'F'FHfO%)%A%AH"%)%A%AH"*++D4G4G//

E 
 ())??44D<O<O4Pj			,	-	-#99OO


400
1 	 &  22
//455ho ))))r6   c           	         [         R                  " U5      nUR                  n[        [        R
                  " U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FirewallParamssortedsix	iteritemsResourceManagerTagsValueAdditionalProperty)rm   r2   rF   resource_manager_tags_maprk   rw   rx   additional_propertiess           r3   rj   Create._CreateFirewallParams   s    #::!	
 
 $$F !/H!IJJJC 	''::s:PJ   ";;!6 < 
 	s   %B c                 j   [         R                  " U R                  5       5      nUR                  nU R	                  X!5      u  pEUR
                  R                  XES9n[        R                  " SSS9 nUR                  UR                  R                  SU4/US9sSSS5        $ ! , (       d  f       g= f)z4Issues requests necessary for adding firewall rules.)rr   rl   zCreating firewallF)autotickInsertr   N)r   ComputeApiHolderReleaseTrackrG   rt   r2   ComputeFirewallsInsertRequestr   ProgressTrackerMakeRequestsapitools_client	firewalls)rm   ro   rn   rG   rr   rl   requesttrackers           r3   Run
Create.Run   s    **4+<+<+>?F]]F,,V:Hoo;; < ,G		)	)
 
  6#9#9#C#CX#*#, "-?F ! H	
 
 
s   2(B$$
B2 )__name__
__module____qualname____firstlineno____doc__r$   r(   classmethodr4   rt   rj   r   __static_attributes__r   r6   r3   r   r   "   s8     /+B B$O*b"Hr6   r   c                   (    \ rS rSrSr\S 5       rSrg)
BetaCreate   r   c                    [         R                  " S[        R                  5      nUR                  R                  [        R                  5        [        R                  " 5       U l	        U R                  R                  USS9  [        R                  " SSS9U l        [        R                  " USSSS9  [        R                   " USS	9  [        R"                  " U5        [        R$                  " X5        g r   )r	   r   r   COMPUTE_BETA_API_VERSIONr    r!   r   r"   r#   r$   r%   r&   r'   r(   r   r)   r*   r+   r,   r/   s      r3   r4   BetaCreate.Args   s    %%i&1&J&JLH
!!%";";<!668C%%fX%F#CC5GCO!! !	#
 ,,VF	6"	V.r6   r   Nr   r   r   r   r   r   r4   r   r   r6   r3   r   r          ./ /r6   r   c                   (    \ rS rSrSr\S 5       rSrg)AlphaCreate   r   c                    [         R                  " S[        R                  5      nUR                  R                  [        R                  5        [        R                  " 5       U l	        U R                  R                  USS9  [        R                  " SSS9U l        [        R                  " USSSS9  [        R                   " USS	9  [        R"                  " U5        [        R$                  " X5        g r   )r	   r   r   COMPUTE_ALPHA_API_VERSIONr    r!   r   r"   r#   r$   r%   r&   r'   r(   r   r)   r*   r+   r,   r/   s      r3   r4   AlphaCreate.Args   s    %%i&1&K&KMH
!!%";";<!668C%%fX%F#CC5GCO!! !	#
 ,,VF	6"	V.r6   r   Nr   r   r6   r3   r   r      r   r6   r   r   zW
*{command}* is used to create firewall rules to allow/deny
incoming/outgoing traffic.
a  
To create a firewall rule allowing incoming TCP traffic on port 8080, run:

  $ {command} example-service --allow=tcp:8080
      --description="Allow incoming traffic on TCP port 8080" --direction=INGRESS

To create a firewall rule that allows TCP traffic through port 80 and
determines a list of specific IP address blocks that are allowed to make
inbound connections, run:

  $ {command} tcp-rule --allow=tcp:80
      --source-ranges="10.0.0.0/22,10.0.0.0/14" --description="Narrowing TCP traffic"

To list existing firewall rules, run:

  $ gcloud compute firewall-rules list

For more detailed examples see
[](https://cloud.google.com/vpc/docs/using-firewalls)
  )briefDESCRIPTIONEXAMPLES)#r   
__future__r   r   r   googlecloudsdk.api_lib.computer   r   r   r   googlecloudsdk.api_lib.utilr	   googlecloudsdk.callioper
   r   "googlecloudsdk.command_lib.computer   1googlecloudsdk.command_lib.compute.firewall_rulesr   +googlecloudsdk.command_lib.compute.networksr&   googlecloudsdk.core.consoler   r~   ReleaseTracksr   GAUniverseCompatibleCreateCommandr   BETAr   ALPHAr   detailed_helpr   r6   r3   <module>r      s    + &  ' 7 : ? , ( . J C N 8 
 D%%(()HHT HH  *HHV D%%**+/ / ,/, D%%++,/* / -/. 6 r6   