Ë
    x[há.  ã            	       ó  — U d dl Z d dlmZmZ d dlmZ d dlmZmZm	Z	m
Z
mZmZmZ d dlmZmZ d dlmZmZmZmZ d dlmZ d dlmZ  e j4                  e«      Z G d	„ d
e«      Z	 d$dede de!de!fd„Z"	 d$dede!de!fd„Z# G d„ de«      Z$ G d„ de$«      Z% G d„ de$«      Z& G d„ de$«      Z' G d„ de$«      Z( G d„ de$«      Z)g d¢Z*e%e(e'e)e&dœZ+ee ee$   f   e,d<   d e
e    d!ee df   deee$      fd"„Z-	 d%d ee
e       d!ee    dee$   fd#„Z.y)&é    N)ÚABCÚabstractmethod)Úpartial)ÚCallableÚDictÚIterableÚListÚOptionalÚTypeÚUnion)ÚsubpÚutil)ÚeniÚnetplanÚnetwork_managerÚnetworkd)ÚIproute2)ÚNetworkStatec                   ó   — e Zd Zy)ÚNoActivatorExceptionN)Ú__name__Ú
__module__Ú__qualname__© ó    ú:/usr/lib/python3/dist-packages/cloudinit/net/activators.pyr   r      s   „ Ør   r   ÚcmdÚdevice_nameÚwarn_on_stderrÚreturnc                 óJ   — t        t        t        j                  | «      |«      S )z2Attempt to alter an interface using a command list)Ú_alter_interface_callabler   r   )r   r   r   s      r   Ú_alter_interfacer#      s   € ô %¤W¬T¯Y©Y¸Ó%<¸nÓMÐMr   Úcallablec                 ó  — 	  | «       \  }}t        |«      r+|rt        j                  nt        j                  } |d|«       y# t        j
                  $ r/}t        j                  t        d|j                  «       Y d}~yd}~ww xY w)zŽAttempt 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‰	ˆˆcÜˆsŒ8Ù(6œŸš¼C¿I¹IˆJÙÐ3°SÔ9ØøÜ×%Ñ%ò Ü�‰”CÐ>ÀÇÁÔFÜûðús   ‚A A ÁBÁ%B Â Bc                   óÌ   — e Zd Zeeddee   defd„«       «       Zeededefd„«       «       Z	eededefd„«       «       Z
edee   defd	„«       Zed
edefd„«       Zedd„«       Zy)ÚNetworkActivatorNÚtargetr    c                 ó   — t        «       ‚)z>Return True if activator is available, otherwise return False.©ÚNotImplementedError©r2   s    r   Ú	availablezNetworkActivator.available.   s   € ô "Ó#Ð#r   r   c                 ó   — t        «       ‚)zWBring up interface.

        Return True is successful, otherwise return False
        r4   ©r   s    r   Úbring_up_interfacez#NetworkActivator.bring_up_interface4   ó   € ô "Ó#Ð#r   c                 ó   — t        «       ‚)zYBring down interface.

        Return True is successful, otherwise return False
        r4   r9   s    r   Úbring_down_interfacez%NetworkActivator.bring_down_interface=   r;   r   Údevice_namesc                 ó,   ‡ — t        ˆ fd„|D «       «      S )zjBring up specified list of interfaces.

        Return True is successful, otherwise return False
        c              3   ó@   •K  — | ]  }‰j                  |«      –— Œ y ­w©N©r:   ©Ú.0ÚdeviceÚclss     €r   ú	<genexpr>z7NetworkActivator.bring_up_interfaces.<locals>.<genexpr>L   s   øè ø€ ÒM°f�3×)Ñ)¨&×1ÑMùó   ƒ)Úall)rF   r>   s   ` r   Úbring_up_interfacesz$NetworkActivator.bring_up_interfacesF   s   ø€ ô ÓMÀÔMÓMÐMr   Únetwork_statec                 ól   — | j                  |j                  «       D �cg c]  }|d   ‘Œ	 c}«      S c c}w )z\Bring up all interfaces.

        Return True is successful, otherwise return False
        Úname)rJ   Úiter_interfaces)rF   rK   Úis      r   Úbring_up_all_interfacesz(NetworkActivator.bring_up_all_interfacesN   s5   € ð ×&Ñ&Ø -× =Ñ =Ó ?Ö@˜1ˆQˆv‹YÒ@ó
ð 	
ùÚ@s   ž1c                  ó   — t        «       ‚)zWait for network to come up.r4   r   r   r   Úwait_for_networkz!NetworkActivator.wait_for_networkX   s   € ô "Ó#Ð#r   rA   ©r    N)r   r   r   Ústaticmethodr   r
   ÚstrÚboolr7   r:   r=   Úclassmethodr   rJ   r   rP   rR   r   r   r   r1   r1   -   sâ   „ ØØñ$˜( 3™-ð $°4ò $ó ó ð$ð Øð$¨ð $°ò $ó ó ð$ð Øð$¨#ð $°$ò $ó ó ð$ð ðN¨x¸©}ð NÀò Nó ðNð ð
°Lð 
ÀTò 
ó ð
ð ò$ó ñ$r   r1   c                   ób   — e Zd Zeddee   defd„«       Zededefd„«       Zededefd„«       Z	y)	ÚIfUpDownActivatorNr2   r    c                 ó.   — t        j                  | ¬«      S ©z3Return true if ifupdown can be used on this system.r6   )r   r7   r6   s    r   r7   zIfUpDownActivator.availablec   s   € ô �}‰} FÔ+Ð+r   r   c                 ó"   — d| g}t        || «      S )úbBring up interface using ifup.

        Return True is successful, otherwise return False
        Úifup©r#   ©r   r   s     r   r:   z$IfUpDownActivator.bring_up_interfaceh   s   € ð �{Ð#ˆÜ  [Ó1Ð1r   c                 ó"   — d| g}t        || «      S )r]   Úifdownr_   r`   s     r   r=   z&IfUpDownActivator.bring_down_interfaceq   s   € ð ˜Ð%ˆÜ  [Ó1Ð1r   rA   )
