o x[h0!@s"dZddlZddlZddlZddlmZddlmZmZddl m Z zddl m Z m Z mZmZdZWn ey=dZYnwgd Zd#d d Zd$d d Zd#ddZd$ddZd$defddZddZddZdeeeffddZdeeeffddZeedZdeddfdd Zd%d!d"Z dS)&zCloud-init apport interfaceN)Dict)INSTALLER_APPORT_FILES INSTALLER_APPORT_SENSITIVE_FILES)is_cloud_init_enabled) attach_fileattach_file_if_existsattach_root_command_outputsroot_command_outputTF)&AliYunAltCloudAkamaiz Amazon - Ec2AzureBigstep BrightboxCloudCIX CloudSigma CloudStack DigitalOceanE24CloudzGCE - Google Compute Enginez Huawei CloudExoscalez Hetzner CloudNWCSz IBM - (aka SoftLayer or BlueMix)LXDMAASNoCloud OpenNebula OpenStackOracleOVFz'RbxCloud - (HyperOne, Rootbox, Rubikon)OpenTelekomCloudzSamsung Cloud PlatformzSAP Converged CloudScalewaySmartOSUpCloudVMwareVultrZStackOutscaleWSLOthercCs<t|ddigd}|s|dt|t|dddS)zBAttach cloud-init logs and tarfile from 'cloud-init collect-logs'.zcloud-init-log-warningsz-egrep -i "warn|error" /var/log/cloud-init.log)z cloud-initz collect-logsz-t/tmp/cloud-init-logs.tgzz--redactr(zlogs.tgzN)rappendr r)reportuiinclude_sensitivecommandr.2/usr/lib/python3/dist-packages/cloudinit/apport.pyattach_cloud_init_logsIs r0cCs,d}|r||rt|ddidSdSdS)z*Optionally attach hardware info from lshw.zYour device details (lshw) may be useful to developers when addressing this bug, but gathering it requires admin privileges. Would you like to include this info?zlshw.txtlshwN)yesnor)r*r+promptr.r.r/ attach_hwinfo_s r4cCsXtD]}tj|j}t|||jq|r(tD]}tj|j}t|||jqdSdS)a Attach any subiquity installer logs config. To support decoupling apport integration from installer config/logs, we eventually want to either source this function or APPORT_FILES attribute from subiquity and/or ubuntu-desktop-installer package-hooks python modules. N)rospathrealpathrlabelr)r*r+r, apport_filer7r.r.r/attach_installer_filesjsr:cCs^tjd}t||tj|r-|dd|dr#|dd7<|dd7<dSdS)zregionimageId architecture instanceTypebillingProductscsi|] \}}|vr||qSr.r.).0keyvalue wanted_keysr.r/ sz!_get_ec2_data..ra)rcrjr.rsr/ _get_ec2_datas rv)azureec2platformcCsJt|}|s dS||}|D]\}}|sq||||<qdS)zAdd datasoure specific information from the ds dictionary. ds_data contains the "ds" entry from data from /run/cloud/instance-data.json. N)PLATFORM_SPECIFIC_INFOrKrb capitalize)r*ryrc platform_inforetrieved_datarqrrr.r.r/add_datasource_specific_infos r~cCsz"tsWdStdd }t|}Wdn1swYWnty3tdYdSw|d}|sItdt | dSddd d d d d  D]\}}||}|rc|||<qTt ||d|ddS)zEntry point for Apport. This hook runs for every apport report Add a subset of non-sensitive cloud-init data from /run/cloud/instance-data.json that will be helpful for debugging. Nz"/run/cloud-init/instance-data.jsonrzKcloud-init run data not found on system. Unable to add cloud-specific data.v1z8instance-data.json lacks 'v1' metadata. Present keys: %sCloudID CloudNameCloudArchitecture CloudPlatform CloudRegionCloudSubPlatform)cloud_id cloud_namemachineryrk subplatformryds) ropenjsonloadFileNotFoundErrorlogging getLoggerwarningrKsortedrLrbr~)r*_fopen instance_datarrq report_keyrrr.r.r/general_add_infosH      r)NF)N)rAN)!__doc__rrr5typingrcloudinit.cmd.devel.logsrrcloudinit.cmd.statusrapport.hookutilsrrrr rQ ImportErrorKNOWN_CLOUD_NAMESr0r4r:r@boolrDrPrSstrrhrvrzr~rr.r.r.r/s4    *