
    x[h.              	           % S SK r S SKJrJr  S SKJr  S SKJrJrJ	r	J
r
JrJrJr  S SKJrJr  S SKJrJrJrJr  S SKJr  S SKJr  \ R4                  " \5      r " S	 S
\5      r S$S\S\ S\!S\!4S jjr" S$S\S\!S\!4S jjr# " S S\5      r$ " S S\$5      r% " S S\$5      r& " S S\$5      r' " S S\$5      r( " S S\$5      r)/ SQr*\%\(\'\)\&S.r+\\ \\$   4   \,S'   S \
\    S!\\ S4   S\\\$      4S" jr- S%S \\
\       S!\\    S\\$   4S# jjr.g)&    N)ABCabstractmethod)partial)CallableDictIterableListOptionalTypeUnion)subputil)eninetplannetwork_managernetworkd)Iproute2)NetworkStatec                       \ rS rSrSrg)NoActivatorException    N)__name__
__module____qualname____firstlineno____static_attributes__r       :/usr/lib/python3/dist-packages/cloudinit/net/activators.pyr   r      s    r   r   cmddevice_namewarn_on_stderrreturnc                 J    [        [        [        R                  U 5      U5      $ )z2Attempt to alter an interface using a command list)_alter_interface_callabler   r   )r    r!   r"   s      r   _alter_interfacer&      s     %WTYY%<nMMr   callablec                 &    U " 5       u  p#[        U5      (       a0  U(       a  [        R                  O[        R                  nU" SU5        g! [        R
                   a0  n[        R                  " [        SUR                  5         SnAgSnAff = f)zAttempt to alter an interface using a callable

this function standardizes logging and response to failure for
various activators
zReceived stderr output: %sTz#Running interface command %s failedNF)	lenLOGwarningdebugr   ProcessExecutionErrorr   logexcr    )r'   r"   _outerr
log_stderres         r   r%   r%      sf    J	s88(6CIIJ3S9%% C>Fs   A	A B &BBc                       \ rS rSr\\SS\\   S\4S jj5       5       r	\\S\S\4S j5       5       r
\\S\S\4S j5       5       r\S	\\   S\4S
 j5       r\S\S\4S j5       r\SS j5       rSrg)NetworkActivator-   Ntargetr#   c                     [        5       e)z>Return True if activator is available, otherwise return False.NotImplementedErrorr6   s    r   	availableNetworkActivator.available.   s     "##r   r!   c                     [        5       e)zGBring up interface.

Return True is successful, otherwise return False
r8   r!   s    r   bring_up_interface#NetworkActivator.bring_up_interface4        "##r   c                     [        5       e)zIBring down interface.

Return True is successful, otherwise return False
r8   r>   s    r   bring_down_interface%NetworkActivator.bring_down_interface=   rA   r   device_namesc                 .   ^  [        U 4S jU 5       5      $ )zZBring up specified list of interfaces.

Return True is successful, otherwise return False
c              3   F   >#    U  H  nTR                  U5      v   M     g 7fNr?   .0deviceclss     r   	<genexpr>7NetworkActivator.bring_up_interfaces.<locals>.<genexpr>L   s     Mf3))&11   !)all)rM   rE   s   ` r   bring_up_interfaces$NetworkActivator.bring_up_interfacesF   s     MMMMr   network_statec                 p    U R                  UR                  5        Vs/ s H  o"S   PM	     sn5      $ s  snf )zLBring up all interfaces.

Return True is successful, otherwise return False
name)rR   iter_interfaces)rM   rT   is      r   bring_up_all_interfaces(NetworkActivator.bring_up_all_interfacesN   s9     && - = = ?@ ?1vY ?@
 	
@s   3c                      [        5       e)zWait for network to come up.r8   r   r   r   wait_for_network!NetworkActivator.wait_for_networkX   s     "##r   r   rH   r#   N)r   r   r   r   staticmethodr   r
   strboolr;   r?   rC   classmethodr   rR   r   rY   r\   r   r   r   r   r4   r4   -   s    $(3- $4 $  $ $ $ $  $ $# $$ $  $ Nx} N N N 
L 
T 
 
 $ $r   r4   c                   r    \ rS rSr\S
S\\   S\4S jj5       r\S\S\4S j5       r	\S\S\4S j5       r
S	rg)IfUpDownActivator^   Nr6   r#   c                 *    [         R                  " U S9$ z3Return true if ifupdown can be used on this system.r:   )r   r;   r:   s    r   r;   IfUpDownActivator.availablec   s     }}F++r   r!   c                      SU /n[        X5      $ )RBring up interface using ifup.

Return True is successful, otherwise return False
ifupr&   r!   r    s     r   r?   $IfUpDownActivator.bring_up_interfaceh   s     {#11r   c                      SU /n[        X5      $ )rj   ifdownrl   rm   s     r   rC   &IfUpDownActivator.bring_down_interfaceq   s     %11r   r   rH   )r   r   r   r   r_   r
   r`   ra   r;   r?   rC   r   r   r   r   rd   rd   ^   sl    
 ,(3- ,4 , , 2 2 2 2 2# 2$ 2 2r   rd   c                   h    \ rS rSr\S	S\4S jj5       r\S\S\4S j5       r\S\S\4S j5       r	Sr
g)
IfConfigActivator{   Nr#   c                 H    SnS/n[        [        R                  " XU S95      $ )z3Return true if ifconfig can be used on this system.ifconfigz/sbin)searchr6   )ra   r   which)r6   expectedrw   s      r   r;   IfConfigActivator.available|   s&     DJJxvFGGr   r!   c                 "    SU S/n[        X5      $ )z_Bring up interface using ifconfig <dev> up.

Return True is successful, otherwise return False
rv   uprl   rm   s     r   r?   $IfConfigActivator.bring_up_interface   s     ;-11r   c                 "    SU S/n[        X5      $ )zaBring up interface using ifconfig <dev> down.

Return True is successful, otherwise return False
rv   downrl   rm   s     r   rC   &IfConfigActivator.bring_down_interface   s     ;/11r   r   rH   )r   r   r   r   r_   ra   r;   r`   r?   rC   r   r   r   r   rs   rs   {   sb    H$ H H 2 2 2 2 2# 2$ 2 2r   rs   c                       \ rS rSr\SS\4S jj5       r\S\S\4S j5       r\S\S\4S j5       r	\
S\\   S\4S	 j5       rS
rg)NetworkManagerActivator   Nr#   c                 *    [         R                  " U S9$ )z9Return true if NetworkManager can be used on this system.r:   )r   r;   r:   s    r   r;   !NetworkManagerActivator.available   s     ((77r   r!   c                     SSK Jn  U" U 5      nUc  [        R                  S5        gSSSU/n[	        X05      (       a  SSSS	U/nO[	        / S
QU 5        SSSSU /n[	        X05      $ )zTBring up connection using nmcli.

Return True is successful, otherwise return False
r   )conn_filenamezFUnable to find an interface config file. Unable to bring up interface.Fnmcli
connectionloadr|   filename)r   r   reloadifname)cloudinit.net.network_managerr   r*   r+   r&   )r!   r   r   r    s       r   r?   *NetworkManagerActivator.bring_up_interface   s}     	@ -KK0 fh7C--L$
HEC>LL$+FC11r   c                 $    SSSU /n[        X5      $ )zUBring down interface using nmcli.

