Gather uptime and device facts from Solarish systems (#18733)
* Gather device information on Solarish systems * Gather uptime information on Solarish systems * Fix typo in variable name * Add comments and example output from kstat command Use frozenset instead of set Make parsing of line a little bit safer
This commit is contained in:
parent
583136980d
commit
69559c184d
1 changed files with 75 additions and 0 deletions
|
@ -1533,6 +1533,8 @@ class SunOSHardware(Hardware):
|
||||||
self.get_cpu_facts()
|
self.get_cpu_facts()
|
||||||
self.get_memory_facts()
|
self.get_memory_facts()
|
||||||
self.get_dmi_facts()
|
self.get_dmi_facts()
|
||||||
|
self.get_device_facts()
|
||||||
|
self.get_uptime_facts()
|
||||||
try:
|
try:
|
||||||
self.get_mount_facts()
|
self.get_mount_facts()
|
||||||
except TimeoutError:
|
except TimeoutError:
|
||||||
|
@ -1621,6 +1623,79 @@ class SunOSHardware(Hardware):
|
||||||
if found:
|
if found:
|
||||||
self.facts['product_name'] = found.group(1)
|
self.facts['product_name'] = found.group(1)
|
||||||
|
|
||||||
|
def get_device_facts(self):
|
||||||
|
# Device facts are derived for sdderr kstats. This code does not use the
|
||||||
|
# full output, but rather queries for specific stats.
|
||||||
|
# Example output:
|
||||||
|
# sderr:0:sd0,err:Hard Errors 0
|
||||||
|
# sderr:0:sd0,err:Illegal Request 6
|
||||||
|
# sderr:0:sd0,err:Media Error 0
|
||||||
|
# sderr:0:sd0,err:Predictive Failure Analysis 0
|
||||||
|
# sderr:0:sd0,err:Product VBOX HARDDISK 9
|
||||||
|
# sderr:0:sd0,err:Revision 1.0
|
||||||
|
# sderr:0:sd0,err:Serial No VB0ad2ec4d-074a
|
||||||
|
# sderr:0:sd0,err:Size 53687091200
|
||||||
|
# sderr:0:sd0,err:Soft Errors 0
|
||||||
|
# sderr:0:sd0,err:Transport Errors 0
|
||||||
|
# sderr:0:sd0,err:Vendor ATA
|
||||||
|
|
||||||
|
self.facts['devices'] = {}
|
||||||
|
|
||||||
|
disk_stats = {
|
||||||
|
'Product': 'product',
|
||||||
|
'Revision': 'revision',
|
||||||
|
'Serial No': 'serial',
|
||||||
|
'Size': 'size',
|
||||||
|
'Vendor': 'vendor',
|
||||||
|
'Hard Errors': 'hard_errors',
|
||||||
|
'Soft Errors': 'soft_errors',
|
||||||
|
'Transport Errors': 'transport_errors',
|
||||||
|
'Media Error': 'media_errors',
|
||||||
|
'Predictive Failure Analysis': 'predictive_failure_analysis',
|
||||||
|
'Illegal Request': 'illegal_request',
|
||||||
|
}
|
||||||
|
|
||||||
|
cmd = ['/usr/bin/kstat', '-p']
|
||||||
|
|
||||||
|
for ds in disk_stats:
|
||||||
|
cmd.append('sderr:::%s' % ds)
|
||||||
|
|
||||||
|
d = {}
|
||||||
|
rc, out, err = self.module.run_command(cmd)
|
||||||
|
if rc != 0:
|
||||||
|
return dict()
|
||||||
|
|
||||||
|
sd_instances = frozenset(line.split(':')[1] for line in out.split('\n') if line.startswith('sderr'))
|
||||||
|
for instance in sd_instances:
|
||||||
|
lines = (line for line in out.split('\n') if ':' in line and line.split(':')[1] == instance)
|
||||||
|
for line in lines:
|
||||||
|
text, value = line.split('\t')
|
||||||
|
stat = text.split(':')[3]
|
||||||
|
|
||||||
|
if stat == 'Size':
|
||||||
|
d[disk_stats.get(stat)] = self.module.pretty_bytes(float(value))
|
||||||
|
else:
|
||||||
|
d[disk_stats.get(stat)] = value.rstrip()
|
||||||
|
|
||||||
|
diskname = 'sd' + instance
|
||||||
|
self.facts['devices'][diskname] = d
|
||||||
|
d = {}
|
||||||
|
|
||||||
|
def get_uptime_facts(self):
|
||||||
|
# On Solaris, unix:0:system_misc:snaptime is created shortly after machine boots up
|
||||||
|
# and displays tiem in seconds. This is much easier than using uptime as we would
|
||||||
|
# need to have a parsing procedure for translating from human-readable to machine-readable
|
||||||
|
# format.
|
||||||
|
# Example output:
|
||||||
|
# unix:0:system_misc:snaptime 1175.410463590
|
||||||
|
rc, out, err = self.module.run_command('/usr/bin/kstat -p unix:0:system_misc:snaptime')
|
||||||
|
|
||||||
|
if rc != 0:
|
||||||
|
return
|
||||||
|
|
||||||
|
self.facts['uptime_seconds'] = int(float(out.split('\t')[1]))
|
||||||
|
|
||||||
|
|
||||||
class OpenBSDHardware(Hardware):
|
class OpenBSDHardware(Hardware):
|
||||||
"""
|
"""
|
||||||
OpenBSD-specific subclass of Hardware. Defines memory, CPU and device facts:
|
OpenBSD-specific subclass of Hardware. Defines memory, CPU and device facts:
|
||||||
|
|
Loading…
Reference in a new issue