HEX
Server: Apache/2.4.65 (Debian)
System: Linux kubikelcreative 5.10.0-35-amd64 #1 SMP Debian 5.10.237-1 (2025-05-19) x86_64
User: www-data (33)
PHP: 8.4.13
Disabled: NONE
Upload Files
File: //usr/lib/python3/dist-packages/cloudinit/net/__pycache__/eni.cpython-39.pyc
a

��`�S�@s�ddlZddlZddlZddlZddlmZddlmZddlmZddl	m
Zddl	mZddl	m
Z
e�e�Zgd	�Zgd
�Zgd�Zdd
�Zdd�Zd!dd�Zdd�Zdd�Zdd�Zdd�ZGdd�dej�Zd"dd�Zd#dd �ZdS)$�N�)�ParserError)�renderer)�subnet_is_ipv6)�log)�subp)�util)zpre-up�upzpost-up�downzpre-downz	post-down)�
bridge_ageing�bridge_bridgeprio�	bridge_fdZ
bridge_gcinit�bridge_hello�
bridge_maxage�bridge_maxwait�
bridge_stp)�address�netmask�	broadcast�network�metric�gatewayZpointtopointZmedia�mtu�hostnameZ
leasehoursZ	leasetime�vendor�clientZbootfile�server�hwaddr�provider�frameZnetnum�endpoint�localZttlcCs�g}gd�}|��D]v\}}|dkr&q|dkrBd|d|df}|r||vrt|�tkrdd�|�}d|vrx|�dd�}|�d	�||��qt|�S)
N)
rrrrrZpointopointr�scope�
dns_search�dns_nameserversrrz%s/%s�prefix� �_�-�    {0} {1})�items�type�list�join�replace�append�format�sorted)�iface�subnet�contentZ	valid_map�key�value�r7�3/usr/lib/python3/dist-packages/cloudinit/net/eni.py�_iface_add_subnet&s
r9c

Cs
|dkrgSg}gd�}gd�}ddi}|ddvr>|�d�|��D]�\}}t|�tkrj||rfdnd	}|rF||vrxqF|d
kr�|r�||krFt�d|d||�qF||vr�|D]}	|�d
�|�||�|	��q�qFt|�tkr�d�	|�}|�d
�|�||�|��qFt
|�S)Nr)	�control�	device_id�driver�index�inet�mode�name�subnetsr+)�bridge_pathcost�bridge_portprio�bridge_waitport�mac_address�	hwaddressr+)�bond�bridge�
infiniband�vlan�on�offrzZNetwork config: ignoring %s device-level mtu:%s because ipv4 subnet-level mtu:%s provided.r@r)r&)r/r*r+�bool�LOG�warningr0�getr,r-r1)
r2r=�ipv4_subnet_mtur4Z
ignore_mapZmultiline_keys�renamesr5r6�vr7r7r8�_iface_add_attrsDs8

�
rTFcCs�|d}|d}|dkrd}n|dvr0d|}nd|}|��}|�||d��djfi|��d	jfi|��g}|r�|�d
�r�|�djfi|���|S)Nr@r:�auto)Zhotplugzallow-z
# control-)�fullname�cverbz{cverb} {fullname}ziface {fullname} {inet} {mode}rEz    hwaddress {mac_address})�copy�updater0rPr/)r2r=�render_hwaddressrVr:rW�subst�linesr7r7r8�_iface_start_entry}s
�r]csvd}|��D�]8}|��}|�d�r&q|�d�}|d}|dkr�|d}|�d�s`tj�||�}t�|�D]��t���}	�fdd	�|	D�}	|	D]\}
t	|
d
��}|�
���}Wd�n1s�0Ytj�|
�}
t||tj�
|
�|
�q�qjq|dk�r�|d}|�d��stj�||�}t�|�D]`�t	�d
��}|�
���}Wd�n1�sX0Ytj���}t||tj�
|�|��q&q|dk�r�|dd�D](}||v�r�d
|i||<d||d<�q�q|dk�r<|dd�\}}}||v�rd
|i||<nd||v�rtd||f��|||d<|||d<|}q|dk�rt|ddk�r^|d}n|d}|||d<q|tv�r�|d|||<q|tv�r�|||v�r�g|||<|||�d�|dd���q|�d��r�d||v�r�i||d<|dk�rBg||dd<|dd�D]}||dd�|��q"nD|dk�rFg||dd<|dd�D]}||dd�|��qhq|�d��rd||v�r�i||d<|tv�r�|�ddd�}|d||d|<�qF|d k�r$g||dd!<|dd�D]}||dd!�|��qn�|d"k�rl|d��d#k�rV|d||dd#<n|d||dd#<n�|d$k�r�d%||dv�r�i||dd%<|d||dd%|d<nH|d&k�rFd'||dv�r�i||dd'<|d||dd'|d<q|�d(�rd)||v�r$i||d)<|�d(dd�}|d||d)|<q|��D] }d||v�rPd*||d<�qPdS)+a}Parses the file contents, placing result into ifaces.

    '_source_path' is added to every dictionary entry to define which file
    the configration 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�#r&rzsource-directoryr�/cs@g|]8}tj�tj��|��rt�d|�durtj��|��qS)z^[a-zA-Z0-9_-]+$N)�os�path�isfiler-�re�match)�.0ra�Z
expanded_pathr7r8�
<listcomp>�s�z*_parse_deb_config_data.<locals>.<listcomp>�r�sourcerUZ_source_pathTr2��familyz:Interface %s can only be defined once. Re-defined in '%s'.�methodrF�ether�zdns-�dnsz
dns-search�searchzdns-nameservers�nameserversZbridge_rH��bridge_portsZportsZ	bridge_hw�macrBZpathcostrCZportpriozbond-rGF)�
splitlines�strip�
startswith�splitr`rar-�glob�listdir�open�read�abspath�_parse_deb_config_data�dirnamer�NET_CONFIG_OPTIONS�NET_CONFIG_COMMANDSr/�NET_CONFIG_BRIDGE_OPTIONSr.�lower�keys)�ifaces�contents�src_dir�src_pathZcurrif�linerx�optionZparsed_src_dirZdir_contents�entry�fpZsrc_dataZ	abs_entryZnew_src_path�abs_pathr2rkrl�val�domainrZ
bridge_optionZbond_optionr7rfr8r~�s�




