+
    i-              
         a  R$ t+0 t ^ RIt^ RIHtHt ^ RIHt ^ RIHtH	t	H
t
HtHtHt ^ RIHtHt ^ RIHtHtHtHt ^ RIHt ^ RIHt ]P4                  ! ]4      t ! R	 R
]4      tR%R R lltR%R R llt  ! R R]4      t! ! R R]!4      t" ! R R]!4      t# ! R R]!4      t$ ! R R]!4      t% ! R R]!4      t&. R&Ot'R]"R]%R]$R]&R]#/t(] ^ k R  R! lt)R'R" R# llt*R# )(    N)ABCabstractmethod)partial)CallableDictIterableListOptionalType)subputil)eninetplannetwork_managernetworkd)Iproute2)NetworkStatec                       ] tR t^tRtR# )NoActivatorException N)__name__
__module____qualname____firstlineno____static_attributes__r       :/usr/lib/python3/dist-packages/cloudinit/net/activators.pyr   r      s    r   r   c                H    V ^8  d   QhR\         R\        R\        R\        /# )   cmddevice_namewarn_on_stderrreturn)liststrbool)formats   "r   __annotate__r(      s2     N N	NN15N	Nr   c                J    \        \        \        P                  V 4      V4      # )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   c                <    V ^8  d   QhR\         R\        R\        /# )r   callabler"   r#   )r   r&   )r'   s   "r   r(   r(      s$      (,	r   c                0    V ! 4       w  r#\        V4      '       d2   V'       d   \        P                  M\        P                  pV! RV4       R#   \        P
                   d2   p\        P                  ! \        RTP                  4        Rp?R# Rp?ii ; i)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                      a  ] tR t^-t o ]]V 3R lR l4       4       t]]V 3R lR l4       4       t]]V 3R lR l4       4       t]	V 3R lR l4       t
]	V 3R	 lR
 l4       t]V 3R lR l4       tRtV tR# )NetworkActivatorc                    < V ^8  d   QhRS[ /# r   r#   r&   )r'   __classdict__s   "r   r(   NetworkActivator.__annotate__0        $ $t $r   c                     \        4       h)z>Return True if activator is available, otherwise return False.NotImplementedErrorr   r   r   	availableNetworkActivator.available.   s     "##r   c                &   < V ^8  d   QhRS[ RS[/# r   r!   r#   r%   r&   )r'   r>   s   "r   r(   r?   6   s     $ $ $ $r   c                    \        4       h)zGBring up interface.

Return True is successful, otherwise return False
rB   r!   s   &r   bring_up_interface#NetworkActivator.bring_up_interface4        "##r   c                &   < V ^8  d   QhRS[ RS[/# rG   rH   )r'   r>   s   "r   r(   r?   ?   s     $ $# $$ $r   c                    \        4       h)zIBring down interface.

Return True is successful, otherwise return False
rB   rJ   s   &r   bring_down_interface%NetworkActivator.bring_down_interface=   rM   r   c                6   < V ^8  d   QhRS[ S[,          RS[/# r   device_namesr#   r   r%   r&   )r'   r>   s   "r   r(   r?   G   s#     N Nx} N Nr   c                x   a  \         ;QJ d    V 3R lV 4       F  '       d   K   R# 	  R# ! V 3R lV 4       4      # )zZBring up specified list of interfaces.

Return True is successful, otherwise return False
c              3   F   <"   T F  pSP                  V4      x  K  	  R # 5iNrK   .0deviceclss   & r   	<genexpr>7NetworkActivator.bring_up_interfaces.<locals>.<genexpr>L   s     Mf3))&11   !FT)all)r]   rT   s   f&r   bring_up_interfaces$NetworkActivator.bring_up_interfacesF   s.     sMMssMsMsMMMMr   c                &   < V ^8  d   QhRS[ RS[/# r   network_stater#   r   r&   )r'   r>   s   "r   r(   r?   O   s     
 
L 
T 
r   c                v    T P                  VP                  4        Uu. uF  q"R,          NK  	  up4      # u upi )zLBring up all interfaces.

Return True is successful, otherwise return False
name)rb   iter_interfaces)r]   rf   is   && r   bring_up_all_interfaces(NetworkActivator.bring_up_all_interfacesN   s;     && - = = ?@ ?1vYY ?@
 	
@s   6c                   < V ^8  d   QhRR/# r   r#   Nr   )r'   r>   s   "r   r(   r?   Y   s     $ $d $r   c                     \        4       h)zWait for network to come up.rB   r   r   r   wait_for_network!NetworkActivator.wait_for_networkX   s     "##r   r   N)r   r   r   r   staticmethodr   rD   rK   rP   classmethodrb   rl   rq   r   __classdictcell__r>   s   @r   r:   r:   -   s     $  $ $  $ $  $ N N 
 
 $ $r   r:   c                   t   a  ] tR t^^t o ]V 3R lR l4       t]V 3R lR l4       t]V 3R lR l4       tRtV t	R# )	IfUpDownActivatorc                    < V ^8  d   QhRS[ /# r<   r=   )r'   r>   s   "r   r(   IfUpDownActivator.__annotate__d   s      t r   c                 ,    \         P                  ! 4       # z3Return true if ifupdown can be used on this system.)r   rD   r   r   r   rD   IfUpDownActivator.availablec   s     }}r   c                &   < V ^8  d   QhRS[ RS[/# rG   rH   )r'   r>   s   "r   r(   rz   i        2 2 2 2r   c                     RV .p\        W4      # )RBring up interface using ifup.

