HEX
Server: Apache/2.4.65 (Debian)
System: Linux kubikelcreative 5.10.0-35-amd64 #1 SMP Debian 5.10.237-1 (2025-05-19) x86_64
User: www-data (33)
PHP: 8.4.13
Disabled: NONE
Upload Files
File: //usr/lib/python3/dist-packages/cloudinit/__pycache__/dmi.cpython-39.pyc
a

��`��@sddlmZddlmZddlmZmZddlmZddl	Z	e�
e�ZdZ
eddd	g�Zd
ej_edd�ed
d�edd�edd�edd�edd�edd�edd�edd�edd�edd �ed!d"�ed#d$�ed%d&�ed'd(�ed)d*�ed+d,�d-�Zd.d/�Zd0d1�Zd2d3�Zd4d5�ZdS)6�)�log)�subp)�is_container�
is_FreeBSD)�
namedtupleNz/sys/class/dmi/idZKernelNames�linux�freebsd)NNZboard_asset_tagzsmbios.planar.tagZboard_vendorzsmbios.planar.makerZ
board_namezsmbios.planar.productZboard_serialzsmbios.planar.serialZ
board_versionzsmbios.planar.versionZ	bios_datezsmbios.bios.reldateZbios_vendorzsmbios.bios.vendorZbios_versionzsmbios.bios.versionZchassis_asset_tagzsmbios.chassis.tagZchassis_vendorzsmbios.chassis.makerZchassis_serialzsmbios.chassis.serialZchassis_versionzsmbios.chassis.versionZ
sys_vendorzsmbios.system.makerZproduct_namezsmbios.system.productZproduct_serialzsmbios.system.serialZproduct_uuidzsmbios.system.uuidZproduct_versionzsmbios.system.version)zbaseboard-asset-tagzbaseboard-manufacturerzbaseboard-product-namezbaseboard-serial-numberzbaseboard-versionzbios-release-datezbios-vendorzbios-versionzchassis-asset-tagzchassis-manufacturerzchassis-serial-numberzchassis-versionzsystem-manufacturerzsystem-product-namezsystem-serial-numberzsystem-uuidzsystem-versionc
Cst�|�}|dus|jdur dSd�t|j�}t�d|�tj�	|�sVt�d|�dSz6t
|d��}|��}Wd�n1s�0YWn ty�t�d|�YdS0|dt
|�dd	kr�d
}z|�d���WSt�y}zt�d|||�WYd}~n
d}~00dS)
z/
    Reads dmi data from /sys/class/dmi/id
    Nz{0}/{1}�querying dmi data %szdid not find %s�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�exists�open�read�PermissionError�len�decode�strip�UnicodeDecodeError�error)�key�kmapZdmi_key_path�fpZkey_data�e�r%�//usr/lib/python3/dist-packages/cloudinit/dmi.py�_read_dmi_syspath+s.
*�r'c
Cs�t�|�}|dus|jdur dSt�d|j�z8dd|jg}t�|�\}}|��}t�d||j�|WStjy�}zt�d||�WYd}~dSd}~00dS)z/
    Reads dmi data from FreeBSD's kenv(1)
    Nr	Zkenvz-qzkenv returned '%s' for '%s'zfailed kenv cmd: %s
%s)rrrrrrr�ProcessExecutionError)r!r"�cmd�result�_errr$r%r%r&�
_read_kenvMs
r,c
Cs�zJ|d|g}t�|�\}}|��}t�d||�|�dd�dkrFWdS|WStjy�}zt�d||�WYd}~dSd}~00dS)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)rrrr�replacer()r!�dmidecode_pathr)r*r+r$r%r%r&�_call_dmidecodeds
r1cCs�t�r
dSt�rt|�St|�}|dur,|Sdd�}t��d}||�s`|dvs`t�d|�dSt�	d�}|rxt
||�St�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.
    NcSs$|dkp"|ddko"|dd�dkS)N�x86_64r�i��86r%)�archr%r%r&�is_x86�szread_dmi_data.<locals>.is_x86�)Zaarch64�amd64zdmidata is not supported on %sZ	dmidecodez0did not find either path %s or dmidecode command)
rrr,r'r�unamerrr�whichr1�warningr)r!Z
syspath_valuer7�
uname_archr0r%r%r&�
read_dmi_datavs&

�r>)�	cloudinitr�loggingrZcloudinit.utilrr�collectionsrr�	getLogger�__name__rrZkdmi�__new__Z
defaults__rr'r,r1r>r%r%r%r&�<module>s<
�"