8.2.34 | Linux | www-data (uid:33)
👁 View: apport.py
📁 //snap/core18/current/usr/lib/python3/dist-packages/cloudinit/apport.py
# Copyright (C) 2017 Canonical Ltd. # # This file is part of cloud-init. See LICENSE file for license information. """Cloud-init apport interface""" import os from cloudinit.cmd.devel import read_cfg_paths from cloudinit.cmd.devel.logs import ( INSTALLER_APPORT_FILES, INSTALLER_APPORT_SENSITIVE_FILES, ) try: from apport.hookutils import ( attach_file, attach_file_if_exists, attach_root_command_outputs, root_command_output, ) has_apport = True except ImportError: has_apport = False KNOWN_CLOUD_NAMES = [ "AliYun", "AltCloud", "Amazon - Ec2", "Azure", "Bigstep", "Brightbox", "CloudSigma", "CloudStack", "DigitalOcean", "E24Cloud", "GCE - Google Compute Engine", "Huawei Cloud", "Exoscale", "Hetzner Cloud", "NWCS", "IBM - (aka SoftLayer or BlueMix)", "LXD", "MAAS", "NoCloud", "OpenNebula", "OpenStack", "Oracle", "OVF", "RbxCloud - (HyperOne, Rootbox, Rubikon)", "OpenTelekomCloud", "SAP Converged Cloud", "Scaleway", "SmartOS", "UpCloud", "VMware", "Vultr", "ZStack", "Outscale", "Other", ] # Potentially clear text collected logs CLOUDINIT_LOG = "/var/log/cloud-init.log" CLOUDINIT_OUTPUT_LOG = "/var/log/cloud-init-output.log" def _get_user_data_file() -> str: paths = read_cfg_paths() return paths.get_ipath_cur("userdata_raw") def attach_cloud_init_logs(report, ui=None): """Attach cloud-init logs and tarfile from 'cloud-init collect-logs'.""" attach_root_command_outputs( report, { "cloud-init-log-warnings": ( 'egrep -i "warn|error" /var/log/cloud-init.log' ), "cloud-init-output.log.txt": "cat /var/log/cloud-init-output.log", }, ) root_command_output( ["cloud-init", "collect-logs", "-t", "/tmp/cloud-init-logs.tgz"] ) attach_file(report, "/tmp/cloud-init-logs.tgz", "logs.tgz") def attach_hwinfo(report, ui=None): """Optionally attach hardware info from lshw.""" prompt = ( "Your 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?" ) if ui and ui.yesno(prompt): attach_root_command_outputs(report, {"lshw.txt": "lshw"}) def attach_cloud_info(report, ui=None): """Prompt for cloud details if available.""" if ui: prompt = "Is this machine running in a cloud environment?" response = ui.yesno(prompt) if response is None: raise StopIteration # User cancelled if response: prompt = ( "Please select the cloud vendor or environment in which" " this instance is running" ) response = ui.choice(prompt, KNOWN_CLOUD_NAMES) if response: report["CloudName"] = KNOWN_CLOUD_NAMES[response[0]] else: report["CloudName"] = "None" def attach_installer_files(report, ui=None): """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. """ for apport_file in INSTALLER_APPORT_FILES: realpath = os.path.realpath(apport_file.path) attach_file_if_exists(report, realpath, apport_file.label) def attach_user_data(report, ui=None): """Optionally provide user-data if desired.""" if ui: user_data_file = _get_user_data_file() prompt = ( "Your user-data, cloud-config or autoinstall files can optionally " " be provided from {0} and could be useful to developers when" " addressing this bug. Do you wish to attach user-data to this" " bug?".format(user_data_file) ) response = ui.yesno(prompt) if response is None: raise StopIteration # User cancelled if response: realpath = os.path.realpath(user_data_file) attach_file(report, realpath, "user_data.txt") for apport_file in INSTALLER_APPORT_SENSITIVE_FILES: realpath = os.path.realpath(apport_file.path) attach_file_if_exists(report, realpath, apport_file.label) def add_bug_tags(report): """Add any appropriate tags to the bug.""" new_tags = [] if report.get("CurtinError"): new_tags.append("curtin") if report.get("SubiquityLog"): new_tags.append("subiquity") if "JournalErrors" in report.keys(): errors = report["JournalErrors"] if "Breaking ordering cycle" in errors: new_tags.append("systemd-ordering") if report.get("UdiLog"): new_tags.append("ubuntu-desktop-installer") if new_tags: report.setdefault("Tags", "") if report["Tags"]: report["Tags"] += " " report["Tags"] += " ".join(new_tags) def add_info(report, ui): """This is an entry point to run cloud-init's apport functionality. Distros which want apport support will have a cloud-init package-hook at /usr/share/apport/package-hooks/cloud-init.py which defines an add_info function and returns the result of cloudinit.apport.add_info(report, ui). """ if not has_apport: raise RuntimeError( "No apport imports discovered. Apport functionality disabled" ) attach_cloud_init_logs(report, ui) attach_hwinfo(report, ui) attach_cloud_info(report, ui) attach_user_data(report, ui) attach_installer_files(report, ui) add_bug_tags(report) return True # vi: ts=4 expandtab
← Back
💻 Terminal
📤 Upload
📂
Click or Drag & Drop
📁 //snap/core18/current/usr/lib/python3/dist-packages/cloudinit
NameSizePermModifiedActions
📁 __pycache__/-07552026-09-01 05:19🗑 Delete
📁 analyze/-07552026-09-01 05:19🗑 Delete
📁 cmd/-07552026-09-01 05:19🗑 Delete
📁 config/-07552026-09-01 05:19🗑 Delete
📁 distros/-07552026-09-01 05:19🗑 Delete
📁 filters/-07552026-09-01 05:19🗑 Delete
📁 handlers/-07552026-09-01 05:19🗑 Delete
📁 mergers/-07552026-09-01 05:19🗑 Delete
📁 net/-07552026-09-01 05:19🗑 Delete
📁 reporting/-07552026-09-01 05:19🗑 Delete
📁 sources/-07552026-09-01 05:19🗑 Delete
__init__.py0B06442023-04-20 21:31👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
apport.py5.7K06442023-04-20 21:31👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
atomic_helper.py1.4K06442023-04-20 21:31👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
cloud.py3.5K06442023-04-20 21:31👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
dhclient_hook.py2.5K06442023-04-20 21:31👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
dmi.py6.8K06442023-04-20 21:31👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
event.py2K06442023-04-20 21:31👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
features.py3.1K06442025-06-25 21:46👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
gpg.py4.3K06442023-04-20 21:31👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
helpers.py16.4K06442023-04-20 21:31👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
importer.py1.7K06442023-04-20 21:31👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
log.py4.3K06442023-04-20 21:31👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
netinfo.py22.6K06442023-04-20 21:31👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
patcher.py1.1K06442023-04-20 21:31👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
persistence.py2.5K06442023-04-20 21:31👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
registry.py1K06442023-04-20 21:31👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
safeyaml.py7.7K06442023-04-20 21:31👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
settings.py2K06442023-04-20 21:31👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
signal_handler.py1.8K06442023-04-20 21:31👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
simpletable.py1.9K06442023-04-20 21:31👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
ssh_util.py20.7K06442023-04-20 21:31👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
stages.py34.5K06442023-04-20 21:31👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
subp.py13.2K06442023-04-20 21:31👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
temp_utils.py3.2K06442023-04-20 21:31👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
templater.py5.8K06442023-04-20 21:31👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
type_utils.py726B06442023-04-20 21:31👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
url_helper.py28K06442023-04-20 21:31👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
user_data.py14.5K06442023-04-20 21:31👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
util.py90.5K06442023-04-20 21:31👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
version.py596B06442025-06-25 21:46👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del
warnings.py3.8K06442023-04-20 21:31👁 View ✏️ Edit 📝 Rename 📦 Move 🗑 Del