관리-도구
편집 파일: dmi.cpython-39.opt-1.pyc
a '�Dgr � @ s� d dl Z d dlZd dlZd dlmZ d dlmZ d dlmZm Z d dl mZmZm Z mZ e �e�ZdZedg d��Zd ej_ed dd�edd d�eddd�eddd�eddd�eddd�eddd�eddd�eddd�eddd�edd d!�ed"d#d�ed$d%d�ed&d'd(�ed)d*d!�ed+d,d!�ed-d.d�d/�Zeee d0�d1d2�Zeee d0�d3d4�Zeee d0�d5d6�Zeeee d7�d8d9�Zeee d0�d:d;�Zeed<�d=d>�ZdS )?� N)� namedtuple)�Optional)�performance�subp)�is_container�is_DragonFlyBSD� is_FreeBSD� is_OpenBSDz/sys/class/dmi/id�KernelNames)�linux�freebsd�openbsd)NNNZboard_asset_tagzsmbios.planar.tagZboard_vendorzsmbios.planar.makerZ board_namezsmbios.planar.productZboard_serialzsmbios.planar.serialZ board_versionzsmbios.planar.versionZ bios_datezsmbios.bios.reldateZbios_vendorzsmbios.bios.vendorZbios_versionzsmbios.bios.versionZchassis_asset_tagzsmbios.chassis.tagZchassis_vendorzsmbios.chassis.makerz hw.vendorZchassis_serialzsmbios.chassis.serialzhw.uuidZchassis_versionzsmbios.chassis.versionZ sys_vendorzsmbios.system.makerZproduct_namezsmbios.system.productz hw.productZproduct_serialzsmbios.system.serialZproduct_uuidzsmbios.system.uuidZproduct_versionzsmbios.system.version)zbaseboard-asset-tagzbaseboard-manufacturerzbaseboard-product-namezbaseboard-serial-numberzbaseboard-versionzbios-release-datezbios-vendorzbios-versionzchassis-asset-tagzchassis-manufacturerzchassis-serial-numberzchassis-versionzsystem-manufacturerzsystem-product-namezsystem-serial-numberzsystem-uuidzsystem-version)�key�returnc C sF t �| �}|du s|jdu r dS d�t|j�}t�d|� tj� |�sVt�d|� dS zft �d|� ���B t|d��}|� � }W d � n1 s�0 Y W d � n1 s�0 Y W n ty� t�d|� Y dS 0 |dt|�d d kr�d}z|�d��� W S t�y@ } zt�d |||� W Y d}~n d}~0 0 dS )z/ Reads dmi data from /sys/class/dmi/id Nz{0}/{1}�querying dmi data %szdid not find %szReading �rbzCould not read %s� �� � � �utf8z-utf-8 decode of content (%s) in %s failed: %s)�DMIDECODE_TO_KERNEL�getr �format�DMI_SYS_PATH�LOG�debug�os�path�existsr ZTimed�open�read�PermissionError�len�decode�strip�UnicodeDecodeError�error)r �kmapZdmi_key_path�fpZkey_data�e� r+ �1/usr/lib/python3.9/site-packages/cloudinit/dmi.py�_read_dmi_syspathP s: �H�r- c C s� t �| �}|du s|jdu r dS t�d|j� z2dd|jg}t�|�j�� }t�d||j� |W S tjy� } zt�d||� W Y d}~n d}~0 0 dS )z/ Reads dmi data from FreeBSD's kenv(1) Nr Zkenvz-qzkenv returned '%s' for '%s'zfailed kenv cmd: %s %s) r r r r r r �stdoutr% �ProcessExecutionError�r r( �cmd�resultr* r+ r+ r, � _read_kenvx s $r3 c C s� t �| �}|du s|jdu r dS t�d|j� z2dd|jg}t�|�j�� }t�d||j� |W S tjy� } zt�d||� W Y d}~n d}~0 0 dS )z1 Reads dmi data from OpenBSD's sysctl(8) Nr Zsysctlz-qnzsysctl returned '%s' for '%s'zfailed sysctl cmd: %s %s) r r r r r r r. r% r/ r0 r+ r+ r, �_read_sysctl� s $r4 )r �dmidecode_pathr c C s� zD|d| g}t � |�j�� }t�d|| � |�dd�dkr@W dS |W S t jyz } zt�d||� W Y d}~dS d}~0 0 dS )z Calls out to dmidecode to get the data out. This is mostly for supporting OS's without /sys/class/dmi/id support. z--stringz dmidecode returned '%s' for '%s'�.� zfailed dmidecode cmd: %s %sN)r r. r% r r �replacer/ )r r5 r1 r2 r* r+ r+ r, �_call_dmidecode� s r9 c C s� t � r dS t� st� rt| �S t� r,t| �S t| �}|dur@|S dd� }t�� d }||�st|dv stt � d|� dS t�d�}|r�t | |�S t � dt� dS ) a� Wrapper for reading DMI data. If running in a container return None. This is because DMI data is assumed to be not useful in a container as it does not represent the container but rather the host. This will do the following (returning the first that produces a result): 1) Use a mapping to translate `key` from dmidecode naming to sysfs naming and look in /sys/class/dmi/... for a value. 2) Use `key` as a sysfs key directly and look in /sys/class/dmi/... 3) Fall-back to passing `key` to `dmidecode --string`. If all of the above fail to find a value, None will be returned. Nc S s$ | dkp"| d dko"| dd � dkS )NZx86_64r �i� Z86r+ )Zarchr+ r+ r, �is_x86� s zread_dmi_data.<locals>.is_x86� )Zaarch64Zamd64zdmidata is not supported on %sZ dmidecodez0did not find either path %s or dmidecode command)r r r r3 r r4 r- r �unamer r r �whichr9 r )r Z syspath_valuer<