
    0                        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 ej$                   ej&                  ej(                  j*                         G d dej,                                      Z ej&                  ej(                  j0                         G d de             Z ej&                  ej(                  j4                         G d de             Zddie_        y)z3Command for creating network firewall policy rules.    )absolute_import)division)unicode_literals)base_classes)firewall_policy_rule_utils)client)region_client)base)
exceptions)flags)secure_tags_utilsc                   2    e Zd ZdZdZdZdZed        Zd Z	y)CreateyCreates a Compute Engine network firewall policy rule.

  *{command}* is used to create network firewall policy rules.
  NFc                 <   t        j                  dd      | _        | j                  j                  |d       t        j                  |       t        j
                  |d       t        j                  |       t        j                  |       t        j                  |d       t        j                  |       t        j                  |       t        j                  |       t        j                  |       t        j                  |       t        j                  |d| j                  	       t        j                   |       t        j"                  |       t        j$                  |       t        j&                  |       t        j(                  |       t        j*                  || j                  
       t        j,                  || j                  
       t        j.                  || j                  
       t        j0                  || j                  
       t        j2                  |       t        j4                  |       | j                  rit        j6                  |       t        j8                  |       t        j:                  |       t        j<                  |       t        j>                  |       | j@                  r*t        jB                  |       t        jD                  |       |jF                  jI                  t         jJ                         y )NTcreate)required	operation)operation_typeinserted)r   )r   F)r   support_network_scopes)r   )&r   !NetworkFirewallPolicyRuleArgumentNETWORK_FIREWALL_POLICY_ARGAddArgument	AddActionAddRulePriorityAddSrcIpRangesAddDestIpRangesAddLayer4ConfigsAddDirectionAddEnableLoggingAddDisabledAddTargetServiceAccountsAddDescriptionAddSrcSecureTagsr   AddTargetSecureTagsAddSrcAddressGroupsAddDestAddressGroupsAddSrcFqdnsAddDestFqdnsAddSrcRegionCodesAddDestRegionCodesAddSrcThreatIntelligenceAddDestThreatIntelligenceAddSecurityProfileGroupAddTlsInspectAddSrcNetworkScopeAddSrcNetworksAddDestNetworkScopeAddSrcNetworkTypeAddDestNetworkTypesupport_target_typeAddTargetTypeAddTargetForwardingRulesdisplay_infoAddCacheUpdater NetworkFirewallPoliciesCompleter)clsparsers     =lib/surface/compute/network_firewall_policies/rules/create.pyArgszCreate.Args+   s>   &+&M&M'C# ##//x/P	OOF	&J7	 	&!	6D1	v	6"	f	""6*	 	"99
 
f%	f%	v&	f	v	s'A'A 
s'A'A 
""s'A'A 
##s'A'A 
!!&)	
!!v&6"'f%v&
&!$$V,
''(N(NO    c                 x   t        j                  | j                               }| j                  j	                  ||j
                        }t        j                  ||j                        }t        |d      r!t        j                  ||j                        }g }g }g }g }d }	d }
d}d}g }g }d }g }d }d }g }|j                  d      r|j                  }|j                  d      r|j                  }|j                  d      r|j                  }|j                  d      r|j                  }|j                  d	      r|j                   }|j                  d
      r|j"                  }|j                  d      r*t%        j&                  |j                  |j(                        }|j                  d      r*t%        j&                  |j                  |j*                        }|j                  d      r|j,                  }	|j                  d      r|j.                  }
