name : eni.cpython-39.pyc
a

'�Dg�S�@s�ddlZddlZddlZddlZddlZddlmZddlmZddl	m
Z
mZmZddl
mZmZmZddlmZe�e�Zgd�Zgd�Zgd	�Zd
d�Zdd
�Zddd�Zdd�Ze
�d�dd��Zdd�ZGdd�dej �Z ddd�Z!dS)�N)�suppress)�Optional)�performance�subp�util)�ParserError�renderer�subnet_is_ipv6)�NetworkState)zpre-up�upzpost-up�downzpre-downz	post-down)Z
bridge_ageingZbridge_bridgeprioZ	bridge_fdZ
bridge_gcinitZbridge_helloZ
bridge_maxageZbridge_maxwaitZ
bridge_stp)�address�netmask�	broadcast�network�metric�gatewayZpointtopointZmedia�mtu�hostnameZ
leasehoursZ	leasetimeZvendorZclientZbootfile�serverZhwaddrZprovider�frameZnetnumZendpoint�localZttlcCs�g}gd�}|��D]t\}}|dkr&q|dkrBd|d|df}|r||vrt|t�rbd�|�}d|vrv|�dd�}|�d	�||��qt|�S)
N)
r
rrrrZpointopointrZscope�
dns_search�dns_nameserversrr
z%s/%s�prefix� �_�-�    {0} {1})�items�
isinstance�list�join�replace�append�format�sorted)�iface�subnet�contentZ	valid_map�key�value�r,�5/usr/lib/python3.9/site-packages/cloudinit/net/eni.py�_iface_add_subnetAs

r.c

Cs|dkrgSg}gd�}gd�}ddi}|ddvr>|�d�|��D]�\}}t|t�rh||rddnd	}|rF||vrvqF|d
kr�|r�||krFt�d|d||�qF||vr�|D]}	|�d
�|�||�|	��q�qFt|t�r�d�	|�}|�d
�|�||�|��qFt
|�S)Nr)	�controlZ	device_idZdriver�index�inet�mode�name�subnets�type)�bridge_pathcost�bridge_portprioZbridge_waitport�mac_address�	hwaddressr5)�bond�bridge�
infiniband�vlanZonZoffrzZNetwork config: ignoring %s device-level mtu:%s because ipv4 subnet-level mtu:%s provided.r3rr)r$rr �bool�LOGZwarningr%�getr!r"r&)
r'r0�ipv4_subnet_mtur)Z
ignore_mapZmultiline_keys�renamesr*r+�vr,r,r-�_iface_add_attrs_s<

�

