+
    iB                     V   ^ RI t ^ RIt^ RIt^ RIHtHt ^ RIHtHt ^ RI	H
t
HtHtHt ] P                  ! ]4      tRt ! R R]4      t/ R]! R	R
R4      bR]! RRR4      bR]! RRR4      bR]! RRR4      bR]! RRR4      bR]! RRR4      bR]! RRR4      bR]! RRR4      bR ]! R!R"R4      bR#]! R$R%R&4      bR']! R(R)R*4      bR+]! R,R-R4      bR.]! R/R0R&4      bR1]! R2R3R44      bR5]! R6R7R*4      bR8]! R9R:R*4      bR;]! R<R=R4      btR> R? ltR@ RA ltRB RC ltRD RE ltRF RG ltRH RI ltR# )J    N)
NamedTupleOptional)performancesubp)is_containeris_DragonFlyBSD
is_FreeBSD
is_OpenBSDz/sys/class/dmi/idc                   ,   a  ] tR t^t o V 3R ltRtV tR# )KernelNamesc                ^   < V ^8  d   Qh/ S[ ;R&   S[S[ ,          ;R&   S[S[ ,          ;R&   # )   linuxfreebsdopenbsdstrr   )format__classdict__s   "//usr/lib/python3/dist-packages/cloudinit/dmi.py__annotate__KernelNames.__annotate__   s/     J c]  c]      N)__name__
__module____qualname____firstlineno____annotate_func____static_attributes____classdictcell__)r   s   @r   r   r      s      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.versionc                F    V ^8  d   QhR\         R\        \         ,          /# r   keyreturnr   )r   s   "r   r   r   S   s     % %3 %8C= %r   c           	     v   \         P                  V 4      pVe   VP                  f   R# RP                  \        VP                  4      p\
        P                  RV4       \        P                  P                  V4      '       g   \
        P                  RV4       R#  \        P                  ! RV 24      ;_uu_ 4        \        VR4      ;_uu_ 4       pVP                  4       pRRR4       RRR4       XR\        T4      ^,
          ,          R	,           8X  d   R
p TP!                  R4      P#                  4       #   + '       g   i     L_; i  + '       g   i     Lj; i  \         d    \
        P                  RT4        R# i ; i  \$         d$   p\
        P'                  RTTT4        Rp?R# Rp?ii ; i)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   r   DMI_SYS_PATHLOGdebugospathexistsr   TimedopenreadPermissionErrorlendecodestripUnicodeDecodeErrorerror)r5   kmapdmi_key_pathfpkey_dataes   &     r   _read_dmi_syspathrS   S   sY    ""3'D|tzz)##L$**=LII$l377>>,''		#\2,8994$<
 <
