Your IP : 216.73.217.13


Current Path : /proc/thread-self/root/lib/python3/dist-packages/cloudinit/net/__pycache__/
Upload File :
Current File : //proc/thread-self/root/lib/python3/dist-packages/cloudinit/net/__pycache__/eni.cpython-38.pyc

U

�AdAV�@s,ddlZddlZddlZddlZddlmZddlmZddlm	Z	m
Z
ddlmZm
Z
mZddlmZe�e�Zddd	d
ddgZd
dddddddgZdddddddddddd d!d"d#d$d%d&d'd(d)d*d+gZd,d-�Zd.d/�ZdAd1d2�Zd3d4�Zd5d6�Zd7d8�Zd9d:�ZGd;d<�d<e
j�ZdBd=d>�ZdCd?d@�Z dS)D�N)�Optional)�log)�subp�util)�ParserError�renderer�subnet_is_ipv6)�NetworkStatezpre-up�upzpost-up�downzpre-downz	post-downZ
bridge_ageingZbridge_bridgeprioZ	bridge_fdZ
bridge_gcinitZbridge_helloZ
bridge_maxageZbridge_maxwaitZ
bridge_stp�address�netmask�	broadcast�network�metric�gatewayZpointtopointZmedia�mtuZhostnameZ
leasehoursZ	leasetimeZvendorZclientZbootfile�serverZhwaddrZprovider�frameZnetnumZendpointZlocalZttlc
Cs�g}ddddddddd	d
g
}|��D]v\}}|dkr6q$|dkrRd|d|df}|r$||kr$t|�tkrtd
�|�}d|kr�|�dd�}|�d�||��q$t|�S)Nrr
rrrZpointopointrZscope�
dns_search�dns_nameserversz%s/%s�prefix� �_�-�    {0} {1})�items�type�list�join�replace�append�format�sorted)�iface�subnet�contentZ	valid_map�key�value�r)�3/usr/lib/python3/dist-packages/cloudinit/net/eni.py�_iface_add_subnet@s0�
r+c

Cs|dkrgSg}dddddddd	d
g	}ddd
g}ddi}|d
dkrN|�d�|��D]�\}}t|�tkrz||rvdnd}|rV||kr�qV|dkr�|r�||krVt�d|d||�qV||kr�|D]}	|�d�|�||�|	��q�qVt|�tkr�d�	|�}|�d�|�||�|��qVt
|�S)Nr�controlZ	device_idZdriver�index�inet�mode�name�subnetsr�bridge_pathcost�bridge_portprioZbridge_waitport�mac_address�	hwaddress)�bond�bridge�
infiniband�vlanZonZoffrzZNetwork config: ignoring %s device-level mtu:%s because ipv4 subnet-level mtu:%s provided.rr)r!rr�bool�LOGZwarningr"�getrrr#)
r$r-�ipv4_subnet_mtur&Z
ignore_mapZmultiline_keys�renamesr'r(�vr)r)r*�_iface_add_attrs^sT��
�
r@FcCs�|d}|d}|dkrd}n|dkr0d|}nd|}|��}|�||d��djf|�d	jf|�g}|r�|�d
�r�|�djf|��|S)Nr0r,�auto)Zhotplugzallow-z
# control-)�fullname�cverbz{cverb} {fullname}ziface {fullname} {inet} {mode}r4z    hwaddress {mac_address})�copy�updater"r<r!)r$r-�render_hwaddressrBr,rCZsubst�linesr)r)r*�_iface_start_entry�s


�rHcsLd}|��D�]}|��}|�d�r&q|�d�}|d}|dkr�|d}|�d�s`tj�||�}t�|�D]n�t���}	�fdd	�|	D�}	|	D]H}
t	|
d
��}|�
���}W5QRXtj�|
�}
t||tj�
|
�|
�q�qjq|dk�r`|d}|�d��stj�||�}t�|�D]J�t	�d
��}|�
���}W5QRXtj���}t||tj�
|�|��qq|dk�r�|dd�D](}||k�r�d
|i||<d||d<�qvq|dk�r|dd�\}}}||k�r�d
|i||<nd||k�r�td||f��|||d<|||d<|}q|dk�rJ|ddk�r4|d}n|d}|||d<q|tk�rf|d|||<q|tk�r�|||k�r�g|||<|||�d�|dd���q|�d��r^d||k�r�i||d<|dk�rg||dd<|dd�D]}||dd�|��q�nD|dk�rg||dd<|dd�D]}||dd�|��q>q|�d��r�d||k�r�i||d<|tk�r�|�ddd�}|d||d|<�q|d k�r�g||dd!<|dd�D]}||dd!�|��q�n�|d"k�rB|d��d#k�r,|d||dd#<n|d||dd#<n�|d$k�r�d%||dk�rni||dd%<|d||dd%|d<nH|d&k�rd'||dk�r�i||dd'<|d||dd'|d<q|�d(�rd)||k�r�i||d)<|�d(dd�}|d||d)|<q|��D] }d||k�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�#rrzsource-directory��/cs@g|]8}tj�tj��|��rt�d|�dk	rtj��|��qS)z^[a-zA-Z0-9_-]+$N)�os�path�isfiler�re�match)�.0rM�Z
expanded_pathr)r*�
<listcomp>�s�z*_parse_deb_config_data.<locals>.<listcomp>�r�sourcerAZ_source_pathTr$��familyz:Interface %s can only be defined once. Re-defined in '%s'.�methodr5Zether�zdns-�dnsz
dns-search�searchzdns-nameservers�nameserversZbridge_r7�Zbridge_portsZportsZ	bridge_hwZmacr2Zpathcostr3Zportpriozbond-r6F)�
splitlines�strip�
startswith�splitrLrMr�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�lineraZoptionZparsed_src_dirZdir_contents�entry�fpZsrc_dataZ	abs_entryZnew_src_path�abs_pathr$rWrX�valZdomainrZ
bridge_optionZbond_optionr)rRr*rg�s�




