Current File : //proc/353637/cwd/lib/python3/dist-packages/cloudinit/__pycache__/dmi.cpython-312.pyc
�

x[hB���ddlZddlZddlZddlmZmZddlmZmZddl	m
Z
mZmZm
Z
eje�ZdZGd�de�Zided	d
d��dedd
d��deddd��deddd��deddd��deddd��deddd��deddd��d ed!d"d��d#ed$d%d&��d'ed(d)d*��d+ed,d-d��d.ed/d0d&��d1ed2d3d4��d5ed6d7d*��d8ed9d:d*��d;ed<d=d��Zd>ed?eefd@�Zd>ed?eefdA�Zd>ed?eefdB�Zd>edCed?eefdD�Zd>ed?eefdE�ZdFed?efdG�Zy)H�N)�
NamedTuple�Optional)�performance�subp)�is_container�is_DragonFlyBSD�
is_FreeBSD�
is_OpenBSDz/sys/class/dmi/idc�8�eZdZUeed<eeed<eeed<y)�KernelNames�linux�freebsd�openbsdN)�__name__�
__module__�__qualname__�str�__annotations__r���//usr/lib/python3/dist-packages/cloudinit/dmi.pyrrs���J�
�c�]��
�c�]�rrzbaseboard-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.makerz	hw.vendorzchassis-serial-number�chassis_serialzsmbios.chassis.serialzhw.uuidzchassis-version�chassis_versionzsmbios.chassis.versionzsystem-manufacturer�
sys_vendorzsmbios.system.makerzsystem-product-name�product_namezsmbios.system.productz
hw.productzsystem-serial-number�product_serialzsmbios.system.serialzsystem-uuid�product_uuidzsmbios.system.uuidzsystem-version�product_versionzsmbios.system.version�key�returnc��tj|�}|�|j�ydjt|j�}t
j
d|�tjj|�st
j
d|�y	tjd|���5t|d�5}|j�}ddd�ddd�dt|�d	z
zd
zk(rd}	|j!d�j#�S#1swY�JxYw#1swY�NxYw#t$rt
j
d|�YywxYw#t$$r"}t
j'd
|||�Yd}~yd}~wwxYw)z/
    Reads dmi data from /sys/class/dmi/id
    Nz{0}/{1}�querying dmi data %szdid not find %szReading �rbzCould not read %s����
r�utf8z-utf-8 decode of content (%s) in %s failed: %s)�DMIDECODE_TO_KERNEL�getr
�format�DMI_SYS_PATH�LOG�debug�os�path�existsr�Timed�open�read�PermissionError�len�decode�strip�UnicodeDecodeError�error)r)�kmap�dmi_key_path�fp�key_data�es      r�_read_dmi_syspathrISs^���"�"�3�'�D��|�t�z�z�)���#�#�L�$�*�*�=�L��I�I�$�l�3�
�7�7�>�>�,�'��	�	�#�\�2���
�
�
��,��8�
9�	!�4��$�<
�	!�
��w�w�y�H�	!�	!��7�c�(�m�a�/�0�5�8�8���
����v�&�,�,�.�.�	!�	!��	!�	!�����	�	�%�|�4�����
��	�	�;���
�		
�	
���
�sZ�D)�*
D�7D�D�D)�2E�D	�D�D&�"D)�)E�
E�	E9�E4�4E9c��tj|�}|�|j�ytj	d|j�	dd|jg}tj
|�jj�}tj	d||j�|S#t
j$r!}tj	d|�Yd}~yd}~wwxYw)z/
    Reads dmi data from FreeBSD's kenv(1)
    Nr,�kenvz-qzkenv returned '%s' for '%s'zfailed kenv cmd: %s
