HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux spn-python 5.15.0-89-generic #99-Ubuntu SMP Mon Oct 30 20:42:41 UTC 2023 x86_64
User: arjun (1000)
PHP: 8.1.2-1ubuntu2.20
Disabled: NONE
Upload Files
File: //snap/core22/current/usr/lib/python3/dist-packages/cloudinit/net/__pycache__/eni.cpython-310.pyc
o

쑛hx`�
@s�ddlZddlZddlZddlZddlZddlZddlmZddlm	Z	m
Z
mZmZddl
mZmZmZddlmZmZmZmZmZmZmZddlmZe�e�Zgd�Zgd�Zgd	�Z d
e!de!de"d
ee#fdd�Z$d
e!de%dee#d
ee#fdd�Z&	d+d
e!de"d
ee#fdd�Z'de!de#de#de#d
df
dd�Z(e�)d�de#d
e!fd d!��Z*de!d
e!fd"d#�Z+d$e#de"d
e"fd%d&�Z,Gd'd(�d(ej-�Z-d
e"fd)d*�Z.dS),�N)�suppress)�Any�Dict�List�Optional)�performance�subp�util)�ParserError�is_ipv4_address�is_ipv4_network�is_ipv6_address�is_ipv6_network�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�ttl�iface�subnet�is_ipv6�returncCs�g}gd�}|��D]U\}}|dkrq
|dkr!d|d|df}|r_||vr_t|t�rB|dkr<tttjt|d�|��}d�|�}n
|dkrLt||�sLq
d	|vrV|�d	d
�}|�	d�
||��q
t|�S)N)
rrrr r!�pointopointr$�scope�
dns_search�dns_nameserversrrz%s/%s�prefixr:)r5� �_�-�    {0} {1})�items�
isinstance�list�filter�	functools�partial�has_same_ip_version�join�replace�append�format�sorted)r3r4r5�content�	valid_map�key�value�rP�3/usr/lib/python3/dist-packages/cloudinit/net/eni.py�_iface_add_subnetJs8
���
��rR�index�ipv4_subnet_mtucCs|dkrgSg}gd�}gd�}ddi}|ddvr|�d�|��D]c\}}|�||�}	d|	vr7|	�dd	�}	t|t�rD||rBd
nd}|rJ||vrKq#|dkr`|r`||kr_t�d
|d||�q#||vrs|D]}
|�d�|	|
��qfq#t|t	�r}d�
|�}|�d�|	|��q#t|�S)Nr)
�control�	device_id�dns�driverrS�inet�mode�name�subnets�type)�bridge_pathcost�bridge_portprio�bridge_waitport�mac_address�	hwaddressr])�bond�bridge�
infiniband�vlanr=r>�on�offr$zZNetwork config: ignoring %s device-level mtu:%s because ipv4 subnet-level mtu:%s provided.r[r?r<)rIr@�getrHrA�bool�LOG�warningrJrBrGrK)r3rSrTrL�
ignore_map�multiline_keys�renamesrNrO�	key_write�vrPrPrQ�_iface_add_attrsvsB

�

rrF�render_hwaddresscCs�|d}|d}|dkrd}n
|dvrd|}nd|}|��}|�||d��djdi|��d	jdi|��g}|rJ|�d
�rJ|�djdi|���|S)
Nr[rU�auto)�hotplugzallow-z
# control-)�fullname�cverbz{cverb} {fullname}ziface {fullname} {inet} {mode}raz    hwaddress {mac_address}rP)�copy�updaterJrirI)r3rSrsrvrUrw�subst�linesrPrPrQ�_iface_start_entry�s
�r|�ifaces�contents�src_dir�src_pathc
s<d}|��D�]}|��}|�d�rq|�d�}|d}|dkrd|d}|�d�s0tj�||�}t�|�D]-�t���}	�fdd	�|	D�}	|	D]}
t	�
|
���}tj�|
�}t||tj�
|�|�qGq5q|d
kr�|d}
|
�d�sxtj�||
�}
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||vr�td||f��|||d<|||d<|}q|dk�r|ddk�r|d}n|d}|||d<q|tv�r+|d|||<q|tv�rN|||v�r=g|||<|||�d�|dd���q|�d��r�d||v�rai||d<|dk�r�g||dd<|dd�D]}||dd�|��qtq|dk�r�g||dd<|dd�D]}||dd�|��q�q|�d��rbd||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�r=d%||dv�r.i||dd%<|d||dd%|d<q|d&k�rad'||dv�rSi||dd'<|d||dd'|d<q|�d(��r�d)||v�rui||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�#r<rzsource-directory��/cs@g|]}tj�tj��|��rt�d|�durtj��|��qS)z^[a-zA-Z0-9_-]+$N)�os�path�isfilerG�re�match)�.0r���
expanded_pathrPrQ�
<listcomp>�s��z*_parse_deb_config_data.<locals>.<listcomp>�source�rrt�_source_pathTr3��familyz:Interface %s can only be defined once. Re-defined in '%s'.�methodrb�ether�zdns-rWz
dns-search�searchzdns-nameservers�nameservers�bridge_rd��bridge_ports�ports�	bridge_hw�macr^�pathcostr_�portpriozbond-rcF)�
splitlines�strip�
startswith�splitr�r�rG�glob�listdirr	�load_text_file�abspath�_parse_deb_config_data�dirname�open�readr
�NET_CONFIG_OPTIONS�NET_CONFIG_COMMANDSrI�NET_CONFIG_BRIDGE_OPTIONSrH�lower�keys)r}r~rr��currif�liner��option�parsed_src_dir�dir_contents�entry�src_data�	abs_entry�new_src_path�fp�abs_pathr3r�r��val�domainr+�
bridge_option�bond_optionrPr�rQr��s�





����
�����

���



"
�
�

�


����r�zConverting eni data�eni_datacCsi}t||ddd�t|�S)z=Return a network config representation of what is in eni_data�None)rr�)r��_ifaces_to_net_config_data)r�r}rPrPrQ�convert_eni_dataXsr�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_data(...)
    config = ifaces_to_net_config_data(ifaces)
    state = parse_net_config_data(config).�:r�lo�loopback�physical)r]r[r\rbrar�)�_orig_eni_namer]rtrU�manual�staticr)rr!rrW)r�r��dns_r\r�csg|]}�|�qSrPrP)r��d��devsrPrQr���z._ifaces_to_net_config_data.<locals>.<listcomp>)�version�config)r@�	partitionrirIrK)r}r[�data�devname�dtyper4�copy_key�nrPr�rQr�`s6