r   r   r   rT   r
   rU   rV   r7   r:   r=   r   r   r   rY   rY   ^   sl   „ ð
 ñ,˜( 3™-ð ,°4ò ,ó ð,ð ð2¨ð 2°ò 2ó ð2ð ð2¨#ð 2°$ò 2ó ñ2r   rY   c                   óX   — e Zd Zeddefd„«       Zededefd„«       Zededefd„«       Zy)ÚIfConfigActivatorNr    c                 óN   — d}dg}t        t        j                  ||| ¬«      «      S )z3Return true if ifconfig can be used on this system.Úifconfigz/sbin)Úsearchr2   )rV   r   Úwhich)r2   Úexpectedrg   s      r   r7   zIfConfigActivator.available|   s(   € ð ˆØ�ˆÜ”D—J‘J˜x°¸vÔFÓGÐGr   r   c                 ó$   — d| dg}t        || «      S )zoBring up interface using ifconfig <dev> up.

        Return True is successful, otherwise return False
        rf   Úupr_   r`   s     r   r:   z$IfConfigActivator.bring_up_interfaceƒ   s   € ð ˜;¨Ð-ˆÜ  [Ó1Ð1r   c                 ó$   — d| dg}t        || «      S )zqBring up interface using ifconfig <dev> down.

        Return True is successful, otherwise return False
        rf   Údownr_   r`   s     r   r=   z&IfConfigActivator.bring_down_interfaceŒ   s   € ð ˜;¨Ð/ˆÜ  [Ó1Ð1r   rA   )	r   r   r   rT   rV   r7   rU   r:   r=   r   r   r   rd   rd   {   sb   „ ØñH $ò Hó ðHð ð2¨ð 2°ò 2ó ð2ð ð2¨#ð 2°$ò 2ó ñ2r   rd   c                   óx   — e Zd Zed	defd„«       Zededefd„«       Zededefd„«       Ze	de
e   defd„«       Zy)
ÚNetworkManagerActivatorNr    c                 ó.   — t        j                  | ¬«      S )z9Return true if NetworkManager can be used on this system.r6   )r   r7   r6   s    r   r7   z!NetworkManagerActivator.available—   s   € ô ×(Ñ(°Ô7Ð7r   r   c                 óÄ   — ddl m}  || «      }|€t        j                  d«       yddd|g}t	        || «      rdddd	|g}nt	        g d
¢| «       dddd| g}t	        || «      S )zdBring 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Úloadrk   Úfilename)rs   rt   ÚreloadÚifname)Úcloudinit.net.network_managerrr   r'   r(   r#   )r   rr   rv   r   s       r   r:   z*NetworkManagerActivator.bring_up_interfaceœ   s~   € õ 	@á  Ó-ˆØÐÜ�K‰Kð0ôð à˜ f¨hÐ7ˆÜ˜C Ô-Ø˜L¨$°
¸HÐE‰CäÒ>ÀÔLØ˜L¨$°¸+ÐFˆCÜ  [Ó1Ð1r   c                 ó&   — ddd| g}t        || «      S )zeBring down interface using nmcli.

        Return True is successful, otherwise return False
        rs   rE   Ú
