3
cj# ใ @ sv U d dl Z d dlmZmZ d dlmZmZmZmZm Z m
Z
d dlmZm
Z
d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ e jeZG dd deZed d
dZG dd
d
eZ G dd de Z!G dd de Z"G dd de Z#G dd de Z$ddddgZ%e!e#e"e$dZ&ee'e e f &ee' e
e'df ee e dddZ(d eee' ee' e e dddZ)dS )!้ N)ฺABCฺabstractmethod)ฺDictฺIterableฺListฺOptionalฺTypeฺUnion)ฺsubpฺutil)ฺ available)ฺNetworkStatec @ s e Zd ZdS )ฺNoActivatorExceptionN)ฺ__name__ฺ
__module__ฺ__qualname__ฉ r r ๚ /usr/lib/python3.6/activators.pyr s r )ฺreturnc C s` t jd| | y(tj| \}}t|r4t jd| | dS tjk
rZ tjt d| dS X d S )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ฺerrr r r ฺ_alter_interface s r c @ s e Zd Zeedee edddZeeeedddZ eeeeddd Z
eee ed
ddZ
eeed
ddZdS )ฺNetworkActivatorN)ฺtargetr c C s
t dS )z>Return True if activator is available, otherwise return False.N)ฺNotImplementedError)r r r r r ! s zNetworkActivator.available)r r c C s
t dS )zWBring up interface.
Return True is successful, otherwise return False
N)r )r r r r ฺbring_up_interface' s z#NetworkActivator.bring_up_interfacec C s
t dS )zYBring down interface.
Return True is successful, otherwise return False
N)r )r r r r ฺbring_down_interface0 s z%NetworkActivator.bring_down_interface)ฺdevice_namesr c s t fdd|D S )zjBring up specified list of interfaces.
Return True is successful, otherwise return False
c 3 s | ]} j |V qd S )N)r )ฺ.0ฺdevice)ฺclsr r ๚ ? s z7NetworkActivator.bring_up_interfaces..)ฺall)r% r" r )r% r ฺbring_up_interfaces9 s z$NetworkActivator.bring_up_interfaces)ฺ
network_stater c C s | j dd |j D S )z\Bring up all interfaces.
Return True is successful, otherwise return False
c S s g | ]}|d qS )ฺnamer )r# ฺir r r ๚
H s z.)r( Ziter_interfaces)r% r) r r r ฺbring_up_all_interfacesA s z(NetworkActivator.bring_up_all_interfaces)N)r r r ฺstaticmethodr r ฺstrฺboolr r r! ฺclassmethodr r( r
r- r r r r r s r c @ sN e Zd Zed
ee edddZeeedddZeeeddd Z dS )ฺIfUpDownActivatorN)r r c C s
t | dS )z3Return true if ifupdown can be used on this system.)r )ฺ
eni_available)r r r r r Q s zIfUpDownActivator.available)r r c C s d| g}t || S )zbBring up interface using ifup.
Return True is successful, otherwise return False
Zifup)r )r r r r r r V s z$IfUpDownActivator.bring_up_interfacec C s d| g}t || S )zbBring up interface using ifup.
Return True is successful, otherwise return False
Zifdown)r )r r r r r r! _ s z&IfUpDownActivator.bring_down_interface)N)
r r r r. r r/ r0 r r r! r r r r r2 L s r2 c @ sH e Zd Zed
edddZeeedddZeeeddd ZdS )ฺNetworkManagerActivatorN)r c C s
t | dS )z9Return true if NetworkManager can be used on this system.)r )ฺnm_available)r r r r r j s z!NetworkManagerActivator.available)r r c C sx ddl m} || }|dkr*tjd dS ddd|g}t|| rPddd d
|g}ntdddg| 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_managerr6 r r r )r r6 r: r r r r r o s
z*NetworkManagerActivator.bring_up_interfacec C s ddd| g}t || S )zeBring down interface using nmcli.
Return True is successful, otherwise return False
r7 r$ Z
disconnect)r )r r r r r r! s z,NetworkManagerActivator.bring_down_interface)N) r r r r. r0 r r/ r r! r r r r r4 i s r4 c @ s| e Zd ZddgZededddZeeeddd Zee e ed
ddZ
eeed
ddZeeedddZ
dS )ฺNetplanActivatorฺnetplanZapplyN)r c C s
t | dS )z2Return true if netplan can be used on this system.)r )ฺnetplan_available)r r r r r s zNetplanActivator.available)r r c C s t jd ttjdS )zYApply netplan config.
Return True is successful, otherwise return False
zBCalling 'netplan apply' rather than altering individual interfacesr' )r r r r= ฺNETPLAN_CMD)r r r r r s z#NetplanActivator.bring_up_interface)r" r c C s t jd ttjdS )zYApply netplan config.
Return True is successful, otherwise return False
zBCalling 'netplan apply' rather than altering individual interfacesr' )r r r r= r@ )r" r r r r( ฅ s z$NetplanActivator.bring_up_interfaces)r) r c C s t tjdS )zYApply netplan config.
Return True is successful, otherwise return False
r' )r r= r@ )r) r r r r- ฑ s z(NetplanActivator.bring_up_all_interfacesc C s t jd ttjdS )zYApply netplan config.
Return True is successful, otherwise return False
zBCalling 'netplan apply' rather than altering individual interfacesr' )r r r r= r@ )r r r r r! น s z%NetplanActivator.bring_down_interface)N)r r r r@ r. r0 r r/ r r r( r
r- r! r r r r r= s r= c @ s\ e Zd Zed
edddZeeedddZeeedd d
Z eeedddZ
dS )ฺNetworkdActivatorN)r c C s
t | dS )z3Return true if ifupdown can be used on this system.)r )ฺnetworkd_available)r r r r r ว s zNetworkdActivator.available)r r c C s dddd| g}t || S )z1Return True is successful, otherwise return Falseฺipฺlinkฺsetr9 )r )r r r r r r ฬ s z$NetworkdActivator.bring_up_interface)r) r c C s ddddg}t |dS )z1Return True is successful, otherwise return FalseZ systemctlZrestartzsystemd-networkdzsystemd-resolvedr' )r )r) r r r r r- า s z)NetworkdActivator.bring_up_all_interfacesc C s dddd| g}t || S )z1Return True is successful, otherwise return FalserC rD rE Zdown)r )r r r r r r! ุ s z&NetworkdActivator.bring_down_interface)N)r r r r. r0 r r/ r r
r- r! r r r r rA ฦ s rA ฺenir> znetwork-managerฺnetworkd)rF r> znetwork-managerrG )ฺpriorityr r c s> dd | D }|rt d| dd | D } fdd|D S )Nc S s g | ]}|t kr|qS r )ฺDEFAULT_PRIORITY)r# r+ r r r r, ๓ s z$search_activator..z0Unknown activators provided in priority list: %sc S s g | ]}t | qS r )ฺNAME_TO_ACTIVATOR)r# r* r r r r, ๘ s c s g | ]}|j r|qS r )r )r# Z
activator_cls)r r r r, ๚ s )ฺ
ValueError)rH r ฺunknownZactivator_classesr )r r ฺsearch_activator๐ s
rM c C s\ | d krt } t| |}|sBd}|r2|dkr2d| }td|| f |d }tjd|| |S )Nฺ ๚/z
in target=%szBNo available network activators found%s. Searched through list: %sr z.Using selected activator: %s from priority: %s)rI rM r r r )rH r ฺfoundZtmsgZselectedr r r ฺselect_activator s
rQ )NN)*Zloggingฺabcr r Ztypingr r r r r r Z cloudinitr
r Zcloudinit.net.enir r3 Zcloudinit.net.netplanr? r<