x[hBddlZddlZddlZddlmZmZddlmZmZddl m Z m Z m Z m Z ejeZdZGddeZided d dd ed d ddeddddeddddeddddeddddeddddedddd ed!d"dd#ed$d%d&d'ed(d)d*d+ed,d-dd.ed/d0d&d1ed2d3d4d5ed6d7d*d8ed9d:d*d;eded?eefd@Zd>ed?eefdAZd>ed?eefdBZd>edCed?eefdDZd>ed?eefdEZdFed?efdGZy)HN) NamedTupleOptional) performancesubp) is_containeris_DragonFlyBSD is_FreeBSD is_OpenBSDz/sys/class/dmi/idc8eZdZUeed<eeed<eeed<y) KernelNameslinuxfreebsdopenbsdN)__name__ __module__ __qualname__str__annotations__r//usr/lib/python3/dist-packages/cloudinit/dmi.pyr r s J c] c]rr zbaseboard-asset-tagboard_asset_tagzsmbios.planar.tagzbaseboard-manufacturer board_vendorzsmbios.planar.makerzbaseboard-product-name board_namezsmbios.planar.productzbaseboard-serial-number board_serialzsmbios.planar.serialzbaseboard-version board_versionzsmbios.planar.versionzbios-release-date bios_datezsmbios.bios.reldatez bios-vendor bios_vendorzsmbios.bios.vendorz bios-version bios_versionzsmbios.bios.versionzchassis-asset-tagchassis_asset_tagzsmbios.chassis.tagzchassis-manufacturerchassis_vendorzsmbios.chassis.makerz hw.vendorzchassis-serial-numberchassis_serialzsmbios.chassis.serialzhw.uuidzchassis-versionchassis_versionzsmbios.chassis.versionzsystem-manufacturer sys_vendorzsmbios.system.makerzsystem-product-name product_namezsmbios.system.productz hw.productzsystem-serial-numberproduct_serialzsmbios.system.serialz system-uuid product_uuidzsmbios.system.uuidzsystem-versionproduct_versionzsmbios.system.versionkeyreturnctj|}| |jydjt|j}t j d|tjj|st j d|y tjd|5t|d5}|j}dddddddt|d z zd zk(rd } |j!d j#S#1swYJxYw#1swYNxYw#t$rt j d|YywxYw#t$$r"}t j'd |||Yd}~yd}~wwxYw)z/ Reads dmi data from /sys/class/dmi/id Nz{0}/{1}querying dmi data %szdid not find %szReading rbzCould not read %s rutf8z-utf-8 decode of content (%s) in %s failed: %s)DMIDECODE_TO_KERNELgetr format DMI_SYS_PATHLOGdebugospathexistsrTimedopenreadPermissionErrorlendecodestripUnicodeDecodeErrorerror)r)kmap dmi_key_pathfpkey_dataes r_read_dmi_syspathrISs^  " "3 'D |tzz)##L$**=LII$l3 77>>, ' #\2   ,8 9 !4 $<  ! wwyH ! !7c(ma/0588 v&,,.. ! ! ! !  %|4   ;       sZD)* D7DDD)2ED DD&"D))E  E  E9E44E9ctj|}| |jytj d|j dd|jg}t j |j j}tj d||j|S#t j$r!}tj d|Yd}~yd}~wwxYw)z/ Reads dmi data from FreeBSD's kenv(1) Nr,kenvz-qzkenv returned '%s' for '%s'zfailed kenv cmd: %s %s) r2r3rr6r7rstdoutrAProcessExecutionErrorr)rDcmdresultrHs r _read_kenvrQ{s  " "3 'D |t||+II$dll35tT\\*3&&,,. /F  % %5 +S!44 5AB%%C8CCctj|}| |jytj d|j dd|jg}t j |j j}tj d||j|S#t j$r!}tj d|Yd}~yd}~wwxYw)z1 Reads dmi data from OpenBSD's sysctl(8) Nr,sysctlz-qnzsysctl returned '%s' for '%s'zfailed sysctl cmd: %s %s) r2r3rr6r7rrLrArMrNs r _read_sysctlrUs  " "3 'D |t||+II$dll37 -3&&,,. 164<<H  % %7 -sA66 7rRdmidecode_pathc4 |d|g}tj|jj}tj d|||j dddk(ry|S#tj $r!}tj d|Yd}~yd}~wwxYw)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)rrLrAr6r7replacerM)r)rVrOrPrHs r_call_dmidecoder[s z3/3&&,,. 4fcB >>#r "b (  % % 0#q9sAA#!A##B6BBctryts tr t|St r t |St |}||Sd}tjd}||s|dvstjd|ytjd}|r t||Stjdty)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. Nc4|dk(xs|ddk(xr|dddk(S)Nx86_64ri86r)archs ris_x86zread_dmi_data..is_x86s*xHDGsN$GtABx47GHr)aarch64amd64zdmidata is not supported on %s dmidecodez0did not find either path %s or dmidecode command)rr rrQr rUrIr8unamer6r7rwhichr[r5)r) syspath_valuerc uname_archrVs r read_dmi_datarls$~|(#|C  %c*M IAJ : *0D"D 2J?ZZ ,NsN33II@,O rsrcc$d|vr|Stj}tjd|D]\}||vrtj d||| t |}|sd}tjd||||jd|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.rYz'Replacing __dmi.%s__ in '%s' with '%s'.z__dmi.) r2keysrefindallr6warningrlr7rZ)rmvalid_dmi_keysmatch dmi_values r sub_dmi_varsrws 3 (--/N/59  & KKI   !%( I 5     kkF5',i8%9& Jr)loggingr8rqtypingrr cloudinitrrcloudinit.utilrrr r getLoggerrr6r5r r2rrIrQrUr[rlrwrrrr}s ''g!# *.;..k-t .k-t.{. .0$. N!.";}.BDI#.$K0EtL%.&14'.,K0+-.2[193.8{3T9.>;+[?.D;/E.JK0)K.P;,iQ.Vk2DW.b%3%8C=%PCHSM*chsm*chsm"-s-x}-`ccr