disconnectr_   r`   s     r   r=   z,NetworkManagerActivator.bring_down_interface´   s   € ð ˜ ,°Ð<ˆÜ  [Ó1Ð1r   r>   c                 óà   ‡ — t        j                   g d¢«      j                  j                  «       }d|k7  rt        j	                  d|«       t        g d¢d«      xr t        ˆ fd„|D «       «      S )z9Activate 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   rI   c              3   ó@   •K  — | ]  }‰j                  |«      –— Œ y ­wrA   rB   rC   s     €r   rG   z>NetworkManagerActivator.bring_up_interfaces.<locals>.<genexpr>Ó   s   øè ø€ ÒL°V�#×(Ñ(¨×0ÑLùrH   )r   ÚstdoutÚrstripr'   r(   r#   rI   )rF   r>   Ústates   `  r   rJ   z+NetworkManagerActivator.bring_up_interfaces½   sp   ø€ ô —	‘	òó
÷ ‰&—‘“ð 	ð  Ò&Ü�K‰KØLØôô  ÚLØó
ò Mô ÓL¸|ÔLÓLð	Mr   rA   )r   r   r   rT   rV   r7   rU   r:   r=   rW   r   rJ   r   r   r   ro   ro   –   s‰   „ Øñ8 $ò 8ó ð8ð ð2¨ð 2°ò 2ó ð2ð. ð2¨#ð 2°$ò 2ó ð2ð ðM¨x¸©}ð MÀò Mó ñMr   ro   c                   ó¬   — e Zd ZddgZeddefd„«       Zededefd„«       Zede	e   defd	„«       Z
ed
edefd„«       Zededefd„«       Zedd„«       Zy)ÚNetplanActivatorr   ÚapplyNr    c                 ó.   — t        j                  | ¬«      S )z2Return true if netplan can be used on this system.r6   )r   r7   r6   s    r   r7   zNetplanActivator.availableÙ   s   € ô × Ñ ¨Ô/Ð/r   r   c                 ód   — t         j                  d«       t        t        j                  dd¬«      S ©úYApply netplan config.

        Return True is successful, otherwise return False
        zBCalling 'netplan apply' rather than altering individual interfacesrI   F©r   ©r'   r)   r#   r…   ÚNETPLAN_CMDr9   s    r   r:   z#NetplanActivator.bring_up_interfaceÞ   ó1   € ô 	�	‰	ð-ô	
ô  Ü×(Ñ(¨%Àô
ð 	
r   r>   c                 ód   — t         j                  d«       t        t        j                  dd¬«      S r‰   rŒ   )r>   s    r   rJ   z$NetplanActivator.bring_up_interfacesì   rŽ   r   rK   c                 ó:   — t        t        j                  dd¬«      S )rŠ   rI   Fr‹   )r#   r…   r�   )rK   s    r   rP   z(NetplanActivator.bring_up_all_interfacesú   s   € ô  Ü×(Ñ(¨%Àô
ð 	
r   c                 ód   — t         j                  d«       t        t        j                  dd¬«      S r‰   rŒ   r9   s    r   r=   z%NetplanActivator.bring_down_interface  rŽ   r   c                  ó€   — t        j                  «       rt        j                  d«       yt        j                  «        y)z:On networkd systems, wait for systemd-networkd-wait-onlinez1NetworkManager is enabled, skipping networkd waitN)r   r7   r'   r)   ÚNetworkdActivatorrR   r   r   r   rR   z!NetplanActivator.wait_for_network  s,   € ô ×$Ñ$Ô&Ü�I‰IÐIÔJØÜ×*Ñ*Õ,r   rA   rS   )r   r   r   r�   rT   rV   r7   rU   r:   r   rJ   r   rP   r=   rR   r   r   r   r…   r…   Ö   sÅ   „ Ø˜gÐ&€Kàñ0 $ò 0ó ð0ð ð
¨ð 
°ò 
ó ð
ð ð
¨(°3©-ð 
¸Dò 
ó ð
ð ð
¨|ð 
Àò 
ó ð
ð ð
¨#ð 
°$ò 
ó ð
ð ò-ó ñ-r   r…   c                   ó„   — e Zd Zed
defd„«       Zededefd„«       Zededefd„«       Z	ededefd„«       Z
edd	„«       Zy)r“   Nr    c                 ó.   — t        j                  | ¬«      S r[   )r   r7   r6   s    r   r7   zNetworkdActivator.available  s   € ô ×!Ñ!¨Ô0Ð0r   r   c                 óH   — t        t        t        j                  | «      «      S ©ú1Return True is successful, otherwise return False)r"   r   r   Úlink_upr9   s    r   r:   z$NetworkdActivator.bring_up_interface"  s!   € ô )Ü”H×$Ñ$ kÓ2ó
ð 	
r   rK   c                 ó"   — g d¢}t        |d«      S )r˜   )r}   Úrestartzsystemd-networkdzsystemd-resolvedrI   r_   )rK   r   s     r   rP   z)NetworkdActivator.bring_up_all_interfaces)  s   € ò OˆÜ  UÓ+Ð+r   c                 óH   — t        t        t        j                  | «      «      S r—   )r"   r   r   Ú	link_downr9   s    r   r=   z&NetworkdActivator.bring_down_interface/  s!   € ô )Ü”H×&Ñ&¨Ó4ó
ð 	
r   c                  ó2   — t        j                   g d¢«       y)z&Wait for systemd-networkd-wait-online.)r}   Ústartz$systemd-networkd-wait-online.serviceN)r   r   r   r   rR   z"NetworkdActivator.wait_for_network6  s   € ô 	�	‰	ÚJõ	
r   rA   rS   )r   r   r   rT   rV   r7   rU   r:   r   rP   r=   rR   r   r   r   r“   r“     s•   „ Øñ1 $ò 1ó ð1ð ð
¨ð 
°ò 
ó ð
ð ð,¨|ð ,Àò ,ó ð,ð
 ð
