U
    AdS                     @   sj   d dl Z d dlZd dlmZ d dlmZmZ d dlmZ dd Z	dd Z
d	d
 Ze	dZG dd dZdS )    N)Optional)NetworkStateparse_net_config_data)generate_udev_rulec                    s    fddS )Nc                    s    | d kS )Ntype ifaceZ
match_typer   8/usr/lib/python3/dist-packages/cloudinit/net/renderer.py<lambda>       z filter_by_type.<locals>.<lambda>r   r
   r   r
   r   filter_by_type   s    r   c                    s    fddS )Nc                    s    | d kS )Nnamer   r   Z
match_namer   r   r      r   z filter_by_name.<locals>.<lambda>r   r   r   r   r   filter_by_name   s    r   c                    s    fddS )Nc                    s    | ko|   S Nr   r   r   r   r   r      r   z filter_by_attr.<locals>.<lambda>r   r   r   r   r   filter_by_attr   s    r   Zphysicalc                   @   s\   e Zd ZdddZeedddZejdee	e
 dddd	Zde
e	e
 d
ddZdS )RendererNc                 C   s   d S r   r   )selfZconfigr   r   r   __init__    s    zRenderer.__init__)network_statec                 C   sZ   t  }| tD ]>}d|kr|dr|dd}|t|d |d |d q| S )z2Given state, emit udev rules to map mac to ifname.r   Zmac_addressdriverN)r   )ioStringIOZiter_interfacesfilter_by_physicalgetwriter   getvalue)r   Zcontentr	   r   r   r   r   _render_persistent_net#   s      zRenderer._render_persistent_net)r   	templatesreturnc                 C   s   dS )zRender network state.Nr   )r   r   r    targetr   r   r   render_network_state4   s    zRenderer.render_network_state)network_configr    c                 C   s   | j t|||dS )N)r   r    r"   )r#   r   )r   r$   r    r"   r   r   r   render_network_config=   s
    zRenderer.render_network_config)N)NN)NN)__name__
__module____qualname__r   staticmethodr   r   abcabstractmethodr   dictr#   r%   r   r   r   r   r      s"   
    r   )r*   r   typingr   Zcloudinit.net.network_stater   r   Zcloudinit.net.udevr   r   r   r   r   r   r   r   r   r   <module>   s   