
    =,                        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  \R"                  " \R$                  R&                  5       " S
 S\R(                  5      5       r\R"                  " \R$                  R,                  5       " S S\5      5       r\R"                  " \R$                  R0                  5       " S S\5      5       rSSSS.\l        g)z$Command for updating firewall rules.    )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,   r-   r.   s     r&   r1   r2   ?   s      &IGa t)Gr3   c              3   *   #    U  H	  nUS L v   M     g 7fr,   r-   r.   s     r&   r1   r2   C   s      &QOa t)Or3   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.ValidateArgument6   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clientrM   r%   r   ResolveAsResource	resources_GetGetRequestMakeRequestsModifyapitools_clientIncludeFields_GetSetRequest)
rJ   rK   holderrR   resource_referenceget_requestcleared_fieldsobjects
new_objectresource_lists
             r&   RunUpdateFirewall.RunQ   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)rX   	firewallsr%   ComputeFirewallsGetRequestNamerg   )rJ   rR   r\   s      r&   rU   UpdateFirewall._GetGetRequestm   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)rf   firewallResourcerg   Patch)r%   ComputeFirewallsPatchRequestnamerg   rX   rh   )rJ   rR   r\   replacementrequests        r&   rZ   UpdateFirewall._GetSetRequestt   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 )NrG   z--logging-metadataz9cannot toggle logging metadata if logging is not enabled.)	IsSpecifiedenablecalliope_exceptionsInvalidArgumentExceptionr
   GetLoggingMetadataArgGetEnumForChoicerG   metadata)rJ   r%   rK   
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targetServiceAccountsrF   )rv   )rp   	directionrA   r   r   r<   networkr   r   r   r   r   r   	logConfig)%r7   r:   r   appendr<   r=   r   r>   r   r?   r   rB   r   r6   r%   r8   r9   DENYr   rA   r@   r   rC   r   rD   r   ru   FirewallLogConfigrF   r}   r   r   CopyProtoMessageFirewallrp   r   rE   )rJ   rR   rK   existingr^   r   r<   r=   r>   r?   r   r   rA   r@   rC   rD   r|   new_firewalls                     r&   rW   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'   rM   rb   rU   rZ   r}   rW   __static_attributes__r-   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)   r-   Nr   r   r   r   r   r   r'   r   r-   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)   r-   Nr   r-   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   apitools.base.pyr   googlecloudsdk.api_lib.computer   r   r   r   googlecloudsdk.api_lib.utilr   googlecloudsdk.callioper   r	   rw   "googlecloudsdk.command_lib.compute1googlecloudsdk.command_lib.compute.firewall_rulesr
   ReleaseTracksrQ   GAUpdateCommandr   BETAr   ALPHAr   detailed_helpr-   r)   r&   <module>r      s    + & 7 : ? , ( E 9 C D%%(()[T'' [ *[| D%%**+/ / ,/& D%%++,/, / -/* 	"	  r)   