Your IP : 216.73.217.13


Current Path : /usr/lib/python3/dist-packages/cloudinit/__pycache__/
Upload File :
Current File : //usr/lib/python3/dist-packages/cloudinit/__pycache__/dmi.cpython-38.pyc

U

�AdC�@shddlZddlZddlmZddlmZddlmZddlm	Z	ddl
mZmZe�
e�ZdZedd	d
g�Zdej_edd
�edd�edd�edd�edd�edd�edd�edd�edd�edd�ed d!�ed"d#�ed$d%�ed&d'�ed(d)�ed*d+�ed,d-�d.�Zeeed/�d0d1�Zeeed/�d2d3�Zeeeed4�d5d6�Zeeed/�d7d8�Zeed9�d:d;�ZdS)<�N)�
namedtuple)�Optional)�log)�subp)�is_container�
is_FreeBSDz/sys/class/dmi/id�KernelNames�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-version)�key�returnc
Cst�|�}|dks|jdkr dSd�t|j�}t�d|�tj�	|�sVt�d|�dSz"t
|d��}|��}W5QRXWn"tk
r�t�d|�YdSX|dt
|�dd	kr�d
}z|�d���WStk
�r�}zt�d|||�W5d}~XYnXdS)
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�kmapZdmi_key_path�fpZkey_data�e�r(�//usr/lib/python3/dist-packages/cloudinit/dmi.py�_read_dmi_syspath?s4
�r*c
Cs�t�|�}|dks|jdkr dSt�d|j�z8dd|jg}t�|�\}}|��}t�d||j�|WStjk
r�}zt�d||�W5d}~XYnXdS)z/
    Reads dmi data from FreeBSD's kenv(1)
    Nr
Zkenvz-qzkenv returned '%s' for '%s'zfailed kenv cmd: %s
%s)rrr
rrrr"�ProcessExecutionError)rr%�cmd�result�_errr'r(r(r)�
_read_kenves
 r/)r�dmidecode_pathrc
Cs�zJ|d|g}t�|�\}}|��}t�d||�|�dd�dkrFWdS|WStjk
r�}zt�d||�WY�dSd}~XYnXdS)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)rr"rr�replacer+)rr0r,r-r.r'r(r(r)�_call_dmidecode{s
r4cCs�t�r
dSt�rt|�St|�}|dk	r,|Sdd�}t��d}||�s`|dks`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)NZx86_64r�i�Z86r()Zarchr(r(r)�is_x86�szread_dmi_data.<locals>.is_x86�)Zaarch64Zamd64zdmidata is not supported on %sZ	dmidecodez0did not find either path %s or dmidecode command)rrr/r*r�unamerrrZwhichr4r)rZ
syspath_valuer7Z
uname_archr0r(r(r)�
read_dmi_data�s"

r:)�srcrcCsxd|kr|St��}t�d|�D]R}||kr>t�d|||�q t|�}|sNd}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.r2z'Replacing __dmi.%s__ in '%s' with '%s'.z__dmi.)	r�keys�re�findallrZwarningr:rr3)r;Zvalid_dmi_keys�matchZ	dmi_valuer(r(r)�sub_dmi_vars�s.��rA)rr>�collectionsr�typingrZ	cloudinitrZloggingrZcloudinit.utilrrZ	getLogger�__name__rrr�__new__�__defaults__r�strr*r/r4r:rAr(r(r(r)�<module>sx
����������'&-