%s)	r2r3rr6r7r�stdoutrA�ProcessExecutionError�r)rD�cmd�resultrHs     r�
_read_kenvrQ{s����"�"�3�'�D��|�t�|�|�+���I�I�$�d�l�l�3�5��t�T�\�\�*�����3��&�&�,�,�.���	�	�/�����F��
���%�%�5��	�	�+�S�!�4�4���5���AB%�%C�8C�Cc��tj|�}|�|j�ytj	d|j�	dd|jg}tj
|�jj�}tj	d||j�|S#t
j$r!}tj	d|�Yd}~yd}~wwxYw)z1
    Reads dmi data from OpenBSD's sysctl(8)
    Nr,�sysctlz-qnzsysctl returned '%s' for '%s'zfailed sysctl cmd: %s
%s)	r2r3rr6r7rrLrArMrNs     r�_read_sysctlrU�s����"�"�3�'�D��|�t�|�|�+���I�I�$�d�l�l�3�7������-�����3��&�&�,�,�.���	�	�1�6�4�<�<�H��
���%�%�7��	�	�-�s�A�6�6���7�rR�dmidecode_pathc�4�	|d|g}tj|�jj�}tj	d||�|jdd�dk(ry|S#tj$r!}tj	d|�Yd}~yd}~wwxYw)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)rrLrAr6r7�replacerM)r)rVrOrPrHs     r�_call_dmidecoder[�s���
	��z�3�/�����3��&�&�,�,�.���	�	�4�f�c�B��>�>�#�r�"�b�(���
���%�%���	�	�0�#�q�9����s�AA#�!A#�#B�6B�Bc��t�ryt�s
t�rt|�St	�rt|�St
|�}|�|Sd�}tj�d}||�s|dvstjd|�ytjd�}|rt||�Stjdt�y)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�4�|dk(xs|ddk(xr|dddk(S)N�x86_64r�i��86r)�archs r�is_x86zread_dmi_data.<locals>.is_x86�s*���x��H�D��G�s�N�$G�t�A�B�x�4�7G�Hr�)�aarch64�amd64zdmidata is not supported on %s�	dmidecodez0did not find either path %s or dmidecode command)rr	rrQr
rUrIr8�unamer6r7r�whichr[r5)r)�
syspath_valuerc�
uname_archrVs     r�
read_dmi_datarl�s���$�~���|��(��#����|��C� � �%�c�*�M�� ���I�����A��J��:��*�0D�"D��	�	�2�J�?���Z�Z��,�N���s�N�3�3��I�I�@�,�O�r�srcc�$�d|vr|Stj�}tjd|�D]\}||vrtjd|||�� t
|�}|sd}tjd|||�|jd|�d�|�}�^|S)zBReplace __dmi.VARNAME__ with DMI values from either sysfs or kenv.�__z__dmi\.([^_]+)__z7Ignoring invalid __dmi.%s__ in %s. Expected one of: %s.rYz'Replacing __dmi.%s__ in '%s' with '%s'.z__dmi.)	r2�keys�re�findallr6�warningrlr7rZ)rm�valid_dmi_keys�match�	dmi_values    r�sub_dmi_varsrw�s����3���
�(�-�-�/�N����/��5�9����&��K�K�I����	
�
�!�%�(�	���I��	�	�5����		
��k�k�F�5�'��,�i�8��%9�&�Jr)�loggingr8rq�typingrr�	cloudinitrr�cloudinit.utilrrr	r
�	getLoggerrr6r5rr2rrIrQrUr[rlrwrrr�<module>r}s����	�	�'�'����g����!��#���*��.��;��.���.��k��-�t��	.��k��-�t��.��{��.�� �.����0�$��.� ��[�2G��N�!.�"�;�}�.B�D�I�#.�$�K��0E�t�L�%.�&���1�4��'.�,�K��0�+��-.�2�[��1�9��3.�8�{��3�T��9.�>�;��+�[��?.�D�;��/���E.�J�K��0�)��K.�P�;��,�i��Q.�V�k��2�D��W.��b%�3�%�8�C�=�%�P�C��H�S�M��*�c��h�s�m��*���c��h�s�m��"-�s�-�x��}�-�`�c��c�r