��r��addr_or_netcCs$|s
t|�p	t|�St|�pt|�S�N)rrr
r)r�r5rPrPrQrF�srFc	@s�eZdZdZddeefdd�Zddeded	eefd
d�Z		dd
ede
d	eeefdd�Z	ddede
d	efdd�Z
		ddedeedeed	dfdd�ZdS)�Rendererz@Renders network information in a /etc/network/interfaces format.Nr�cCs6|si}|�dd�|_|�dd�|_|�dd�|_dS)N�eni_pathzetc/network/interfaces�
eni_header�
netrules_pathz(etc/udev/rules.d/70-persistent-net.rules)rir�r�r�)�selfr�rPrPrQ�__init__�s
�zRenderer.__init__r��route�indentr6cCsHg}|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�t||
�rb|	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 )r!r r�rz0.0.0.0rz defaultz::r;rz -A inet6 default)rr!r r!z%s %s %sz	 -A inet6� z -hostz -netz %s/%sz %s %s)r
rirI)r�r�r�rLrr�or_true�mapping�
default_gw�
route_line�krPrPrQ�
_render_route�sB�

��zRenderer._render_routeFr3rscs�t����tt��
��d�Wd�n1swYg}��di�}��dd�}��dd�}|r8d�d<|�r�d}g}t|�D�]\}	�d}
|	�d<�d�d	<��d
d��d
<d}t��rid
}|d7}nd}��d�}
|�d<�ddks��ddks��ddkr�d�d	<|dur�|r�dnd�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
<d�vp�d�v}
|dur�|
r�t�fd d!�d"D��}|dur�|
s�i��|��t	t
�|	|d#�t��|�t�|	|
��}��d$g�D]"}t
|�d%d&��}|�r/|�s/|�|��q|�|j|d'd(���q|�rU|�rU|D]
}|�|j|d'd(���qC|��|�|�qC|�r��d)�d
dd*d+��d|d,��|du�ryi��|��t	t
�d-|d#�t��d
��}�d$D]
}|�|j|d'd(���q�|�|�|Sg}d.�v�s�d/�v�r�|�d0jd4i����|�d1jd4i����|�t�d2dd3��|�|�|S)5N�	config_idr\z	accept-ra�	wakeonlan�gzethernet-wolrSr]rZrUrtrYT�6Fr$�dhcp4�dhcp6zipv6_dhcpv6-stateful�dhcp�1�0�	accept_razipv6_dhcpv6-stateless�
ipv6_slaacr�csg|]
}d�d|v�qS)zauto %sr[rP)r�r�)r3rPrQr�s�z*Renderer._render_iface.<locals>.<listcomp>�aliasr9r:c3s�|]
}|��|�fVqdSr�)ri)r�r�)r4rPrQ�	<genexpr>s
��
�z)Renderer._render_iface.<locals>.<genexpr>)r9r:�rs�routesrr�z    )r�r[�inet6)r[rUrZrY)r]r����zbond-masterzbond-slaveszauto {name}ziface {name} {inet} {mode}r)rSrTrP)rx�deepcopyr�KeyError�popri�	enumerater�dictrBr|rRrrrrI�extendr��clearrJ)r�r3rs�sectionsr\r��ethernet_wolrW�routes6rSrT�subnet_inetr5�dns_presentr{r��ipv6_networkrP)r3r4rQ�
_render_iface�s�

