HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux ip-10-0-8-47 6.8.0-1021-aws #23~22.04.1-Ubuntu SMP Tue Dec 10 16:31:58 UTC 2024 aarch64
User: ubuntu (1000)
PHP: 8.1.2-1ubuntu2.22
Disabled: NONE
Upload Files
File: //lib/python3/dist-packages/cloudinit/net/__pycache__/eni.cpython-310.pyc
o

�AdAV�@s�ddlZddlZddlZddlZddlmZddlmZddlm	Z	m
Z
ddlmZm
Z
mZddlmZe�e�Zgd�Zgd�Zgd	�Zd
d�Zdd
�Zddd�Zdd�Zdd�Zdd�Zdd�ZGdd�de
j�Zd dd�Zd!dd�Z dS)"�N)�Optional)�log)�subp�util)�ParserError�renderer�subnet_is_ipv6)�NetworkState)zpre-up�upzpost-up�downzpre-downz	post-down)�
bridge_ageing�bridge_bridgeprio�	bridge_fd�
bridge_gcinit�bridge_hello�
bridge_maxage�bridge_maxwait�
bridge_stp)�address�netmask�	broadcast�network�metric�gateway�pointtopoint�media�mtu�hostname�
leasehours�	leasetime�vendor�client�bootfile�server�hwaddr�provider�frame�netnum�endpoint�local�ttlcCs�g}gd�}|��D];\}}|dkrq
|dkr!d|d|df}|rE||vrEt|�tkr2d�|�}d|vr<|�dd�}|�d	�||��q
t|�S)
N)
rrrrr�pointopointr�scope�
dns_search�dns_nameserversrrz%s/%s�prefix� �_�-�    {0} {1})�items�type�list�join�replace�append�format�sorted)�iface�subnet�content�	valid_map�key�value�rB�3/usr/lib/python3/dist-packages/cloudinit/net/eni.py�_iface_add_subnet@s
�rDc

Cs
|dkrgSg}gd�}gd�}ddi}|ddvr|�d�|��D]]\}}t|�tkr5||r3dnd	}|r;||vr<q#|d
krQ|rQ||krPt�d|d||�q#||vrh|D]}	|�d
�|�||�|	��qWq#t|�tkrsd�	|�}|�d
�|�||�|��q#t
|�S)Nr)	�control�	device_id�driver�index�inet�mode�name�subnetsr5)�bridge_pathcost�bridge_portprio�bridge_waitport�mac_address�	hwaddressr5)�bond�bridge�
infiniband�vlan�on�offrzZNetwork config: ignoring %s device-level mtu:%s because ipv4 subnet-level mtu:%s provided.rKr3r0)r9r4r5�bool�LOG�warningr:�getr6r7r;)
r<rH�ipv4_subnet_mtur>�
ignore_map�multiline_keys�renamesr@rA�vrBrBrC�_iface_add_attrs^s<
�
raFcCs�|d}|d}|dkrd}n
|dvrd|}nd|}|��}|�||d��djdi|��d	jdi|��g}|rJ|�d
�rJ|�djdi|���|S)
NrKrE�auto)�hotplugzallow-z
# control-)�fullname�cverbz{cverb} {fullname}ziface {fullname} {inet} {mode}rPz    hwaddress {mac_address}rB)�copy�updater:r[r9)r<rH�render_hwaddressrdrEre�subst�linesrBrBrC�_iface_start_entry�s
�rkcsfd}|��D�]�}|��}|�d�rq|�d�}|d}|dkrx|d}|�d�s0tj�||�}t�|�D]A�t���}	�fdd	�|	D�}	|	D].}
t	|
d
��}|�
���}Wd�n1s_wYtj�|
�}
t||tj�
|
�|
�qGq5q|dkr�|d}|�d�s�tj�||�}t�|�D].�t	�d
��}|�
���}Wd�n1s�wYtj���}t||tj�
|�|�q�q|dkr�|dd�D]}||vr�d
|i||<d||d<q�q|dk�r|dd�\}}}||vr�d
|i||<nd||v�rtd||f��|||d<|||d<|}q|dk�r2|ddk�r'|d}n|d}|||d<q|tv�r@|d|||<q|tv�rc|||v�rRg|||<|||�d�|dd���q|�d��r�d||v�rvi||d<|dk�r�g||dd<|dd�D]}||dd�|��q�q|dk�r�g||dd<|dd�D]}||dd�|��q�q|�d��rwd||v�r�i||d<|tv�r�|�ddd�}|d||d|<q|d k�r	g||dd!<|dd�D]}||dd!�|��q�q|d"k�r-|d��d#k�r"|d||dd#<q|d||dd#<q|d$k�rRd%||dv�rCi||dd%<|d||dd%|d<q|d&k�rvd'||dv�rhi||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 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�#r0rzsource-directory��/cs@g|]}tj�tj��|��rt�d|�durtj��|��qS)z^[a-zA-Z0-9_-]+$N)�os�path�isfiler7�re�match)�.0rp��
expanded_pathrBrC�
<listcomp>�s���z*_parse_deb_config_data.<locals>.<listcomp>�r�sourcerb�_source_pathTr<��familyz:Interface %s can only be defined once. Re-defined in '%s'.�methodrQ�ether�zdns-�dnsz
dns-search�searchzdns-nameservers�nameservers�bridge_rS��bridge_ports�ports�	bridge_hw�macrM�pathcostrN�portpriozbond-rRF)�
splitlines�strip�
startswith�splitrorpr7�glob�listdir�open�read�abspath�_parse_deb_config_data�dirnamer�NET_CONFIG_OPTIONS�NET_CONFIG_COMMANDSr9�NET_CONFIG_BRIDGE_OPTIONSr8�lower�keys)�ifaces�contents�src_dir�src_path�currif�liner��option�parsed_src_dir�dir_contents�entry�fp�src_data�	abs_entry�new_src_path�abs_pathr<r|r}�val�domainr#�
bridge_option�bond_optionrBrurCr��s�




