
    *                     ^   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  SSKJr  \R,                  " \R.                  R0                  5      \R2                   " S S\R4                  5      5       5       r\R,                  " \R.                  R8                  5      \R2                   " S S\5      5       5       r\R,                  " \R.                  R<                  5      \R2                   " S S\5      5       5       rSSS.\l         g)zCommand for updating networks.    )absolute_import)division)unicode_literals)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.ArgsF   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/   r0   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getattrr8   hasattrr9   enableUlaInternalIpv6r:   internalIpv6Rangebgp_routing_modeNetworkRoutingConfigr<   RoutingModeValueValuesEnumupperroutingMode'BgpBestPathSelectionModeValueValuesEnumr;   bgpBestPathSelectionModeappendr>   bgpAlwaysCompareMed!BgpInterRegionCostValueValuesEnumr?   bgpInterRegionCost_support_firewall_order)network_firewall_policy_enforcement_order4NetworkFirewallPolicyEnforcementOrderValueValuesEnum%networkFirewallPolicyEnforcementOrderIncludeFieldsPatchComputeNetworksPatchRequest)selfargsholderrD   servicecleared_fieldsnetwork_ref
prompt_msgresultr7   operation_pollernetwork_resourceshould_patchmsgbps_change_warning_messageresources                   r&   Run
Update.RunM   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   r7   custom_trackertracker_update_func)MIGRATION_STAGESitemsrc   r   StageStagedProgressTrackerlistkeyslast_status_messager   rV   (_LegacyNetworkMigrationTrackerUpdateFunc)rn   rv   r7   progress_stagesr   labeltrackerfirst_status_messages           r&   rU   %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   )rn   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)rn   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   rg   dictr   classmethodr'   r|   rU   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   rg   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   rg   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   
__future__r   r   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   ReleaseTracksrB   GAUniverseCompatibleUpdateCommandr   BETAr   ALPHAr   detailed_helpr   r*   r&   <module>r      s   % &  ' 7 < . ( = E # ) 2 8 D%%(()e-T e-  *e-P D%%**+! !  ,!4 D%%++,
(* 
(  -
( /B r*   