a -@=já.ã@s¨UddlZddlmZmZddlmZddlmZmZm Z m Z m Z m Z m Z ddlmZmZddlmZmZmZmZddlmZddlmZe e¡ZGd d „d eƒZd%ee e!e!d œd d„Z"d&ee!e!dœdd„Z#Gdd„deƒZ$Gdd„de$ƒZ%Gdd„de$ƒZ&Gdd„de$ƒZ'Gdd„de$ƒZ(Gdd„de$ƒZ)gd¢Z*e%e(e'e)e&dœZ+ee e e$fe,d<e e e e dfe e e$d œd!d"„Z-d'e e e e e e e$d œd#d$„Z.dS)(éN)ÚABCÚabstractmethod)Úpartial)ÚCallableÚDictÚIterableÚListÚOptionalÚTypeÚUnion)ÚsubpÚutil)ÚeniÚnetplanÚnetwork_managerÚnetworkd)ÚIproute2)Ú NetworkStatec@s eZdZdS)ÚNoActivatorExceptionN)Ú__name__Ú __module__Ú __qualname__©rrúReturn True if activator is available, otherwise return False.N©ÚNotImplementedError©r)rrrÚ available.szNetworkActivator.available©rrcCs tƒ‚dS)zWBring up interface. Return True is successful, otherwise return False Nr*©rrrrÚbring_up_interface4sz#NetworkActivator.bring_up_interfacecCs tƒ‚dS)zYBring down interface. Return True is successful, otherwise return False Nr*r/rrrÚbring_down_interface=sz%NetworkActivator.bring_down_interface©Ú device_namesrcst‡fdd„|DƒƒS)zjBring up specified list of interfaces. Return True is successful, otherwise return False c3s|]}ˆ |¡VqdS©N©r0©Ú.0Údevice©ÚclsrrÚ Lóz7NetworkActivator.bring_up_interfaces..)Úall)r:r3rr9rÚbring_up_interfacesFsz$NetworkActivator.bring_up_interfaces©Ú network_statercCs| dd„| ¡Dƒ¡S)z\Bring up all interfaces. Return True is successful, otherwise return False cSsg|] }|d‘qS)Únamer©r7ÚirrrÚ Ur<z.)r>Ziter_interfaces)r:r@rrrÚbring_up_all_interfacesNsÿz(NetworkActivator.bring_up_all_interfaces©rcCs tƒ‚dS)zWait for network to come up.Nr*rrrrÚwait_for_networkXsz!NetworkActivator.wait_for_network)N)rrrÚ staticmethodrr ÚstrÚboolr-r0r1Ú classmethodrr>rrErGrrrrr'-s r'c@sNeZdZed eeedœdd„ƒZeeedœdd„ƒZeeedœdd „ƒZ dS) ÚIfUpDownActivatorNr(cCs tj|d�S©z3Return true if ifupdown can be used on this system.r,)rr-r,rrrr-cszIfUpDownActivator.availabler.cCsd|g}t||ƒS)úbBring up interface using ifup. Return True is successful, otherwise return False Zifup©r©rrrrrr0hsz$IfUpDownActivator.bring_up_interfacecCsd|g}t||ƒS)rNZifdownrOrPrrrr1qsz&IfUpDownActivator.bring_down_interface)N) rrrrHr rIrJr-r0r1rrrrrL^s rLc@sHeZdZed edœdd„ƒZeeedœdd„ƒZeeedœdd „ƒZdS) ÚIfConfigActivatorNrFcCsd}dg}ttj|||d�ƒS)z3Return true if ifconfig can be used on this system.Úifconfigz/sbin)Úsearchr))rJr Úwhich)r)ZexpectedrSrrrr-|szIfConfigActivator.availabler.cCsd|dg}t||ƒS)zoBring up interface using ifconfig up. Return True is successful, otherwise return False rRÚuprOrPrrrr0ƒs z$IfConfigActivator.bring_up_interfacecCsd|dg}t||ƒS)zqBring up interface using ifconfig down. Return True is successful, otherwise return False rRZdownrOrPrrrr1Œs z&IfConfigActivator.bring_down_interface)N) rrrrHrJr-rIr0r1rrrrrQ{s rQc@s`eZdZed edœdd„ƒZeeedœdd„ƒZeeedœdd „ƒZe e eed œd d „ƒZ dS)ÚNetworkManagerActivatorNrFcCs tj|d�S)z9Return true if NetworkManager can be used on this system.r,)rr-r,rrrr-—sz!NetworkManagerActivator.availabler.cCsvddlm}||ƒ}|dur*t d¡dSddd|g}t||ƒrPddd d |g}ntgd ¢|ƒddd d |g}t||ƒS) zdBring up connection using nmcli. Return True is successful, otherwise return False r)Ú conn_filenameNzFUnable to find an interface config file. Unable to bring up interface.FÚnmcliÚ connectionÚloadrUÚfilename)rXrYÚreloadZifname)Zcloudinit.net.network_managerrWr"r#r)rrWr[rrrrr0œs ÿ  z*NetworkManagerActivator.bring_up_interfacecCsddd|g}t||ƒS)zeBring down interface using nmcli. Return True is successful, otherwise return False rXr8Z disconnectrOrPrrrr1´s z,NetworkManagerActivator.bring_down_interfacer2csLt gd¢¡j ¡}d|kr(t d|¡tgd¢dƒoJt‡fdd„|DƒƒS)z9Activate network Return True on success )Ú systemctlZshowz--property=SubStateúNetworkManager.servicezSubState=runningz:Expected NetworkManager SubState=running, but detected: %s)r]ztry-reload-or-restartr^r=c3s|]}ˆ |¡VqdSr4r5r6r9rrr;Ór<z>NetworkManagerActivator.bring_up_interfaces..)r ÚstdoutÚrstripr"r#rr=)r:r3Ústaterr9rr>½sÿ þþýz+NetworkManagerActivator.bring_up_interfaces)N) rrrrHrJr-rIr0r1rKrr>rrrrrV–srVc@sŽeZdZddgZededœdd„ƒZeeedœdd „ƒZee eed œd d „ƒZ ee ed œdd„ƒZ eeedœdd„ƒZ eddœdd„ƒZdS)ÚNetplanActivatorrZapplyNrFcCs tj|d�S)z2Return true if netplan can be used on this system.r,)rr-r,rrrr-ÙszNetplanActivator.availabler.cCst d¡ttjddd�S©úYApply netplan config. Return True is successful, otherwise return False zBCalling 'netplan apply' rather than altering individual interfacesr=F©r©r"r$rrbÚ NETPLAN_CMDr/rrrr0Þs ÿÿz#NetplanActivator.bring_up_interfacer2cCst d¡ttjddd�Srcrf)r3rrrr>ìs ÿÿz$NetplanActivator.bring_up_interfacesr?cCsttjddd�S)rdr=Fre)rrbrg)r@rrrrEúsÿz(NetplanActivator.bring_up_all_interfacescCst d¡ttjddd�Srcrfr/rrrr1s ÿÿz%NetplanActivator.bring_down_interfacecCs"t ¡rt d¡dSt ¡dS)z:On networkd systems, wait for systemd-networkd-wait-onlinez1NetworkManager is enabled, skipping networkd waitN)rr-r"r$ÚNetworkdActivatorrGrrrrrGs z!NetplanActivator.wait_for_network)N)rrrrgrHrJr-rIr0rr>rrEr1rGrrrrrbÖs    rbc@sneZdZededœdd„ƒZeeedœdd„ƒZeeedœd d „ƒZ eeedœd d „ƒZ eddœd d„ƒZ dS)rhNrFcCs tj|d�SrM)rr-r,rrrr-szNetworkdActivator.availabler.cCstttj|ƒƒS©ú1Return True is successful, otherwise return False)rrrZlink_upr/rrrr0"s ÿz$NetworkdActivator.bring_up_interfacer?cCsgd¢}t|dƒS)rj)r]Zrestartzsystemd-networkdzsystemd-resolvedr=rO)r@rrrrrE)sz)NetworkdActivator.bring_up_all_interfacescCstttj|ƒƒSri)rrrZ link_downr/rrrr1/s ÿz&NetworkdActivator.bring_down_interfacecCst gd¢¡dS)z&Wait for systemd-networkd-wait-online.)r]Ústartz$systemd-networkd-wait-online.serviceN)r rrrrrG6sÿz"NetworkdActivator.wait_for_network)N) rrrrHrJr-rIr0rrEr1rGrrrrrhsrh)rrznetwork-managerrrRÚNAME_TO_ACTIVATOR)Úpriorityr)rcsFdd„|Dƒ}|r td|›�ƒ‚dd„|Dƒ}t‡fdd„|DƒdƒS)zEReturns the first available activator from the priority list or None.cSsg|]}|tvr|‘qSr)ÚDEFAULT_PRIORITYrBrrrrDUr<z$search_activator..z.Unknown activators provided in priority list: cSsg|] }t|‘qSr)rl)r7rArrrrDZr<c3s|]}| ˆ¡r|VqdSr4)r-)r7Z activator_clsr,rrr;\s þz#search_activator..N)Ú ValueErrorÚnext)rmr)ÚunknownZactivator_classesrr,rÚsearch_activatorQsÿ þúrrcCsZ|dur t}t||ƒ}|sH|r0|dkr0d|›�nd}td|›d|›�ƒ‚t d||¡|S)Nú/z in target=Úz%No available network activators foundz. Searched through list: z.Using selected activator: %s from priority: %s)rnrrrr"r$)rmr)ZselectedÚtmsgrrrÚselect_activatores ÿÿÿrv)T)T)NN)/ZloggingÚabcrrÚ functoolsrÚtypingrrrrr r r Z cloudinitr r Z cloudinit.netrrrrZcloudinit.net.netops.iproute2rZcloudinit.net.network_staterZ getLoggerrr"Ú ExceptionrÚlistrIrJrrr'rLrQrVrbrhrnrlÚ__annotations__rrrvrrrrÚsP  $   ÿþ ÿþ 1@F$ û  þ ÿþ