
    7                     ,   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      \R.                   " S S\R0                  5      5       5       r\R(                  " \R*                  R4                  5       " S S\5      5       r\R(                  " \R*                  R8                  5       " S S\5      5       r SS jrS rS r SS0\l!        g)z;Command for updating a BGP peer on a Compute Engine router.    )absolute_import)division)unicode_literals)base_classes)routers_utils)poller)waiter)base)flags)router_utils)log)	resourcesc                   L    \ rS rSrSrSr\S 5       r\S 5       rS	S jr	S r
Srg)
UpdateBgpPeer    -Update a BGP peer on a Compute Engine router.Nc                 2   [         R                  " 5       U l        U R                  R                  U5        [        R
                  R                  U5        [         R                  " USSS9  [         R                  " US5        [         R                  " U5        g )NFT)for_add_bgp_peer	is_updatepeer)
r   RouterArgument
ROUTER_ARGAddArgumentr
   
ASYNC_FLAGAddToParserAddBgpPeerArgs AddUpdateCustomAdvertisementArgs AddUpdateCustomLearnedRoutesArgsclsparsers     .lib/surface/compute/routers/update_bgp_peer.py_ArgsUpdateBgpPeer._Args'   sm    ))+CNNNv&OO'	
 
**66:	**62    c                 &    U R                  U5        g Nr#   r   s     r"   ArgsUpdateBgpPeer.Args4       IIfr%   c           
         [         R                  " U5        [        R                  " U R	                  5       5      nUR
                  R                  nUR
                  R                  R                  nU R                  R                  XR                  5      nUR                  nUR                  U" S0 UR                  5       D65      n[         R                  " XR                   5      n	Sn
/ nUR"                  (       an  U	R$                  ba  UR&                   Vs/ s H!  nUR(                  U	R$                  :w  d  M  UPM#     snUl        UR&                  (       d  UR+                  S5        OUR,                  b  U	R$                  bC  U	R$                  n
UR&                   H&  nUR(                  U
:X  d  M  UR,                  Ul          OM   OJ[         R0                  " X5      n
UR3                  XR,                  S9nUR&                  R+                  U5        [5        U	UUU
US9  [         R6                  " U5      (       a  [         R8                  " XDR:                  US9u  pn[         R<                  " UUR:                  U	R>                  US9  UUUS.nURA                  5        H  u  nnUc  M  [C        U	UU5        M     [         RD                  " U5      (       GaV  [         RF                  " UUR:                  U	S9  URH                  (       aD  [J        RL                  " UR:                  URH                  S	9nU	RN                  RQ                  U5        URR                  (       aJ  [J        RL                  " UR:                  URR                  S	9n[         RT                  " UUR:                  U	US
9  URV                  (       a9  [J        RX                  " XARV                  S9nU	RZ                  RQ                  U5        UR\                  (       a+  [         R^                  " UUR:                  U	UR\                  S9  UR`                  b#  [J        Rb                  " XAR`                  S9U	l2        URf                  (       a9  [J        Rb                  " XARf                  S9nU	Rd                  RQ                  U5        URh                  (       a   [         Rj                  " UU	URh                  S9  URl                  nUR
                  R                  Ro                  U5         URq                  U" URr                  URt                  URw                  5       US95      nSSS5        [        Rx                  R{                  WR(                  SURr                  URt                  S.S9nUR|                  (       aA  [~        R                  " USR                  U	R(                  URw                  5       5      SSS9  U$ UR                  R{                  URw                  5       SURr                  URt                  S.S9n[        R                  " UU5      n[        R                  " UUSR                  U	R(                  URw                  5       5      5      $ s  snf ! , (       d  f       GN== f)a	  Runs the command.

Args:
  args: contains arguments passed to the command.
  support_bfd_mode: The flag to indicate whether bfd mode is supported.

Returns:
  The result of patching the router updating the bgp peer with the
  information provided in the arguments.
Nmd5AuthenticationKeys)namekey)md5_authentication_key_namesupport_bfd_mode)messagesresource_classargs)r2   r3   existing_modenew_mode)advertiseModeadvertisedGroupsadvertisedIpRanges)r2   r3   resource)r3   groups)r2   r3   r:   r;   )r2   	ip_ranges)r2   r3   r:   r<   )r2   r   r<   )projectregionrouterrouterResourcezcompute.regionOperations)r=   r>   )
collectionparamszpeer [{0}] in router [{1}]Tz[Run the [gcloud compute operations describe] command to check the status of this operation.)kindis_asyncdetailszcompute.routersz#Updating peer [{0}] in router [{1}] )Fr   CheckIncompatibleFlagsOrRaiser   ComputeApiHolderReleaseTrackclientr2   apitools_clientroutersr   ResolveAsResourcer   ComputeRoutersGetRequestGetAsDictFindBgpPeerOrRaise	peer_nameclear_md5_authentication_keymd5AuthenticationKeyNamer-   r.   appendmd5_authentication_keyr/    GenerateMd5AuthenticationKeyNameRouterMd5AuthenticationKey_UpdateBgpPeerMessageHasReplaceAdvertisementFlagsParseAdvertisementsRouterBgpPeerPromptIfSwitchToDefaultModer7   itemssetattr HasIncrementalAdvertisementFlagsValidateCustomModeadd_advertisement_groupsr   ParseGroupsr8   extendremove_advertisement_groupsRemoveGroupsFromAdvertisementsadd_advertisement_rangesParseIpRangesr9   remove_advertisement_ranges RemoveIpRangesFromAdvertisementsset_custom_learned_route_rangesParseCustomLearnedIpRangescustomLearnedIpRangesadd_custom_learned_route_ranges"remove_custom_learned_route_ranges%RemoveIpRangesFromCustomLearnedRoutesComputeRoutersPatchRequestIncludeFieldsPatchr=   r>   NameREGISTRYParseasync_r   UpdatedResourceformatr   Pollerr	   WaitFor)selfr4   r1   holderr2   service
router_refrequest_typereplacementr   r0   cleared_fieldsrV   moder;   rangesattrsattrvaluegroups_to_addgroups_to_removeip_ranges_to_addresultoperation_reftarget_router_refoperation_pollers                             r"   _RunUpdateBgpPeer._Run8   s    ..t4**4+<+<+>?F}}%%Hmm++33G2249I9IJJ44L++lAZ->->-@ABK **;GD"&N))))5 )4(I(I+(I$#((D,I,II !(I+k'
 ..56		$	$	0		&	&	2&*&C&C#&1&G&G"#((,GG)-)D)D"& 'H 99+L 	$ "*!D!D,2M2M "E "
 	))001GH$?) 0066)==,B,BdF ..!//**	  $ &e +$
$e
$ ' 44T::%%!// 
	&	&%11#1100
 	$$]3		)	)(44#1133
 	33#11#		
 
	&	&(66)F)F
 	&&'78		)	)55#1166		
 ++7#0#K#K'K'K$d 
 ++&AA'K'K   ''(89..88;; 66L		&	&	4	4^	D}}
 ((&&__&(	f 
E &&,,-!)) ''
 - M {{	
+22ii* 7
 m((..$!)) ''
 /  }}W.?@>>-44IIz(	
 +h 
E	Ds   Y29Y2;Y77
Zc                 $    U R                  U5      $ )zSee base.UpdateCommand.r   r|   r4   s     r"   RunUpdateBgpPeer.Run   s    99T?r%   rF   F)__name__
__module____qualname____firstlineno____doc__r   classmethodr#   r)   r   r   __static_attributes__rF   r%   r"   r   r       s>     6*
3 
3  ENr%   r   c                   2    \ rS rSrSrSr\S 5       rS rSr	g)UpdateBgpPeerBetai  r   Nc                 &    U R                  U5        g r'   r(   r   s     r"   r)   UpdateBgpPeerBeta.Args
  r+   r%   c                 "    U R                  USS9$ )Runs the command.