Return True is successful, otherwise return False
r   rL   
disconnectrl   rm   s     r   rC   ,NetworkManagerActivator.bring_down_interface   s     ,<11r   rE   c                    ^  [         R                   " / SQ5      R                  R                  5       nSU:w  a  [        R	                  SU5        [        / SQS5      =(       a    [        U 4S jU 5       5      $ )z)Activate network

Return True on success
)	systemctlshowz--property=SubStateNetworkManager.servicezSubState=runningz:Expected NetworkManager SubState=running, but detected: %s)r   ztry-reload-or-restartr   rQ   c              3   F   >#    U  H  nTR                  U5      v   M     g 7frH   rI   rJ   s     r   rN   >NetworkManagerActivator.bring_up_interfaces.<locals>.<genexpr>   s     L|V#((00|rP   )r   stdoutrstripr*   r+   r&   rQ   )rM   rE   states   `  r   rR   +NetworkManagerActivator.bring_up_interfaces   sp     		
 & 	 &KKL  L
 M L|LL	Mr   r   rH   )r   r   r   r   r_   ra   r;   r`   r?   rC   rb   r   rR   r   r   r   r   r   r      s    8$ 8 8 2 2 2 2. 2# 2$ 2 2 Mx} M M Mr   r   c                       \ rS rSrSS/r\SS\4S jj5       r\S\S\4S j5       r	\S	\
\   S\4S
 j5       r\S\S\4S j5       r\S\S\4S j5       r\SS j5       rSrg)NetplanActivator   r   applyNr#   c                 *    [         R                  " U S9$ )z2Return true if netplan can be used on this system.r:   )r   r;   r:   s    r   r;   NetplanActivator.available   s       //r   r!   c                 ^    [         R                  S5        [        [        R                  SSS9$ IApply netplan config.

Return True is successful, otherwise return False
zBCalling 'netplan apply' rather than altering individual interfacesrQ   Fr"   r*   r,   r&   r   NETPLAN_CMDr>   s    r   r?   #NetplanActivator.bring_up_interface   1     			-	
  ((%
 	
r   rE   c                 ^    [         R                  S5        [        [        R                  SSS9$ r   r   )rE   s    r   rR   $NetplanActivator.bring_up_interfaces   r   r   rT   c                 4    [        [        R                  SSS9$ )r   rQ   Fr   )r&   r   r   )rT   s    r   rY   (NetplanActivator.bring_up_all_interfaces   s      ((%
 	
r   c                 ^    [         R                  S5        [        [        R                  SSS9$ r   r   r>   s    r   rC   %NetplanActivator.bring_down_interface  r   r   c                      [         R                  " 5       (       a  [        R                  S5        g[        R                  5         g)z:On networkd systems, wait for systemd-networkd-wait-onlinez1NetworkManager is enabled, skipping networkd waitN)r   r;   r*   r,   NetworkdActivatorr\   r   r   r   r\   !NetplanActivator.wait_for_network  s/     $$&&IIIJ**,r   r   rH   r^   )r   r   r   r   r   r_   ra   r;   r`   r?   r   rR   r   rY   rC   r\   r   r   r   r   r   r      s    g&K0$ 0 0 
 
 
 
 
(3- 
D 
 
 
| 
 
 
 
# 
$ 
 
 - -r   r   c                       \ rS rSr\SS\4S jj5       r\S\S\4S j5       r\S\	S\4S j5       r
\S\S\4S	 j5       r\SS
 j5       rSrg)r   i  Nr#   c                 *    [         R                  " U S9$ rg   )r   r;   r:   s    r   r;   NetworkdActivator.available  s     !!00r   r!   c                 H    [        [        [        R                  U 5      5      $ 1Return True is successful, otherwise return False)r%   r   r   link_upr>   s    r   r?   $NetworkdActivator.bring_up_interface"  s!     )H$$k2
 	
