관리-도구
편집 파일: eni.cpython-39.opt-1.pyc
a ����'�Dg�S����������������������@���s����d�dl�Z�d�dlZd�dlZd�dlZd�dlZd�dlmZ�d�dlmZ�d�dl m Z mZmZ�d�dl mZmZmZ�d�dlmZ�e�e�Zg�d�Zg�d�Zg�d �Zd d��Zdd ��Zddd�Zdd��Ze �d�dd���Zdd��ZG�dd��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_gcinitZbridge_helloZ bridge_maxageZbridge_maxwaitZ bridge_stp)�address�netmask� broadcast�network�metric�gatewayZpointtopointZmedia�mtu�hostnameZ leasehoursZ leasetimeZvendorZclientZbootfile�serverZhwaddrZprovider�frameZnetnumZendpoint�localZttlc�����������������C���s����g�}g�d�}|����D�]t\}}|dkr&q|dkrBd|d�|d�f�}|r||v�rt|t�rbd�|�}d|v�rv|�dd�}|�d �||���qt|�S�) N) r ���r���r���r���r���Zpointopointr���Zscope� dns_search�dns_nameserversr���r ���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_subnetA���s���� r.���c����������� ��� ���C���s��|dkrg�S�g�}g�d�}g�d�}ddi}|�d�dvr>|��d��|����D�]�\}}t|t�rh|�|�rddnd }|rF||v�rvqF|d kr�|r�||krFt�d|�d�||��qF||v�r�|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�vlanZonZoffr���zZNetwork config: ignoring %s device-level mtu:%s because ipv4 subnet-level mtu:%s provided.r3���r���r���)r$���r���r ����bool�LOGZwarningr%����getr!���r"���r&���) r'���r0����ipv4_subnet_mtur)���Z ignore_mapZmultiline_keys�renamesr*���r+����vr,���r,���r-����_iface_add_attrs_���s<���� � rD���Fc�����������������C���s����|�d�}|�d�}|dkrd}n|dv�r0d|�}nd|�}|�����}|�||d���djf�i�|��d jf�i�|��g}|r�|��d �r�|�djf�i�|����|S�)Nr3���r/����auto)Zhotplugzallow-z # control-)�fullname�cverbz{cverb} {fullname}ziface {fullname} {inet} {mode}r8���z hwaddress {mac_address})�copy�updater%���r@���r$���)r'���r0����render_hwaddressrF���r/���rG����subst�linesr,���r,���r-����_iface_start_entry����s���� �rM���c�������������� ������sJ��d}|����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��}|������}W�d����n1��s.0����Y��tj����}t|�|tj� |�|��q�q|dk�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|d�dk�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�|�|�d�d<�|dd��D�]}|�|�d�d��|���q�nD|dk�rg�|�|�d�d<�|dd��D�]}|�|�d�d��|���q<q|�d��r�d|�|�v�r�i�|�|�d<�|tv��r�|�ddd�}|d�|�|�d�|<��q|d k�r�g�|�|�d�d!<�|dd��D�]}|�|�d�d!��|���q�n�|d"k�r@|d����d#k�r*|d�|�|�d�d#<�n|d�|�|�d�d#<�n�|d$k�r�d%|�|�d�v�rli�|�|�d�d%<�|d�|�|�d�d%�|d�<�nH|d&k�rd'|�|�d�v�r�i�|�|�d�d'<�|d�|�|�d�d'�|d�<�q|�d(�rd)|�|�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�#r���r���zsource-directory�����/c��������������������s@���g�|�]8}t�j�t�j���|��rt�d�|�durt�j���|��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�rrE���Z_source_pathTr'��������familyz:Interface %s can only be defined once. Re-defined in '%s'.�methodr9���Zether����zdns-�dnsz dns-search�searchzdns-nameservers�nameserversZbridge_r;�����Zbridge_portsZportsZ bridge_hwZmacr6���Zpathcostr7���Zportpriozbond-r:���F)� splitlines�strip� startswith�splitrQ���rR���r"����glob�listdirr���Zload_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_dirZdir_contents�entryZsrc_dataZ abs_entryZnew_src_path�fpZabs_pathr'���r\���r]����val�domainr���Z bridge_optionZbond_optionr,���rW���r-���rj�������s����� �� ,� � � �� " rj���zConverting eni datac�����������������C���s���i�}t�||�ddd��t|�S�)z=Return a network config representation of what is in eni_dataN)ru���rv���)rj����_ifaces_to_net_config_data)Zeni_datars���r,���r,���r-����convert_eni_data7��s����r~���c��������������������s8��i���|�����D��]\}}|�d�d�}|��vrf|dkr:d}nd}||g�d���|<�d|v�rf|d���|�d<�||d �d �}|�d�r�d|d<�nd |d<�|�d �dkr�|d�|d<�dD�]}||v�r�||�||<�q�d|v��rdD�]0}||d�v�r�|d�|�r�|d�|�|d|�<�qֈ�|�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)r5���r3���r4���r9���r8���r]���)Z_orig_eni_namer5���rE���r/���Zmanual�staticr ���)r���r���r���r_���)ra���r`���Zdns_r4���rO���c��������������������s���g�|�]}��|��qS�r,���r,���)rV����d�Zdevsr,���r-���rX���e�������z._ifaces_to_net_config_data.<locals>.<listcomp>)�version�config)r���� partitionr@���r$���r&���)rs���r3����dataZdevnameZdtyper(���Zcopy_key�nr,���r����r-���r}���?��s2���� r}���c�������������������@���sP���e�Zd�ZdZddd�Zddd�Zdd d �Zddd�Zdee e �dd �dd�ZdS�)�Rendererz@Renders network information in a /etc/network/interfaces format.Nc�����������������C���s6���|si�}|��dd�|�_|��dd��|�_|��dd�|�_d�S�)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__k��s�����zRenderer.__init__rb���c�����������������C���sL��g�}|d�}|d�}d}ddd�}d}|d�d krD|d �d krDd}n|d�dkr`|d �dkr`d}d} dD�]�} |rz| dkrzqh| dkr�| d||| �|| �f�7�} qh| |v�rh| dk�r d|| �v�r�| d7�} n |��d �dkr�| d7�} n| d7�} d |v��r"| d|| �|d �f�7�} qh| d|| �|| �f�7�} 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���)r���r���rb���r���z0.0.0.0r���z defaultz::r���r���z -A inet6 default)r���r���r���r���z%s %s %sr���z -A inet6� ���z -hostz -netz %s/%sz %s %s)r@���r$���)r�����route�indentr)���r���r���Zor_true�mappingZ default_gwZ route_line�kr,���r,���r-���� _render_routet��s>����� zRenderer._render_routeFc����������� ���������sv��t�������tt������d��W�d�����n1�s20����Y��g�}���di��}���dd��}���dd��}|rpd��d<�|�rt|�D��]�\}}d�} |��d<�|d���d <�|�d d���d <�d} t|�r�| d 7�} n |�d�} | ��d<�|d�dks�|d�dks�|d�dk�r$d��d <�|d�u�r�|�rdnd��d<�nn|d�dk�rDd��d <�d��d<�nN|d�dk�rdd��d <�d��d<�n.t|��r�d��d <�|d�u�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#jf�i�������|�d$jf�i�������|�t��d%d�d&���|�|��|S�)'NZ config_idr4���z accept-raZ wakeonlan�gzethernet-wolr0���r5���r2���r/���rE���r1����6r���Zdhcp4Zdhcp6zipv6_dhcpv6-statefulZdhcp�1�0� accept_razipv6_dhcpv6-statelessZ ipv6_slaacr����Tc��������������������s���g�|�]}d���d��|v��qS�)zauto %sr3���r,���)rV���rw����r'���r,���r-���rX������s���z*Renderer._render_iface.<locals>.<listcomp>�alias�rJ���Zroutesz )r����zbond-masterzbond-slaveszauto {name}ziface {name} {inet} {mode}r���)r0���rA���)rH����deepcopyr����KeyError�popr@���� enumerater ���r!���rM���r.���rD����extendr����r$���r%���) r����r'���rJ����sectionsr4���r����Zethernet_wolr0���r(���rA���Zsubnet_inetrL���r����r,���r����r-���� _render_iface���s����� ( � � � � �� ��� zRenderer._render_ifacec����������� ���������s��dddddd�gd�}|����D�]}|�d�dkrt�|�}q|j}|r\d �|�|d �d�d<�|j}|r|d �|�|d �d�d <�ddddddd���g�}|�|��|���t |������fdd�d�D�](}|�d�dkr�q�|�|�j||d���q�|� ��D�]}|�|��|���q�d�dd��|D���d�S�)z1Given state, emit etc/network/interfaces content.r����r����r1���r����rE���)r5���r/���)r3���r5���r1���r4���r3���r���r4���r���r���r���rO���r^�������r[�������)r����r����r<���r:���r;���r=���c��������������������s�����|�d��|�d�fS�)Nr5���r3���r,���)r������orderr,���r-����<lambda> ��r����z-Renderer._render_interfaces.<locals>.<lambda>)r*���r����z c�����������������S���s���g�|�]}d���|��qS�)� )r"���)rV����sr,���r,���r-���rX���,��r����z/Renderer._render_interfaces.<locals>.<listcomp>r����) Ziter_interfacesr@���rH���r����r���r"���Zdns_searchdomainsr����r����r&���Ziter_routesr$���r����) r����� network_staterJ���r����r'���ra���Z searchdomainsr����r����r,���r����r-����_render_interfaces���sF���� �� � �zRenderer._render_interfaces)r����� templates�returnc�����������������C���s����t��||�j�}t�tj�|���|�jr,|�jnd}t� |||�� |����|�jr�t��||�j�}t�tj�|���tj ||��|�dd��d�S�)Nrb���T)r)���Z preserve_mode) r����target_pathr����r���Z ensure_dirrQ���rR���rk���r����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����h��s��� 4 R 7����r����c�����������������C���sP���g�d�}ddg}|D�]}t�j|||�d�s�dS�qt��|�d�}tj�|�sLdS�dS�)N)ZifqueryZifupZifdownz/sbinz /usr/sbin)r`���r����Fr����T)r����whichr����rQ���rR���rS���)r����Zexpectedr`����pZenir,���r,���r-���� availableC��s����r����)F)N)"rH���rg���ZloggingrQ���rT���� contextlibr����typingr���Z cloudinitr���r���r���Z cloudinit.netr���r���r ���Zcloudinit.net.network_stater ���Z getLoggerr����r?���ro���rp���rn���r.���rD���rM���rj���Ztimedr~���r}���r����r����r,���r,���r,���r-����<module>���s0��� < � )�\