
    w*                     :   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  \R$                  " \R&                  R(                  5      \R*                   " S S\R,                  5      5       5       r\R$                  " \R&                  R0                  5      \R*                   " S S\5      5       5       r\R$                  " \R&                  R4                  5      \R*                   " S S\5      5       5       rSSS.\l        g)zCommand for updating networks.    )base_classes)poller)waiter)base)flags)network_utils)log)	resources)
console_io)progress_trackerc            	       ^    \ rS rSrSrSrSr\" SSSSS	S
S9r\	S 5       r
S rS rS rS rSrg)Update   [  Update a Compute Engine Network.

*{command}* is used to update virtual networks. The updates that
cabe be performed on a network are changing the BGP routing mode
and switching from auto subnet mode to custom subnet mode. Switching
from auto subnet mode to custom subnet mode cannot be undone.

## EXAMPLES

To update regional network with the name 'network-name' to global, run:

  $ {command} network-name \
    --bgp-routing-mode=global

To update an auto subnet mode network with the name 'network-name' to custom
subnet mode, run:

  $ {command} network-name \
    --switch-to-custom-subnet-mode

NTzValidating NetworkzCreating SubnetworkzUpdating InstanceszUpdating Instance GroupszUpdating Forwarding Rulesz!Converting Network to Subnet Mode)VALIDATING_NETWORKCREATING_SUBNETWORKUPDATING_INSTANCESUPDATING_INSTANCE_GROUPSUPDATING_FORWARDING_RULES!CONVERTING_NETWORK_TO_SUBNET_MODEc                     [         R                  " 5       U l        U R                  R                  U5        [        R
                  R                  U5        [        R                  " U5        g N	r   NetworkArgumentNETWORK_ARGAddArgumentr   
ASYNC_FLAGAddToParserr   AddUpdateArgsclsparsers     &lib/surface/compute/networks/update.pyArgsUpdate.ArgsC   D    ++-COOO'OO''    c           	       
   [         R                  " U R                  5       5      nUR                  R                  nUR                  R
                  R                  n/ nU R                  R                  XR                  5      nUR                  (       Ga8  SR                  UR                  5       5      S-   n[        R                  " USSS9  UR                  UR!                  UR"                  UR                  5       S95      n[        R$                  R'                  UR(                  SUR"                  0SS9n	UR*                  (       a6  [,        R.                  " U	S	R                  UR                  5       5      SS
S9  U$ [0        R2                  " XF5      n
UR4                  S:X  a  U R7                  X5      $ [8        R:                  " U
U	SS9$ UR=                  5       nSn[?        USS 5      b+  Sn[        R                  " USSS9  UR@                  Ul         Sn[C        US5      (       a  URD                  Ul#        Sn[C        US5      (       a  URH                  Ul%        SnURL                  (       aY  SnURO                  5       Ul(        URN                  RS                  URL                  RU                  5       5      URP                  l+        [?        USS 5      b  Sn[        R                  " USSS9  Sn[?        USS 5      c  URO                  5       Ul(        URN                  RY                  URZ                  5      URP                  l.        URZ                  S:X  a"  UR_                  S5        UR_                  S5        [?        USS 5      b@  Sn[?        USS 5      c  URO                  5       Ul(        UR`                  URP                  l1        [?        USS 5      bY  Sn[?        USS 5      c  URO                  5       Ul(        URN                  Re                  URf                  5      URP                  l4        U Rj                  (       a=  URl                  (       a,  SnUR<                  Ro                  URl                  5      Ul8        U(       ah  UR                  R
                  Rs                  U5         URu                  URw                  UR"                  UR                  5       US95      nS S S 5        U$ W$ ! , (       d  f       W$ = f)Nz/Network [{0}] will be switched to custom mode. z This operation cannot be undone.T)messagedefaultcancel_on_no)projectnetworkr,   zcompute.globalOperations)params
collectionznetwork {0}z[Run the [gcloud compute operations describe] command to check the status of this operation.)kindis_asyncdetailsswitchLegacyToCustomModeBetaz Switching network to custom-mode)r   operation_refr)   FmtuzIThis might cause connectivity issues when there are running VMs attached.enable_ula_internal_ipv6internal_ipv6_rangebgp_best_path_selection_modezUpdating the best path selection mode can cause routing changes for egress traffic. No new routes are learned or deleted, and data plane traffic isn't dropped or interrupted.routingConfigLEGACYz!routingConfig.bgpAlwaysCompareMedz routingConfig.bgpInterRegionCostbgp_bps_always_compare_medbgp_bps_inter_region_cost)r,   r-   networkResource)<r   ComputeApiHolderReleaseTrackclientmessagesapitools_clientnetworksr   ResolveAsResourcer
   switch_to_custom_subnet_modeformatNamer   PromptContinueSwitchToCustomMode(ComputeNetworksSwitchToCustomModeRequestr,   REGISTRYParsenameasync_r	   UpdatedResourcer   PolleroperationType_WaitForLegacyNetworkMigrationr   WaitForNetworkgetattrr5   hasattrr6   enableUlaInternalIpv6r7   internalIpv6Rangebgp_routing_modeNetworkRoutingConfigr9   RoutingModeValueValuesEnumupperroutingMode'BgpBestPathSelectionModeValueValuesEnumr8   bgpBestPathSelectionModeappendr;   bgpAlwaysCompareMed!BgpInterRegionCostValueValuesEnumr<   bgpInterRegionCost_support_firewall_order)network_firewall_policy_enforcement_order4NetworkFirewallPolicyEnforcementOrderValueValuesEnum%networkFirewallPolicyEnforcementOrderIncludeFieldsPatchComputeNetworksPatchRequest)selfargsholderrA   servicecleared_fieldsnetwork_ref
prompt_msgresultr4   operation_pollernetwork_resourceshould_patchmsgbps_change_warning_messageresources                   r#   Run
Update.RunJ   s   **4+<+<+>?F}}%%Hmm++44GN""44T;K;KLK(((
;
B
B  //  d ))

;
;!));3C3C3E < f  ((..
++[001/ / m 
%%k&6&6&899	
 w<			!?	?22
 	
 ^^!%4   '')LtUD!-. 
 UN!XXlt/00/3/L/L,lt*+++/+C+C(ll'/'D'D'F$

'
'
B
B##))+ $$0 t3T:F9 !
 ,d l	!?D	9	A)1)F)F)H&

'
'
O
O// $$= 
	*	*h	6AB@At148Dl	!?D	9	A)1)F)F)H&

)
) $$8 t0$7Cl	!?D	9	A)1)F)F)H&