Args:
  args: contains arguments passed to the command.

Returns:
  The result of patching the router updating the bgp peer with the
  information provided in the arguments.
Fr1   r   r   s     r"   r   UpdateBgpPeerBeta.Run  s     99TE922r%   rF   
r   r   r   r   r   r   r   r)   r   r   rF   r%   r"   r   r     s!    5* 
3r%   r   c                   2    \ rS rSrSrSr\S 5       rS rSr	g)UpdateBgpPeerAlphai  r   Nc                 &    U R                  U5        g r'   r(   r   s     r"   r)   UpdateBgpPeerAlpha.Args!  r+   r%   c                 "    U R                  USS9$ )r   Tr   r   r   s     r"   r   UpdateBgpPeerAlpha.Run%  s     99TD911r%   rF   r   rF   r%   r"   r   r     s!    5* 
2r%   r   c                    UR                   UR                  UR                  UR                  UR                  S.nUR
                  bX  UR
                  (       a$  UR                  R                  R                  US'   O#UR                  R                  R                  US'   UR                  b  UR                  US'   UR                  b  UR                  US'   UR                  b  UR                  US'   UR                  b  UR                  US'   UR                  b  UR                  US'   UR                  b  UR                  US	'   UR                   b  UR                   US
'   UR"                  b  X5S'   UR$                  US'   UR&                  US'   UR)                  5        H  u  pgUc  M
  [+        XU5        M     UR,                  (       a  SU l        U(       a  [1        XU5      nO[3        XU5      nUb  [+        U SU5        gg)z>Updates base attributes of a BGP peer based on flag arguments.)interfaceName	ipAddresspeerIpAddresspeerAsnadvertisedRoutePriorityNenable
enableIpv6ipv6NexthopAddresspeerIpv6NexthopAddress
enableIpv4ipv4NexthopAddresspeerIpv4NexthopAddresscustomLearnedRoutePriorityrT   exportPoliciesimportPoliciesbfd)	interface
ip_addresspeer_ip_addresspeer_asnadvertised_route_priorityenabledr\   EnableValueValuesEnumTRUEFALSEenable_ipv6ipv6_nexthop_addresspeer_ipv6_nexthop_addressenable_ipv4ipv4_nexthop_addresspeer_ipv4_nexthop_addresscustom_learned_route_priorityrV   export_policiesimport_policiesr^   r_   rS   rT   _UpdateBgpPeerBfdMessageMode_UpdateBgpPeerBfdMessage)	r   r2   r4   r0   r1   r   r   r   r   s	            r"   rY   rY   2  s    ~~??++!%!?!?% 
\\|| ..DDIIeHo ..DDJJeHo	!**E,	*"&";";E
	##/&*&D&DE
"#	!**E,	*"&";";E
	##/&*&D&DE
"#	''3*.*L*LE
&'	  ,(C
$% 00% 00%[[]kdd%  # 
&&$(D!
&xt
<C
"84
8C_D% r%   c                 (   UR                  S5      (       dC  UR                  S5      (       d-  UR                  S5      (       d  UR                  S5      (       d  gUR                  b  UR                  nOU R                  5       n0 nUR                  b(  U R                  R	                  UR                  5      US'   UR
                  US'   UR                  US'   UR                  US	'   UR                  5        H  u  pVUc  M
  [        X5U5        M     U$ )
6Updates BGP peer BFD messages based on flag arguments.bfd_min_receive_intervalbfd_min_transmit_intervalbfd_session_initialization_modebfd_multiplierNsessionInitializationModeminReceiveIntervalminTransmitInterval
multiplier)
IsSpecifiedr   RouterBgpPeerBfdr   (SessionInitializationModeValueValuesEnumr   r   r   r^   r_   r2   r   r4   r   r   r   r   s          r"   r   r   g  s    122			5	6	6			;	<	<			*	+	+	XX
((C

#
#
%C
%	))5!!JJ00	
 

%&
 !% = =%!%!?!?%++%[[]kdc # 
*r%   c                 x   UR                  S5      (       dC  UR                  S5      (       d-  UR                  S5      (       d  UR                  S5      (       d  gUR                  b  UR                  nOU R                  5       n0 nUR                  bP  U R                  R	                  UR                  5      US'   U R                  R                  UR                  5      US'   UR                  US'   UR                  US	'   UR                  US
'   UR                  5        H  u  pVUc  M
  [        X5U5        M     U$ )r   r   r   r   r   Nr   r   r   r   r   )r   r   r   r   ModeValueValuesEnumr   r   r   r   r^   r_   r   s          r"   r   r     s+    122			5	6	6			;	<	<			*	+	+	XX
((C

#
#
%C
%	))5--AA,,E&M 	!!JJ00	
 

%&
 !% = =%!%!?!?%++%[[]kdc # 
*r%   DESCRIPTIONz^
        *{command}* is used to update a BGP peer on a Compute Engine
        router.
        Nr   )"r   
__future__r   r   r   googlecloudsdk.api_lib.computer   r   )googlecloudsdk.api_lib.compute.operationsr   googlecloudsdk.api_lib.utilr	   googlecloudsdk.callioper
   *googlecloudsdk.command_lib.compute.routersr   r   googlecloudsdk.corer   r   ReleaseTracksrI   GAUniverseCompatibleUpdateCommandr   BETAr   ALPHAr   rY   r   r   detailed_helprF   r%   r"   <module>r      s   B &  ' 7 8 < . ( < C # ) D%%(()_D&& _  *_D D%%**+3 3 ,3, D%%++,2* 2 -26 2j:B   r%   