o x[h. @sUddlZddlmZmZddlmZddlmZmZm Z m Z m Z m Z m Z ddlmZmZddlmZmZmZmZddlmZddlmZeeZGd d d eZ d)d ed e de!de!fddZ" d)dede!de!fddZ#GdddeZ$Gddde$Z%Gddde$Z&Gddde$Z'Gddde$Z(Gdd d e$Z)gd!Z*e%e(e'e)e&d!Z+ee e e$fe,d"<d#e e d$e e dfde e e$fd%d&Z- d*d#e e e d$e e de e$fd'd(Z.dS)+N)ABCabstractmethod)partial)CallableDictIterableListOptionalTypeUnion)subputil)eninetplannetwork_managernetworkd)Iproute2) NetworkStatec@s eZdZdS)NoActivatorExceptionN)__name__ __module__ __qualname__rr:/usr/lib/python3/dist-packages/cloudinit/net/activators.pyrsrTcmd device_namewarn_on_stderrreturncCstttj||S)z2Attempt to alter an interface using a command list)_alter_interface_callablerr )rrrrrr_alter_interfacesrcallablec Cslz|\}}t|r|rtjntj}|d|WdStjy5}zttd|jWYd}~dSd}~ww)zAttempt to alter an interface using a callable this function standardizes logging and response to failure for various activators zReceived stderr output: %sTz#Running interface command %s failedNF) lenLOGwarningdebugr ProcessExecutionErrorr logexcr)r r_outerr log_stderrerrrrs  rc@seZdZeeddeedefddZeededefddZ eededefd d Z e d e edefd d Z e dedefddZedddZdS)NetworkActivatorNtargetrcCt)z>Return True if activator is available, otherwise return False.NotImplementedErrorr,rrr available.szNetworkActivator.availablercCr-)zWBring up interface. Return True is successful, otherwise return False r.rrrrbring_up_interface4z#NetworkActivator.bring_up_interfacecCr-)zYBring down interface. Return True is successful, otherwise return False r.r2rrrbring_down_interface=r4z%NetworkActivator.bring_down_interface device_namescstfdd|DS)zjBring up specified list of interfaces. Return True is successful, otherwise return False c3|]}|VqdSNr3.0deviceclsrr Lz7NetworkActivator.bring_up_interfaces..)all)r>r6rr=rbring_up_interfacesFsz$NetworkActivator.bring_up_interfaces network_statecCs|dd|DS)z\Bring up all interfaces. Return True is successful, otherwise return False cSsg|]}|dqS)namerr;irrr Uz.)rBiter_interfaces)r>rCrrrbring_up_all_interfacesNsz(NetworkActivator.bring_up_all_interfacescCr-)zWait for network to come up.r.rrrrwait_for_networkXsz!NetworkActivator.wait_for_networkr8rN)rrr staticmethodrr strboolr1r3r5 classmethodrrBrrJrKrrrrr+-s  r+c@sTeZdZed deedefddZededefddZededefd d Z dS) IfUpDownActivatorNr,rcC tj|dSz3Return true if ifupdown can be used on this system.r0)rr1r0rrrr1c zIfUpDownActivator.availablercCd|g}t||S)bBring up interface using ifup. Return True is successful, otherwise return False ifuprrrrrrr3h z$IfUpDownActivator.bring_up_interfacecCrU)rVifdownrXrYrrrr5qrZz&IfUpDownActivator.bring_down_interfacer8) rrrrMr rNrOr1r3r5rrrrrQ^srQc@sLeZdZed defddZededefddZededefdd ZdS) IfConfigActivatorNrcCsd}dg}ttj|||dS)z3Return true if ifconfig can be used on this system.ifconfigz/sbin)searchr,)rOr which)r,expectedr^rrrr1|szIfConfigActivator.availablercCd|dg}t||S)zoBring up interface using ifconfig up. Return True is successful, otherwise return False r]uprXrYrrrr3  z$IfConfigActivator.bring_up_interfacecCra)zqBring up interface using ifconfig down. Return True is successful, otherwise return False r]downrXrYrrrr5rcz&IfConfigActivator.bring_down_interfacer8) rrrrMrOr1rNr3r5rrrrr\{sr\c@sfeZdZed defddZededefddZededefdd Ze d e edefd d Z dS)NetworkManagerActivatorNrcCrR)z9Return true if NetworkManager can be used on this system.r0)rr1r0rrrr1rTz!NetworkManagerActivator.availablercCsvddlm}||}|durtddSddd|g}t||r(ddd 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 connectionloadrbfilename)rgrhreloadifname)cloudinit.net.network_managerrfr"r#r)rrfrjrrrrr3s    z*NetworkManagerActivator.bring_up_interfacecCsddd|g}t||S)zeBring down interface using nmcli. Return True is successful, otherwise return False rgr< disconnectrXrYrrrr5s  z,NetworkManagerActivator.bring_down_interfacer6csLtgdj}d|krtd|tgddo%tfdd|DS)z9Activate network Return True on success ) systemctlshowz--property=SubStateNetworkManager.servicezSubState=runningz:Expected NetworkManager SubState=running, but detected: %s)roztry-reload-or-restartrqrAc3r7r8r9r:r=rrr?r@z>NetworkManagerActivator.bring_up_interfaces..)r stdoutrstripr"r#rrA)r>r6staterr=rrBs z+NetworkManagerActivator.bring_up_interfacesr8) rrrrMrOr1rNr3r5rPrrBrrrrresrec@seZdZddgZeddefddZededefdd Zed e edefd d Z ed e defddZ ededefddZ edddZdS)NetplanActivatorrapplyNrcCrR)z2Return true if netplan can be used on this system.r0)rr1r0rrrr1rTzNetplanActivator.availablercCtdttjdddSYApply netplan config. Return True is successful, otherwise return False zBCalling 'netplan apply' rather than altering individual interfacesrAFrr"r$rru NETPLAN_CMDr2rrrr3 z#NetplanActivator.bring_up_interfacer6cCrwrxr{)r6rrrrBr}z$NetplanActivator.bring_up_interfacesrCcCsttjdddS)ryrAFrz)rrur|)rCrrrrJsz(NetplanActivator.bring_up_all_interfacescCrwrxr{r2rrrr5r}z%NetplanActivator.bring_down_interfacecCs"tr tddStdS)z:On networkd systems, wait for systemd-networkd-wait-onlinez1NetworkManager is enabled, skipping networkd waitN)rr1r"r$NetworkdActivatorrKrrrrrKs  z!NetplanActivator.wait_for_networkr8rL)rrrr|rMrOr1rNr3rrBrrJr5rKrrrrrus    ruc@speZdZeddefddZededefddZededefd d Z ededefd d Z edd dZ dS)r~NrcCrRrS)rr1r0rrrr1rTzNetworkdActivator.availablercCtttj|S1Return True is successful, otherwise return False)rrrlink_upr2rrrr3" z$NetworkdActivator.bring_up_interfacerCcCsgd}t|dS)r)rorestartzsystemd-networkdzsystemd-resolvedrArX)rCrrrrrJ)s z)NetworkdActivator.bring_up_all_interfacescCrr)rrr link_downr2rrrr5/rz&NetworkdActivator.bring_down_interfacecCstgddS)z&Wait for systemd-networkd-wait-online.)rostartz$systemd-networkd-wait-online.serviceN)r rrrrrK6sz"NetworkdActivator.wait_for_networkr8rL) rrrrMrOr1rNr3rrJr5rKrrrrr~sr~)rrznetwork-managerrr]NAME_TO_ACTIVATORpriorityr,csFdd|D}|rtd|dd|D}tfdd|DdS)zEReturns the first available activator from the priority list or None.cSsg|]}|tvr|qSr)DEFAULT_PRIORITYrErrrrGUsz$search_activator..z.Unknown activators provided in priority list: cSsg|]}t|qSr)r)r;rDrrrrGZrHc3s|] }|r|VqdSr8)r1)r; activator_clsr0rrr?\s z#search_activator..N) ValueErrornext)rr,unknownactivator_classesrr0rsearch_activatorQs rcCsZ|durt}t||}|s$|r|dkrd|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)rrrr"r$)rr,selectedtmsgrrrselect_activatores r)T)NN)/loggingabcrr functoolsrtypingrrrrr r r cloudinitr r cloudinit.netrrrrcloudinit.net.netops.iproute2rcloudinit.net.network_stater getLoggerrr" ExceptionrlistrNrOrrr+rQr\rerur~rr__annotations__rrrrrrsp  $     1@F$