�*�

,�


�

�
��



"







r~cCs`i}t|d��}|����}Wd�n1s00Ytj�|�}t||tj�|�|�|S)z+Parses a debian network configuration file.rhN)r{r|rvr`rar}r~r)rar�r�r�r�r7r7r8�parse_deb_configs*�r�cCsi}t||ddd�t|�S)N)r�r�)r~�_ifaces_to_net_config_data)Zeni_datar�r7r7r8�convert_eni_data"sr�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("/etc/network/interfaces")
    config = ifaces_to_net_config_data(ifaces)
    state = parse_net_config_data(config).�:r�lo�loopback�physical)r+r@rArFrErl)Z_orig_eni_namer+rUr:�manual�staticr)rrrro)rqrpZdns_rArcsg|]}�|�qSr7r7)re�d��devsr7r8rgP�z._ifaces_to_net_config_data.<locals>.<listcomp>)�version�config)r*�	partitionrPr/r1)r�r@�data�devnameZdtyper3Zcopy_key�nr7r�r8r�)s6


�r�c@sBeZdZdZddd�Zddd�Zdd	d
�Zddd�Zdd
d�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)rPr�r�r�)�selfr�r7r7r8�__init__Vs�zRenderer.__init__rrcCs0g}|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|
dkr�d||
vr�|	d7}	n|	d7}	d
|vr�|	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)rrrrrz0.0.0.0rz defaultz::r%rz -A inet6 default)rrrrz%s %s %sr�z	 -A inet6z -netz %s/%sz %s %s)r/)r��route�indentr4r	r
Zor_true�mappingZ
default_gwZ
route_line�kr7r7r8�
_render_route^s:�
zRenderer._render_routeFc
s4g}��di�}��dd�}��dd�}|r4d�d<|�r�t|�D�]�\}}d}	|�d<|d�d<|�d	d
��d	<d}
t|�r�|
d7}
n
|�d
�}	|
�d<|ddks�|ddks�|ddkr�d�d<|dur�|r�dnd�d<nn|ddk�rd
�d<d�d<nN|ddk�r"d
�d<d�d<n.t|��rPd�d<|du�rP|�rHdnd�d<d�fdd�|D�v�rpd�d	<tt�||d�t�|�t�||	��}|�dg�D]}|�|j	|dd���q�|�
|�qBnbg}d �v�s�d!�v�r�|�
d"jfi����|�
d#jfi����|�t�d$dd%��|�
|�|S)&NrAz	accept-ra�	wakeonlan�gzethernet-wolr=r+r?r:rUr>�6r�dhcp4�dhcp6zipv6_dhcpv6-statefulZdhcp�1�0�	accept_razipv6_dhcpv6-stateless�
ipv6_slaacr�Tcsg|]}d�d|v�qS)zauto %sr@r7)rer��r2r7r8rg�s�z*Renderer._render_iface.<locals>.<listcomp>�alias�rZ�routesz    )r�zbond-masterzbond-slaveszauto {name}ziface {name} {inet} {mode}r)r=rQ)rP�pop�	enumeraterr,r]r9rT�extendr�r/r0)
r�r2rZ�sectionsrAr�Zethernet_wolr=r3rQZsubnet_inetr\r�r7r�r8�
_render_iface�st