�

�

����
�
��
�

�
��
��
zRenderer._render_iface�
network_statec	sdddddd�gd�}|��D]}|�d�dkrt�|�}q|j}|r+||d	d
d<|j}|r8||d	d
d<d
d
ddddd��g}|�|�|��t|���fdd�d�D]}|�d�dkraqW|�|j||d��qW|�	�D]
}|�
|�|��qpd�dd�|D��dS)z1Given state, emit etc/network/interfaces content.r�r�rYr�rt)r]rU)r[r]rYr\r[r\rr:r9r�r��r��)r�r�rercrdrfcs�|d|dfS)Nr]r[rP)r���orderrPrQ�<lambda>{r�z-Renderer._render_interfaces.<locals>.<lambda>)rNr�z

cSsg|]}d�|��qS)�
)rG)r��srPrPrQr��sz/Renderer._render_interfaces.<locals>.<listcomp>r)
�iter_interfacesrirxr�r:�dns_searchdomainsr�rrK�iter_routesrIr�rG)	r�rrsr�r3r��
searchdomainsrr�rPrrQ�_render_interfacesSsH
�
��	

��zRenderer._render_interfaces�	templates�targetcCs�t�||j�}t�tj�|��|jr|jnd}t�	|||�
|��|jrCt�||j�}t�tj�|��tj	||�|�dd�dSdS)Nr�T)rL�
preserve_mode)
r�target_pathr�r	�
ensure_dirr�r�r�r��
write_filerr��_render_persistent_net)r�rrr�fpeni�header�netrulesrPrPrQ�render_network_state�s
��zRenderer.render_network_stater�)r��F)NN)�__name__�
__module__�__qualname__�__doc__rr�r��strrr�rjrrrrrPrPrPrQr��s@	5���

����
�9�����r�cCsFgd�}ddg}|D]}tj||d�sdSq
d}tj�|�s!dSdS)N)�ifquery�ifup�ifdownz/sbinz	/usr/sbin)r�Fz/etc/network/interfacesT)r�whichr�r�r�)�expectedr��p�enirPrPrQ�	available�s�r-r )/rxrDr��loggingr�r��
contextlibr�typingrrrr�	cloudinitrrr	�
cloudinit.netr
rrr
rrr�cloudinit.net.network_stater�	getLoggerr!rkr�r�r�r�rjr%rR�intrrr|r��timedr�r�rFr�r-rPrPrPrQ�<module>sj$	
	,���
�C���
�����
�)