aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNikhil Kakade <Nikhil.Kakade@veritas.com>2022-05-12 09:31:34 +0530
committerJake Hunsaker <jhunsake@redhat.com>2022-05-16 15:24:25 -0400
commiteba378f1b304951479932b391e60c70749b541bb (patch)
tree26256dea2114d0cd6ed53e4ccd08368aca496eb6
parent00ad729ad04b3424bbd532272a32700899b19cbd (diff)
downloadsos-eba378f1b304951479932b391e60c70749b541bb.tar.gz
[shmcli] Added new plugin to get information from PowerVault/Dell
shmcli provides information of the adapters, emms, drives, enclosures, fans, and power supplies. And the sensing data of temp, voltage, and current sensors. [1] https://dl.dell.com/topicspdf/powertools-shm-ag_en-us.pdf Signed-off-by: Nikhil Kakade <nikhilkaka1@gmail.com>
-rw-r--r--sos/report/plugins/shmcli.py110
1 files changed, 110 insertions, 0 deletions
diff --git a/sos/report/plugins/shmcli.py b/sos/report/plugins/shmcli.py
new file mode 100644
index 00000000..04859c8d
--- /dev/null
+++ b/sos/report/plugins/shmcli.py
@@ -0,0 +1,110 @@
+# 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.report.plugins import Plugin, IndependentPlugin, PluginOpt
+
+
+class SHMcli(Plugin, IndependentPlugin):
+ """shmcli pulls hardware information from PowerVault/Dell
+ Storage JBOD's attached to server.
+ It provides information of the adapters, emms, drives,
+ enclosures, fans, power supplies and the sensory data of
+ temp, voltage, and current sensors.
+ """
+
+ short_desc = 'Dell Server Hardware Manager'
+
+ plugin_name = 'shmcli'
+ profiles = ('system', 'storage', 'hardware',)
+ shmcli_bin = "/opt/dell/ServerHardwareManager/" \
+ "ServerHardwareManagerCLI/bin/shmcli"
+ files = (shmcli_bin,)
+
+ option_list = [
+ PluginOpt('debug', default=False, desc='capture support debug data')
+ ]
+
+ def setup(self):
+ cmd = self.shmcli_bin
+
+ subcmds = [
+ 'list adapters',
+ 'list physical enclosures',
+ 'list failed drives'
+ ]
+
+ for subcmd in subcmds:
+ self.add_cmd_output(
+ "%s %s" % (cmd, subcmd),
+ suggest_filename="shmcli_%s" % (subcmd))
+
+ models = []
+
+ # Get the storage hardware models
+ result = self.exec_cmd('lsscsi -g')
+ if result['status'] == 0:
+ for line in result['output'].splitlines():
+ words = line.split()
+ if (len(words) > 2 and words[2] == 'DELL'):
+ models.append(line.split()[3])
+ models = list(set(models))
+
+ subcmds = [
+ 'list emms',
+ 'list drawers',
+ 'list emm slots',
+ 'list drive slots',
+ 'list fans',
+ 'list temp sensors',
+ 'list voltage sensors',
+ 'list current sensors',
+ 'list power supplies',
+ 'info enclosure'
+ ]
+
+ result = self.collect_cmd_output(
+ '%s list enclosures' % (cmd),
+ suggest_filename='shmcli_list_enclosures'
+ )
+ if result['status'] == 0:
+ for line in result['output'].splitlines()[2:-2]:
+ _line = line.split()
+ if any(m in _line for m in models):
+ adapt_index = _line[-1]
+ enc_index = _line[0]
+ for subcmd in subcmds:
+ _cmd = ("%s %s -a=%s -enc=%s"
+ % (cmd, subcmd, adapt_index, enc_index))
+ _fname = _cmd.replace(cmd, 'shmcli')
+ self.add_cmd_output(_cmd, suggest_filename=_fname)
+ if self.get_option('debug'):
+ logpath = self.get_cmd_output_path(make=False)
+ _dcmd = ("%s getdebugcli -a=%s -enc=%s"
+ % (cmd, adapt_index, enc_index))
+ _dname = _dcmd.replace(cmd, 'shmcli')
+ _odir = (" -outputdir=%s" % (logpath))
+ self.add_cmd_output(
+ _dcmd + _odir, suggest_filename=_dname,
+ timeout=300
+ )
+
+ result = self.collect_cmd_output(
+ '%s list drives' % (cmd),
+ suggest_filename='shmcli_list_drives'
+ )
+ if result['status'] == 0:
+ for line in result['output'].splitlines():
+ words = line.split()
+ if (len(words) > 6):
+ if (words[0] not in ['WWN', '---']):
+ _cmd = ("%s info drive -d=%s"
+ % (cmd, words[0]))
+ _fname = _cmd.replace(cmd, 'shmcli')
+ self.add_cmd_output(_cmd, suggest_filename=_fname)
+
+# vim: set et ts=4 sw=4 :