U
    Ld                     @   sb   d dl Z d dlZd dlmZ d dlmZ d dlmZ dd Zdd Z	ed	Z
G d
d de jZdS )    N)Optional)NetworkState)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    | ko|   S Nr   r   Z
match_namer   r
   r      r   z filter_by_attr.<locals>.<lambda>r   r   r   r   r
   filter_by_attr   s    r   Zphysicalc                   @   sF   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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.nameZ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_state0   s    zRenderer.render_network_state)N)NN)__name__
__module____qualname__r   staticmethodr   r   abcabstractmethodr   dictr!   r   r   r   r
   r      s   
  r   )r&   r   typingr   Zcloudinit.net.network_stater   Zcloudinit.net.udevr   r   r   r   ABCr   r   r   r   r
   <module>   s   