¨#ð 
°$ò 
ó ð
ð ò
ó ñ
r   r“   )r   r   znetwork-managerr   rf   ÚNAME_TO_ACTIVATORÚpriorityr2   c                 ó¾   ‡— | D �cg c]  }|t         vsŒ|‘Œ }}|rt        d|› �«      ‚| D �cg c]  }t        |   ‘Œ }}t        ˆfd„|D «       d«      S c c}w c c}w )zEReturns the first available activator from the priority list or None.z.Unknown activators provided in priority list: c              3   óD   •K  — | ]  }|j                  ‰«      r|–— Œ y ­wrA   )r7   )rD   Úactivator_clsr2   s     €r   rG   z#search_activator.<locals>.<genexpr>\  s'   øè ø€ ò 	
àØ×&Ñ& vÔ.ô ñ	
ùs   ƒ N)ÚDEFAULT_PRIORITYÚ
ValueErrorr    Únext)r¡   r2   rO   ÚunknownrM   Úactivator_classess    `    r   Úsearch_activatorrª   Q  s‚   ø€ ð #Ö@�Q aÔ/?Ò&?ŠqÐ@€GÐ@ÙÜØ<¸W¸IÐFó
ð 	
ð >FÖF°TÔ*¨4Ó0ÐFÐÐFÜó	
à!2ô	
ð
 	óð ùò Aùò
 Gs   †A”A®Ac                 óž   — | €t         } t        | |«      }|s|r
|dk7  rd|› �nd}t        d|› d| › �«      ‚t        j	                  d|| «       |S )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¡   r2   ÚselectedÚtmsgs       r   Úselect_activatorr°   e  ss   € ð ÐÜ#ˆÜ ¨&Ó1€HÙÙ)/°F¸c²M�˜V˜HÑ%ÀrˆÜ"Ø3°D°6ð :&Ø&. Zð1ó
ð 	
ô ‡I�IØ8¸(ÀHôð €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   ÚlistrU   rV   r#   r"   r1   rY   rd   ro   r…   r“   r¥   r    Ú__annotations__rª   r°   r   r   r   ú<module>r½      sŽ  ðä ß #Ý ß H× HÑ Hç  ß AÓ AÝ 2Ý 4à€g×Ñ˜Ó!€ô	˜9ô 	ð
 9=ñNØ	ðNØðNØ15ðNà	óNð 04ñØðØ(,ðà	óô&.$�sô .$ôb2Ð(ô 2ô:2Ð(ô 2ô6=MÐ.ô =Mô@C-Ð'ô C-ôL
Ð(ô 
òHÐ ð ØØ.Ø!Ø!ñ8Ð �4˜˜TÐ"2Ñ3Ð3Ñ4ó ðØ�3‰iðØ!& s¨D yÑ!1ðàˆdÐ#Ñ$Ñ%óð* CGñØ�t˜C‘yÑ!ðØ2:¸3±-ðà	Ð
Ñôr   