wwyH<
9 7c(ma/0588
v&,,..<
 <
99  		%|4  
		;		
 	
 
s`   !E" ?ED<	%E-E" F
 <EEE	E" E" "!FF
F8F33F8c                F    V ^8  d   QhR\         R\        \         ,          /# r4   r   )r   s   "r   r   r   {   s      C HSM r   c                   \         P                  V 4      pVe   VP                  f   R# \        P	                  RVP                  4        RRVP                  .p\
        P
                  ! V4      P                  P                  4       p\        P	                  RW1P                  4       V#   \
        P                   d#   p\        P	                  RXT4        Rp?R# Rp?ii ; i)z'
Reads dmi data from FreeBSD's kenv(1)
Nr8   kenvz-qzkenv returned '%s' for '%s'zfailed kenv cmd: %s
%s)	r=   r>   r   r@   rA   r   stdoutrK   ProcessExecutionErrorr5   rN   cmdresultrR   s   &    r   
_read_kenvr\   {   s     ""3'D|t||+II$dll35tT\\*3&&,,.		/F%% 5		+S!445   AB* *C!?CC!c                F    V ^8  d   QhR\         R\        \         ,          /# r4   r   )r   s   "r   r   r      s      c hsm r   c                   \         P                  V 4      pVe   VP                  f   R# \        P	                  RVP                  4        RRVP                  .p\
        P
                  ! V4      P                  P                  4       p\        P	                  RW1P                  4       V#   \
        P                   d#   p\        P	                  RXT4        Rp?R# Rp?ii ; i)z)
Reads dmi data from OpenBSD's sysctl(8)
Nr8   sysctlz-qnzsysctl returned '%s' for '%s'zfailed sysctl cmd: %s
%s)	r=   r>   r   r@   rA   r   rW   rK   rX   rY   s   &    r   _read_sysctlra      s     ""3'D|t||+II$dll37-3&&,,.		16<<H%% 7		-sA667r]   c                R    V ^8  d   QhR\         R\         R\        \         ,          /# )r   r5   dmidecode_pathr6   r   )r   s   "r   r   r      s%       c hsm r   c                @    VRV .p\         P                   ! V4      P                  P                  4       p\        P	                  RW04       VP                  RR4      R8X  d   R# V#   \         P                   d#   p\        P	                  RXT4        Rp?R# Rp?ii ; i)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   rW   rK   r@   rA   replacerX   )r5   rc   rZ   r[   rR   s   &&   r   _call_dmidecoderh      s    
	z3/3&&,,.		4fB>>#r"b(%% 		0#q9s   A A& $A& &B;BBc                F    V ^8  d   QhR\         R\        \         ,          /# r4   r   )r   s   "r   r   r      s     - -s -x} -r   c                   \        4       '       d   R# \        4       '       g   \        4       '       d   \        V 4      # \	        4       '       d   \        V 4      # \        V 4      pVe   V# R p\        P                  ! 4       ^,          pV! V4      '       g    VR9   g   \        P                  RV4       R# \        P                  ! R4      pV'       d   \        W4      # \        P                  R\        4       R# )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                 \    V R 8H  ;'       g!    V ^ ,          R8H  ;'       d    V R,          R8H  # )x86_64i:r   NN86r   )archs   &r   is_x86read_dmi_data.<locals>.is_x86   s.    xHHDGsN$G$GtBx47GHr   zdmidata is not supported on %s	dmidecodez0did not find either path %s or dmidecode command)aarch64amd64)r   r	   r   r\   r
   ra   rS   rB   unamer@   rA   r   whichrh   r?   )r5   syspath_valuerp   
uname_archrc   s   &    r   read_dmi_datary      s    $ ~~||((#||C  %c*M I AJ:*0D"D		2J?ZZ,Ns33II@,Or   c                0    V ^8  d   QhR\         R\         /# )r   srcr6   )r   )r   s   "r   r   r      s      c c r   c                B   RV 9  d   V # \         P                  4       p\        P                  ! RV 4       Ff  pW!9  d   \        P                  RVV V4       K#  \        V4      pV'       g   Rp\        P                  RVV V4       V P                  RV R2V4      p Kh  	  V # )zBReplace __dmi.VARNAME__ with DMI values from either sysfs or kenv.__z__dmi\.([^_]+)__z7Ignoring invalid __dmi.%s__ in %s. Expected one of: %s.rf   z'Replacing __dmi.%s__ in '%s' with '%s'.z__dmi.)	r=   keysrefindallr@   warningry   rA   rg   )r{   valid_dmi_keysmatch	dmi_values   &   r   sub_dmi_varsr      s    3
(--/N/5&KKI	 !%(	I		5		
 kkF5',i8% 6& Jr   )loggingrB   r   typingr   r   	cloudinitr   r   cloudinit.utilr   r   r	   r
   	getLoggerr   r@   r?   r   r=   rS   r\   ra   rh   ry   r   r   r   r   <module>r      s    	 	 ' '  ! #* .;.. k-t	. k-t. {. . 0$.  [2GN!." ;}.BDI#.$ K0EtL%.& 14'., K0+-.2 [193.8 {3T9.> ;+[?.D ;/E.J K0)K.P ;,iQ.V k2DW. b%P**"-`r   