x[h ddlZddlZddlZddlZddlmZddlmZddlm Z eje Z de de fdZde de fdZdefd Zde fd Zde fd ZGd d ej(Zy)N)Optional)dmi)report_diagnostic_event system_uuidreturnc tj|}t tj|jS#t$r"d|}t|tj wxYw)aByte swap system uuid. Azure always uses little-endian for the first three fields in the uuid. This behavior was made strict in SMBIOS 2.6+, but Linux and dmidecode follow RFC 4122 and assume big-endian for earlier SMBIOS versions. Azure's gen1 VMs use SMBIOS 2.3 which requires byte swapping to match compute.vmId presented by IMDS. Azure's gen2 VMs use SMBIOS 3.1 which does not require byte swapping. :raises ValueError: if UUID is invalid. zFailed to parse system uuid:  logger_func)bytes)uuidUUID ValueErrorrLOGerrorstrbytes_le)r original_uuidmsgs B/usr/lib/python3/dist-packages/cloudinit/sources/azure/identity.pybyte_swap_system_uuidrs_ +. tyy}556 77 -k_=; s A+A+c0tr t|S|S)z!Determine VM ID from system uuid.) is_vm_gen1rrs rconvert_system_uuid_to_vm_idr)s|$[11 ctjjdrytjjdryy)zZDetermine if VM is gen1 or gen2. Gen2 guests use UEFI while gen1 is legacy BIOS. z/sys/firmware/efiFz/dev/efiT)ospathexistsrrrr1s0  ww~~)* ww~~j! rctjd}| td|j}tj d||S)z Query system uuid in lower-case.z system-uuidzfailed to read system-uuidzRead product uuid: %s)r read_dmi_data RuntimeErrorlowerrdebugrs rquery_system_uuidr&AsI##M2K788##%KII%{3 rc,t}t|S)zQuery VM ID from system.)r&rrs r query_vm_idr(Ms#%K ' 44rc,eZdZdZededfdZy)ChassisAssetTagz 7783-7084-3265-9085-8269-3286-77rctjd} ||}td|d|j dtj |S#t$r!td|ztj YywxYw)zCheck platform environment to report if this datasource may run. :returns: ChassisAssetTag if matching tag found, else None. zchassis-asset-tagzNon-Azure chassis asset tag: %rr NzAzure chassis asset tag: z ())rr"rrrr%name)cls asset_tagtags r query_systemzChassisAssetTag.query_systemVst %%&9:  i.C 2;SXX F     #1I=II   sA 'A76A7N)__name__ __module__ __qualname__ AZURE_CLOUD classmethodrr1r rrr*r*Ss&4KX&78rr*)enumloggingrr typingr cloudinitrcloudinit.sources.helpers.azurer getLoggerr2rrrrboolrr&r(Enumr*r rrr?s   Cg!8s8s80cc D  3 5S5 diir