�
�


�


�

�
��



"







rgc	CsLi}t|d��}|����}W5QRXtj�|�}t||tj�|�|�|S)z+Parses a debian network configuration file.rT)rdrer_rLrMrfrgrh)rMrnrtrorur)r)r*�parse_deb_config7s
�rwcCsi}t||ddd�t|�S)N)rprq)rg�_ifaces_to_net_config_data)Zeni_datarnr)r)r*�convert_eni_dataCsrycs8i�|��D�]\}}|�d�d}|�krf|dkr:d}nd}||gd��|<d|krf|d�|d<||d	d
�}|�d�r�d|d<nd
|d<|�d	�dkr�|d|d<dD]}||kr�||||<q�d|k�rdD]0}||dkr�|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)rr0r1r5r4rX)Z_orig_eni_namerrAr,Zmanual�staticr)r
rrrZ)r\r[Zdns_r1rJcsg|]}�|�qSr)r))rQ�d�Zdevsr)r*rSpsz._ifaces_to_net_config_data.<locals>.<listcomp>)�version�config)r�	partitionr<r!r#)rnr0�dataZdevnameZdtyper%Zcopy_key�nr)r�r*rxJs2


rxc@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__vs�zRenderer.__init__r]cCsLg}|d}|d}d}ddd�}d}|dd	krD|d
d	krDd}n|ddkr`|d
dkr`d}d}	dD]�}
|rz|
dkrzqh|
dkr�|	d|||
||
f7}	qh|
|krh|
dk�r
d||
kr�|	d7}	n |�d
�dkr�|	d7}	n|	d7}	d
|k�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)rrr]rz0.0.0.0r
z defaultz::rrz -A inet6 default)rrrrz%s %s %srzz	 -A inet6� z -hostz -netz %s/%sz %s %s)r<r!)r��route�indentr&r
rZor_true�mappingZ
default_gwZ
route_line�kr)r)r*�
_render_routes>�



zRenderer._render_routeFc
s,g}��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<|dk	r�|r�dnd�d<nn|ddk�rd
�d<d�d<nN|ddk�r"d
�d<d�d<n.t|��rPd�d<|dk	�rP|�rHdnd�d<d�fdd�|D�k�rpd�d	<tt�||d�t�|�t�||	��}|�dg�D]}|�|j	|dd���q�|�
|�qBnZg}d �k�s�d!�k�r�|�
d"jf���|�
d#jf���|�t�d$dd%��|�
|�|S)&Nr1z	accept-raZ	wakeonlan�gzethernet-wolr-rr/r,rAr.�6rZdhcp4Zdhcp6zipv6_dhcpv6-statefulZdhcp�1�0�	accept_razipv6_dhcpv6-statelessZ
ipv6_slaacr~Tcsg|]}d�d|k�qS)zauto %sr0r))rQrr�r$r)r*rS�sz*Renderer._render_iface.<locals>.<listcomp>�alias�rFZroutesz    )r�zbond-masterzbond-slaveszauto {name}ziface {name} {inet} {mode}r)r-r=)r<�pop�	enumeraterrrHr+r@�extendr�r!r")
r�r$rF�sectionsr1r�Zethernet_wolr-r%r=Zsubnet_inetrGr�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}r.r|rA)rr,)r0rr.r1r0rr1rrrrJrY�rV�)r|r}r8r6r7r9cs�|d|dfS)Nrr0r))r���orderr)r*�<lambda>&�z-Renderer._render_interfaces.<locals>.<lambda>)r'r�z

cSsg|]}d�|��qS)�
)r)rQ�sr)r)r*rS2sz/Renderer._render_interfaces.<locals>.<listcomp>r�)
Ziter_interfacesr<rD�deepcopyrrZdns_searchdomainsr�r�r#Ziter_routesr!r�)	r��
network_staterFr{r$r\Z
searchdomainsr�r�r)r�r*�_render_interfacessF
��	
�
�zRenderer._render_interfaces)r��	templates�returncCs�t�||j�}t�tj�|��|jr,|jnd}t�	|||�
|��|jr~t�||j�}t�tj�|��t�	||�|��dS)Nr])
r�target_pathr�rZ
ensure_dirrLrMrhr�Z
write_filer�r�Z_render_persistent_net)r�r�r��targetZfpeni�headerZnetrulesr)r)r*�render_network_state4s�zRenderer.render_network_state)N)r])F)F)NN)�__name__�
__module__�__qualname__�__doc__r�r�r�r�r	r�dictr�r)r)r)r*r�ss
	
4
M
7��r�cCsFd}t||dd�d�}|sd}|�d�s0|d7}|j||d�}||S)Nr�)r�r�r�)r�r]r�r�)r��endswithr�)r�r�rFr�rror)r)r*�network_state_to_eniGs ��
�r�cCsRdddg}ddg}|D]}tj|||d�sdSqt�|d�}tj�|�sNdSd	S)
NZifqueryZifupZifdownz/sbinz	/usr/sbin)r[r�Fr�T)rZwhichr�rLrMrN)r�Zexpectedr[�pZenir)r)r*�	available[s
r�)F)NF)N)!rDrbrLrO�typingrZ	cloudinitrZloggingrrZ
cloudinit.netrrrZcloudinit.net.network_stater	Z	getLoggerr�r;rjrkrir+r@rHrgrwryrxr�r�r�r)r)r)r*�<module>sz
�
��<
)U