o
    thj                     @   sZ   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	G d	d
 d
e j
ZdS )    N)Optional)NetworkState)generate_udev_rulec                        fddS )Nc                    s    | d kS )Ntype iface
match_typer   8/usr/lib/python3/dist-packages/cloudinit/net/renderer.py<lambda>   s    z filter_by_type.<locals>.<lambda>r   r
   r   r
   r   filter_by_type      r   c                    r   )Nc                    s    | v o|   S Nr   r   
match_namer   r   r      s    z filter_by_attr.<locals>.<lambda>r   r   r   r   r   filter_by_attr   r   r   c                   @   sN   e Zd ZdddZedefddZej		ddede	e
 ddfd	d
ZdS )RendererNc                 C   s   d S r   r   )selfconfigr   r   r   __init__   s   zRenderer.__init__network_statec                 C   s^   t  }| tdD ]}d|v r*|dr*|dd}|t|d |d |d q| S )z2Given state, emit udev rules to map mac to ifname.physicalnamemac_addressdriverN)r   )ioStringIOiter_interfacesr   getwriter   getvalue)r   contentr	   r   r   r   r   _render_persistent_net   s   zRenderer._render_persistent_net	templatesreturnc                 C   s   dS )zRender network state.Nr   )r   r   r%   targetr   r   r   render_network_state-   s    zRenderer.render_network_stater   )NN)__name__
__module____qualname__r   staticmethodr   r$   abcabstractmethodr   dictr(   r   r   r   r   r      s    
r   )r-   r   typingr   cloudinit.net.network_stater   cloudinit.net.udevr   r   r   ABCr   r   r   r   r   <module>   s   