rDFcCs�|d}|d}|dkrd}n|dvr0d|}nd|}|��}|�||d��djfi|��d	jfi|��g}|r�|�d
�r�|�djfi|���|S)Nr3r/�auto)Zhotplugzallow-z
# control-)�fullname�cverbz{cverb} {fullname}ziface {fullname} {inet} {mode}r8z    hwaddress {mac_address})�copy�updater%r@r$)r'r0�render_hwaddressrFr/rG�subst�linesr,r,r-�_iface_start_entry�s
�rMc
sJd}|��D�]}|��}|�d�r&q|�d�}|d}|dkr�|d}|�d�s`tj�||�}t�|�D]Z�t���}	�fdd	�|	D�}	|	D]4}
t	�
|
���}tj�|
�}t||tj�
|�|�q�qjq|d
k�r^|d}
|
�d�s�tj�||
�}
t�|
�D]^�t�d��}|����}Wd�n1�s.0Ytj���}t||tj�
|�|�q�q|dk�r�|dd�D](}||v�r�d
|i||<d||d<�qtq|dk�r|dd�\}}}||v�r�d
|i||<nd||v�r�td||f��|||d<|||d<|}q|dk�rH|ddk�r2|d}n|d}|||d<q|tv�rd|d|||<q|tv�r�|||v�r�g|||<|||�d�|dd���q|�d��r\d||v�r�i||d<|dk�rg||dd<|dd�D]}||dd�|��q�nD|dk�rg||dd<|dd�D]}||dd�|��q<q|�d��r�d||v�r�i||d<|tv�r�|�ddd�}|d||d|<�q|d k�r�g||dd!<|dd�D]}||dd!�|��q�n�|d"k�r@|d��d#k�r*|d||dd#<n|d||dd#<n�|d$k�r�d%||dv�rli||dd%<|d||dd%|d<nH|d&k�rd'||dv�r�i||dd'<|d||dd'|d<q|�d(�rd)||v�r�i||d)<|�d(dd�}|d||d)|<q|��D] }d||v�r$d*||d<�q$dS)+a~Parses the file contents, placing result into ifaces.

    '_source_path' is added to every dictionary entry to define which file
    the configuration information came from.

    :param ifaces: interface dictionary
    :param contents: contents of interfaces file
    :param src_dir: directory interfaces file was located
    :param src_path: file path the `contents` was read
    N�#rrzsource-directory��/cs@g|]8}tj�tj��|��rt�d|�durtj��|��qS)z^[a-zA-Z0-9_-]+$N)�os�path�isfiler"�re�match)�.0rR�Z
expanded_pathr,r-�
<listcomp>�s�z*_parse_deb_config_data.<locals>.<listcomp>�source�rrEZ_source_pathTr'��familyz:Interface %s can only be defined once. Re-defined in '%s'.�methodr9Zether�zdns-�dnsz
dns-search�searchzdns-nameservers�nameserversZbridge_r;�Zbridge_portsZportsZ	bridge_hwZmacr6Zpathcostr7Zportpriozbond-r:F)�
splitlines�strip�
startswith�splitrQrRr"�glob�listdirrZload_text_file�abspath�_parse_deb_config_data�dirname�open�readr�NET_CONFIG_OPTIONS�NET_CONFIG_COMMANDSr$�NET_CONFIG_BRIDGE_OPTIONSr#�lower�keys)�ifaces�contents�src_dir�src_pathZcurrif�linerf�optionZparsed_src_dirZdir_contents�entryZsrc_dataZ	abs_entryZnew_src_path�fpZabs_pathr'r\r]�val�domainrZ
bridge_optionZbond_optionr,rWr-rj�s�




��


,�

�

�
��



"







rjzConverting eni datacCsi}t||ddd�t|�S)z=Return a network config representation of what is in eni_dataN)rurv)rj�_ifaces_to_net_config_data)Zeni_datarsr,r,r-�convert_eni_data7sr~cs8i�|��D�]\}}|�d�d}|�vrf|dkr:d}nd}||gd��|<d|vrf|d�|d<||d	d
�}|�d�r�d|d<nd
|d<|�d	�dkr�|d|d<dD]}||vr�||||<q�d|v�rdD]0}||dvr�|d|r�|d||d|<qֈ|d�|�qd�fdd�t��D�d�S)z�Return network config that represents the ifaces data provided.
    ifaces = _parse_deb_config_data(...)
    config = ifaces_to_net_config_data(ifaces)
    state = parse_net_config_data(config).�:r�lo�loopback�physical)r5r3r4r9r8r])Z_orig_eni_namer5rEr/Zmanual�staticr
)rrrr_)rar`Zdns_r4rOcsg|]}�|�qSr,r,)rV�d�Zdevsr,r-rXe�z._ifaces_to_net_config_data.<locals>.<listcomp>)�version�config)r�	partitionr@r$r&)rsr3�dataZdevnameZdtyper(Zcopy_key�nr,r�r-r}?s2


r}c@sPeZdZdZddd�Zddd�Zdd	d
�Zddd�Zdee	e
dd
�dd�ZdS)�Rendererz@Renders network information in a /etc/network/interfaces format.NcCs6|si}|�dd�|_|�dd�|_|�dd�|_dS)N�eni_path�etc/network/interfaces�
eni_header�
netrules_pathz(etc/udev/rules.d/70-persistent-net.rules)r@r�r�r�)�selfr�r,r,r-�__init__ks�zRenderer.__init__rbcCsLg}|d}|d}d}ddd�}d}|dd	krD|d
d	krDd}n|ddkr`|d
dkr`d}d}	dD]�}
|rz|
dkrzqh|
dkr�|	d|||
||
f7}	qh|
|vrh|
dk�r
d||
vr�|	d7}	n |�d
�dkr�|	d7}	n|	d7}	d
|v�r"|	d||
|d
f7}	qh|	d||
||
f7}	qh|�||	|�|�||	|�|S)a�When rendering routes for an iface, in some cases applying a route
        may result in the route command returning non-zero which produces
        some confusing output for users manually using ifup/ifdown[1].  To
        that end, we will optionally include an '|| true' postfix to each
        route line allowing users to work with ifup/ifdown without using
        --force option.

        We may at somepoint not want to emit this additional postfix, and
        add a 'strict' flag to this function.  When called with strict=True,
        then we will not append the postfix.

        1. http://askubuntu.com/questions/168033/
                 how-to-set-static-routes-in-ubuntu-server
        zpost-up route addzpre-down route delz || trueZgwr)rrrbrz0.0.0.0rz defaultz::rrz -A inet6 default)rrrrz%s %s %srz	 -A inet6� z -hostz -netz %s/%sz %s %s)r@r$)r��route�indentr)rrZor_true�mappingZ
