Ë
    x[hB  ã                   óŽ  — d dl Z d dlZd dlZd dlmZmZ d dlmZmZ d dl	m
Z
mZmZmZ  e j                  e«      ZdZ G d„ de«      Zi d ed	d
d«      “d eddd«      “d eddd«      “d eddd«      “d eddd«      “d eddd«      “d eddd«      “d eddd«      “d  ed!d"d«      “d# ed$d%d&«      “d' ed(d)d*«      “d+ ed,d-d«      “d. ed/d0d&«      “d1 ed2d3d4«      “d5 ed6d7d*«      “d8 ed9d:d*«      “d; ed<d=d«      “Zd>ed?ee   fd@„Zd>ed?ee   fdA„Zd>ed?ee   fdB„Zd>edCed?ee   fdD„Zd>ed?ee   fdE„ZdFed?efdG„Zy)Hé    N)Ú
NamedTupleÚOptional)ÚperformanceÚsubp)Úis_containerÚis_DragonFlyBSDÚ
is_FreeBSDÚ
is_OpenBSDz/sys/class/dmi/idc                   ó8   — e Zd ZU eed<   ee   ed<   ee   ed<   y)ÚKernelNamesÚlinuxÚfreebsdÚopenbsdN)Ú__name__Ú
__module__Ú__qualname__ÚstrÚ__annotations__r   © ó    ú//usr/lib/python3/dist-packages/cloudinit/dmi.pyr   r      s   … ØƒJØ�c‰]ÓØ�c‰]Ôr   r   zbaseboard-asset-tagÚboard_asset_tagzsmbios.planar.tagzbaseboard-manufacturerÚboard_vendorzsmbios.planar.makerzbaseboard-product-nameÚ
board_namezsmbios.planar.productzbaseboard-serial-numberÚboard_serialzsmbios.planar.serialzbaseboard-versionÚboard_versionzsmbios.planar.versionzbios-release-dateÚ	bios_datezsmbios.bios.reldatezbios-vendorÚbios_vendorzsmbios.bios.vendorzbios-versionÚbios_versionzsmbios.bios.versionzchassis-asset-tagÚchassis_asset_tagzsmbios.chassis.tagzchassis-manufacturerÚchassis_vendorzsmbios.chassis.makerz	hw.vendorzchassis-serial-numberÚchassis_serialzsmbios.chassis.serialzhw.uuidzchassis-versionÚchassis_versionzsmbios.chassis.versionzsystem-manufacturerÚ
sys_vendorzsmbios.system.makerzsystem-product-nameÚproduct_namezsmbios.system.productz
hw.productzsystem-serial-numberÚproduct_serialzsmbios.system.serialzsystem-uuidÚproduct_uuidzsmbios.system.uuidzsystem-versionÚproduct_versionzsmbios.system.versionÚkeyÚreturnc                 óø  — t         j                  | «      }|�|j                  €ydj                  t        |j                  «      }t
        j                  d|«       t        j                  j                  |«      st
        j                  d|«       y	 t        j                  d|› �«      5  t        |d«      5 }|j                  «       }ddd«       ddd«       dt        |«      d	z
  z  d
z   k(  rd}	 |j!                  d«      j#                  «       S # 1 sw Y   ŒJxY w# 1 sw Y   ŒNxY w# t        $ r t
        j                  d|«       Y yw xY w# t$        $ r"}t
        j'                  d|||«       Y d}~yd}~ww xY w)z/
    Reads dmi data from /sys/class/dmi/id
    Nz{0}/{1}úquerying dmi data %szdid not find %szReading ÚrbzCould 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_syspathrI   S   s^  € ô ×"Ñ" 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Â7DÃDÃD) Ã2E ÄD	ÄDÄD&Ä"D) Ä)EÅ