Return True is successful, otherwise return False
ifupr+   r!   r    s   & r   rK   $IfUpDownActivator.bring_up_interfaceh   s     {#11r   c                &   < V ^8  d   QhRS[ RS[/# rG   rH   )r'   r>   s   "r   r(   rz   r        2 2# 2$ 2r   c                     RV .p\        W4      # )r   ifdownr   r   s   & r   rP   &IfUpDownActivator.bring_down_interfaceq   s     %11r   r   N
r   r   r   r   rs   rD   rK   rP   r   ru   rv   s   @r   rx   rx   ^   sA     
   2 2 2 2r   rx   c                   t   a  ] tR t^{t o ]V 3R lR l4       t]V 3R lR l4       t]V 3R lR l4       tRtV t	R# )	IfConfigActivatorc                    < V ^8  d   QhRS[ /# r<   r=   )r'   r>   s   "r   r(   IfConfigActivator.__annotate__}   s     9 9t 9r   c                 L    Rp R.p\        \        P                  ! WR7      4      # )z3Return true if ifconfig can be used on this system.ifconfigz/sbin)search)r&   r   which)expectedr   s     r   rD   IfConfigActivator.available|   s$     DJJx788r   c                &   < V ^8  d   QhRS[ RS[/# rG   rH   )r'   r>   s   "r   r(   r      r   r   c                "    RV R.p\        W4      # )z_Bring up interface using ifconfig <dev> up.

Return True is successful, otherwise return False
r   upr   r   s   & r   rK   $IfConfigActivator.bring_up_interface   s     ;-11r   c                &   < V ^8  d   QhRS[ RS[/# rG   rH   )r'   r>   s   "r   r(   r      r   r   c                "    RV R.p\        W4      # )zaBring up interface using ifconfig <dev> down.

Return True is successful, otherwise return False
r   downr   r   s   & r   rP   &IfConfigActivator.bring_down_interface   s     ;/11r   r   Nr   rv   s   @r   r   r   {   s?     9 9 2 2 2 2r   r   c                      a  ] tR t^t o ]V 3R lR l4       t]V 3R lR l4       t]V 3R lR l4       t]V 3R lR l4       t	R	t
V tR
# )NetworkManagerActivatorc                    < V ^8  d   QhRS[ /# r<   r=   )r'   r>   s   "r   r(   $NetworkManagerActivator.__annotate__   s     + +t +r   c                 ,    \         P                  ! 4       # )z9Return true if NetworkManager can be used on this system.)r   rD   r   r   r   rD   !NetworkManagerActivator.available   s     ((**r   c                &   < V ^8  d   QhRS[ RS[/# rG   rH   )r'   r>   s   "r   r(   r      s     2 2 2 2r   c                    ^ RI Hp V! V 4      pVf   \        P                  R4       R# RRRV.p\	        W04      '       d	   RRRRV.pM\	        . R
OV 4       RRRR	V .p\	        W04      # )zTBring up connection using nmcli.

