o
    f                     @   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                        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   physicalc                   @   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   sZ   t  }| tD ]}d|v r(|dr(|dd}|t|d |d |d q	| S )z2Given state, emit udev rules to map mac to ifname.namemac_addressdriverN)r   )ioStringIOiter_interfacesfilter_by_physical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_state0   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   r    ABCr   r   r   r   r   <module>   s   