From 1b4f8dfb8ac85708441faa3b2c2b9c2624dfa155 Mon Sep 17 00:00:00 2001 From: "irit.go" Date: Tue, 24 Jul 2018 11:01:55 +0300 Subject: [PATCH 1/2] [Plugin] add get_process_pids() to return PIDs by process name Signed-off-by: Irit Goihman igoihman@redhat.com Signed-off-by: Bryn M. Reeves --- sos/plugins/__init__.py | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/sos/plugins/__init__.py b/sos/plugins/__init__.py index 4c8822b7..cdeda77a 100644 --- a/sos/plugins/__init__.py +++ b/sos/plugins/__init__.py @@ -1389,6 +1389,22 @@ class Plugin(object): return False return status + def get_process_pids(self, process): + """Returns PIDs of all processes with process name. + If the process doesn't exist, returns an empty list""" + pids = [] + cmd_line_glob = "/proc/[0-9]*/cmdline" + cmd_line_paths = glob.glob(cmd_line_glob) + for path in cmd_line_paths: + try: + with open(path, 'r') as f: + cmd_line = f.read().strip() + if process in cmd_line: + pids.append(path.split("/")[2]) + except IOError as e: + continue + return pids + class RedHatPlugin(object): """Tagging class for Red Hat's Linux distributions""" -- 2.17.2 From 0618db904dadb05fde70c181a5940989ac127fe2 Mon Sep 17 00:00:00 2001 From: Irit Goihman Date: Thu, 1 Feb 2018 16:44:32 +0200 Subject: [PATCH 2/2] [plugins] add vdsm plugin Add a plugin for vdsm Resolves: #1205 Signed-off-by: Irit Goihman Signed-off-by: Bryn M. Reeves --- sos/plugins/vdsm.py | 146 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 146 insertions(+) create mode 100644 sos/plugins/vdsm.py diff --git a/sos/plugins/vdsm.py b/sos/plugins/vdsm.py new file mode 100644 index 00000000..c648abbf --- /dev/null +++ b/sos/plugins/vdsm.py @@ -0,0 +1,146 @@ +# Copyright (C) 2018 Red Hat, Inc. + +# 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 sos.plugins import Plugin, RedHatPlugin + +import glob +import json +import re + + +# This configuration is based on vdsm.storage.lvm.LVM_CONF_TEMPLATE. +# +# locking_type is set to 0 in order to match lvm sos commands. With this +# configuration we don't take any locks, so we will never block because +# there is a stuck lvm command. +# locking_type=0 +# +# use_lvmetad is set to 0 in order not to show cached, old lvm metadata. +# use_lvmetad=0 +# +# preferred_names and filter config values are set to capture Vdsm devices. +# preferred_names=[ '^/dev/mapper/' ] +# filter=[ 'a|^/dev/mapper/.*|', 'r|.*|' ] +LVM_CONFIG = """ +global { + locking_type=0 + use_lvmetad=0 +} +devices { + preferred_names=["^/dev/mapper/"] + ignore_suspended_devices=1 + write_cache_state=0 + disable_after_error_count=3 + filter=["a|^/dev/mapper/.*|", "r|.*|"] +} +""" +LVM_CONFIG = re.sub(r"\s+", " ", LVM_CONFIG).strip() + + +class Vdsm(Plugin, RedHatPlugin): + """vdsm Plugin""" + + packages = ( + 'vdsm', + 'vdsm-client', + ) + + plugin_name = 'vdsm' + + def setup(self): + self.add_forbidden_path('/etc/pki/vdsm/keys/*') + self.add_forbidden_path('/etc/pki/vdsm/libvirt-spice/*-key.*') + self.add_forbidden_path('/etc/pki/libvirt/private/*') + + self.add_cmd_output('service vdsmd status') + + self.add_copy_spec([ + '/tmp/vds_installer*', + '/tmp/vds_bootstrap*', + '/etc/vdsm/*' + ]) + + limit = self.get_option('log_size') + + self.add_copy_spec('/var/log/vdsm/*', sizelimit=limit) + + self._add_vdsm_forbidden_paths() + self.add_copy_spec([ + '/var/run/vdsm/*', + '/usr/libexec/vdsm/hooks', + '/var/lib/vdsm' + ]) + + qemu_pids = self.get_process_pids('qemu-kvm') + if qemu_pids: + files = ["cmdline", "status", "mountstats"] + self.add_copy_spec([ + "/proc/%s/%s" % (pid, name) + for pid in qemu_pids + for name in files + ]) + self.add_cmd_output([ + "ls -ldZ /etc/vdsm", + "su vdsm -s sh -c 'tree -l /rhev/data-center'", + "su vdsm -s sh -c 'ls -lR /rhev/data-center'" + ]) + self.add_cmd_output([ + "lvm vgs -v -o +tags --config \'%s\'" % LVM_CONFIG, + "lvm lvs -v -o +tags --config \'%s\'" % LVM_CONFIG, + "lvm pvs -v -o +all --config \'%s\'" % LVM_CONFIG + ]) + + self.add_cmd_output([ + 'vdsm-client Host getCapabilities', + 'vdsm-client Host getStats', + 'vdsm-client Host getAllVmStats', + 'vdsm-client Host getVMFullList', + 'vdsm-client Host getDeviceList', + 'vdsm-client Host hostdevListByCaps', + 'vdsm-client Host getAllTasksInfo', + 'vdsm-client Host getAllTasksStatuses' + ]) + + try: + res = self.call_ext_prog( + 'vdsm-client Host getConnectedStoragePools' + ) + if res['status'] == 0: + pools = json.loads(res['output']) + for pool in pools: + self.add_cmd_output( + 'vdsm-client StoragePool getSpmStatus' + ' storagepoolID={}'.format(pool) + ) + except ValueError as e: + self._log_error( + 'vdsm-client Host getConnectedStoragePools: %s' % (e) + ) + + try: + res = self.call_ext_prog('vdsm-client Host getStorageDomains') + if res['status'] == 0: + sd_uuids = json.loads(res['output']) + dump_volume_chains_cmd = 'vdsm-tool dump-volume-chains %s' + self.add_cmd_output([ + dump_volume_chains_cmd % uuid for uuid in sd_uuids + ]) + except ValueError as e: + self._log_error( + 'vdsm-client Host getStorageDomains: %s' % (e) + ) + + def _add_vdsm_forbidden_paths(self): + """Add confidential sysprep vfds under /var/run/vdsm to + forbidden paths """ + + for file_path in glob.glob("/var/run/vdsm/*"): + if file_path.endswith(('.vfd', '/isoUploader', '/storage')): + self.add_forbidden_path(file_path) -- 2.17.2 From 7141ebf3b2071c84286ced29154c33502c4da934 Mon Sep 17 00:00:00 2001 From: Irit goihman Date: Sun, 7 Apr 2019 14:03:55 +0300 Subject: [PATCH] [vdsm] fix plugin docstring capitalisation --- sos/plugins/vdsm.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sos/plugins/vdsm.py b/sos/plugins/vdsm.py index c648abbf9..4549c372e 100644 --- a/sos/plugins/vdsm.py +++ b/sos/plugins/vdsm.py @@ -45,7 +45,7 @@ class Vdsm(Plugin, RedHatPlugin): - """vdsm Plugin""" + """vdsm plugin""" packages = ( 'vdsm', From 208a1d9622dfa13d923882793cd19e9e6cf1e488 Mon Sep 17 00:00:00 2001 From: Irit goihman Date: Sun, 7 Apr 2019 14:04:48 +0300 Subject: [PATCH] [vdsm] use metadata_read_only=1 for LVM2 commands --- sos/plugins/vdsm.py | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/sos/plugins/vdsm.py b/sos/plugins/vdsm.py index 4549c372e..913d49a53 100644 --- a/sos/plugins/vdsm.py +++ b/sos/plugins/vdsm.py @@ -22,6 +22,10 @@ # there is a stuck lvm command. # locking_type=0 # +# To prevent modifications to volume group metadata (for e.g. due to a +# automatically detected inconsistency), metadata_read_only is set to 1. +# metadata_read_only=1 +# # use_lvmetad is set to 0 in order not to show cached, old lvm metadata. # use_lvmetad=0 # @@ -31,6 +35,7 @@ LVM_CONFIG = """ global { locking_type=0 + metadata_read_only=1 use_lvmetad=0 } devices { From 97c21901ddb6f7d5e3169d1777983f784b103bc4 Mon Sep 17 00:00:00 2001 From: Irit goihman Date: Sun, 7 Apr 2019 14:05:30 +0300 Subject: [PATCH] [vdsm] drop explicit size limiting --- sos/plugins/vdsm.py | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/sos/plugins/vdsm.py b/sos/plugins/vdsm.py index 913d49a53..2dc4b6bea 100644 --- a/sos/plugins/vdsm.py +++ b/sos/plugins/vdsm.py @@ -72,9 +72,7 @@ def setup(self): '/etc/vdsm/*' ]) - limit = self.get_option('log_size') - - self.add_copy_spec('/var/log/vdsm/*', sizelimit=limit) + self.add_copy_spec('/var/log/vdsm/*') self._add_vdsm_forbidden_paths() self.add_copy_spec([ From cfaf930e58f4996919d0da6c356135cfce26dacb Mon Sep 17 00:00:00 2001 From: Irit goihman Date: Sun, 7 Apr 2019 14:13:59 +0300 Subject: [PATCH] [vdsm] change filter --- sos/plugins/vdsm.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sos/plugins/vdsm.py b/sos/plugins/vdsm.py index 2dc4b6bea..ab5c6130b 100644 --- a/sos/plugins/vdsm.py +++ b/sos/plugins/vdsm.py @@ -43,7 +43,7 @@ ignore_suspended_devices=1 write_cache_state=0 disable_after_error_count=3 - filter=["a|^/dev/mapper/.*|", "r|.*|"] + filter=["a|^/dev/disk/by-id/dm-uuid-mpath-|", "r|.+|"] } """ LVM_CONFIG = re.sub(r"\s+", " ", LVM_CONFIG).strip() From 2ebc04da53dc871c8dd5243567afa4f8592dca29 Mon Sep 17 00:00:00 2001 From: Irit goihman Date: Sun, 7 Apr 2019 14:14:32 +0300 Subject: [PATCH] [vdsm] capture supervdsmd status --- sos/plugins/vdsm.py | 1 + 1 file changed, 1 insertion(+) diff --git a/sos/plugins/vdsm.py b/sos/plugins/vdsm.py index ab5c6130b..ae9c17c96 100644 --- a/sos/plugins/vdsm.py +++ b/sos/plugins/vdsm.py @@ -65,6 +65,7 @@ def setup(self): self.add_forbidden_path('/etc/pki/libvirt/private/*') self.add_cmd_output('service vdsmd status') + self.add_cmd_output('service supervdsmd status') self.add_copy_spec([ '/tmp/vds_installer*',