PATH:
usr
/
lib
/
python3.9
/
site-packages
/
sos
/
report
/
plugins
# Copyright (C) 2014 Red Hat, Inc. Neependra Khare <nkhare@redhat.com> # Copyright (C) 2014 Red Hat, Inc. Bryn M. Reeves <bmr@redhat.com> # This file is part of the sos project: https://github.com/sosreport/sos # # This copyrighted material is made available to anyone wishing to use, # modify, copy, or redistribute it subject to the terms and conditions of # version 2 of the GNU General Public License. # # See the LICENSE file in the source distribution for further information. from fnmatch import translate import re import json import os from sos.report.plugins import (Plugin, RedHatPlugin, DebianPlugin, UbuntuPlugin, PluginOpt) KUBE_PACKAGES = ( 'kubelet', 'kubernetes', ) KUBE_SVCS = ( 'kubelet', 'kube-apiserver', 'kube-proxy', 'kube-scheduler', 'kube-controller-manager', ) KUBECONFIGS = ( '/etc/kubernetes/admin.conf', ) class Kubernetes(Plugin): short_desc = 'Kubernetes container orchestration platform' plugin_name = "kubernetes" profiles = ('container',) plugin_timeout = 1200 config_files = [ "/etc/kubernetes", "/run/flannel", "/var/lib/kubelet/config.yaml", "/var/lib/kubelet/kubeadm-flags.env", "/var/lib/kubelet/*_manager_state", ] forbidden_paths = [ "/etc/kubernetes/pki", ] kube_system_logs = [ "/var/log/pods/kube-system_etcd-*", "/var/log/pods/kube-system_kube-apiserver-*", "/var/log/pods/kube-system_kube-controller-manager-*", "/var/log/pods/kube-system_kube-scheduler-*", ] resources = [ 'events', 'deployments', 'ingresses', 'pods', 'pvc', 'services', 'daemonsets', 'replicasets', 'endpoints', 'statefulsets', 'configmaps', 'serviceaccounts', 'secrets', 'jobs', 'cronjobs', 'clusterroles', 'clusterrolebindings', 'limitranges', 'resourcequotas', ] # these are not namespaced, must pull separately. global_resources = [ 'sc', 'pv', 'roles', 'rolebindings', ] option_list = [ PluginOpt('all', default=False, desc='collect all namespace output separately'), PluginOpt('describe', default=False, desc='collect describe output of all resources'), PluginOpt('kubelogs', default=False, desc='copy some kube-system pod logs without using the API'), PluginOpt('podlogs', default=False, desc='capture stdout/stderr logs from pods using the API'), PluginOpt('podlogs-filter', default='', val_type=str, desc='only collect logs from pods matching this pattern') ] kube_cmd = "kubectl" def set_kubeconfig(self): if os.environ.get('KUBECONFIG'): return for _kconf in self.files: if self.path_exists(_kconf): self.kube_cmd += f" --kubeconfig={_kconf}" break def check_is_master(self): """ Check if this is the master node """ return any(self.path_exists(f) for f in self.files) def setup(self): self.add_copy_spec(self.config_files) self.add_forbidden_path(self.forbidden_paths) if self.get_option('kubelogs'): self.add_copy_spec(self.kube_system_logs) self.add_env_var([ 'KUBECONFIG', 'KUBERNETES_HTTP_PROXY', 'KUBERNETES_HTTPS_PROXY', 'KUBERNETES_NO_PROXY', ]) # We can only grab kubectl output from the master if not self.check_is_master(): return for subcmd in ['version', 'config view']: self.add_cmd_output( f'{self.kube_cmd} {subcmd}', subdir='cluster-info' ) if self.get_option('all'): self.add_cmd_output([ f"{self.kube_cmd} get -o json {res}" for res in self.global_resources ], subdir='cluster-info') else: self.add_cmd_output([ f"{self.kube_cmd} get {res}" for res in self.global_resources ], subdir='cluster-info') # Get detailed node information nodes = self.collect_cmd_output(f"{self.kube_cmd} get nodes", subdir='cluster-info') if nodes['status'] == 0 and self.get_option('describe'): for line in nodes['output'].splitlines()[1:]: # find first word in the line and ignore empty+blank lines words = line.split() if not words: continue node = words[0] self.add_cmd_output( f"{self.kube_cmd} describe node {node}", subdir='cluster-info' ) self.add_cmd_output([ f"{self.kube_cmd} get -o json nodes", ], subdir='cluster-info') # Also collect master metrics self.add_cmd_output( f"{self.kube_cmd} get --raw /metrics", subdir='cluster-info' ) # CNV is not part of the base installation, but can be added if self.is_installed('kubevirt-virtctl'): self.resources.extend(['vms', 'vmis']) self.add_cmd_output('virtctl version') self.collect_per_resource_details() self.collect_all_resources() def collect_per_resource_details(self): """ Collect details about each resource in all namespaces """ # get all namespaces in use kns = self.collect_cmd_output(f'{self.kube_cmd} get namespaces', subdir='cluster-info') # namespace is the 1st word on line, until the line has spaces only kn_output = kns['output'].splitlines()[1:] knsps = [n.split()[0] for n in kn_output if n and len(n.split())] for nspace in knsps: knsp = f'--namespace={nspace}' if self.get_option('all'): k_cmd = f'{self.kube_cmd} get -o json {knsp}' for res in self.resources: self.add_cmd_output( f'{k_cmd} {res}', subdir=f'cluster-info/{nspace}' ) if self.get_option('describe'): # need to drop json formatting for this k_cmd = f'{self.kube_cmd} {knsp}' for res in self.resources: if res == 'events': continue ret = self.exec_cmd(f'{k_cmd} get {res}') if ret['status'] == 0: k_list = [k.split()[0] for k in ret['output'].splitlines()[1:]] for item in k_list: k_cmd = f'{self.kube_cmd} {knsp}' self.add_cmd_output( f'{k_cmd} describe {res} {item}', subdir=f'cluster-info/{nspace}/{res}' ) if self.get_option('podlogs'): self._get_pod_logs(knsp) def _get_pod_logs(self, namespace): k_cmd = f'{self.kube_cmd} get -o json {namespace}' ret = self.exec_cmd(f'{k_cmd} pods') if ret['status'] == 0: pods = json.loads(ret['output']) # allow shell-style regex reg = (translate(self.get_option('podlogs-filter')) if self.get_option('podlogs-filter') else None) for pod in pods["items"]: if reg and not re.match(reg, pod["metadata"]["name"]): continue _subdir = (f'cluster-info/' f'{pod["metadata"]["namespace"]}/podlogs/' f'{pod["metadata"]["name"]}') if "containers" in pod["spec"]: for cont in pod["spec"]["containers"]: pod_name = pod["metadata"]["name"] cont_name = cont["name"] self.add_cmd_output( f'{self.kube_cmd} {namespace} logs ' f'{pod_name} -c {cont_name}', subdir=_subdir ) if "initContainers" in pod["spec"]: for cont in pod["spec"]["initContainers"]: pod_name = pod["metadata"]["name"] cont_name = cont["name"] self.add_cmd_output( f'{self.kube_cmd} {namespace} logs ' f'{pod_name} -c {cont_name}', subdir=_subdir ) def collect_all_resources(self): """ Collect details about all resources """ if not self.get_option('all'): k_cmd = f'{self.kube_cmd} get --all-namespaces=true' for res in self.resources: self.add_cmd_output( f'{k_cmd} {res}', subdir='cluster-info' ) def postproc(self): # First, clear sensitive data from the json output collected. # This will mask values when the "name" looks susceptible of # values worth obfuscating, i.e. if the name contains strings # like "pass", "pwd", "key" or "token" env_regexp = r'(?P<var>{\s*"name":\s*[^,]*' \ r'(pass|pwd|key|token|cred|PASS|PWD|KEY)[^,]*,\s*"value":)[^}]*' self.do_cmd_output_sub(self.kube_cmd, env_regexp, r'\g<var> "********"') # Next, we need to handle the private keys and certs in some # output that is not hit by the previous iteration. self.do_cmd_private_sub(self.kube_cmd) pathexp = fr'^({"|".join(self.config_files)})' self.do_file_private_sub(pathexp) # clear base64 encoded PEM from kubeconfigs files regexp = r'LS0tLS1CRUdJ[A-Za-z0-9+/=]+' subst = '***** SCRUBBED BASE64 PEM *****' pathexp = fr'^({"|".join(list(self.files)+self.config_files)})' self.do_path_regex_sub(pathexp, regexp, subst) class RedHatKubernetes(Kubernetes, RedHatPlugin): packages = KUBE_PACKAGES files = KUBECONFIGS services = KUBE_SVCS def check_enabled(self): # do not run at the same time as the openshift plugin if self.is_installed("openshift-hyperkube"): return False return super().check_enabled() def setup(self): self.set_kubeconfig() super().setup() class UbuntuKubernetes(Kubernetes, UbuntuPlugin, DebianPlugin): packages = KUBE_PACKAGES + ( 'k8s', ) files = KUBECONFIGS + ( '/root/cdk/cdk_addons_kubectl_config', '/var/snap/microk8s/current/credentials/client.config', ) services = KUBE_SVCS + ( 'snap.kubelet.daemon', 'snap.kube-apiserver.daemon', 'snap.kube-proxy.daemon', 'snap.kube-scheduler.daemon', 'snap.kube-controller-manager.daemon', # CDK 'cdk.master.auth-webhook', ) def setup(self): self.set_kubeconfig() if self.is_installed('microk8s'): self.kube_cmd = 'microk8s kubectl' elif self.is_installed('k8s'): self.kube_cmd = 'k8s kubectl' self._canonical_kubernetes() self.config_files.extend([ '/root/cdk/kubelet/config.yaml', '/root/cdk/audit/audit-policy.yaml', ]) super().setup() def _canonical_kubernetes(self): self.add_journal(units="snap.k8s.*") k8s_cmd = "k8s" k8s_common = "/var/snap/k8s/common" k8s_subcmds = [ 'status', 'get', ] self.add_copy_spec([ f"{k8s_common}/args", f"{k8s_common}/var/lib/k8s-dqlite/info.yaml", f"{k8s_common}/var/lib/k8s-dqlite/cluster.yaml", f"{k8s_common}/var/lib/k8sd/state/truststore/k8s.yaml", f"{k8s_common}/var/lib/k8sd/state/database/info.yaml", f"{k8s_common}/var/lib/k8sd/state/database/cluster.yaml", f"{k8s_common}/var/lib/k8sd/state/daemon.yaml", ]) self.add_cmd_output([ f"{k8s_cmd} {subcmd}" for subcmd in k8s_subcmds ]) def postproc(self): super().postproc() self.do_file_private_sub( "/var/snap/k8s/common/var/lib/k8sd/state/truststore/k8s.yaml") # vim: et ts=5 sw=4
[+]
..
[-] freeipmi.py
[edit]
[-] chrony.py
[edit]
[-] crio.py
[edit]
[-] multipath.py
[edit]
[-] cman.py
[edit]
[-] lxd.py
[edit]
[-] xdp.py
[edit]
[-] monit.py
[edit]
[-] rabbitmq.py
[edit]
[-] ssh.py
[edit]
[-] cockpit.py
[edit]
[-] ctdb.py
[edit]
[-] omsa.py
[edit]
[-] named.py
[edit]
[-] ceph_mds.py
[edit]
[-] fibrechannel.py
[edit]
[-] openstack_database.py
[edit]
[-] oddjob.py
[edit]
[-] rhui_containerized.py
[edit]
[-] container_log.py
[edit]
[-] postgresql.py
[edit]
[-] tigervnc.py
[edit]
[-] krb5.py
[edit]
[-] drbd.py
[edit]
[-] procenv.py
[edit]
[-] zfs.py
[edit]
[-] kubernetes.py
[edit]
[-] rpmostree.py
[edit]
[-] wireless.py
[edit]
[-] veritas.py
[edit]
[-] s390.py
[edit]
[-] kvm.py
[edit]
[-] udev.py
[edit]
[-] nis.py
[edit]
[-] canonical_livepatch_onprem.py
[edit]
[-] hpssm.py
[edit]
[-] boom.py
[edit]
[-] foreman.py
[edit]
[-] firewalld.py
[edit]
[-] ovirt.py
[edit]
[-] ubuntu.py
[edit]
[-] redis.py
[edit]
[-] aap_containerized.py
[edit]
[-] openstack_masakarimonitors.py
[edit]
[-] console.py
[edit]
[-] sas3ircu.py
[edit]
[-] ebpf.py
[edit]
[-] kernel.py
[edit]
[-] openstack_ironic.py
[edit]
[-] ostree.py
[edit]
[-] charmed_mysql.py
[edit]
[-] system.py
[edit]
[-] salt.py
[edit]
[-] ceph_mon.py
[edit]
[-] validation_framework.py
[edit]
[-] ppp.py
[edit]
[-] md.py
[edit]
[-] docker.py
[edit]
[-] ldap.py
[edit]
[-] kpatch.py
[edit]
[-] valkey.py
[edit]
[-] gluster.py
[edit]
[-] microovn.py
[edit]
[-] nodejs.py
[edit]
[-] shmcli.py
[edit]
[-] openstack_heat.py
[edit]
[-] azure.py
[edit]
[-] teamd.py
[edit]
[-] mellanox_firmware.py
[edit]
[-] kdump.py
[edit]
[-] openstack_sahara.py
[edit]
[-] navicli.py
[edit]
[-] opendaylight.py
[edit]
[-] microcloud.py
[edit]
[-] udisks.py
[edit]
[-] ovirt_hosted_engine.py
[edit]
[-] dhcp.py
[edit]
[-] lustre.py
[edit]
[-] kimchi.py
[edit]
[-] tftpserver.py
[edit]
[-] dovecot.py
[edit]
[-] mvcli.py
[edit]
[-] foreman_installer.py
[edit]
[-] cobbler.py
[edit]
[-] microshift.py
[edit]
[-] opensearch.py
[edit]
[-] snapm.py
[edit]
[-] ceph_common.py
[edit]
[-] pulpcore.py
[edit]
[-] charmed_postgresql.py
[edit]
[-] etcd.py
[edit]
[-] openvswitch.py
[edit]
[-] rhui.py
[edit]
[-] openstack_horizon.py
[edit]
[-] skydive.py
[edit]
[-] nvmetcli.py
[edit]
[-] bird.py
[edit]
[-] oratab.py
[edit]
[-] rhcos.py
[edit]
[-] symcli.py
[edit]
[-] seagate_ses.py
[edit]
[-] openstack_instack.py
[edit]
[-] npm.py
[edit]
[-] ntb.py
[edit]
[-] openstack_edpm.py
[edit]
[-] smclient.py
[edit]
[-] ovn_host.py
[edit]
[-] cifs.py
[edit]
[-] boot.py
[edit]
[-] devices.py
[edit]
[-] unity.py
[edit]
[-] systemtap.py
[edit]
[-] rhc.py
[edit]
[-] firewall_tables.py
[edit]
[-] omnipath_manager.py
[edit]
[-] systemd.py
[edit]
[-] ovirt_imageio.py
[edit]
[-] dracut.py
[edit]
[-] snap.py
[edit]
[-] mysql.py
[edit]
[-] ultrapath.py
[edit]
[-] cs.py
[edit]
[-] autofs.py
[edit]
[-] date.py
[edit]
[-] ceph_osd.py
[edit]
[-] xen.py
[edit]
[-] stratis.py
[edit]
[-] slurm.py
[edit]
[-] sudo.py
[edit]
[-] pam.py
[edit]
[-] openstack_neutron.py
[edit]
[-] perccli2.py
[edit]
[-] vhostmd.py
[edit]
[-] perccli.py
[edit]
[-] rasdaemon.py
[edit]
[-] snapper.py
[edit]
[-] landscape.py
[edit]
[-] pci.py
[edit]
[-] libvirt.py
[edit]
[-] squid.py
[edit]
[-] activemq.py
[edit]
[-] apport.py
[edit]
[-] opencl.py
[edit]
[-] nfsganesha.py
[edit]
[-] rhv_analyzer.py
[edit]
[-] hts.py
[edit]
[-] ceph_mgr.py
[edit]
[-] grafana.py
[edit]
[-] manageiq.py
[edit]
[-] sos_extras.py
[edit]
[-] filesys.py
[edit]
[-] subscription_manager.py
[edit]
[-] mpt.py
[edit]
[-] aap_hub.py
[edit]
[-] microk8s.py
[edit]
[-] openstack_aodh.py
[edit]
[-] openstack_ansible.py
[edit]
[-] sunbeam.py
[edit]
[-] rpm.py
[edit]
[-] openstack_barbican.py
[edit]
[-] snmp.py
[edit]
[-] anaconda.py
[edit]
[-] unpackaged.py
[edit]
[-] ceph_ansible.py
[edit]
[-] telegraf.py
[edit]
[-] ruby.py
[edit]
[-] __init__.py
[edit]
[-] xinetd.py
[edit]
[-] smartcard.py
[edit]
[-] jars.py
[edit]
[-] watchdog.py
[edit]
[-] collectd.py
[edit]
[-] dlm.py
[edit]
[-] infinidat.py
[edit]
[-] apache.py
[edit]
[-] os_net_config.py
[edit]
[-] ipvs.py
[edit]
[-] arcconf.py
[edit]
[-] services.py
[edit]
[-] block.py
[edit]
[-] openssl.py
[edit]
[-] sar.py
[edit]
[-] nss.py
[edit]
[-] saltmaster.py
[edit]
[-] processor.py
[edit]
[-] megacli.py
[edit]
[-] ufw.py
[edit]
[-] curtin.py
[edit]
[-] foreman_proxy.py
[edit]
[-] ansible.py
[edit]
[-] vulkan.py
[edit]
[-] pulseaudio.py
[edit]
[-] distupgrade.py
[edit]
[-] powerpc.py
[edit]
[-] btrfs.py
[edit]
[-] composer.py
[edit]
[-] sunbeam_hypervisor.py
[edit]
[-] fail2ban.py
[edit]
[-] x11.py
[edit]
[-] convert2rhel.py
[edit]
[-] openstack_masakari.py
[edit]
[-] apparmor.py
[edit]
[-] mongodb.py
[edit]
[-] openstack_nova.py
[edit]
[-] openstack_cinder.py
[edit]
[-] spyre.py
[edit]
[-] collectl.py
[edit]
[-] anacron.py
[edit]
[-] tomcat.py
[edit]
[-] conntrack.py
[edit]
[-] juju.py
[edit]
[-] ovirt_node.py
[edit]
[-] sendmail.py
[edit]
[-] i18n.py
[edit]
[-] proxmox.py
[edit]
[-] nfs.py
[edit]
[-] login.py
[edit]
[-] postfix.py
[edit]
[-] containerd.py
[edit]
[-] lvm2.py
[edit]
[-] ptp.py
[edit]
[-] apt.py
[edit]
[-] aap_receptor.py
[edit]
[-] usbguard.py
[edit]
[-] python.py
[edit]
[-] ovirt_provider_ovn.py
[edit]
[-] grub2.py
[edit]
[-] iscsi.py
[edit]
[-] dbus.py
[edit]
[-] ceph_iscsi.py
[edit]
[-] radius.py
[edit]
[-] aide.py
[edit]
[-] cxl.py
[edit]
[-] ds.py
[edit]
[-] sanlock.py
[edit]
[-] openstack_octavia.py
[edit]
[-] loki.py
[edit]
[-] pcp.py
[edit]
[-] opencontrail.py
[edit]
[-] sysvipc.py
[edit]
[-] vdo.py
[edit]
[-] dnf.py
[edit]
[-] mssql.py
[edit]
[-] acpid.py
[edit]
[-] process.py
[edit]
[-] pmem.py
[edit]
[-] kafka.py
[edit]
[-] openhpi.py
[edit]
[-] dpkg.py
[edit]
[-] hpasm.py
[edit]
[-] podman.py
[edit]
[-] targetcli.py
[edit]
[-] omnipath_client.py
[edit]
[-] containers_common.py
[edit]
[-] lilo.py
[edit]
[-] hyperv.py
[edit]
[-] selinux.py
[edit]
[-] ntp.py
[edit]
[-] zvm.py
[edit]
[-] openstack_tripleo.py
[edit]
[-] lightdm.py
[edit]
[-] cgroups.py
[edit]
[-] opensvc.py
[edit]
[-] origin.py
[edit]
[-] kernelrt.py
[edit]
[-] cups.py
[edit]
[-] coredump.py
[edit]
[-] fwupd.py
[edit]
[-] auditd.py
[edit]
[-] peripety.py
[edit]
[-] grub.py
[edit]
[-] libreswan.py
[edit]
[-] saphana.py
[edit]
[-] nvme.py
[edit]
[-] gssproxy.py
[edit]
[-] nvidia.py
[edit]
[-] openstack_keystone.py
[edit]
[-] greenboot.py
[edit]
[-] bcache.py
[edit]
[-] host.py
[edit]
[-] canonical_livepatch.py
[edit]
[-] qt.py
[edit]
[-] haproxy.py
[edit]
[-] keepalived.py
[edit]
[-] nscd.py
[edit]
[-] dellrac.py
[edit]
[-] virtwho.py
[edit]
[-] flatpak.py
[edit]
[-] helm.py
[edit]
[-] java.py
[edit]
[-] rear.py
[edit]
[-] numa.py
[edit]
[-] ovirt_engine_backup.py
[edit]
[-] storageconsole.py
[edit]
[-] ipmitool.py
[edit]
[-] qpid_dispatch.py
[edit]
[-] gdm.py
[edit]
[-] microshift_ovn.py
[edit]
[-] libraries.py
[edit]
[-] kata_containers.py
[edit]
[-] gfs2.py
[edit]
[-] xfs.py
[edit]
[-] openstack_placement.py
[edit]
[-] hardware.py
[edit]
[-] dmraid.py
[edit]
[-] cloud_init.py
[edit]
[-] memory.py
[edit]
[-] fcoe.py
[edit]
[-] puppet.py
[edit]
[-] openstack_designate.py
[edit]
[-] elastic.py
[edit]
[-] ceph_rgw.py
[edit]
[-] psacct.py
[edit]
[-] migration_results.py
[edit]
[-] virsh.py
[edit]
[-] logrotate.py
[edit]
[-] devicemapper.py
[edit]
[-] release.py
[edit]
[-] storcli.py
[edit]
[-] openstack_manila.py
[edit]
[-] openshift_ovn.py
[edit]
[-] sssd.py
[edit]
[-] docker_distribution.py
[edit]
[-] quagga.py
[edit]
[-] openstack_ceilometer.py
[edit]
[-] vsftpd.py
[edit]
[-] maas.py
[edit]
[-] alternatives.py
[edit]
[-] instructlab.py
[edit]
[-] vmware.py
[edit]
[-] aap_gateway.py
[edit]
[-] foreman_openscap.py
[edit]
[-] qaucli.py
[edit]
[-] cron.py
[edit]
[-] logs.py
[edit]
[-] iscsitarget.py
[edit]
[-] candlepin.py
[edit]
[-] openstack_novajoin.py
[edit]
[-] pulp.py
[edit]
[-] infiniband.py
[edit]
[-] openshift.py
[edit]
[-] clear_containers.py
[edit]
[-] soundcard.py
[edit]
[-] openstack_gnocchi.py
[edit]
[-] ipa.py
[edit]
[-] perl.py
[edit]
[-] bootc.py
[edit]
[-] authd.py
[edit]
[-] ssmtp.py
[edit]
[-] openstack_mistral.py
[edit]
[+]
__pycache__
[-] qpid.py
[edit]
[-] openstack_swift.py
[edit]
[-] aws.py
[edit]
[-] memcached.py
[edit]
[-] vectordev.py
[edit]
[-] ata.py
[edit]
[-] iprconfig.py
[edit]
[-] networking.py
[edit]
[-] usb.py
[edit]
[-] insights.py
[edit]
[-] aap_controller.py
[edit]
[-] tuned.py
[edit]
[-] corosync.py
[edit]
[-] scsi.py
[edit]
[-] gluster_block.py
[edit]
[-] sapnw.py
[edit]
[-] samba.py
[edit]
[-] gcp.py
[edit]
[-] keyutils.py
[edit]
[-] vault.py
[edit]
[-] buildah.py
[edit]
[-] crypto.py
[edit]
[-] kea.py
[edit]
[-] openstack_glance.py
[edit]
[-] nginx.py
[edit]
[-] frr.py
[edit]
[-] aap_eda.py
[edit]
[-] sunrpc.py
[edit]
[-] fapolicyd.py
[edit]
[-] ovn_central.py
[edit]
[-] tpm2.py
[edit]
[-] sedutil.py
[edit]
[-] opengl.py
[edit]
[-] discovery.py
[edit]
[-] openstack_trove.py
[edit]
[-] lstopo.py
[edit]
[-] pacemaker.py
[edit]
[-] leapp.py
[edit]
[-] vdsm.py
[edit]
[-] unbound.py
[edit]
[-] networkmanager.py
[edit]
[-] powerpath.py
[edit]
[-] abrt.py
[edit]