관리-도구
편집 파일: linux.cpython-39.pyc
a �����)g�B����������������������@���s����d�dl�mZmZmZ�eZd�dlZd�dlZd�dlZd�dl Z d�dl Z d�dlmZm Z �d�dlmZ�G�dd��de�ZG�dd��de �ZdS�) �����)�absolute_import�division�print_functionN)�Network�NetworkCollector)�get_file_contentc�������������������@���sH���e�Zd�ZdZdZdddddd�Zdd d�Zddd �Zdd��Zdd��Z d S�)�LinuxNetworkad�� This is a Linux-specific subclass of Network. It defines - interfaces (a list of interface names) - interface_<name> dictionary of ipv4, ipv6, and mac address information. - all_ipv4_addresses and all_ipv6_addresses: lists of all configured addresses. - ipv4_address and ipv6_address: the first non-local address for each family. �LinuxZetherZ infinibandZpppZloopbackZtunnel)�1�32Z512Z772Z65534Nc����������� ������C���s����i�}|�j��d�}|d�u�r|S�|�j||d�\}}|��|||�\}}|���|d<�|D�]}||�||<�qP||d<�||d<�|d�|d<�|d�|d<�|S�)N�ip)�collected_facts� interfaces�default_ipv4�default_ipv6�all_ipv4_addresses�all_ipv6_addresses)�module�get_bin_path�get_default_interfaces�get_interfaces_info�keys) �selfr ���Z network_facts�ip_pathr���r���r����ips�iface��r����L/usr/lib/python3.9/site-packages/ansible/module_utils/facts/network/linux.py�populate/���s ����� zLinuxNetwork.populatec�����������������C���sp��|pi�}t�|ddddg|ddddgd�}t�i�i�d�}dD��]$}|dkrh|�d �d krh|�dd��d �rhq8|dkrxtjsxq8|�jj||�dd�\}}}|s�q8|���d����} t | �dkr8| d�||�d�kr8t t | �d��D�]�} | | �dk�r�| | d��||�d<�q�| | �dk�r$| | d��||�d<�q�| | �dkr�| | d��||�d�kr�| | d��||�d<�q�q8|d�|d�fS�)Nz-4Zroute�getz8.8.8.8z-6z2404:6800:400a:800::1012)�v4�v6r!���Zansible_os_familyZRedHatZansible_distribution_version��z4.�surrogate_then_replace��errorsr�����������dev� interface�src�addressZviaZgatewayr ���)�dictr���� startswith�socketZhas_ipv6r����run_command� splitlines�split�len�range)r���r���r ���Zcommandr)����v�rc�out�err�words�ir���r���r���r���@���s4����� � $z#LinuxNetwork.get_default_interfacesc��������������������s~��i��t�g�g�d��t�d�D��]}tj�|�s.qtj�|��d�i��<�tj�tj�|d��r�ttj�|d�dd���r��dkr�����d<�tj�tj�|d ��r�t ttj�|d ������d <�tj�tj�|d ��r�ttj�|d ��dk���d<�tj�tj�|dd d���r8tj�tj� tj�|dd d������d<�tj�tj�|d���rxttj�|d��}|�j�|d����d<�tj�tj�|d���r8d���d<�dd��t�tj�|dd��D�����d<�tj�tj�|dd���r�ttj�|dd�dd����d<�tj�tj�|dd���r8ttj�|dd��dk���d<�tj�tj�|d���rPd���d<�ttj�|dd�dd�� �����d<�ttj�|dd�dd�� ��d����d<�ttj�|dd �dd�� ��d����d <�ttj�|dd!�dd�� ��d����d!<�ttj�|dd"��}|�rP|���d"<�tj�|dd#�}tj�|��rPt|�dk���d#<�tj�tj�|d$���r�ttj�|d$d%�dd����d&<�tj�tj�|d���r�tj�t�tj�|d������d'<�tj�tj�|d(���rttj�|d(��}|d�u�rt |����d(<�tj�tj�|d)���rTd*}t ttj�|d)��d+�} | d,@�dk}|���d-<�d;�������fd.d/� } |�j�d0�}|d1d2d"d3�g}|�jj|d4d5�\}} }|dk�r�| | ��n6|d1d2d3�g}|�jj|d4d5�\}} }|dk�r�| | ��|d1d2d6d3�g}|�jj|d4d5�\}}}|dk�r$| |d7d8������|������qi�}�D�]2}d9|v��rf�|�||�d9d:�<�n�|�||<��qB|�fS�)<N)r���r���z/sys/class/net/*�devicer+���r"���)�defaultz00:00:00:00:00:00� macaddress�mtuZ operstateZdownZactiveZdriverr����type�unknownZbridgec�����������������S���s���g�|�]}t�j�|��qS�r���)�os�path�basename)�.0�br���r���r���� <listcomp>���������z4LinuxNetwork.get_interfaces_info.<locals>.<listcomp>Zbrif�*r���Z bridge_id�idZ stp_stater ���ZstpZbondingZslaves�moder���ZmiimonZ lacp_rate�primaryZall_slaves_activeZ bonding_slaveZperm_hwaddrZperm_macaddressZpciid�speed�flagsF��������Zpromiscc�������������� ������s��|�����D��]}|sq|���}d}|d�dk�rd|d�v�rn|d��d�\}}t|�dkrz|d�dkrz|d�}n|d�}d }t�d t�|��d�}ddt|�?��}t�t� d |��} t�t� d ||@���} |d�}|�kr�i��|<�|�sd �|�v�r||| | |d��|�d <�n8d�|�v�r(g��|�d<��|�d�� ||| | |d���|�r�d���v�rfg����d<��|k�r����d�� ||| | |d���d��v��r���d�|k�r�|��d<�| ��d<�| ��d<�|��d<����d<����d���d<�����dd���d<�|d���d<�|�d��s�d�� |��q|d�dkrd|d�k�rX|d�}|d��d�\}} |d�}n|d��d�\}} |d�}d���v�r�g����d<����d�� || |d ���d�v��r��d�|k�r�| �d<�|�d!<���d<����d��d<�����dd��d<�|d"ks�d#�� |��qd�S�)$Nr"���r���Zinet�/r'�����������Zbrdr���z!Ll��������r&���Zipv4)r+���� broadcast�netmask�network�prefixZipv4_secondariesr+���rR���rS���rT���rU���r<���r=���r>���r?����aliasz127.r���Zinet6Zpeer����Zipv6)r+���rU����scoperX���z::1r���) r0���r1���r2����struct�unpackr.���Z inet_aton�intZ inet_ntoa�pack�appendr���r-���)�output� secondary�liner8���rR���r+���Znetmask_lengthZaddress_binZnetmask_binrS���rT���r����_rU���rX����r���r���r:���r���r���r<���r���r����parse_ip_output����s����� �� � �z9LinuxNetwork.get_interfaces_info.<locals>.parse_ip_outputr����addrZshowr(���r#���r$���r_���T)r_����:ra���)F)r,����globr@���rA����isdirrB����exists�joinr���r[����realpath�INTERFACE_TYPEr���r1����readlinkr���r���r/����update�get_ethtool_data�replace)r���r���r���r���rA���Z_typerJ���rK���Zpromisc_mode�datarc����argsr5���Zprimary_data�stderrZsecondary_dataZnew_interfacesr9���r���rb���r���r���c���s������*( $((( $ _ z LinuxNetwork.get_interfaces_infoc����������� ������C���s ��i�}|�j��d�}|�r|d|g}|�j�j|dd�\}}}|dkr�i�}|������D�]@} | rN| �d�rbqN| �d�\} }|svqN|���|| ����dd �<�qN||d <�|d|g}|�j�j|dd�\}}}|dk�rdd ��t� d|�D��|d<�dd ��t� d|�D��|d<�t� d|�}|�rt|���d��|d<�|S�)NZethtoolz-kr#���r$���r���re���z: �-ra����featuresz-Tc�����������������S���s���g�|�]}|�����qS�r�����lower�rC����mr���r���r���rE���;��rF���z1LinuxNetwork.get_ethtool_data.<locals>.<listcomp>zSOF_TIMESTAMPING_(\w+)Ztimestampingc�����������������S���s���g�|�]}|�����qS�r���ru���rw���r���r���r���rE���<��rF���zHWTSTAMP_FILTER_(\w+)Zhw_timestamp_filterszPTP Hardware Clock: (\d+)Z phc_index) r���r���r/����stripr0����endswithr1���ro����re�findall�searchr[����groups) r���r:���rp���Zethtool_pathrq���r5����stdoutrr���rt���r`����key�valuerx���r���r���r���rn���$��s0���� zLinuxNetwork.get_ethtool_data)N)N) �__name__� __module__�__qualname__�__doc__�platformrk���r���r���r���rn���r���r���r���r���r������s���� #�Br���c�������������������@���s ���e�Zd�ZdZeZeddg�ZdS�)�LinuxNetworkCollectorr ���Zdistributionr����N)r����r����r����Z _platformr���Z_fact_class�setZrequired_factsr���r���r���r���r����D��s���r����)Z __future__r���r���r���r>���Z __metaclass__rf���r@���r{���r.���rY���Z'ansible.module_utils.facts.network.baser���r���Z ansible.module_utils.facts.utilsr���r���r����r���r���r���r����<module>���s�����(