�����
�����

���



"
�
�

�


����r�cCs`i}t|d��}|����}Wd�n1swYtj�|�}t||tj�|�|�|S)z+Parses a debian network configuration file.rxN)r�r�r�rorpr�r�r�)rpr�r�r�r�rBrBrC�parse_deb_config7s��r�cCsi}t||ddd�t|�S)N)r�r�)r��_ifaces_to_net_config_data)�eni_datar�rBrBrC�convert_eni_dataCsr�cs4i�|��D]�\}}|�d�d}|�vr2|dkrd}nd}||gd��|<d|vr2|d�|d<||d	d
�}|�d�rCd|d<nd
|d<|�d	�dkrT|d|d<dD]}||vrb||||<qVd|vr�dD]}||dvr�|d|r�|d||d|<qi�|d�|�qd�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)r5rKrLrQrPr})�_orig_eni_namer5rbrE�manual�staticr)rrrr�)r�r��dns_rLrmcsg|]}�|�qSrBrB)rt�d��devsrBrCrwp�z._ifaces_to_net_config_data.<locals>.<listcomp>)�version�config)r4�	partitionr[r9r;)r�rK�data�devname�dtyper=�copy_key�nrBr�rCr�Js6

��r�c@sXeZdZdZddd�Zddd�Zdd	d
�Zddd�Z		dd
ede	e
ddfdd�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�rBrBrC�__init__vs
�zRenderer.__init__r�cCsHg}|d}|d}d}ddd�}d}|dd	kr"|d
d	kr"d}n|ddkr0|d
dkr0d}d}	dD][}
|r=|
dkr=q4|
dkrO|	d|||
||
f7}	q4|
|vr�|
dkr�d||
vrb|	d7}	n|�d
�dkrn|	d7}	n|	d7}	d
|vr�|	d||
|d
f7}	q4|	d||
||
f7}	q4|�||	|�|�||	|�|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 || true�gwr)rrr�rz0.0.0.0rz defaultz::r/rz -A inet6 default)rrrrz%s %s %sr�z	 -A inet6� z -hostz -netz %s/%sz %s %s)r[r9)r��route�indentr>r
r�or_true�mapping�
default_gw�
route_line�krBrBrC�
_render_routesB�

��zRenderer._render_routeFc
s g}��di�}��dd�}��dd�}|rd�d<|r�t|�D]�\}}d}	|�d<|d�d<|�d	d
��d	<d}
t|�rC|
d7}
n|�d
�}	|
�d<|ddks^|ddks^|ddkrod�d<|durn|rjdnd�d<n2|ddkr~d
�d<d�d<n#|ddkr�d
�d<d�d<nt|�r�d�d<|dur�|r�dnd�d<d�fdd�|D�vr�d�d	<tt�||d�t�|�t�||	��}|�dg�D]}|�|j	|dd��q�|�
|�q |Sg}d �vs�d!�vr�|�
d"jd&i����|�
d#jd&i����|�t�d$dd%��|�
|�|S)'NrLz	accept-ra�	wakeonlan�gzethernet-wolrHr5rJrErbrI�6r�dhcp4�dhcp6zipv6_dhcpv6-stateful�dhcp�1�0�	accept_razipv6_dhcpv6-stateless�
ipv6_slaacr�Tcsg|]
}d�d|v�qS)zauto %srKrB)rtr��r<rBrCrw�s�z*Renderer._render_iface.<locals>.<listcomp>�alias�rh�routesz    )r�zbond-masterzbond-slaveszauto {name}ziface {name} {inet} {mode}r)rHr\rB)r[�pop�	enumeraterr6rkrDra�extendr�r9r:)
r�r<rh�sectionsrLr��ethernet_wolrHr=r\�subnet_inetrjr�rBr�rC�
_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�dkrgq]|�|j||d��q]|�
�D]
}|�|�|��qvd�dd�|D��dS)z1Given state, emit etc/network/interfaces content.r�r�rIr�rb)r5rE)rKr5rIrLrKr0rLrr.r-rmr�r{�)r�r�rTrRrSrUcs�|d|dfS)Nr5rKrB)r���orderrBrC�<lambda>&r�z-Renderer._render_interfaces.<locals>.<lambda>)r@r�z

cSsg|]}d�|��qS)�
)r7)rt�srBrBrCrw2sz/Renderer._render_interfaces.<locals>.<listcomp>r�)
�iter_interfacesr[rf�deepcopyr.r7�dns_searchdomainsr�r�r;�iter_routesr9r�)	r��
network_staterhr�r<r��
searchdomainsr�r�rBr�rC�_render_interfacessH
�
��	

��zRenderer._render_interfacesr��	templates�returncCs�t�||j�}t�tj�|��|jr|jnd}t�	|||�
|��|jrAt�||j�}t�tj�|��t�	||�|��dSdS)Nr�)
r�target_pathr�r�
ensure_dirrorpr�r��
write_filer�r��_render_persistent_net)r�r�r��target�fpeni�header�netrulesrBrBrC�render_network_state4s
��zRenderer.render_network_state�N)r��F)NN)�__name__�
__module__�__qualname__�__doc__r�r�r�r�r	r�dictrrBrBrBrCr�ss

	
4
M7����r�cCsFd}t||dd�d�}|sd}|�d�s|d7}|j||d�}||S)Nr�)r�r�r�)r�r�r�r�)r��endswithr�)r�rrhr�rr�rBrBrC�network_state_to_eniGs��
�r
cCsPgd�}ddg}|D]
}tj|||d�sdSq
t�|d�}tj�|�s&dSdS)N)�ifquery�ifup�ifdownz/sbinz	/usr/sbin)r�rFr�T)r�whichr�rorprq)r�expectedr��p�enirBrBrC�	available[s�rr)NFr)!rfr�rorr�typingr�	cloudinitr�loggingrr�
cloudinit.netrrr�cloudinit.net.network_stater	�	getLoggerrrYr�r�r�rDrarkr�r�r�r�r�r
rrBrBrBrC�<module>s2
	
<)
U