3 Šcj#ใ@svUddlZddlmZmZddlmZmZmZmZm Z m Z ddl m Z m Z ddlmZddlmZddlmZddlmZddlmZejeƒZGdd„deƒZed œd d „ZGd d „d eƒZ Gdd„de ƒZ!Gdd„de ƒZ"Gdd„de ƒZ#Gdd„de ƒZ$ddddgZ%e!e#e"e$dœZ&ee'e e f&ee'e e'dfee e dœdd„Z(d eee'ee'e e dœdd„Z)dS)!้N)ฺABCฺabstractmethod)ฺDictฺIterableฺListฺOptionalฺTypeฺUnion)ฺsubpฺutil)ฺ available)ฺ NetworkStatec@s eZdZdS)ฺNoActivatorExceptionN)ฺ__name__ฺ __module__ฺ __qualname__ฉrr๚ /usr/lib/python3.6/activators.pyrsr)ฺreturnc Cs`tjd||ƒy(tj|ƒ\}}t|ƒr4tjd||ƒdStjk rZtjtd|ƒdSXdS)Nz#Attempting command %s for device %sz(Running %s resulted in stderr output: %sTz#Running interface command %s failedF)ฺLOGฺdebugr ฺlenฺwarningZProcessExecutionErrorr Zlogexc)ฺcmdฺ device_nameZ_outฺerrrrrฺ_alter_interfacesrc@s†eZdZeedeeedœdd„ƒƒZeeeedœdd„ƒƒZ eeeedœdd „ƒƒZ e e eed œd d „ƒZ e eed œdd„ƒZdS)ฺNetworkActivatorN)ฺtargetrcCs tƒ‚dS)z>Return True if activator is available, otherwise return False.N)ฺNotImplementedError)rrrrr !szNetworkActivator.available)rrcCs tƒ‚dS)zWBring up interface. Return True is successful, otherwise return False N)r)rrrrฺbring_up_interface'sz#NetworkActivator.bring_up_interfacecCs tƒ‚dS)zYBring down interface. Return True is successful, otherwise return False N)r)rrrrฺbring_down_interface0sz%NetworkActivator.bring_down_interface)ฺ device_namesrcst‡fdd„|DƒƒS)zjBring up specified list of interfaces. Return True is successful, otherwise return False c3s|]}ˆj|ƒVqdS)N)r )ฺ.0ฺdevice)ฺclsrr๚ ?sz7NetworkActivator.bring_up_interfaces..)ฺall)r%r"r)r%rฺbring_up_interfaces9sz$NetworkActivator.bring_up_interfaces)ฺ network_statercCs|jdd„|jƒDƒƒS)z\Bring up all interfaces. Return True is successful, otherwise return False cSsg|] }|d‘qS)ฺnamer)r#ฺirrr๚ Hsz.)r(Ziter_interfaces)r%r)rrrฺbring_up_all_interfacesAsz(NetworkActivator.bring_up_all_interfaces)N)rrrฺ staticmethodrrฺstrฺboolr r r!ฺ classmethodrr(r r-rrrrr src@sNeZdZed eeedœdd„ƒZeeedœdd„ƒZeeedœdd „ƒZ dS) ฺIfUpDownActivatorN)rrcCs t|dS)z3Return true if ifupdown can be used on this system.)r)ฺ eni_available)rrrrr QszIfUpDownActivator.available)rrcCsd|g}t||ƒS)zbBring up interface using ifup. Return True is successful, otherwise return False Zifup)r)rrrrrr Vsz$IfUpDownActivator.bring_up_interfacecCsd|g}t||ƒS)zbBring up interface using ifup. Return True is successful, otherwise return False Zifdown)r)rrrrrr!_sz&IfUpDownActivator.bring_down_interface)N) rrrr.rr/r0r r r!rrrrr2Ls r2c@sHeZdZed edœdd„ƒZeeedœdd„ƒZeeedœdd „ƒZdS) ฺNetworkManagerActivatorN)rcCs t|dS)z9Return true if NetworkManager can be used on this system.)r)ฺ nm_available)rrrrr jsz!NetworkManagerActivator.available)rrcCsxddlm}||ƒ}|dkr*tjdƒdSddd|g}t||ƒrPddd d |g}ntddd g|ƒ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ฺnmcliZ connectionฺloadฺupฺfilenameฺreloadZifname)ฺcloudinit.net.network_managerr6rrr)rr6r:rrrrr os   z*NetworkManagerActivator.bring_up_interfacecCsddd|g}t||ƒS)zeBring down interface using nmcli. Return True is successful, otherwise return False r7r$Z disconnect)r)rrrrrr!‡s z,NetworkManagerActivator.bring_down_interface)N) rrrr.r0r r/r r!rrrrr4is r4c@s|eZdZddgZededœdd„ƒZeeedœdd „ƒZee eed œd d „ƒZ ee ed œdd„ƒZ eeedœdd„ƒZ dS)ฺNetplanActivatorฺnetplanZapplyN)rcCs t|dS)z2Return true if netplan can be used on this system.)r)ฺnetplan_available)rrrrr ”szNetplanActivator.available)rrcCstjdƒttjdƒS)zYApply netplan config. Return True is successful, otherwise return False zBCalling 'netplan apply' rather than altering individual interfacesr')rrrr=ฺ NETPLAN_CMD)rrrrr ™sz#NetplanActivator.bring_up_interface)r"rcCstjdƒttjdƒS)zYApply netplan config. Return True is successful, otherwise return False zBCalling 'netplan apply' rather than altering individual interfacesr')rrrr=r@)r"rrrr(ฅsz$NetplanActivator.bring_up_interfaces)r)rcCs ttjdƒS)zYApply netplan config. Return True is successful, otherwise return False r')rr=r@)r)rrrr-ฑsz(NetplanActivator.bring_up_all_interfacescCstjdƒttjdƒS)zYApply netplan config. Return True is successful, otherwise return False zBCalling 'netplan apply' rather than altering individual interfacesr')rrrr=r@)rrrrr!นsz%NetplanActivator.bring_down_interface)N)rrrr@r.r0r r/r rr(r r-r!rrrrr=‘s  r=c@s\eZdZed edœdd„ƒZeeedœdd„ƒZeeedœd d „ƒZ eeedœd d „ƒZ dS)ฺNetworkdActivatorN)rcCs t|dS)z3Return true if ifupdown can be used on this system.)r)ฺnetworkd_available)rrrrr วszNetworkdActivator.available)rrcCsdddd|g}t||ƒS)z1Return True is successful, otherwise return Falseฺipฺlinkฺsetr9)r)rrrrrr ฬsz$NetworkdActivator.bring_up_interface)r)rcCsddddg}t|dƒS)z1Return True is successful, otherwise return FalseZ systemctlZrestartzsystemd-networkdzsystemd-resolvedr')r)r)rrrrr-าs z)NetworkdActivator.bring_up_all_interfacescCsdddd|g}t||ƒS)z1Return True is successful, otherwise return FalserCrDrEZdown)r)rrrrrr!ุsz&NetworkdActivator.bring_down_interface)N) rrrr.r0r r/r r r-r!rrrrrAฦsrAฺenir>znetwork-managerฺnetworkd)rFr>znetwork-managerrG)ฺpriorityrrcs>dd„|Dƒ}|rtd|ƒ‚dd„|Dƒ}‡fdd„|DƒS)NcSsg|]}|tkr|‘qSr)ฺDEFAULT_PRIORITY)r#r+rrrr,๓sz$search_activator..z0Unknown activators provided in priority list: %scSsg|] }t|‘qSr)ฺNAME_TO_ACTIVATOR)r#r*rrrr,๘scsg|]}|jˆƒr|‘qSr)r )r#Z activator_cls)rrrr,๚s)ฺ ValueError)rHrฺunknownZactivator_classesr)rrฺsearch_activator๐s  rMcCs\|dkr t}t||ƒ}|sBd}|r2|dkr2d|}td||fƒ‚|d}tjd||ƒ|S)Nฺ๚/z in target=%szBNo available network activators found%s. Searched through list: %srz.Using selected activator: %s from priority: %s)rIrMrrr)rHrฺfoundZtmsgZselectedrrrฺselect_activators    rQ)NN)*ZloggingฺabcrrZtypingrrrrrr Z cloudinitr r Zcloudinit.net.enir r3Zcloudinit.net.netplanr?r<r5Zcloudinit.net.network_stater Zcloudinit.net.networkdrBZ getLoggerrrฺ Exceptionrr0rrr2r4r=rArIrJr/rMrQrrrrฺs:        ,(5