default_gwZ
route_line�kr,r,r-�
_render_routets>�



zRenderer._render_routeFc
svt����tt����d�Wd�n1s20Yg}��di�}��dd�}��dd�}|rpd�d<|�rt|�D�]�\}}d}	|�d<|d�d	<|�d
d��d
<d}
t|�r�|
d
7}
n
|�d�}	|
�d<|ddks�|ddks�|ddk�r$d�d	<|du�r�|�rdnd�d<nn|ddk�rDd�d	<d�d<nN|ddk�rdd�d	<d�d<n.t|��r�d�d	<|du�r�|�r�dnd�d<d�fdd�|D�v�r�d�d
<tt	�||d�t
�|�t�||	��}|�dg�D]}|�|j
|dd ���q�|�|�q~nbg}d!�v�s(d"�v�r>|�d#jfi����|�d$jfi����|�t�d%dd&��|�|�|S)'NZ	config_idr4z	accept-raZ	wakeonlan�gzethernet-wolr0r5r2r/rEr1�6rZdhcp4Zdhcp6zipv6_dhcpv6-statefulZdhcp�1�0�	accept_razipv6_dhcpv6-statelessZ
ipv6_slaacr�Tcsg|]}d�d|v�qS)zauto %sr3r,)rVrw�r'r,r-rX�sz*Renderer._render_iface.<locals>.<listcomp>�alias�rJZroutesz    )r�zbond-masterzbond-slaveszauto {name}ziface {name} {inet} {mode}r)r0rA)rH�deepcopyr�KeyError�popr@�	enumerater	r!rMr.rD�extendr�r$r%)
r�r'rJ�sectionsr4r�Zethernet_wolr0r(rAZsubnet_inetrLr�r,r�r-�
_render_iface�s�

(


�
�
�




�
��
���
zRenderer._render_ifacec	sdddddd�gd�}|��D]}|�d�dkrt�|�}q|j}|r\d	�|�|d
dd<|j}|r|d	�|�|d
dd
<ddddddd��g}|�|�|��t	|���fdd�d�D](}|�d�dkr�q�|�|j||d��q�|�
�D]}|�|�|��q�d�dd�|D��dS)z1Given state, emit etc/network/interfaces content.r�r�r1r�rE)r5r/)r3r5r1r4r3rr4rrrrOr^�r[�)r�r�r<r:r;r=cs�|d|dfS)Nr5r3r,)r���orderr,r-�<lambda> r�z-Renderer._render_interfaces.<locals>.<lambda>)r*r�z

cSsg|]}d�|��qS)�
)r")rV�sr,r,r-rX,r�z/Renderer._render_interfaces.<locals>.<listcomp>r�)
Ziter_interfacesr@rHr�rr"Zdns_searchdomainsr�r�r&Ziter_routesr$r�)	r��
network_staterJr�r'raZ
searchdomainsr�r�r,r�r-�_render_interfaces�sF
��	
�
�zRenderer._render_interfaces)r��	templates�returncCs�t�||j�}t�tj�|��|jr,|jnd}t�	|||�
|��|jr�t�||j�}t�tj�|��tj	||�|�dd�dS)NrbT)r)Z
preserve_mode)
r�target_pathr�rZ
ensure_dirrQrRrkr�Z
write_filer�r�Z_render_persistent_net)r�r�r��targetZfpeni�headerZnetrulesr,r,r-�render_network_state.s�zRenderer.render_network_state)N)rb)F)F)NN)�__name__�
__module__�__qualname__�__doc__r�r�r�r�r
r�dictr�r,r,r,r-r�hs
	
4
R
7��r�cCsPgd�}ddg}|D]}tj|||d�sdSqt�|d�}tj�|�sLdSdS)N)ZifqueryZifupZifdownz/sbinz	/usr/sbin)r`r�Fr�T)r�whichr�rQrRrS)r�Zexpectedr`�pZenir,r,r-�	availableCsr�)F)N)"rHrgZloggingrQrT�
contextlibr�typingrZ	cloudinitrrrZ
cloudinit.netrrr	Zcloudinit.net.network_stater
Z	getLoggerr�r?rorprnr.rDrMrjZtimedr~r}r�r�r,r,r,r-�<module>s0
	<

)\

© 2025 Cubjrnet7