'
'
I
I,, $$7 	$$::l



O
O<< < ==((66~F==00#++#((* 0 1 
 G O8O GF Os   )9S..
S=c                 V   / nU R                   R                  5        H(  u  pEUR                  [        R                  " XTS95        M*     [        R
                  " SUS9n[        U R                   R                  5       5      S   nXvl        [        R                  " UUUU R                  S9$ )N)keyz,Migrating Network from Legacy to Custom Mode)r)   stagesr   )r   r4   custom_trackertracker_update_func)MIGRATION_STAGESitemsr`   r   StageStagedProgressTrackerlistkeyslast_status_messager   rS   (_LegacyNetworkMigrationTrackerUpdateFunc)rk   rs   r4   progress_stagesr|   labeltrackerfirst_status_messages           r#   rR   %Update._WaitForLegacyNetworkMigration   s    O++113
-33ECD 4 44>G   5 5 : : <=a@"6>># II	 r'   c                 l    UR                   nU R                  X5        UR                  U5        XAl        g r   )statusMessage_MarkStagesCompleted
StartStager   )rk   r   	operationunused_statuslatest_status_messages        r#   r   /Update._LegacyNetworkMigrationTrackerUpdateFunc   s3     &33g=,-"7r'   c                     [        U R                  R                  5       5      nUR                  UR                  5      nUR                  U5      n[        U R                  R                  5       5      XE nU H  nUR                  U5        M     g r   )r   r   r   indexr   CompleteStage)rk   r   r   ordered_stageslast_status_message_idxlatest_status_message_idxstages_to_updatestage_to_updates           r#   r   Update._MarkStagesCompleted   s    $//4467N,2273N3NO . 4 45J KD116689 ,O, ,r'    )__name__
__module____qualname____firstlineno____doc__r   rd   dictr   classmethodr$   ry   rR   r   r   __static_attributes__r   r'   r#   r   r      s[    , + -/-9 ;(K ( (Sj&8	-r'   r   c                       \ rS rSrSrSrSrg)
UpdateBetai  r   Tr   N)r   r   r   r   r   rd   r   r   r'   r#   r   r     s    , !r'   r   c                   ,    \ rS rSrSrSr\S 5       rSrg)UpdateAlphai$  z Update a Compute Engine Network.Tc                     [         R                  " 5       U l        U R                  R                  U5        [        R
                  R                  U5        [        R                  " U5        g r   r   r    s     r#   r$   UpdateAlpha.Args+  r&   r'   r   N)	r   r   r   r   r   rd   r   r$   r   r   r'   r#   r   r   $  s     ) ( (r'   r   zUpdate a Compute Engine networkz?
        *{command}* is used to update Compute Engine networks.)briefDESCRIPTIONN)r   googlecloudsdk.api_lib.computer   )googlecloudsdk.api_lib.compute.operationsr   googlecloudsdk.api_lib.utilr   googlecloudsdk.callioper   +googlecloudsdk.command_lib.compute.networksr   r   googlecloudsdk.corer	   r
   googlecloudsdk.core.consoler   r   ReleaseTracksr?   GAUniverseCompatibleUpdateCommandr   BETAr   ALPHAr   detailed_helpr   r'   r#   <module>r      s	   % 8 < . ( = E # ) 2 8 D%%(()e-T e-  *e-P D%%**+! !  ,!4 D%%++,
(* 
(  -
( /B r'   