ÿØÿà JFIF      ÿÛ C      

!"$"$ÿÛ C  ÿÂ p " ÿÄ              ÿÄ             ÿÚ    ÕÔË®
(%	aA*‚XYD¡(J„¡E¢RE,P€XYae )(E¤²€B¤R¥	BQ¤¢ X«)X…€¤   @  

  ..............................................................................................................................................................................
.............................................................................                                                  
                                                                                                                                                                                     ÿØÿà JFIF      ÿÛ C      

!"$"$ÿÛ C  ÿÂ p " ÿÄ              ÿÄ             ÿÚ    ÕÔË®
(%	aA*‚XYD¡(J„¡E¢RE,P€XYae )(E¤²€B¤R¥	BQ¤¢ X«)X…€¤   @  

  ..............................................................................................................................................................................
.............................................................................                                                  
                                                                                                                                                                                     o
    b                     @   sT  d dl Z d dlmZ d dlmZ d dlmZ d dlmZm	Z	 e
eZdZeddd	gZd
ej_i dedddedddedddedddedddedddeddd ed!d"d#ed$d%d&ed'd(d)ed*d+d,ed-d.d/ed0d1d2ed3d4d5ed6d7d8ed9d:d;ed<d=Zd>d? Zd@dA ZdBdC ZdDdE ZdS )F    N)
namedtuple)log)subp)is_container
is_FreeBSDz/sys/class/dmi/idZKernelNameslinuxfreebsd)NNzbaseboard-asset-tagZboard_asset_tagzsmbios.planar.tagzbaseboard-manufacturerZboard_vendorzsmbios.planar.makerzbaseboard-product-nameZ
board_namezsmbios.planar.productzbaseboard-serial-numberZboard_serialzsmbios.planar.serialzbaseboard-versionZboard_versionzsmbios.planar.versionzbios-release-dateZ	bios_datezsmbios.bios.reldatezbios-vendorZbios_vendorzsmbios.bios.vendorzbios-versionZbios_versionzsmbios.bios.versionzchassis-asset-tagZchassis_asset_tagzsmbios.chassis.tagzchassis-manufacturerZchassis_vendorzsmbios.chassis.makerzchassis-serial-numberZchassis_serialzsmbios.chassis.serialzchassis-versionZchassis_versionzsmbios.chassis.versionzsystem-manufacturerZ
sys_vendorzsmbios.system.makerzsystem-product-nameZproduct_namezsmbios.system.productzsystem-serial-numberZproduct_serialzsmbios.system.serialzsystem-uuidZproduct_uuidzsmbios.system.uuidzsystem-versionZproduct_versionzsmbios.system.versionc              
   C   s  t | }|du s|jdu rdS dt|j}td| tj	|s+td| dS zt
|d}| }W d   n1 s@w   Y  W n tyV   td| Y dS w |dt|d  d	 kred
}z|d W S  ty } ztd||| W Y d}~dS d}~ww )z/
    Reads dmi data from /sys/class/dmi/id
    Nz{0}/{1}querying dmi data %szdid not find %srbzCould 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fpZkey_datae r%   //usr/lib/python3/dist-packages/cloudinit/dmi.py_read_dmi_syspath+   s>   

r'   c              
   C   s   t | }|du s|jdu rdS td|j zdd|jg}t|\}}| }td||j |W S  tjyN } ztd|| W Y d}~dS d}~ww )z/
    Reads dmi data from FreeBSD's kenv(1)
    Nr	   Zkenvz-qzkenv returned '%s' for '%s'zfailed kenv cmd: %s
%s)r   r   r   r   r   r   r   ProcessExecutionError)r!   r"   cmdresult_errr$   r%   r%   r&   
_read_kenvQ   s   
r,   c              
   C   s   z%|d| g}t  |\}}| }td||  |dddkr#W dS |W S  t jy@ } ztd|| W Y d}~dS d}~ww )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'. zfailed dmidecode cmd: %s
%sN)r   r   r   r   replacer(   )r!   dmidecode_pathr)   r*   r+   r$   r%   r%   r&   _call_dmidecodeh   s   
r1   c                 C   s   t  rdS t rt| S t| }|dur|S dd }t d }||s0|dv s0td| dS t	d}|r<t
| |S tdt dS )	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$   | dkp| d dko| dd  dkS )NZx86_64r   i   Z86r%   )Zarchr%   r%   r&   is_x86   s   $zread_dmi_data.<locals>.is_x86   )Zaarch64Zamd64zdmidata is not supported on %sZ	dmidecodez0did not find either path %s or dmidecode command)r   r   r,   r'   r   unamer   r   r   whichr1   r   )r!   Zsyspath_valuer4   Z
uname_archr0   r%   r%   r&   read_dmi_dataz   s"   

r8   )r   collectionsr   Z	cloudinitr   Zloggingr   Zcloudinit.utilr   r   Z	getLogger__name__r   r   Zkdmi__new__Z
defaults__r   r'   r,   r1   r8   r%   r%   r%   r&   <module>   s`   









	








&