Return True is successful, otherwise return False
)conn_filenamezFUnable to find an interface config file. Unable to bring up interface.Fnmcli
connectionloadr   filenameifname)r   r   reload)cloudinit.net.network_managerr   r0   r1   r+   )r!   r   r   r    s   &   r   rK   *NetworkManagerActivator.bring_up_interface   s}     	@ -KK0 fh7C--L$
HEC>LL$+FC11r   c                &   < V ^8  d   QhRS[ RS[/# rG   rH   )r'   r>   s   "r   r(   r      r   r   c                $    RRRV .p\        W4      # )zUBring down interface using nmcli.

Return True is successful, otherwise return False
r   r\   
disconnectr   r   s   & r   rP   ,NetworkManagerActivator.bring_down_interface   s     ,<11r   c                6   < V ^8  d   QhRS[ S[,          RS[/# rS   rU   )r'   r>   s   "r   r(   r      s#     M Mx} M Mr   c                >  a  \         P                   ! . RO4      P                  P                  4       pRV8w  d   \        P	                  RV4       \        . ROR4      ;'       d;    \        ;QJ d    V 3R lV 4       F  '       d   K   R# 	  R# ! V 3R lV 4       4      # )	z)Activate network

Return True on success
zSubState=runningz:Expected NetworkManager SubState=running, but detected: %sra   c              3   F   <"   T F  pSP                  V4      x  K  	  R # 5irX   rY   rZ   s   & r   r^   >NetworkManagerActivator.bring_up_interfaces.<locals>.<genexpr>   s     L|V#((00|r`   FT)	systemctlshowz--property=SubStateNetworkManager.service)r   ztry-reload-or-restartr   )r   stdoutrstripr0   r1   r+   ra   )r]   rT   states   f& r   rb   +NetworkManagerActivator.bring_up_interfaces   s     		
 & 	 &KKL  L
 M M cL|Lcc	M 	M L|LL	Mr   r   N)r   r   r   r   rs   rD   rK   rP   rt   rb   r   ru   rv   s   @r   r   r      sU     + + 2 2. 2 2 M Mr   r   c                      a  ] tR t^t o RR.t]V 3R lR l4       t]V 3R lR l4       t]V 3R lR l4       t]V 3R	 lR
 l4       t	]V 3R lR l4       t
]V 3R lR l4       tRtV tR# )NetplanActivatorr   applyc                    < V ^8  d   QhRS[ /# r<   r=   )r'   r>   s   "r   r(   NetplanActivator.__annotate__   s     # #t #r   c                 ,    \         P                  ! 4       # )z2Return true if netplan can be used on this system.)r   rD   r   r   r   rD   NetplanActivator.available   s       ""r   c                &   < V ^8  d   QhRS[ RS[/# rG   rH   )r'   r>   s   "r   r(   r      s     
 
 
 
r   c                d    \         P                  R4       \        \        P                  RRR7      # IApply netplan config.

