a ahi.@sUddlZddlmZmZddlmZddlmZmZm Z m Z m Z m Z m Z ddlmZmZddlmZmZmZmZddlmZddlmZeeZGd d d eZd%ee e!e!d d dZ"d&ee!e!dddZ#GdddeZ$Gddde$Z%Gddde$Z&Gddde$Z'Gddde$Z(Gddde$Z)gdZ*e%e(e'e)e&dZ+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)ABCabstractmethod)partial)CallableDictIterableListOptionalTypeUnion)subputil)eninetplannetwork_managernetworkd)Iproute2) NetworkStatec@s eZdZdS)NoActivatorExceptionN)__name__ __module__ __qualname__rrReturn True if activator is available, otherwise return False.NNotImplementedErrorr)rrr available.szNetworkActivator.availablerrcCs tdS)zWBring up interface. Return True is successful, otherwise return False Nr*rrrrbring_up_interface4sz#NetworkActivator.bring_up_interfacecCs tdS)zYBring down interface. Return True is successful, otherwise return False Nr*r/rrrbring_down_interface=sz%NetworkActivator.bring_down_interface device_namesrcstfdd|DS)zjBring up specified list of interfaces. Return True is successful, otherwise return False c3s|]}|VqdSNr0.0deviceclsrr Lz7NetworkActivator.bring_up_interfaces..)all)r:r3rr9rbring_up_interfacesFsz$NetworkActivator.bring_up_interfaces network_statercCs|dd|DS)z\Bring up all interfaces. Return True is successful, otherwise return False cSsg|] }|dqS)namerr7irrr Ur<z.)r>Ziter_interfaces)r:r@rrrbring_up_all_interfacesNsz(NetworkActivator.bring_up_all_interfacesrcCs tdS)zWait for network to come up.Nr*rrrrwait_for_networkXsz!NetworkActivator.wait_for_network)N)rrr staticmethodrr strboolr-r0r1 classmethodrr>rrErGrrrrr'-s r'c@sNeZdZed eeedddZeeedddZeeeddd Z dS) IfUpDownActivatorNr(cCs tj|dSz3Return 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 Zifuprrrrrrr0hsz$IfUpDownActivator.bring_up_interfacecCsd|g}t||S)rNZifdownrOrPrrrr1qsz&IfUpDownActivator.bring_down_interface)N) rrrrHr rIrJr-r0r1rrrrrL^s rLc@sHeZdZed edddZeeedddZeeeddd ZdS) IfConfigActivatorNrFcCsd}dg}ttj|||dS)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 rRuprOrPrrrr0s z$IfConfigActivator.bring_up_interfacecCsd|dg}t||S)zqBring up interface using ifconfig down. Return True is successful, otherwise return False rRZdownrOrPrrrr1s z&IfConfigActivator.bring_down_interface)N) rrrrHrJr-rIr0r1rrrrrQ{s rQc@s`eZdZed edddZeeedddZeeeddd Ze e eed d d Z dS)NetworkManagerActivatorNrFcCs tj|dS)z9Return true if NetworkManager can be used on this system.r,)rr-r,rrrr-sz!NetworkManagerActivator.availabler.cCsvddlm}||}|dur*tddSddd|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.Fnmcli connectionloadrUfilename)rXrYreloadZifname)Zcloudinit.net.network_managerrWr"r#r)rrWr[rrrrr0s   z*NetworkManagerActivator.bring_up_interfacecCsddd|g}t||S)zeBring down interface using nmcli. Return True is successful, otherwise return False rXr8Z disconnectrOrPrrrr1s z,NetworkManagerActivator.bring_down_interfacer2csLtgdj}d|kr(td|tgddoJtfdd|DS)z9Activate network Return True on success ) systemctlZshowz--property=SubStateNetworkManager.servicezSubState=runningz:Expected NetworkManager SubState=running, but detected: %s)r]ztry-reload-or-restartr^r=c3s|]}|VqdSr4r5r6r9rrr;r<z>NetworkManagerActivator.bring_up_interfaces..)r stdoutrstripr"r#rr=)r:r3staterr9rr>s z+NetworkManagerActivator.bring_up_interfaces)N) rrrrHrJr-rIr0r1rKrr>rrrrrVsrVc@seZdZddgZededddZeeeddd Zee eed d d Z ee ed ddZ eeedddZ eddddZdS)NetplanActivatorrZapplyNrFcCs tj|dS)z2Return true if netplan can be used on this system.r,)rr-r,rrrr-szNetplanActivator.availabler.cCstdttjdddSYApply netplan config. Return True is successful, otherwise return False zBCalling 'netplan apply' rather than altering individual interfacesr=Frr"r$rrb NETPLAN_CMDr/rrrr0s z#NetplanActivator.bring_up_interfacer2cCstdttjdddSrcrf)r3rrrr>s z$NetplanActivator.bring_up_interfacesr?cCsttjdddS)rdr=Fre)rrbrg)r@rrrrEsz(NetplanActivator.bring_up_all_interfacescCstdttjdddSrcrfr/rrrr1s z%NetplanActivator.bring_down_interfacecCs"trtddStdS)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>rrEr1rGrrrrrbs    rbc@sneZdZededddZeeedddZeeedd d Z eeedd d Z eddd dZ dS)rhNrFcCs tj|dSrM)rr-r,rrrr-szNetworkdActivator.availabler.cCstttj|S1Return True is successful, otherwise return False)rrrZlink_upr/rrrr0"s z$NetworkdActivator.bring_up_interfacer?cCsgd}t|dS)rj)r]Zrestartzsystemd-networkdzsystemd-resolvedr=rO)r@rrrrrE)sz)NetworkdActivator.bring_up_all_interfacescCstttj|Sri)rrrZ link_downr/rrrr1/s z&NetworkdActivator.bring_down_interfacecCstgddS)z&Wait for systemd-networkd-wait-online.)r]startz$systemd-networkd-wait-online.serviceN)r rrrrrG6sz"NetworkdActivator.wait_for_network)N) rrrrHrJr-rIr0rrEr1rGrrrrrhsrh)rrznetwork-managerrrRNAME_TO_ACTIVATOR)priorityr)rcsFdd|D}|r td|dd|D}tfdd|DdS)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) ValueErrornext)rmr)unknownZactivator_classesrr,rsearch_activatorQs rrcCsZ|dur t}t||}|sH|r0|dkr0d|nd}td|d|td|||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)Zselectedtmsgrrrselect_activatores rv)T)T)NN)/Zloggingabcrr functoolsrtypingrrrrr r r Z cloudinitr r Z cloudinit.netrrrrZcloudinit.net.netops.iproute2rZcloudinit.net.network_staterZ getLoggerrr" ExceptionrlistrIrJrrr'rLrQrVrbrhrnrl__annotations__rrrvrrrrsP  $     1@F$