
    ,                        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  \R*                  " \R,                  R.                  5       " S S\R0                  5      5       r\R*                  " \R,                  R4                  5       " S S\5      5       r\R*                  " \R,                  R8                  5       " S S\5      5       rSSSS.\l        g)z$Command for updating firewall rules.    )absolute_import)division)unicode_literals)encoding)base_classes)firewalls_utils)utils)apis)base)
exceptions)flagsc                   X    \ 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g)UpdateFirewall!   Update a firewall rule.TNc                    [         R                  " S[        R                  5      n[        R
                  " 5       U l        U R                  R                  USS9  [        R                  " USU R                  U R                  S9  [        R                  " USS9  [        R                  " U5        [        R                  " X5        g Ncomputeupdate)operation_typeT)
for_updatewith_egress_supportwith_service_account)r   )r
   GetMessagesModulecompute_apiCOMPUTE_GA_API_VERSIONr   FirewallRuleArgumentFIREWALL_RULE_ARGAddArgumentr   AddCommonArgswith_egress_firewallr   AddArgsForServiceAccountAddEnableLoggingAddLoggingMetadataclsparsermessagess      ,lib/surface/compute/firewall_rules/update.pyArgsUpdateFirewall.Args*   s    %%i&1&H&HJH!668C%%fX%F!!44 55	7
 ,,VE	6"	V.    c                 n   [         R                  " UR                  U[         R                  R                  5      U l        [        S UR                  UR                  UR                  UR                  UR                  4 5       5      nU R                  (       a<  U=(       a3    [        S UR                  UR                  UR                  4 5       5      nU R                  (       a1  U=(       a(    [        S UR                   UR"                  4 5       5      nU=(       a    UR$                  S L nU=(       a    UR&                  S L nU=(       a    UR(                  (       + nU(       a  [*        R,                  " S5      eUR                  (       a(  UR                  (       a  [         R.                  " S5      eg g )Nc              3   *   #    U  H	  nUS L v   M     g 7fN .0xs     r)   	<genexpr>2UpdateFirewall.ValidateArgument.<locals>.<genexpr>=   s      76A 	
T	6   c              3   *   #    U  H	  nUS L v   M     g 7fr/   r0   r1   s     r)   r4   r5   B   s      &IGa t)Gr6   c              3   *   #    U  H	  nUS L v   M     g 7fr/   r0   r1   s     r)   r4   r5   F   s      &QOa t)Or6   z'At least one property must be modified.z8Can NOT specify --rules and --allow in the same request.)r   
ParseRulesallow
ActionTypeALLOWnew_allowedalldescriptionsource_rangessource_tagstarget_tagsr!   destination_rangespriorityrulesr   source_service_accountstarget_service_accountsdisabledenable_logginglogging_metadatar   UpdatePropertyErrorArgumentValidationError)selfr(   args
args_unsets       r)   ValidateArgumentUpdateFirewall.ValidateArgument9   st   &11

Ho88>>@D  7**d..0B0B""D$4$467 7J    I# &I++T]]DJJG&I #Ij    Q# &Q00$2N2NO&Q #Qj 5 5J<!4!4!<J9D$9$9 9J**
35 5 zzdjj33
DF F !zr,   c                 8   [         R                  " U R                  5       5      nUR                  nU R	                  UR
                  U5        U R                  R                  XR                  5      nU R                  X45      n/ nUR                  U/5      nU R                  X1US   U5      nU(       a	  US   U:X  a  US   $ UR                  R                  U5         UR                  U R                  X4U5      /5      n	SSS5        U	$ ! , (       d  f       W	$ = f)z7Issues requests necessary to update the Firewall rules.r   N)r   ComputeApiHolderReleaseTrackclientrP   r(   r   ResolveAsResource	resources_GetGetRequestMakeRequestsModifyapitools_clientIncludeFields_GetSetRequest)
rM   rN   holderrU   resource_referenceget_requestcleared_fieldsobjects
new_objectresource_lists
             r)   RunUpdateFirewall.RunT   s   **4+<+<+>?F]]F&//40 //AA %%fAKN!!;-0GV71:~FJ
 z1QZ				-	-n	=))v:F
GIm 
> 	 
>	= s   #D


Dc                     UR                   R                  SUR                  R                  UR	                  5       UR
                  S94$ )z7Returns the request for the existing Firewall resource.Get)firewallproject)r[   	firewallsr(   ComputeFirewallsGetRequestNamerj   )rM   rU   r_   s      r)   rX   UpdateFirewall._GetGetRequestp   sI    "",,eOO66+002*22 7 45 5r,   c                     UR                   R                  UR                  UUR                  S9nUR                  R
                  SU4$ )N)ri   firewallResourcerj   Patch)r(   ComputeFirewallsPatchRequestnamerj   r[   rk   )rM   rU   r_   replacementrequests        r)   r]   UpdateFirewall._GetSetRequestw   sK    oo::!!$"** ; ,G "",,gw??r,   c                     UR                  S5      (       a`  Ub  UR                  (       d  [        R                  " SS5      e[        R
                  " U5      R                  UR                  5      Ul        g g )NrJ   z--logging-metadataz9cannot toggle logging metadata if logging is not enabled.)	IsSpecifiedenablecalliope_exceptionsInvalidArgumentExceptionr   GetLoggingMetadataArgGetEnumForChoicerJ   metadata)rM   r(   rN   
log_configs       r)   _AddLoggingMetadata"UpdateFirewall._AddLoggingMetadata~   sn    *++		:#4#4!:: GI 	I "77
$$T%:%:;  ,r,   c                    UR                   (       a  U R                  nO-UR                   c  UR                  nOUR                  S5        / nUR                  (       a  UR                  nO-UR                  c  UR                  nOUR                  S5        SnUR
                  (       a  UR
                  nO-UR
                  c  UR                  nOUR                  S5        / nUR                  (       a  UR                  nO-UR                  c  UR                  nOUR                  S5        / nUR                  (       a  UR                  n	O-UR                  c  UR                  n	OUR                  S5        / n	/ n
UR                  (       a  UR                  (       aE  [        R                  " UR                  UR                  [        R                  R                   5      nO[        R                  " UR                  UR                  [        R                  R"                  5      n
OEUR                  b8  UR                  (       a  UR                  S5        / nOUR                  S5        / n
UR$                  nUR&                  c  UR&                  nOUR&                  n/ nUR(                  (       a  UR(                  nO+UR(                  c  UR*                  nOUR                  S5        / nUR,                  (       a  UR,                  nO+UR,                  c  UR.                  nOUR                  S	5        / nUR0                  (       a  UR0                  nO+UR0                  c  UR2                  nOUR                  S
5        UR5                  S5      (       aA  UR                  R7                  UR8                  S9nU R;                  UR                  UU5        OLUR<                  b   [>        R@                  " UR<                  5      OSnU R;                  UR                  UU5        UR                  RC                  URD                  UUUU
UURF                  UUUU	UUUS9nURH                  b  URH                  Ul$        U$ )z8Returns a modified Firewall message and included fields.Nallowedr?   sourceRanges
sourceTags
targetTagsdenieddestinationRangessourceServiceAccountstargetServiceAccountsrI   )ry   )rs   	directionrD   r   r   r?   networkr   r   r   r   r   r   	logConfig)%r:   r=   r   appendr?   r@   r   rA   r   rB   r   rE   r   r9   r(   r;   r<   DENYr   rD   rC   r   rF   r   rG   r   rx   FirewallLogConfigrI   r   r   r   CopyProtoMessageFirewallrs   r   rH   )rM   rU   rN   existingra   r   r?   r@   rA   rB   r   r   rD   rC   rF   rG   r   new_firewalls                     r)   rZ   UpdateFirewall.Modify   s   zz  g		  gI&g$$k				!((kM*k((m				#++mN+m$$k				!''kL)k$$k				!''kL)kFzz			!,,TZZ-<-G-G-M-MO !++DJJ,;,F,F,K,KM					i(h'""I}}""hh22		 	 	(#55/0 ## $ < <		%	%	- ( > >34 ## $ < <		%	%	- ( > >34())??44D<O<O4Pj
vjA + 
#
#H$6$6
715  vjA??++]]  ",55 , L  }} "mmlr,   )r=   )__name__
__module____qualname____firstlineno____doc__r!   r   r   classmethodr*   rP   re   rX   r]   r   rZ   __static_attributes__r0   r,   r)   r   r   !   sJ    / /F685@<ur,   r   c                   (    \ rS rSrSr\S 5       rSrg)BetaUpdateFirewall   r   c                    [         R                  " S[        R                  5      n[        R
                  " 5       U l        U R                  R                  USS9  [        R                  " USU R                  U R                  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%   s      r)   r*   BetaUpdateFirewall.Args  s    %%i&1&J&JLH!668C%%fX%F!!44 55	7
 ,,VE	6"	V.r,   r0   Nr   r   r   r   r   r   r*   r   r0   r,   r)   r   r          / /r,   r   c                   (    \ rS rSrSr\S 5       rSrg)AlphaUpdateFirewalli  r   c                    [         R                  " S[        R                  5      n[        R
                  " 5       U l        U R                  R                  USS9  [        R                  " USU R                  U R                  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%   s      r)   r*   AlphaUpdateFirewall.Args  s    %%i&1&K&KMH!668C%%fX%F!!44 55	7
 ,,VE	6"	V.r,   r0   Nr   r0   r,   r)   r   r     r   r,   r   r   a          *{command}* is used to update firewall rules that allow/deny
        incoming/outgoing traffic. The firewall rule will only be updated for
        arguments that are specifically passed. Other attributes will remain
        unaffected. The `action` flag (whether to allow or deny matching
        traffic) cannot be defined when updating a firewall rule; use
        `gcloud compute firewall-rules delete` to remove the rule instead.
        zz        To update the firewall rule ``RULE'' to enable logging, run:

          $ {command} RULE --enable-logging
        )briefDESCRIPTIONEXAMPLESN)r   
__future__r   r   r   apitools.base.pyr   googlecloudsdk.api_lib.computer   r   r	   r   googlecloudsdk.api_lib.utilr
   googlecloudsdk.callioper   r   rz   "googlecloudsdk.command_lib.compute1googlecloudsdk.command_lib.compute.firewall_rulesr   ReleaseTracksrT   GAUpdateCommandr   BETAr   ALPHAr   detailed_helpr0   r,   r)   <module>r      s    + &  ' % 7 : ? , ( E 9 C D%%(()[T'' [ *[| D%%**+/ / ,/& D%%++,/, / -/* 	"	  r,   