ó
    x[hB  ã                   óš  • S SK r S SKrS SKrS SKJrJr  S SKJrJr  S SK	J
r
JrJrJr  \ R                  " \5      rSr " S S\5      r0 S\" S	S
S5      _S\" SSS5      _S\" SSS5      _S\" SSS5      _S\" SSS5      _S\" SSS5      _S\" SSS5      _S\" SSS5      _S \" S!S"S5      _S#\" S$S%S&5      _S'\" S(S)S*5      _S+\" S,S-S5      _S.\" S/S0S&5      _S1\" S2S3S45      _S5\" S6S7S*5      _S8\" S9S:S*5      _S;\" S<S=S5      _rS>\S?\\   4S@ jrS>\S?\\   4SA jrS>\S?\\   4SB jrS>\SC\S?\\   4SD jrS>\S?\\   4SE jrSF\S?\4SG jrg)Hé    N)Ú
NamedTupleÚOptional)ÚperformanceÚsubp)Úis_containerÚis_DragonFlyBSDÚ
is_FreeBSDÚ
is_OpenBSDz/sys/class/dmi/idc                   ó@   • \ rS rSr% \\S'   \\   \S'   \\   \S'   Srg)ÚKernelNamesé   ÚlinuxÚfreebsdÚopenbsd© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__ÚstrÚ__annotations__r   Ú__static_attributes__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                 ó"  • [         R                  U 5      nUb  UR                  c  gSR                  [        UR                  5      n[
        R                  SU5        [        R                  R                  U5      (       d  [
        R                  SU5        g [        R                  " SU 35         [        US5       nUR                  5       nSSS5        SSS5        WS[        U5      S	-
  -  S
-   :X  a  Sn UR!                  S5      R#                  5       $ ! , (       d  f       NP= f! , (       d  f       NY= f! [         a    [
        R                  SU5         gf = f! [$         a"  n[
        R'                  SUUU5         SnAgSnAff = f)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_syspathrL   S   sQ  € ô ×"Ñ" 3Ó'€DØ�|�t—z‘zÑ)ØØ×#Ñ#¤L°$·*±*Ó=€LÜ‡I�IÐ$ lÔ3Ü�7‰7�>‰>˜,×'Ñ'Ü�	‰	Ð# \Ô2ØðÜ×Ò ¨,¨Ð8Õ9¼4Ø˜$ô<
àØ—w‘w“yˆH÷<
×9ð �7œc (›m¨aÑ/Ñ0°5Ñ8Ó8Øˆð
Ø�‰˜vÓ&×,Ñ,Ó.Ð.÷<
õ <
ú×9Õ9ûô ó Ü�	‰	Ð% |Ô4Ùðûô ó 
Ü�	‰	Ø;ØØØ÷		
ð 	
ð ûð
ús`   ÂD< Â2D+Â?DÃD+ÃD< Ã;E" Ä
D(	Ä$D+Ä+
D9Ä5D< Ä9D< Ä< EÅEÅ"
FÅ,F	Æ	Fc                 ó¾  • [         R                  U 5      nUb  UR                  c  g[        R	                  SUR                  5         SSUR                  /n[
        R
                  " U5      R                  R                  5       n[        R	                  SX1R                  5        U$ ! [
        R                   a!  n[        R	                  SWU5         SnAgSnAff = f)z'
Reads dmi data from FreeBSD's kenv(1)
Nr/   Úkenvz-qzkenv returned '%s' for '%s'zfailed kenv cmd: %s
%s)	r5   r6   r   r9   r:   r   ÚstdoutrD   ÚProcessExecutionError©r,   rG   ÚcmdÚresultrK   s        r   Ú
_read_kenvrT   {   s®   € ô ×"Ñ" 3Ó'€DØ�|�t—|‘|Ñ+Øä‡I�IÐ$ d§l¡lÔ3ð5Ø�t˜TŸ\™\Ð*ˆÜ—’˜3“×&Ñ&×,Ñ,Ó.ˆÜ�	‰	Ð/°¿¹ÔFØˆøÜ×%Ñ%ó 5Ü�	‰	Ð+¨S°!×4Ð4àûð5úó   ÁAB' Â'CÂ;CÃCc                 ó¾  • [         R                  U 5      nUb  UR                  c  g[        R	                  SUR                  5         SSUR                  /n[
        R
                  " U5      R                  R                  5       n[        R	                  SX1R                  5        U$ ! [
        R                   a!  n[        R	                  SWU5         SnAgSnAff = f)z)
Reads dmi data from OpenBSD's sysctl(8)
Nr/   Úsysctlz-qnzsysctl returned '%s' for '%s'zfailed sysctl cmd: %s
%s)	r5   r6   r   r9   r:   r   rO   rD   rP   rQ   s        r   Ú_read_sysctlrX   �   s®   € ô ×"Ñ" 3Ó'€DØ�|�t—|‘|Ñ+Øä‡I�IÐ$ d§l¡lÔ3ð7Ø˜ §¡Ð-ˆÜ—’˜3“×&Ñ&×,Ñ,Ó.ˆÜ�	‰	Ð1°6¿<¹<ÔHØˆøÜ×%Ñ%ó 7Ü�	‰	Ð-¨s°A×6Ð6àûð7úrU   Údmidecode_pathc                 ó8  •  USU /n[         R                   " U5      R                  R                  5       n[        R	                  SX05        UR                  SS5      S:X  a  gU$ ! [         R                   a!  n[        R	                  SWU5         SnAgSnAff = f)zs
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   rO   rD   r9   r:   ÚreplacerP   )r,   rY   rR   rS   rK   s        r   Ú_call_dmidecoder^   ¥   sƒ   € ð
	Ø˜z¨3Ð/ˆÜ—’˜3“×&Ñ&×,Ñ,Ó.ˆÜ�	‰	Ð4°fÔBØ�>‰>˜#˜rÓ" bÓ(ØØˆøÜ×%Ñ%ó Ü�	‰	Ð0°#°qÔ9Üûðús   ‚AA$ Á"A$ Á$BÁ8BÂBc                 óØ  • [        5       (       a  g[        5       (       d  [        5       (       a  [        U 5      $ [	        5       (       a  [        U 5      $ [        U 5      nUb  U$ S n[        R                  " 5       S   nU" U5      (       d  US;   d  [        R                  SU5        g[        R                  " S5      nU(       a  [        X5      $ [        R                  S[        5        g)aX  
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                 óH   • U S:H  =(       d    U S   S:H  =(       a    U SS  S:H  $ )NÚx86_64r   Úié   Ú86r   )Úarchs    r   Úis_x86Ú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   rT   r
   rX   rL   r;   Úunamer9   r:   r   Úwhichr^   r8   )r,   Úsyspath_valuerf   Ú
uname_archrY   s        r   Úread_dmi_datarp   ¶   s¹   € ô$ ‡~�~Øä‡|�|”×(Ñ(Ü˜#‹Ðä‡|�|Ü˜CÓ Ð ä% cÓ*€MØÑ ØÐòIô —’“˜A‘€JÙ�:×Ñ *Ð0DÓ"DÜ�	‰	Ð2°JÔ?Øä—Z’Z Ó,€NÞÜ˜sÓ3Ð3ä‡I�IÐ@Ä,ÔOØr   Úsrcc                 ó<  • SU ;  a  U $ [         R                  5       n[        R                  " SU 5       Hd  nX!;  a  [        R                  SUU U5        M"  [        U5      nU(       d  Sn[        R                  SUU U5        U R                  SU S3U5      n Mf     U $ )zBReplace __dmi.VARNAME__ with DMI values from either sysfs or kenv.Ú__z__dmi\.([^_]+)__z7Ignoring invalid __dmi.%s__ in %s. Expected one of: %s.r\   z'Replacing __dmi.%s__ in '%s' with '%s'.z__dmi.)	r5   ÚkeysÚreÚfindallr9   Úwarningrp   r:   r]   )rq   Úvalid_dmi_keysÚmatchÚ	dmi_values       r   Úsub_dmi_varsr{   æ   s¡   € à�3ƒØˆ
Ü(×-Ñ-Ó/€NÜ—’Ð/°Ö5ˆØÓ&Ü�K‰KØIØØØô	ñ Ü! %Ó(ˆ	ÞØˆIÜ�	‰	Ø5ØØØô		
ð �k‰k˜F 5 '¨Ð,¨iÓ8Šñ% 6ð& €Jr   )Úloggingr;   ru   Útypingr   r   Ú	cloudinitr   r   Úcloudinit.utilr   r   r	   r
   Ú	getLoggerr   r9   r8   r   r5   r   rL   rT   rX   r^   rp   r{   r   r   r   Ú<module>r�      s�  ðã Û 	Û 	ß 'ç '÷ó ð ×Ò˜Ó!€ð #€ô�*ô ð.Ø™;ØÐ.°óð.ð ™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   