a '¡Dgrã@s¦ddlZddlZddlZddlmZddlmZddlmZm Z ddl m Z m Z m Z mZe e¡ZdZedgd¢ƒZd ej_ed d dƒed d dƒedddƒedddƒedddƒedddƒedddƒedddƒedddƒedddƒedd d!ƒed"d#dƒed$d%dƒed&d'd(ƒed)d*d!ƒed+d,d!ƒed-d.dƒd/œZeeed0œd1d2„Zeeed0œd3d4„Zeeed0œd5d6„Zeeeed7œd8d9„Zeeed0œd:d;„Zeed<œd=d>„ZdS)?éN)Ú namedtuple)ÚOptional)Ú performanceÚsubp)Ú is_containerÚis_DragonFlyBSDÚ is_FreeBSDÚ is_OpenBSDz/sys/class/dmi/idÚ KernelNames)ÚlinuxÚfreebsdÚopenbsd)NNNZboard_asset_tagzsmbios.planar.tagZ board_vendorzsmbios.planar.makerZ board_namezsmbios.planar.productZ board_serialzsmbios.planar.serialZ board_versionzsmbios.planar.versionZ bios_datezsmbios.bios.reldateZ bios_vendorzsmbios.bios.vendorZ bios_versionzsmbios.bios.versionZchassis_asset_tagzsmbios.chassis.tagZchassis_vendorzsmbios.chassis.makerz hw.vendorZchassis_serialzsmbios.chassis.serialzhw.uuidZchassis_versionzsmbios.chassis.versionZ sys_vendorzsmbios.system.makerZ product_namezsmbios.system.productz hw.productZproduct_serialzsmbios.system.serialZ product_uuidzsmbios.system.uuidZproduct_versionzsmbios.system.version)zbaseboard-asset-tagzbaseboard-manufacturerzbaseboard-product-namezbaseboard-serial-numberzbaseboard-versionzbios-release-datez bios-vendorz bios-versionzchassis-asset-tagzchassis-manufacturerzchassis-serial-numberzchassis-versionzsystem-manufacturerzsystem-product-namezsystem-serial-numberz system-uuidzsystem-version)ÚkeyÚreturnc CsFt |¡}|dus|jdur dSd t|j¡}t d|¡tj  |¡sVt d|¡dSzft   d|›�¡�Bt |dƒ�}|  ¡}Wdƒn1s’0YWdƒn1s°0YWn tyÜt d|¡YdS0|dt|ƒd d krúd }z| d ¡ ¡WSt�y@}zt d |||¡WYd}~n d}~00dS)z/ Reads dmi data from /sys/class/dmi/id Nz{0}/{1}úquerying dmi data %szdid not find %szReading ÚrbzCould 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ÚexistsrZTimedÚopenÚreadÚPermissionErrorÚlenÚdecodeÚstripÚUnicodeDecodeErrorÚerror)rÚkmapZ dmi_key_pathÚfpZkey_dataÚe©r+ú1/usr/lib/python3.9/site-packages/cloudinit/dmi.pyÚ_read_dmi_syspathPs:    ÿH  ür-c Csšt |¡}|dus|jdur dSt d|j¡z2dd|jg}t |¡j ¡}t d||j¡|WStjy”}zt d||¡WYd}~n d}~00dS)z/ Reads dmi data from FreeBSD's kenv(1) NrZkenvz-qzkenv returned '%s' for '%s'zfailed kenv cmd: %s %s) rrr rrrÚstdoutr%ÚProcessExecutionError©rr(ÚcmdÚresultr*r+r+r,Ú _read_kenvxs  $r3c Csšt |¡}|dus|jdur dSt d|j¡z2dd|jg}t |¡j ¡}t d||j¡|WStjy”}zt d||¡WYd}~n d}~00dS)z1 Reads dmi data from OpenBSD's sysctl(8) NrZsysctlz-qnzsysctl returned '%s' for '%s'zfailed sysctl cmd: %s %s) rrr rrrr.r%r/r0r+r+r,Ú _read_sysctl�s  $r4)rÚdmidecode_pathrc Cs€zD|d|g}t |¡j ¡}t d||¡| dd¡dkr@WdS|WStjyz}zt d||¡WYd}~dSd}~00dS)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)rr.r%rrÚreplacer/)rr5r1r2r*r+r+r,Ú_call_dmidecode¢s r9cCsœtƒr dStƒstƒrt|ƒStƒr,t|ƒSt|ƒ}|dur@|Sdd„}t ¡d}||ƒst|dvstt   d|¡dSt   d¡}|rŒt ||ƒSt   dt¡dS) 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. NcSs$|dkp"|ddko"|dd…dkS)NZx86_64rÚiéZ86r+)Zarchr+r+r,Úis_x86Òszread_dmi_data..is_x86é)Zaarch64Zamd64zdmidata is not supported on %sZ dmidecodez0did not find either path %s or dmidecode command)rrrr3r r4r-rÚunamerrrÚwhichr9r)rZ syspath_valuer<Z uname_archr5r+r+r,Ú read_dmi_data³s&      r@)ÚsrcrcCsxd|vr |St ¡}t d|¡D]R}||vr>t d|||¡q t|ƒ}|sNd}t d|||¡| d|›d�|¡}q |S)zBReplace __dmi.VARNAME__ with DMI values from either sysfs or kenv.Ú__z__dmi\.([^_]+)__z7Ignoring invalid __dmi.%s__ in %s. Expected one of: %s.r7z'Replacing __dmi.%s__ in '%s' with '%s'.z__dmi.) rÚkeysÚreÚfindallrZwarningr@rr8)rAZvalid_dmi_keysÚmatchZ dmi_valuer+r+r,Ú sub_dmi_varsãs.üürG)ZloggingrrDÚ collectionsrÚtypingrZ cloudinitrrZcloudinit.utilrrrr Z getLoggerÚ__name__rrr Ú__new__Ú __defaults__rÚstrr-r3r4r9r@rGr+r+r+r,Ús|    ÿÿÿÿÿ   ÿÿÿÿÿÿÿÿÿÕ1(0