Return True is successful, otherwise return False
zBCalling 'netplan apply' rather than altering individual interfacesra   Fr"   r0   r2   r+   r   NETPLAN_CMDrJ   s   &r   rK   #NetplanActivator.bring_up_interface   1     			-	
  ((%
 	
r   c                6   < V ^8  d   QhRS[ S[,          RS[/# rS   rU   )r'   r>   s   "r   r(   r      s     
 
(3- 
D 
r   c                d    \         P                  R4       \        \        P                  RRR7      # r   r   )rT   s   &r   rb   $NetplanActivator.bring_up_interfaces   r   r   c                &   < V ^8  d   QhRS[ RS[/# re   rg   )r'   r>   s   "r   r(   r      s     
 
| 
 
r   c                :    \        \        P                  RRR7      # )r   ra   Fr   )r+   r   r   )rf   s   &r   rl   (NetplanActivator.bring_up_all_interfaces   s      ((%
 	
r   c                &   < V ^8  d   QhRS[ RS[/# rG   rH   )r'   r>   s   "r   r(   r     s     
 
# 
$ 
r   c                d    \         P                  R4       \        \        P                  RRR7      # r   r   rJ   s   &r   rP   %NetplanActivator.bring_down_interface  r   r   c                   < V ^8  d   QhRR/# ro   r   )r'   r>   s   "r   r(   r     s     - -d -r   c                     \         P                  ! 4       '       d   \        P                  R4       R# \        P                  4        R# )z:On networkd systems, wait for systemd-networkd-wait-onlinez1NetworkManager is enabled, skipping networkd waitN)r   rD   r0   r2   NetworkdActivatorrq   r   r   r   rq   !NetplanActivator.wait_for_network  s/     $$&&IIIJ**,r   r   N)r   r   r   r   r   rs   rD   rK   rb   rl   rP   rq   r   ru   rv   s   @r   r   r      s     g&K# # 
 
 
 
 
 
 
 
 - -r   r   c                      a  ] tR tRt o ]V 3R lR l4       t]V 3R lR l4       t]V 3R lR l4       t]V 3R lR	 l4       t]V 3R
 lR l4       t	Rt
V tR# )r   i  c                    < V ^8  d   QhRS[ /# r<   r=   )r'   r>   s   "r   r(   NetworkdActivator.__annotate__  r@   r   c                 ,    \         P                  ! 4       # r|   )r   rD   r   r   r   rD   NetworkdActivator.available  s     !!##r   c                &   < V ^8  d   QhRS[ RS[/# rG   rH   )r'   r>   s   "r   r(   r   #  s     
 
 
 
r   c                H    \        \        \        P                  V 4      4      # 1Return True is successful, otherwise return False)r*   r   r   link_uprJ   s   &r   rK   $NetworkdActivator.bring_up_interface"  s!     )H$$k2
 	
r   c                &   < V ^8  d   QhRS[ RS[/# re   rg   )r'   r>   s   "r   r(   r   *  s     , ,| , ,r   c                "    . ROp\        VR4      # )r   ra   )r   restartzsystemd-networkdzsystemd-resolvedr   )rf   r    s   & r   rl   )NetworkdActivator.bring_up_all_interfaces)  s     OU++r   c                &   < V ^8  d   QhRS[ RS[/# rG   rH   )r'   r>   s   "r   r(   r   0  s     
 
# 
$ 
r   c                H    \        \        \        P                  V 4      4      # r   )r*   r   r   	link_downrJ   s   &r   rP   &NetworkdActivator.bring_down_interface/  s!     )H&&4
 	
r   c                   < V ^8  d   QhRR/# ro   r   )r'   r>   s   "r   r(   r   7  s     
 
d 
r   c                 6    \         P                   ! . RO4       R# )z&Wait for systemd-networkd-wait-online.N)r   startz$systemd-networkd-wait-online.service)r   r   r   r   rq   "NetworkdActivator.wait_for_network6  s     			J	
r   r   N)r   r   r   r   rs   rD   rK   rl   rP   rq   r   ru   rv   s   @r   r   r     sg     $ $ 
 
 , ,
 
 
 
 
r   r   r   r   network-managerr   r   c                r    V ^8  d   QhR\         \        ,          R\        \        \        ,          ,          /# r   priorityr#   )r	   r%   r
   r   r:   )r'   s   "r   r(   r(   Q  s)      tCy Xd;K6L-M r   c                    V  Uu. uF  q\         9  g   K  VNK  	  ppV'       d   \        RV 24      hV  Uu. uF  p\        V,          NK  	  pp\        R V 4       R4      # u upi u upi )zEReturns the first available activator from the priority list or None.z.Unknown activators provided in priority list: c              3   V   "   T F  pVP                  4       '       g   K  Vx  K!  	  R # 5irX   )rD   )r[   activator_clss   & r   r^   #search_activator.<locals>.<genexpr>Z  s%      	
!2&&( M!2s   )
)N)DEFAULT_PRIORITY
ValueErrorNAME_TO_ACTIVATORnext)r   rk   unknownri   activator_classess   &    r   search_activatorr   Q  s    "@(Q/?&?qq(G@<WIF
 	
 >FFXT*400XF	
!2	

 	  A
 Gs   A#A#A(c                r    V ^8  d   QhR\         \        \        ,          ,          R\        \        ,          /# r   )r
   r	   r%   r   r:   )r'   s   "r   r(   r(   c  s+      tCy!	
r   c                     V f   \         p \        V 4      pV'       g   \        RV  24      h\        P	                  RW4       V# )Nz>No available network activators found. Searched through list: z.Using selected activator: %s from priority: %s)r   r   r   r0   r2   )r   selecteds   & r   select_activatorr  c  sR     #)H"&&.Z1
 	
 II8( Or   c                x    V ^8  d   Qh/ ^ \         9   d&   \        \        \        \        ,          3,          ;R&   # )r   r   )__conditional_annotations__r   r%   r   r:   )r'   s   "r   r(   r(      s.    L
 4T"2334 M
 r   )T)r   r   r   r   r   rX   ),r  loggingabcr   r   	functoolsr   typingr   r   r   r	   r
   r   	cloudinitr   r   cloudinit.netr   r   r   r   cloudinit.net.netops.iproute2r   cloudinit.net.network_stater   	getLoggerr   r0   	Exceptionr   r+   r*   r:   rx   r   r   r   r   r   r   r   r  r(   )r  s   @r   <module>r     s     #  A A   A A 2 4!	9 	N&.$s .$b2( 2:2( 26=M. =M@C-' C-L
( 
H  
.!!8  $ r   