509318396
Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­Â�Â­
<!DOCTYPE html>
<html>
3
Šcj#  ã               @   sv  U d dl Z d dlmZmZ d dlmZmZmZmZm	Z	m
Z
 d dlmZmZ d dlmZ d dlmZ d dlmZ d dlmZ d dlmZ e jeƒZG dd„ deƒZed	œd
d„ZG dd„ deƒZ G dd„ de ƒZ!G dd„ de ƒZ"G dd„ de ƒZ#G dd„ de ƒZ$ddddgZ%e!e#e"e$dœZ&ee'e	e  f &ee' e
e'df ee	e   dœdd„Z(d eee'  ee' e	e  dœdd„Z)dS )!é    N)ÚABCÚabstractmethod)ÚDictÚIterableÚListÚOptionalÚTypeÚUnion)ÚsubpÚutil)Ú	available)ÚNetworkStatec               @   s   e Zd ZdS )ÚNoActivatorExceptionN)Ú__name__Ú
__module__Ú__qualname__© r   r   ú /usr/lib/python3.6/activators.pyr      s   r   )Úreturnc             C   s`   t jd| |ƒ y(tj| ƒ\}}t|ƒr4t jd| |ƒ dS  tjk
rZ   tjt d| ƒ dS 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ÚwarningZProcessExecutionErrorr   Zlogexc)ÚcmdÚdevice_nameZ_outÚerrr   r   r   Ú_alter_interface   s    r   c               @   s†   e Zd Zeedee edœdd„ƒƒZeeeedœdd„ƒƒZ	eeeedœdd	„ƒƒZ
eee ed
œdd„ƒZeeedœdd„ƒZdS )ÚNetworkActivatorN)Útargetr   c             C   s
   t ƒ ‚dS )z>Return True if activator is available, otherwise return False.N)ÚNotImplementedError)r   r   r   r   r   !   s    zNetworkActivator.available)r   r   c             C   s
   t ƒ ‚dS )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 ƒ ‚dS )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 ‡ fdd„|D ƒƒS )zjBring up specified list of interfaces.

        Return True is successful, otherwise return False
        c             3   s   | ]}ˆ j |ƒV  qd S )N)r    )Ú.0Údevice)Úclsr   r   ú	<genexpr>?   s    z7NetworkActivator.bring_up_interfaces.<locals>.<genexpr>)Úall)r%   r"   r   )r%   r   Úbring_up_interfaces9   s    z$NetworkActivator.bring_up_interfaces)Únetwork_stater   c             C   s   | j dd„ |jƒ D ƒƒS )z\Bring up all interfaces.

        Return True is successful, otherwise return False
        c             S   s   g | ]}|d  ‘qS )Únamer   )r#   Úir   r   r   ú
<listcomp>H   s    z<NetworkActivator.bring_up_all_interfaces.<locals>.<listcomp>)r(   Ziter_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 Zd Zed
ee edœdd„ƒZeeedœdd„ƒZeeedœdd	„ƒZ	dS )ÚIfUpDownActivatorN)r   r   c             C   s
   t | d�S )z3Return true if ifupdown can be used on this system.)r   )Úeni_available)r   r   r   r   r   Q   s    zIfUpDownActivator.available)r   r   c             C   s   d| g}t || ƒS )zbBring up interface using ifup.

        Return True is successful, otherwise return False
        Zifup)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
        Zifdown)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 Zd Zed
edœdd„ƒZeeedœdd„ƒZeeedœdd	„ƒZdS )ÚNetworkManagerActivatorN)r   c             C   s
   t | d�S )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   ddl m} || ƒ}|dkr*tjdƒ dS ddd|g}t|| ƒrPddd	d
|g}ntdddg| ƒ ddd	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ÚreloadZifname)Úcloudinit.net.network_managerr6   r   r   r   )r   r6   r:   r   r   r   r   r    o   s    
z*NetworkManagerActivator.bring_up_interfacec             C   s   ddd| 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 Zd ZddgZededœdd„ƒZeeedœdd	„ƒZee	e ed
œdd„ƒZ
eeedœdd„ƒZeeedœdd„ƒZdS )ÚNetplanActivatorÚnetplanZapplyN)r   c             C   s
   t | d�S )z2Return true if netplan can be used on this system.)r   )Únetplan_available)r   r   r   r   r   ”   s    zNetplanActivator.available)r   r   c             C   s   t jdƒ ttjdƒS )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 jdƒ ttjdƒS )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 tjdƒS )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 jdƒ ttjdƒS )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 Zd Zededœdd„ƒZeeedœdd„ƒZeeedœd	d
„ƒZ	eeedœdd„ƒZ
dS )ÚNetworkdActivatorN)r   c             C   s
   t | d�S )z3Return true if ifupdown can be used on this system.)r   )Únetworkd_available)r   r   r   r   r   Ç   s    zNetworkdActivator.available)r   r   c             C   s   dddd| 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   ddddg}t |dƒS )z1Return True is successful, otherwise return FalseZ	systemctlZrestartzsystemd-networkdzsystemd-resolvedr'   )r   )r)   r   r   r   r   r-   Ò   s    z)NetworkdActivator.bring_up_all_interfacesc             C   s   dddd| g}t || ƒS )z1Return True is successful, otherwise return FalserC   rD   rE   Zdown)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>   znetwork-managerÚnetworkd)rF   r>   znetwork-managerrG   )Úpriorityr   r   c                s>   dd„ | D ƒ}|rt d| ƒ‚dd„ | D ƒ}‡ fdd„|D ƒS )Nc             S   s   g | ]}|t kr|‘qS r   )ÚDEFAULT_PRIORITY)r#   r+   r   r   r   r,   ó   s    z$search_activator.<locals>.<listcomp>z0Unknown activators provided in priority list: %sc             S   s   g | ]}t | ‘qS r   )ÚNAME_TO_ACTIVATOR)r#   r*   r   r   r   r,   ø   s    c                s   g | ]}|j ˆ ƒr|‘qS r   )r   )r#   Zactivator_cls)r   r   r   r,   ú   s   )Ú
ValueError)rH   r   ÚunknownZactivator_classesr   )r   r   Úsearch_activatorð   s    

rM   c             C   s\   | d krt } t| |ƒ}|sBd}|r2|dkr2d| }td|| f ƒ‚|d }tjd|| ƒ |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   ÚfoundZtmsgZselectedr   r   r   Úselect_activator   s    

rQ   )NN)*ZloggingÚabcr   r   Ztypingr   r   r   r   r   r	   Z	cloudinitr
   r   Zcloudinit.net.enir   r3   Zcloudinit.net.netplanr?   r<   r5   Zcloudinit.net.network_stater   Zcloudinit.net.networkdrB   Z	getLoggerr   r   Ú	Exceptionr   r0   r   r   r2   r4   r=   rA   rI   rJ   r/   rM   rQ   r   r   r   r   Ú<module>   s:     
,(5