| j0                  r|j                  d      r&|j                  d      rt3        j4                  d      |j                  d      r&|j                  d      rt3        j4                  d      |j                  d      rz|j6                  s5|j                  j8                  j:                  j<                  j>                  }n9|j                  j8                  j:                  j=                  |j6                        }|j                  d      r|j@                  }|j                  d      rz|jB                  s5|j                  j8                  j:                  jD                  j>                  }n9|j                  j8                  j:                  jE                  |jB                        }|j                  d      rz|jF                  s5|j                  j8                  j:                  j<                  j>                  }n9|j                  j8                  j:                  j=                  |jF                        }|j                  d      rz|jH                  s5|j                  j8                  j:                  jD                  j>                  }n9|j                  j8                  j:                  jE                  |jH                        }tK        jL                  ||j                  j8                        }| j0                  r-|j                  j8                  j;                  |||||||      }n)|j                  j8                  j;                  ||||      }|j                  d      r|jN                  |_(        |j                  d      r|jR                  |_*        |j                  d      r|jV                  |_,        |j                  d      r|jZ                  |_.        |j                  d      r|j^                  |_0        |j                  d      r|jb                  |_2        |j                  d      r|jf                  |_4        |j                  d      r|jj                  |_6        |j                  j8                  jn                  jp                  jr                  }|j                  d       rx|jt                  d!k(  r5|j                  j8                  jn                  jp                  jr                  }n4|j                  j8                  jn                  jp                  jv                  }| jx                  rg|j                  d"      r9|j                  j8                  jn                  j{                  |j|                        }|j                  d#      r|j~                  }|j                  j8                  jo                  tK        j                  |j                        |j                  ||||j                  ||||	|
$      }| jx                  r||_D        ||_E        |j                  |j                  |%      S )&N)refcompute_clientregion)rC   Fsrc_ip_rangesdest_ip_rangeslayer4_configstarget_service_accountsenable_loggingdisabledsrc_secure_tagstarget_secure_tagssecurity_profile_grouptls_inspectsrc_network_scopesrc_network_typezGAt most one of src_network_scope and src_network_type can be specified.dest_network_scopedest_network_typezIAt most one of dest_network_scope and dest_network_type can be specified.src_networks)srcIpRangesdestIpRangeslayer4ConfigssrcSecureTagssrcNetworkScopesrcNetworksdestNetworkScope)rT   rU   rV   rW   src_address_groupsdest_address_groups	src_fqdns
dest_fqdnssrc_region_codesdest_region_codessrc_threat_intelligencedest_threat_intelligence	directionINGRESStarget_typetarget_forwarding_rules)priorityactionmatchrc   targetServiceAccountsdescriptionenableLoggingrJ   targetSecureTagssecurityProfileGroup
tlsInspect)firewall_policyfirewall_policy_rule)Hr   ComputeApiHolderReleaseTrackr   ResolveAsResource	resourcesr   NetworkFirewallPolicyRulehasattrr	   RegionNetworkFirewallPolicyRuleIsSpecifiedrE   rF   rG   rH   rI   rJ   r   $TranslateSecureTagsForFirewallPolicyrK   rL   rM   rN   r   r   ToolExceptionrO   messagesFirewallPolicyRuleMatcherSrcNetworkScopeValueValuesEnumUNSPECIFIEDrS   rQ   DestNetworkScopeValueValuesEnumrP   rR   
rule_utilsParseLayer4Configsr[   srcAddressGroupsr\   destAddressGroupsr]   srcFqdnsr^   	destFqdnsr_   srcRegionCodesr`   destRegionCodesra   srcThreatIntelligencesrb   destThreatIntelligencesFirewallPolicyRuleDirectionValueValuesEnumrd   rc   EGRESSr6   TargetTypeValueValuesEnumre   rf   ConvertPriorityToIntrg   rh   rk   
targetTypetargetForwardingRules
CreateRulerp   )selfargsholderrB   #network_firewall_policy_rule_clientrE   rF   rG   rH   rM   rN   rI   rJ   rK   rL   rO   rS   rQ   re   rf   layer4_config_listmatchertraffic_directrq   s                           r>   Runz
Create.Run_   sA   **4+<+<+>?F

*
*
<
<fC +1*J*J+' sH

7
7&-- * MNN !KNHOLK (((m()**n()**n12 $ < <()**n
#h)*)NN
----o ,-

@
@mmT44 
 01#::&$$k""			-	.43C3C
4 &&
 	
 
		.	/D4D4D
5 &&
 	
 
		-	.%%mm$$>>]]ii  %mm44NNmm$$
 
		.	)((			.	/&&mm$$>>^^jj   &}}55OOoo%% 
 
		,	- $$mm$$>>]]ii  %mm44NNmm##
 
		-	. %%mm$$>>^^jj   &}}55OOoo$$ 
 $66.. ""&&@@#%*'+"- A g &&@@#%*'	 A g ,-!%!8!8g-."&":":g$g%//g*+#44g+, $ 6 6g12'+'C'Cg$23(,(E(Eg%11JJRR  $	9	$MM""55NNVV 	
 MM""55NNUU 	 			-	(MM""55OO   	
 
		3	4"&">">!==11DD00?{{ 5$$$+3 E  (3%3J0.99,,1 :  r@   )
__name__
__module____qualname____doc__r   r   r6   classmethodr?   r    r@   r>   r   r      s6    
 !% 1P 1PfCr@   r   c                       e Zd ZdZdZdZy)
CreateBetar   TFNr   r   r   r   r   r6   r   r@   r>   r   r   %  s    
  r@   r   c                       e Zd ZdZdZdZy)CreateAlphar   TNr   r   r@   r>   r   r   0  s    
  r@   r   EXAMPLESa%      To create a rule with priority ``10'' in a global network firewall policy
    with name ``my-policy'' and description ``example rule'', run:

        $ {command} 10 --firewall-policy=my-policy --action=allow --description="example rule" --global-firewall-policy

    To create a rule with priority ``10'' in a regional network firewall policy
    with name ``my-region-policy'' and description ``example rule'', in
    region ``region-a'', run:

        $ {command} 10 --firewall-policy=my-policy --action=allow --description="example rule"
    N)r   
__future__r   r   r   googlecloudsdk.api_lib.computer   r   r   8googlecloudsdk.api_lib.compute.network_firewall_policiesr   r	   googlecloudsdk.callioper
   r   <googlecloudsdk.command_lib.compute.network_firewall_policiesr   r   UniverseCompatibleReleaseTracksrs   GACreateCommandr   BETAr   ALPHAr   detailed_helpr   r@   r>   <module>r      s    : &  ' 7 S K R ( . N Z D%%(()AT A * AH D%%**+  , D%%++,&  -   r@   