EÅ	E9ÅE4Å4E9c                 ó¸  — t         j                  | «      }|�|j                  €yt        j	                  d|j                  «       	 dd|j                  g}t        j
                  |«      j                  j                  «       }t        j	                  d||j                  «       |S # t
        j                  $ r!}t        j	                  d|«       Y d}~yd}~ww xY w)z/
    Reads dmi data from FreeBSD's kenv(1)
    Nr,   Úkenvz-qzkenv returned '%s' for '%s'zfailed kenv cmd: %s
%s)	r2   r3   r   r6   r7   r   ÚstdoutrA   ÚProcessExecutionError©r)   rD   ÚcmdÚresultrH   s        r   Ú
_read_kenvrQ   {   s°   € ô ×"Ñ" 3Ó'€DØ€|�t—|‘|Ð+Øä‡I�IÐ$ d§l¡lÔ3ð5Ø�t˜TŸ\™\Ð*ˆÜ—‘˜3“×&Ñ&×,Ñ,Ó.ˆÜ�	‰	Ð/°¸¿¹ÔFØˆøÜ×%Ñ%ò 5Ü�	‰	Ð+¨S°!×4Ð4àûð5úó   ÁAB% Â%CÂ8CÃCc                 ó¸  — t         j                  | «      }|�|j                  €yt        j	                  d|j                  «       	 dd|j                  g}t        j
                  |«      j                  j                  «       }t        j	                  d||j                  «       |S # t
        j                  $ r!}t        j	                  d|«       Y d}~yd}~ww xY w)z1
    Reads dmi data from OpenBSD's sysctl(8)
    Nr,   Úsysctlz-qnzsysctl returned '%s' for '%s'zfailed sysctl cmd: %s
%s)	r2   r3   r   r6   r7   r   rL   rA   rM   rN   s        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}t        j                   |«      j                  j                  «       }t        j	                  d|| «       |j                  dd«      dk(  ry|S # t         j                  $ r!}t        j	                  d|«       Y d}~yd}~ww xY 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   rL   rA   r6   r7   ÚreplacerM   )r)   rV   rO   rP   rH   s        r   Ú_call_dmidecoder[   ¥   s…   € ð
	Ø˜z¨3Ð/ˆÜ—‘˜3“×&Ñ&×,Ñ,Ó.ˆÜ�	‰	Ð4°f¸cÔBØ�>‰>˜#˜rÓ" bÒ(ØØˆøÜ×%Ñ%ò Ü�	‰	Ð0°#°qÔ9Üûðús   ‚AA# Á!A# Á#BÁ6BÂBc                 ó”  — t        «       ryt        «       s
t        «       rt        | «      S t	        «       rt        | «      S t        | «      }|�|S d„ }t        j                  «       d   } ||«      s|dv st        j                  d|«       yt        j                  d«      }|rt        | |«      S t        j                  dt        «       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   — | dk(  xs | d   dk(  xr | dd  dk(  S )NÚx86_64r   Úié   Ú86r   )Úarchs    r   Úis_x86zread_dmi_data.<locals>.is_x86Õ   s*   € Ø�xÑÒH D¨¡G¨s¡NÒ$G°t¸A¸B°xÀ4Ñ7GÐHr   é   )Úaarch64Úamd64zdmidata is not supported on %sÚ	dmidecodez0did not find either path %s or dmidecode command)r   r	   r   rQ   r
   rU   rI   r8   Úunamer6   r7   r   Úwhichr[   r5   )r)   Úsyspath_valuerc   Ú
uname_archrV   s        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| vr| S t         j                  «       }t        j                  d| «      D ]\  }||vrt        j                  d|| |«       Œ t        |«      }|sd}t        j                  d|| |«       | j                  d|› 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.rY   z'Replacing __dmi.%s__ in '%s' with '%s'.z__dmi.)	r2   ÚkeysÚreÚfindallr6   Úwarningrl   r7   rZ   )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   )Úloggingr8   rq   Útypingr   r   Ú	cloudinitr   r   Úcloudinit.utilr   r   r	   r
   Ú	getLoggerr   r6   r5   r   r2   r   rI   rQ   rU   r[   rl   rw   r   r   r   ú<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   