r   rT   c                 "    / SQn[        US5      $ )r   )r   restartzsystemd-networkdzsystemd-resolvedrQ   rl   )rT   r    s     r   rY   )NetworkdActivator.bring_up_all_interfaces)  s     OU++r   c                 H    [        [        [        R                  U 5      5      $ r   )r%   r   r   	link_downr>   s    r   rC   &NetworkdActivator.bring_down_interface/  s!     )H&&4
 	
r   c                  4    [         R                   " / SQ5        g)z&Wait for systemd-networkd-wait-online.)r   startz$systemd-networkd-wait-online.serviceN)r   r   r   r   r\   "NetworkdActivator.wait_for_network6  s     			J	
r   r   rH   r^   )r   r   r   r   r_   ra   r;   r`   r?   r   rY   rC   r\   r   r   r   r   r   r     s    1$ 1 1 
 
 
 
 ,| , , ,
 
# 
$ 
 
 
 
r   r   )r   r   znetwork-managerr   rv   NAME_TO_ACTIVATORpriorityr6   c                    ^ U  Vs/ s H  o"[         ;  d  M  UPM     nnU(       a  [        SU 35      eU  Vs/ s H  n[        U   PM     nn[        U4S jU 5       S5      $ s  snf s  snf )zEReturns the first available activator from the priority list or None.z.Unknown activators provided in priority list: c              3   X   >#    U  H  nUR                  T5      (       d  M  Uv   M!     g 7frH   )r;   )rK   activator_clsr6   s     r   rN   #search_activator.<locals>.<genexpr>\  s(      	
!2&&v. M!2s   *	*N)DEFAULT_PRIORITY
ValueErrorr   next)r   r6   rX   unknownrV   activator_classess    `    r   search_activatorr   Q  s     #@(Q/?&?q(G@<WIF
 	
 >FFXT*40XF	
!2	

 	  A
 Gs   A#A#A(c                     U c  [         n [        X5      nU(       d%  U(       a  US:w  a  SU 3OSn[        SU SU  35      e[        R	                  SX 5        U$ )N/z in target= z%No available network activators foundz. Searched through list: z.Using selected activator: %s from priority: %s)r   r   r   r*   r,   )r   r6   selectedtmsgs       r   select_activatorr   e  so     #1H)/FcMVH%r"3D6 :&&.Z1
 	
 II8( Or   )T)NN)/loggingabcr   r   	functoolsr   typingr   r   r   r	   r
   r   r   	cloudinitr   r   cloudinit.netr   r   r   r   cloudinit.net.netops.iproute2r   cloudinit.net.network_stater   	getLoggerr   r*   	Exceptionr   listr`   ra   r&   r%   r4   rd   rs   r   r   r   r   r   __annotations__r   r   r   r   r   <module>r      s    #  H H H   A A 2 4!	9 	
 9=N	NN15N	N 04(,	&.$s .$b2( 2:2( 26=M. =M@C-' C-L
( 
H  .!!8 4T"2334 3i!&sDy!1d#$%* CGtCy!2:3-	
r   