관리-도구
편집 파일: linux.cpython-39.opt-1.pyc
a �����)g�����������������������@���s��d�dl�mZmZmZ�eZd�dlZd�dlZd�dlZd�dl Z d�dl Z d�dlZd�dlZd�dl Z d�dlmZ�d�dlmZ�d�dlmZ�d�dlmZ�d�dlmZ�d�dlmZ�d�d lmZmZ�d�d lmZmZm Z �d�dl!m"Z"�d�dl#m$Z$�d d��Z%G�dd��de�Z&G�dd��de�Z'dS�)�����)�absolute_import�division�print_functionN)� cpu_count)� ThreadPool)�to_text)�get_best_parsable_locale)�get_bin_path)�bytes_to_human)�Hardware�HardwareCollector)�get_file_content�get_file_lines�get_mount_size)� iteritems)�timeoutc�����������������C���sV���zt��d�}W�n�ty"���Y�d�S�0�|D�](}t�j�d|��}|d|��kr(|��S�q(d�S�)N�/dev/disk/by-uuidz/dev/disk/by-uuid/z/dev/)�os�listdir�OSError�path�realpath)�partname�uuids�uuid�dev��r����M/usr/lib/python3.9/site-packages/ansible/module_utils/facts/hardware/linux.py�get_partition_uuid+���s���� r���c�������������������@���s��e�Zd�ZdZdZed�Ze�d�Ze � d�Ze � d�Ze � d�Z d7d d �Zdd��Zd8d d�Zdd��Zdd��Zdd��Zdd��Zdd��Zdd��Zdd��Zedd���Zdd ��Zd!d"��Zd#d$��Zd%d&��Zd'd(��Zd)d*��Zd+d,��Z d-d.��Z!d/d0��Z"d1d2��Z#d3d4��Z$d5d6��Z%dS�)9� LinuxHardwarea"�� Linux-specific subclass of Hardware. Defines memory and CPU facts: - memfree_mb - memtotal_mb - swapfree_mb - swaptotal_mb - processor (a list) - processor_cores - processor_count In addition, it also defines number of DMI facts and device facts. �Linux)ZMemTotalZ SwapTotalZMemFreeZSwapFree)ZBuffersZCachedZ SwapCachedz.*\]z .*bind.*"z \\[0-9]{3}Nc�����������������C���s����i�}t�|�j�}|||d�|�j_|�j|d�}|����}|����}|����}|����}|����} i�} z|�� ��} W�n �t jy����|�j�d��Y�n0�|� |��|� |��|� |��|� |��|� |��|� | ��|� | ��|S�)N)�LANG�LC_ALL� LC_NUMERIC)�collected_factsz,No mount facts were gathered due to timeout.)r����moduleZrun_command_environ_update� get_cpu_facts�get_memory_facts� get_dmi_facts�get_device_facts�get_uptime_facts� get_lvm_facts�get_mount_factsr����TimeoutError�warn�update)�selfr$���Zhardware_facts�locale� cpu_facts�memory_facts� dmi_facts�device_facts�uptime_facts� lvm_factsZmount_factsr���r���r����populateW���s,���� zLinuxHardware.populatec�����������������C���s���i�}t��dt�j�s|S�i�}td�D�]�}|�dd�}|d�}||�jv�rr|d�����d�d�}t|�d�|d|����<�||�j v�r"|d�����d�d�}t|�d�||���<�q"d�|� d�|� d �fvr�|d�|d ��|d <�d�|� d�|� d �|� d�fv�r|d�|d ��|d��|d <�d�|� d�|� d �fv�r@|d�|d ��|d<�d�|� d�|� d�fv�rn|d�|d��|d<�|� d�|� d �|� d �d�|� d �|� d�d�|� d�|� d�|� d�|� d�d�d�|d<�|S�)Nz /proc/meminfo�:����r���� i���z%s_mbZmemtotalZmemfreez real:used�cachedZbuffersznocache:freeznocache:usedZ swaptotalZswapfreez swap:used)�total�used�free)r?���r>���Z swapcached)r=���r?���r>���r<���)�realZnocacheZswapZ memory_mb)r����access�R_OKr����split�ORIGINAL_MEMORY_FACTS�strip�int�lower�MEMORY_FACTS�get)r0���r3���Zmemstats�line�data�key�valr���r���r���r'���s���sF���� "���� zLinuxHardware.get_memory_factsc�����������������C���s���i�}|p i�}d}d}d}d}d}d}i�} i�} d}d}z8t�j�d�rHd}n"td�D�]} | ���dkrdd}�qjqPW�n�ty~���Y�n0�t��dt�j�s�|S�g�|d<�td�D��]h} | �d d �}|d����}z|d ����}W�n�t y����d}Y�n0�|�r|dk�rd |v�rd}|dv��rpd|v�r"g�|d<�|d�� |��|dk�rB|d 7�}|dk�rT|d 7�}|dk�rf|d 7�}|d 7�}q�|dk�r�|}|| v�rd | |<�q�|dk�r�|}|| v�rd | |<�q�|dk�r�t|�| |<�q�|dk�r�t|�| |<�q�|dk�r�t|�|d<�q�|dkr�t|�}q�|dk�r&||k�r&|}|�dd�� d��r>|}|�d�dk�r�|�rx||d<�||d<�d |d<�||d<��n | �r�t| �|d<�n||d<�t| ����}|�r�|d��r�|d�|d<�nd |d<�t| ����}|�r�|d�|d��|d<�nd |d��|d<�|d�|d��|d��|d<�||d<�ztt��d��|d<�W�n^�t�y����ztd�}W�n�t�yh���Y�n*0�|�j�|�\}}}|dk�r�t|�|d<�Y�n0�|S�) Nr���Fz /proc/xenTz/sys/hypervisor/type�xenz /proc/cpuinfo� processorr9���r:������flagsZvme)� model nameZ Processor� vendor_idZcpuZVendorrO���rS���rR���zphysical idzcore idz cpu coresZsiblingsz# processorsZprocessor_coreszncpus activeZansible_architecture)ZarmvZaarchZppcZs390xZprocessor_countZprocessor_threads_per_coreZprocessor_vcpusZprocessor_nprocZnproc)r���r����existsr���rE����IOErrorrA���rB���rC���� IndexError�appendrF���rI���� startswith�len�list�values�sched_getaffinity�AttributeErrorr ���� ValueErrorr%����run_command)r0���r$���r2����iZvendor_id_occurrenceZmodel_name_occurrenceZprocessor_occurrenceZphysidZcoreidZsocketsZcoresrN���Zxen_paravirtrJ���rK���rL���rM���Z socket_valuesZcore_values�cmd�rc�outZ_errr���r���r���r&�������s����� ��� zLinuxHardware.get_cpu_factsc�����������������C���s���i�}t�j�d�r�g�d�}ddddddd d ddd dddddddd�}|���D�]h\}}t|�}|dur�|dkr�z|t|��|d<�W�q��ty����d|�|d<�Y�q�0�q�|||<�qJd||<�qJn�|�j�d�}ddddddd d!d"d#d$d%d&d'd(d)d*d+d�}|���D�]�\}} |du�r~|�j� d,|| f��\} }}| d-k�rtd.� d/d0��|���D���} zt� | ��W�n�t�yh���d} Y�n0�| ||<�nd||<�q�d||<�q�|S�)1z� learn dmi facts from system Try /sys first for dmi related facts. If that is not available, fall back to dmidecode executable z(/sys/devices/virtual/dmi/id/product_name)%�UnknownZOtherrd���ZDesktopzLow Profile Desktopz Pizza Boxz Mini TowerZTowerZPortableZLaptopZNotebookz Hand HeldzDocking Stationz All In OnezSub NotebookzSpace-savingz Lunch BoxzMain Server ChassiszExpansion ChassiszSub ChassiszBus Expansion ChassiszPeripheral ChassiszRAID ChassiszRack Mount ChassiszSealed-case PCzMulti-systemZ CompactPCIZAdvancedTCAZBladezBlade EnclosureZTabletZConvertibleZ DetachablezIoT GatewayzEmbedded PCzMini PCzStick PCz%/sys/devices/virtual/dmi/id/bios_datez'/sys/devices/virtual/dmi/id/bios_vendorz(/sys/devices/virtual/dmi/id/bios_versionz+/sys/devices/virtual/dmi/id/board_asset_tagz&/sys/devices/virtual/dmi/id/board_namez(/sys/devices/virtual/dmi/id/board_serialz(/sys/devices/virtual/dmi/id/board_vendorz)/sys/devices/virtual/dmi/id/board_versionz-/sys/devices/virtual/dmi/id/chassis_asset_tagz*/sys/devices/virtual/dmi/id/chassis_serialz*/sys/devices/virtual/dmi/id/chassis_vendorz+/sys/devices/virtual/dmi/id/chassis_versionz(/sys/devices/virtual/dmi/id/chassis_typez*/sys/devices/virtual/dmi/id/product_serialz(/sys/devices/virtual/dmi/id/product_uuidz+/sys/devices/virtual/dmi/id/product_versionz&/sys/devices/virtual/dmi/id/sys_vendor)Z bios_dateZbios_vendorZbios_versionZboard_asset_tagZ board_nameZboard_serialZboard_vendorZ board_versionZchassis_asset_tagZchassis_serialZchassis_vendorZchassis_version�form_factorZproduct_nameZproduct_serialZproduct_uuidZproduct_versionZ system_vendorNre���zunknown (%s)ZNAZ dmidecodezbios-release-datezbios-vendorzbios-versionzbaseboard-asset-tagzbaseboard-product-namezbaseboard-serial-numberzbaseboard-manufacturerzbaseboard-versionzchassis-asset-tagzchassis-serial-numberzchassis-manufacturerzchassis-versionzchassis-typezsystem-product-namezsystem-serial-numberzsystem-uuidzsystem-versionzsystem-manufacturerz%s -s %sr���rP���c�����������������S���s���g�|�]}|��d��s|�qS�)�#)rX���)�.0rJ���r���r���r���� <listcomp>��������z/LinuxHardware.get_dmi_facts.<locals>.<listcomp>)r���r���rT����itemsr ���rF���rV���r%���r ���r_����join� splitlines�json�dumps�UnicodeDecodeError)r0���r4���ZFORM_FACTORZDMI_DICTrL���r���rK���Zdmi_bin�k�vrb���rc����errZ thisvaluer���r���r���r(���/��s������ � zLinuxHardware.get_dmi_factsc�����������������C���s.���g�d�}|g|�}|�j��|�\}}}|||fS�)N)�--list�--noheadingsz--pathsz--outputz NAME,UUIDz --exclude�2�r%���r_���)r0���� lsblk_path�argsra���rb���rc���rr���r���r���r���� _run_lsblk���s���� zLinuxHardware._run_lsblkc�����������������C���s����i�}|�j��d�}|s|S�|��|�\}}}|dkr4|S�|���D�]X}|sFq<|���}|�d�d�}t|�dk�rhq<|d����|d�����} } | |v�r�q<| || <�q<|S�)NZlsblkr���r:�������)r%���r ���ry���rl���rE����rsplitrY���)r0���r���rw���rb���rc���rr���Z lsblk_linerJ����fieldsZdevice_namer���r���r���r����_lsblk_uuid���s&���� zLinuxHardware._lsblk_uuidc����������� ������C���sd���d}|�j��d�}|s|S�|dddd|g}|�j��|�\}}}|dkrF|S�t�d|�}|r`|�d �}|S�) N�N/AZudevadm�infoz--query�propertyz--namer���zID_FS_UUID=(.*) r:���)r%���r ���r_����re�search�group) r0����devicer���Zudevadm_pathra���rb���rc���rr����mr���r���r���� _udevadm_uuid���s���� zLinuxHardware._udevadm_uuidc�����������������C���s2���g�d�}|g|�}|�j�j|dd�\}}}|||fS�)N)rs���rt���z--notruncate�surrogate_then_replace��errorsrv���)r0����findmnt_pathrx���ra���rb���rc���rr���r���r���r����_run_findmnt���s���� zLinuxHardware._run_findmntc�����������������C���s|���t���}|�j�d�}|s|S�|��|�\}}}|dkr6|S�|���D�]8}|���}t|�dk�rXq>|�j�|d��r>|� |d���q>|S�)NZfindmntr���rz���r:���) �setr%���r ���r����rl���rC���rY���� BIND_MOUNT_RE�match�add)r0����bind_mountsr����rb���rc���rr���rJ���r|���r���r���r����_find_bind_mounts���s����zLinuxHardware._find_bind_mountsc�����������������C���sT���d}t�j�|�sd}t|d�}g�}|���D�]$}|���}t|�dk�rDq*|�|��q*|S�)Nz /etc/mtabz/proc/mountsrP�������)r���r���rT���r ���rl���rC���rY���rW���)r0���Z mtab_fileZmtab�mtab_entriesrJ���r|���r���r���r���� _mtab_entries���s���� zLinuxHardware._mtab_entriesc�����������������C���s���t�t|����dd���d��S�)Nr:�������)�chrrF���r����)r����r���r���r����_replace_octal_escapes_helper���s����z+LinuxHardware._replace_octal_escapes_helperc�����������������C���s���|�j��|�j|�S��N)�OCTAL_ESCAPE_RE�subr����)r0����valuer���r���r����_replace_octal_escapes��s����z$LinuxHardware._replace_octal_escapesc�����������������C���s"���t�|�}|�||��|��}||fS�r����)r���rI���r����)r0����mountr����r���� mount_sizer���r���r���r����get_mount_info��s����zLinuxHardware.get_mount_infoc��������������������s���g�}������}�����}�����}i�}ttt|�t���d�}t���d�pFt j }|D�]�}��fdd�|D��}|d�|d�|d�|d�f\} } }}| �d �s�d | vsL|dkr�qL| | ||d�} | |v�rԈ�j� |�s�| d ��d7��<�| |���j| | |f�t���|�d�|| <�qL|����|�rxt|�D��]R} d}|| �d�}z�|����r�d}|����r�|���\}}|�rh|| �d��|��|�ppd|| �d�d<�ndt|�����|| �d�d<�n:t���|| �d�k�r�d}��j�d| ���d|| �d�d<�W�nl�t�yF�}�zRdd�l}d}d|| �d<���j�d| t|�t|�f�����j�|�����W�Y�d�}~n d�}~0�0�|�r|�|| �d���|| =��qt�d���qd|iS�)N)Z processesZGATHER_TIMEOUTc��������������������s���g�|�]}����|��qS�r���)r����)rg���Zfield�r0���r���r���rh��� ��ri���z1LinuxHardware.get_mount_facts.<locals>.<listcomp>r���r:���rz�������)�/�\z:/Znone)r����r�����fstype�optionsr����z,bind)r����extra� timelimitFr����Tr���r~���r���z$Could not get extra information: %s.Znoter����z/Timeout exceeded when getting mount info for %sz.Could not get extra information due to timeoutz9Error prevented getting extra info for mount %s: [%s] %s.g�������?�mounts) r����r}���r����r����minrY���r����globalsrI���r���ZDEFAULT_GATHER_TIMEOUTrX����MTAB_BIND_MOUNT_REr����Zapply_asyncr�����time�closerZ���ZreadyZ successfulr/���r���r%���r.���� Exception� traceback�type�debug� format_excrW����sleep)r0���r����r����r���r�����resultsZpoolZmaxtimer|���r����r����r����r����Z mount_infoZdone�resr����r����er����r���r����r���r,�����sj����$� � & zLinuxHardware.get_mount_factsc�������������� ���C���s����t�j�|�si�S�zxt�t�}t��|�D�]J}z.t�j�t��t�j� ||���}||�� |��W�q&�tyn���Y�q&Y�q&0�q&tdd��t |�D���W�S��ty����i��Y�S�0�d�S�)Nc�����������������s���s"���|�]\}}|t�t|��fV��qd�S�r�����rZ����sorted�rg���rp���rq���r���r���r���� <genexpr>h��ri���z1LinuxHardware.get_device_links.<locals>.<genexpr>)r���r���rT����collections�defaultdictr����r����basename�readlinkrk���r����r����dictr���)r0���Zlink_dir�retval�entry�targetr���r���r����get_device_links]��s���� zLinuxHardware.get_device_linksc�����������������C���sv���zZt��t�}t�d�D�],}|�d�}|d�}|d�}||��|��qtdd��t|�D���W�S��typ���i��Y�S�0�d�S�)Nz/sys/block/*/slaves/*r����r��������c�����������������s���s"���|�]\}}|t�t|��fV��qd�S�r����r����r����r���r���r���r����t��ri���z6LinuxHardware.get_all_device_owners.<locals>.<genexpr>) r����r����r�����globrC���r����r����r���r���)r0���r����r����elementsr����r����r���r���r����get_all_device_ownersl��s���� z#LinuxHardware.get_all_device_ownersc�����������������C���s$���|���d�|���d�|���d�|����d�S�)N�/dev/disk/by-idr���z/dev/disk/by-label)Zidsr����labelsZmasters)r����r����r����r���r���r����get_all_device_linksx��s �����z"LinuxHardware.get_all_device_linksc�����������������C���sr���g�|d<�t�j�|d��rnt��|d��D�]F}|�d�s6q&t|d�|�d��}|r^|d��|��q&|d��|��q&d�S�)NZholdersz/holderszdm-z /holders/z/dm/name)r���r����isdirr���rX���r ���rW���)r0���Zblock_dev_dict�sysdir�folder�namer���r���r����get_holders���s���� zLinuxHardware.get_holdersc�����������������C���sD���d|�}|�j��||g�\}}}|dkr@t�d|�}|r@|�d�S�d�S�)Nz/dev/%sr���z&(?:Unit serial|Serial) number:\s+(\w+)r:���)r%���r_���r����r����r����)r0����sg_inq�blockr����rb���Z drivedatarr����serialr���r���r����_get_sg_inq_serial���s����z LinuxHardware._get_sg_inq_serialc�����������#��� ���C���s���i�}i�|d<�|�j��d�}|r8|�j�j|dgdd�\}}}nd�}zt�d�}W�n�ty`���|�Y�S�0�i�}zt�d�}W�n�ty����Y�n^0�|D�]V} | �d�r�zt�tj� d| ��} W�n�ty����Y�q�Y�n0�| d d���|tj� | �<�q�|����}||d <�|D��]�}d} d}zt�tj� d |��}W�n<�t�yZ���t� ��d�}|jtjk�rR|}d}nY�q�Y�n0�tj� d|�}|dk�r�t�|�D�]}d|v��r~d} ��q��q~i�}| |d<�i�|d<�t|�D�]\}}|�|g��|d�|<��q�tj� |�}dD�]}t|d�|��||<��q�|�j��d�}d|�}|�r8|��||�}|�rN||d<�nt|�}|�rN||d<�dD�]\}}t||��||<��qR||v��r�||�|d<�i�|d<�t�|�D�]�}t�d|�d�|�}|�r�i�}|�d�}|d�|�}i�|d<�t|�D�]\}}|�|g��|d�|<��q�t|d�d�|d<�t|d�d�|d<�t|d ��|d!<�|d!��sNt|d"�d#�|d!<�tt|d��d$��|d%<�t|�|d&<�|��||��||d�|<��q�t|d'��|d(<�d)|d*<�t|d+��} | d�u�r�t�d,| �}|�r�|�d-�|d*<�t|d��|d<�|d��s�d|d<�t|d ��|d!<�|d!��s*t|d"�d#�|d!<�tt|d��d$��|d%<�d)|d.<�t�d/|�}|�r�|�r�|�d�}!t�|!�}"t�d0|"�d1�|tj�}|�r�|�d�|d.<�|��||��||d�|<�q�|S�)2NZdevices�lspciz-Dr����r����z /sys/blockr����zwwn-r����Zdevice_linksr:���r���z/sys/block/r�����virtual�links)ZvendorZmodelZsas_addressZsas_device_handlez/device/r����z/sys/block/%s/device/serialr����))Z removablez /removable)Zsupport_discardz/queue/discard_granularityZwwnZ partitions�(z[p]?\d+)r����z/start�startz/sizeZsectorsz/queue/logical_block_sizeZ sectorsizez/queue/hw_sector_sizei���g�������@�sizer���z/queue/rotationalZ rotationalrP���Zscheduler_modez/queue/schedulerz .*?(\[(.*)\])rz����hostz2.+/([a-f0-9]{4}:[a-f0-9]{2}:[0|1][a-f0-9]\.[0-7])/�^z\s(.*)$)r%���r ���r_���r���r���r���rX���r����r���rk���r����r�����sys�exc_info�errno�EINVALr���rI���r ���r����r����r����r����r ����floatr���r����r�����escape� MULTILINE)#r0���r5���r����rb���Zpcidatarr���Z block_devsZdevs_wwnZ devs_by_idZ link_nameZwwn_linkr����r����r����Zsysfs_no_linksr���r����r����r�����dZ link_typeZlink_valuesZdisknamerL���r����Zserial_pathr�����testr�����partr���Zpart_sysdirZ schedulerZpciidZdidr���r���r���r)������s����� zLinuxHardware.get_device_factsc�����������������C���s2���i�}t�d�}|r.|�d�d�}tt|��|d<�|S�)Nz/proc/uptimer;���r���Zuptime_seconds)r ���rC���rF���r����)r0���r6���Zuptime_file_contentZuptime_seconds_stringr���r���r���r*�����s����zLinuxHardware.get_uptime_factsc����������� ������C���sV���d}|}|��|�rR|�j�dd�}d}|�j�d||f��\}}}|dkrR||����}|S�)Nz/dev/dm-ZdmsetupTz/dev/mapper/z"%s info -C --noheadings -o name %sr���)rX���r%���r ���r_����rstrip) r0���Z dm_deviceZ dm_prefixZ mapper_deviceZdmsetup_cmdZ mapper_prefixrb���Zdm_namerr���r���r���r����_find_mapper_device_name'��s���� z&LinuxHardware._find_mapper_device_namec�����������������C���s���ddi}t����dk�r�|�j�d��r�d}|�j�d�}i�}|r�|�j�d||f��\}}}|���D�]8}|����d�} | d�| d �| d �| d�d�|| d�<�q^|�j�d �} i�}| r�|�j�d| |f��\}}}|���D�],} | ����d�} | d�| d�d�|| d�<�q�|�j�d�}i�}|�rp|�j�d||f��\}}}|���D�]:}|����d�} | d�| d�| d�d�||��| d��<��q4|||d�|d<�|S�)z> Get LVM Facts if running as root and lvm utils are available Zlvmr~���r����vgsz/--noheadings --nosuffix --units g --separator ,z%s %s�,������rz���r:���)�size_g�free_gZnum_lvsZnum_pvs�lvsr����)r�����vg�pvsr����r����)r����r����r����)r����r����r����) r����getuidr%���r ���r_���rl���rE���rC���r����)r0���r7���Zlvm_util_optionsZvgs_pathr����rb���Zvg_linesrr���Zvg_linerj���Zlvs_pathr����Zlv_linesZlv_lineZpvs_pathr����Zpv_linesZpv_liner���r���r���r+���2��sB������zLinuxHardware.get_lvm_facts)N)N)&�__name__� __module__�__qualname__�__doc__�platform� frozensetrD����unionrH���r�����compiler����r����r����r8���r'���r&���r(���ry���r}���r����r����r����r�����staticmethodr����r����r����r,���r����r����r����r����r����r)���r*���r����r+���r���r���r���r���r���9���sB��� . �c L� r���c�������������������@���s���e�Zd�ZdZeZedg�ZdS�)�LinuxHardwareCollectorr ���r����N)r����r����r����Z _platformr���Z_fact_classr����Zrequired_factsr���r���r���r���r����a��s���r����)(Z __future__r���r���r���r����Z __metaclass__r����r����r����rm���r���r����r����r����Zmultiprocessingr���Zmultiprocessing.poolr���Zansible.module_utils._textr���Z"ansible.module_utils.common.localer���Z#ansible.module_utils.common.processr ���Z+ansible.module_utils.common.text.formattersr ���Z(ansible.module_utils.facts.hardware.baser���r���Z ansible.module_utils.facts.utilsr ���r���r���Zansible.module_utils.sixr���Zansible.module_utils.factsr���r���r���r����r���r���r���r����<module>���s8���������.