�



�
��
���
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�r>r�rU)r+r:)r@r+r>rAr@r&rArr$r#rrn�rj�)r�r�rIrGrHrJcs�|d|dfS)Nr+r@r7)r���orderr7r8�<lambda>�r�z-Renderer._render_interfaces.<locals>.<lambda>)r5r�z

cSsg|]}d�|��qS)�
)r-)re�sr7r7r8rgr�z/Renderer._render_interfaces.<locals>.<listcomp>r�)
�iter_interfacesrPrX�deepcopyr$r-�dns_searchdomainsr�r�r1�iter_routesr/r�)	r��
network_staterZr�r2rqZ
searchdomainsr�r�r7r�r8�_render_interfaces�s@
��	
�
�zRenderer._render_interfacescCs�t�||j�}t�tj�|��|jr,|jnd}t�	|||�
|��|jr~t�||j�}t�tj�|��t�	||�|��dS)Nrr)
r�target_pathr�r�
ensure_dirr`rarr��
write_filer�r�Z_render_persistent_net)r�r��	templates�targetZfpeni�headerZnetrulesr7r7r8�render_network_states�zRenderer.render_network_state)N)rr)F)F)NN)	�__name__�
__module__�__qualname__�__doc__r�r�r�r�r�r7r7r7r8r�Ss

2
G
-r�cCsFd}t||dd�d�}|sd}|�d�s0|d7}|j||d�}||S)Nr�)r�r�r�)r�rrr�r�)r��endswithr�)r�r�rZr�rr�r7r7r8�network_state_to_enis�

�r�cCsPgd�}ddg}|D]}tj|||d�sdSqt�|d�}tj�|�sLdSdS)N)Zifquery�ifupZifdownz/sbinz	/usr/sbin)rpr�Fr�T)r�whichr�r`rarb)r��expectedrp�p�enir7r7r8�	available"sr�)F)NF)N)rXryr`rcrrrrr�r�	cloudinitr�loggingrr�	getLoggerr�rNr�r�r�r9rTr]r~r�r�r�r�r�r�r7r7r7r8�<module>s2
	9
*?