HEX
Server: Apache/2.4.52 (Ubuntu)
System: Linux ip-10-0-8-47 6.8.0-1021-aws #23~22.04.1-Ubuntu SMP Tue Dec 10 16:31:58 UTC 2024 aarch64
User: ubuntu (1000)
PHP: 8.1.2-1ubuntu2.22
Disabled: NONE
Upload Files
File: //proc/self/root/lib/python3/dist-packages/cloudinit/__pycache__/dmi.cpython-310.pyc
o

�AdC�@s�ddlZddlZddlmZddlmZddlmZddlm	Z	ddl
mZmZe�
e�ZdZedd	d
g�Zdej_ided
d��dedd��dedd��dedd��dedd��dedd��dedd ��d!ed"d#��d$ed%d&��d'ed(d)��d*ed+d,��d-ed.d/��d0ed1d2��d3ed4d5��d6ed7d8��d9ed:d;��d<ed=d>��Zd?ed@eefdAdB�Zd?ed@eefdCdD�Zd?edEed@eefdFdG�Zd?ed@eefdHdI�ZdJed@efdKdL�ZdS)M�N)�
namedtuple)�Optional)�log)�subp)�is_container�
is_FreeBSDz/sys/class/dmi/id�KernelNames�linux�freebsd)NNzbaseboard-asset-tag�board_asset_tagzsmbios.planar.tagzbaseboard-manufacturer�board_vendorzsmbios.planar.makerzbaseboard-product-name�
board_namezsmbios.planar.productzbaseboard-serial-number�board_serialzsmbios.planar.serialzbaseboard-version�
board_versionzsmbios.planar.versionzbios-release-date�	bios_datezsmbios.bios.reldatezbios-vendor�bios_vendorzsmbios.bios.vendorzbios-version�bios_versionzsmbios.bios.versionzchassis-asset-tag�chassis_asset_tagzsmbios.chassis.tagzchassis-manufacturer�chassis_vendorzsmbios.chassis.makerzchassis-serial-number�chassis_serialzsmbios.chassis.serialzchassis-version�chassis_versionzsmbios.chassis.versionzsystem-manufacturer�
sys_vendorzsmbios.system.makerzsystem-product-name�product_namezsmbios.system.productzsystem-serial-number�product_serialzsmbios.system.serialzsystem-uuid�product_uuidzsmbios.system.uuidzsystem-version�product_versionzsmbios.system.version�key�returnc
Cst�|�}|dus|jdurdSd�t|j�}t�d|�tj�	|�s+t�d|�dSzt
|d��}|��}Wd�n1s@wYWntyVt�d|�YdSw|dt
|�dd	kred
}z|�d���WSty�}zt�d|||�WYd}~dSd}~ww)
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)r�kmap�dmi_key_path�fp�key_data�e�r;�//usr/lib/python3/dist-packages/cloudinit/dmi.py�_read_dmi_syspath?s>

������r=c
Cs�t�|�}|dus|jdurdSt�d|j�zdd|jg}t�|�\}}|��}t�d||j�|WStjyN}zt�d||�WYd}~dSd}~ww)z/
    Reads dmi data from FreeBSD's kenv(1)
    Nr�kenvz-qzkenv returned '%s' for '%s'zfailed kenv cmd: %s
%s)r%r&r
r)r*rr3�ProcessExecutionError)rr6�cmd�result�_errr:r;r;r<�
_read_kenves
��rC�dmidecode_pathc
Cs�z%|d|g}t�|�\}}|��}t�d||�|�dd�dkr#WdS|WStjy@}zt�d||�WYd}~dSd}~ww)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)rr3r)r*�replacer?)rrDr@rArBr:r;r;r<�_call_dmidecode{s
��rHcCs�t�rdSt�rt|�St|�}|dur|Sdd�}t��d}||�s0|dvs0t�d|�dSt�	d�}|r<t
||�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�s$zread_dmi_data.<locals>.is_x86�)�aarch64�amd64zdmidata is not supported on %s�	dmidecodez0did not find either path %s or dmidecode command)rrrCr=r+�unamer)r*r�whichrHr()r�
syspath_valuerN�
uname_archrDr;r;r<�
read_dmi_data�s"

rW�srccCsxd|vr|St��}t�d|�D])}||vrt�d|||�qt|�}|s'd}t�d|||�|�d|�d�|�}q|S)zBReplace __dmi.VARNAME__ with DMI values from either sysfs or kenv.�__z__dmi\.([^_]+)__z7Ignoring invalid __dmi.%s__ in %s. Expected one of: %s.rFz'Replacing __dmi.%s__ in '%s' with '%s'.z__dmi.)	r%�keys�re�findallr)�warningrWr*rG)rX�valid_dmi_keys�match�	dmi_valuer;r;r<�sub_dmi_vars�s.��ra)r+r[�collectionsr�typingr�	cloudinitr�loggingr�cloudinit.utilrr�	getLogger�__name__r)r(r�__new__�__defaults__r%�strr=rCrHrWrar;r;r;r<�<module>s�

�������
�
�

�
���������
�����
"�
#�'&-