def detect_megacli(hw_lst): 'Detect LSI MegaRAID controller configuration.' ctrl_num = megacli.adp_count() disk_count = 0 global_pdisk_size = 0 if ctrl_num > 0: for ctrl in range(ctrl_num): ctrl_info = megacli.adp_all_info(ctrl) for entry in ctrl_info.keys(): hw_lst.append(('megaraid', 'Controller_%d' % (ctrl), '%s' % entry, '%s' % ctrl_info[entry])) for enc in megacli.enc_info(ctrl): if "Enclosure" in enc.keys(): for key in enc.keys(): if "ExitCode" in key or "Enclosure" in key: continue hw_lst.append( ('megaraid', 'Controller_%d/Enclosure_%s' % (ctrl, enc["Enclosure"]), '%s' % key, '%s' % enc[key])) for slot_num in range(enc['NumberOfSlots']): disk = 'disk%d' % slot_num info = megacli.pdinfo(ctrl, enc['DeviceId'], slot_num) # If no PdType, it means that's not a disk if 'PdType' not in info.keys(): continue disk_count += 1 hw_lst.append(('pdisk', disk, 'ctrl', str(ctrl_num))) hw_lst.append(('pdisk', disk, 'type', info['PdType'])) hw_lst.append( ('pdisk', disk, 'id', '%s:%d' % (info['EnclosureDeviceId'], slot_num))) disk_size = size_in_gb("%s %s" % (info['CoercedSize'].split()[0], info['CoercedSize'].split()[1])) global_pdisk_size = global_pdisk_size + float(disk_size) hw_lst.append(('pdisk', disk, 'size', disk_size)) for key in info.keys(): ignore_list = [ 'PdType', 'EnclosureDeviceId', 'CoercedSize', 'ExitCode' ] if key not in ignore_list: if "DriveTemperature" in key: if "C" in str(info[key].split()[0]): pdisk = info[key].split()[0].split("C")[0] hw_lst.append(('pdisk', disk, key, str(pdisk).strip())) hw_lst.append( ('pdisk', disk, "%s_units" % key, "Celsius")) else: hw_lst.append(('pdisk', disk, key, str(info[key]).strip())) elif "InquiryData" in key: count = 0 for mystring in info[key].split(): hw_lst.append(('pdisk', disk, "%s[%d]" % (key, count), str(mystring.strip()))) count = count + 1 else: hw_lst.append(('pdisk', disk, key, str(info[key]).strip())) if global_pdisk_size > 0: hw_lst.append( ('pdisk', 'all', 'size', "%.2f" % global_pdisk_size)) for ld_num in range(megacli.ld_get_num(ctrl)): disk = 'disk%d' % ld_num info = megacli.ld_get_info(ctrl, ld_num) ignore_list = ['Size'] for item in info.keys(): if item not in ignore_list: hw_lst.append( ('ldisk', disk, item, str(info[item]))) if 'Size' in info: hw_lst.append( ('ldisk', disk, 'Size', size_in_gb(info['Size']))) hw_lst.append(('disk', 'megaraid', 'count', str(disk_count))) return True else: return False
def detect_megacli(hw_lst): 'Detect LSI MegaRAID controller configuration.' ctrl_num = megacli.adp_count() disk_count = 0 global_pdisk_size = 0 if ctrl_num > 0: for ctrl in range(ctrl_num): ctrl_info = megacli.adp_all_info(ctrl) for entry in ctrl_info.keys(): hw_lst.append(('megaraid', 'Controller_%d' % (ctrl), '%s' % entry, '%s' % ctrl_info[entry])) for enc in megacli.enc_info(ctrl): if "Enclosure" in enc.keys(): for key in enc.keys(): if "ExitCode" in key or "Enclosure" in key: continue hw_lst.append(('megaraid', 'Controller_%d/Enclosure_%s' % (ctrl, enc["Enclosure"]), '%s' % key, '%s' % enc[key])) for slot_num in range(enc['NumberOfSlots']): disk = 'disk%d' % slot_num info = megacli.pdinfo(ctrl, enc['DeviceId'], slot_num) # If no PdType, it means that's not a disk if 'PdType' not in info.keys(): continue disk_count += 1 hw_lst.append(('pdisk', disk, 'ctrl', str(ctrl_num))) hw_lst.append(('pdisk', disk, 'type', info['PdType'])) hw_lst.append(('pdisk', disk, 'id', '%s:%d' % (info['EnclosureDeviceId'], slot_num))) disk_size = size_in_gb("%s %s" % (info['CoercedSize'].split()[0], info['CoercedSize'].split()[1])) global_pdisk_size = global_pdisk_size + float(disk_size) hw_lst.append(('pdisk', disk, 'size', disk_size)) for key in info.keys(): ignore_list = ['PdType', 'EnclosureDeviceId', 'CoercedSize', 'ExitCode'] if key not in ignore_list: if "DriveTemperature" in key: if "C" in str(info[key].split()[0]): pdisk = info[key].split()[0].split("C")[0] hw_lst.append(('pdisk', disk, key, str(pdisk).strip())) hw_lst.append(('pdisk', disk, "%s_units" % key, "Celsius")) else: hw_lst.append(('pdisk', disk, key, str(info[key]).strip())) elif "InquiryData" in key: count = 0 for mystring in info[key].split(): hw_lst.append(('pdisk', disk, "%s[%d]" % (key, count), str(mystring.strip()))) count = count + 1 else: hw_lst.append(('pdisk', disk, key, str(info[key]).strip())) if global_pdisk_size > 0: hw_lst.append(('pdisk', 'all', 'size', "%.2f" % global_pdisk_size)) for ld_num in range(megacli.ld_get_num(ctrl)): disk = 'disk%d' % ld_num info = megacli.ld_get_info(ctrl, ld_num) hw_lst.append(('ldisk', disk, 'current_access_policy', info['CurrentAccessPolicy'])) hw_lst.append(('ldisk', disk, 'current_cache_policy', info['CurrentCachePolicy'])) hw_lst.append(('ldisk', disk, 'disk_cache_policy', info['DiskCachePolicy'])) hw_lst.append(('ldisk', disk, 'name', info['Name'])) try: hw_lst.append(('ldisk', disk, 'number_of_drives', str(info['NumberOfDrives']))) except KeyError: pass try: hw_lst.append(('ldisk', disk, 'number_of_drives_per_span', str(info['NumberOfDrivesPerSpan']))) except KeyError: pass hw_lst.append(('ldisk', disk, 'raid_level', info['RaidLevel'])) hw_lst.append(('ldisk', disk, 'sector_size', str(info['SectorSize']))) hw_lst.append(('ldisk', disk, 'state', info['State'])) hw_lst.append(('ldisk', disk, 'Size', size_in_gb(info['Size']))) hw_lst.append(('ldisk', disk, 'strip_size', info['StripSize'])) hw_lst.append(('disk', 'megaraid', 'count', str(disk_count))) return True else: return False
def test_adp_count(self): self.output = sample('megacli_adpcount') self.assertEqual(megacli.adp_count(), 1)
def detect_megacli(hw_lst): 'Detect LSI MegaRAID controller configuration.' ctrl_num = megacli.adp_count() disk_count = 0 global_pdisk_size = 0 if ctrl_num > 0: for ctrl in range(ctrl_num): ctrl_info = megacli.adp_all_info(ctrl) for entry in ctrl_info.keys(): hw_lst.append(('megaraid', 'Controller_%d' % (ctrl), '%s' % entry, '%s' % ctrl_info[entry])) for enc in megacli.enc_info(ctrl): if "Enclosure" in enc.keys(): for key in enc.keys(): if "ExitCode" in key or "Enclosure" in key: continue hw_lst.append( ('megaraid', 'Controller_%d/Enclosure_%s' % (ctrl, enc["Enclosure"]), '%s' % key, '%s' % enc[key])) for slot_num in range(enc['NumberOfSlots']): disk_count += 1 disk = 'disk%d' % slot_num info = megacli.pdinfo(ctrl, enc['DeviceId'], slot_num) # If no PdType, it means that's not a disk if 'PdType' not in info.keys(): continue hw_lst.append(('pdisk', disk, 'ctrl', str(ctrl_num))) hw_lst.append(('pdisk', disk, 'type', info['PdType'])) hw_lst.append( ('pdisk', disk, 'id', '%s:%d' % (info['EnclosureDeviceId'], slot_num))) disk_size = size_in_gb("%s %s" % (info['CoercedSize'].split()[0], info['CoercedSize'].split()[1])) global_pdisk_size = global_pdisk_size + float(disk_size) hw_lst.append(('pdisk', disk, 'size', disk_size)) for key in info.keys(): ignore_list = [ 'PdType', 'EnclosureDeviceId', 'CoercedSize', 'ExitCode' ] if key not in ignore_list: if "DriveTemperature" in key: if "C" in str(info[key].split()[0]): a = str(info[key].split()[0].split("C")[0]) hw_lst.append( ('pdisk', disk, key, a.strip())) hw_lst.append( ('pdisk', disk, "%s_units" % key, "Celsius")) else: hw_lst.append(('pdisk', disk, key, str(info[key]).strip())) elif "InquiryData" in key: count = 0 for mystring in info[key].split(): hw_lst.append(('pdisk', disk, "%s[%d]" % (key, count), str(mystring.strip()))) count = count + 1 else: hw_lst.append(('pdisk', disk, key, str(info[key]).strip())) if global_pdisk_size > 0: hw_lst.append( ('pdisk', 'all', 'size', "%.2f" % global_pdisk_size)) for ld_num in range(megacli.ld_get_num(ctrl)): disk = 'disk%d' % ld_num info = megacli.ld_get_info(ctrl, ld_num) hw_lst.append(('ldisk', disk, 'current_access_policy', info['CurrentAccessPolicy'])) hw_lst.append(('ldisk', disk, 'current_cache_policy', info['CurrentCachePolicy'])) hw_lst.append(('ldisk', disk, 'disk_cache_policy', info['DiskCachePolicy'])) hw_lst.append(('ldisk', disk, 'name', info['Name'])) try: hw_lst.append(('ldisk', disk, 'number_of_drives', str(info['NumberOfDrives']))) except KeyError: pass try: hw_lst.append( ('ldisk', disk, 'number_of_drives_per_span', str(info['NumberOfDrivesPerSpan']))) except KeyError: pass hw_lst.append( ('ldisk', disk, 'raid_level', info['RaidLevel'])) hw_lst.append(('ldisk', disk, 'sector_size', str(info['SectorSize']))) hw_lst.append(('ldisk', disk, 'state', info['State'])) hw_lst.append( ('ldisk', disk, 'Size', size_in_gb(info['Size']))) hw_lst.append( ('ldisk', disk, 'strip_size', info['StripSize'])) hw_lst.append(('disk', 'megaraid', 'count', str(disk_count))) return True else: return False
def detect_megacli(hw_lst): "Detect LSI MegaRAID controller configuration." ctrl_num = megacli.adp_count() disk_count = 0 global_pdisk_size = 0 if ctrl_num > 0: for ctrl in range(ctrl_num): ctrl_info = megacli.adp_all_info(ctrl) for entry in ctrl_info.keys(): hw_lst.append(("megaraid", "Controller_%d" % (ctrl), "%s" % entry, "%s" % ctrl_info[entry])) for enc in megacli.enc_info(ctrl): if "Enclosure" in enc.keys(): for key in enc.keys(): if "ExitCode" in key or "Enclosure" in key: continue hw_lst.append( ( "megaraid", "Controller_%d/Enclosure_%s" % (ctrl, enc["Enclosure"]), "%s" % key, "%s" % enc[key], ) ) for slot_num in range(enc["NumberOfSlots"]): disk = "disk%d" % slot_num info = megacli.pdinfo(ctrl, enc["DeviceId"], slot_num) # If no PdType, it means that's not a disk if "PdType" not in info.keys(): continue disk_count += 1 hw_lst.append(("pdisk", disk, "ctrl", str(ctrl_num))) hw_lst.append(("pdisk", disk, "type", info["PdType"])) hw_lst.append(("pdisk", disk, "id", "%s:%d" % (info["EnclosureDeviceId"], slot_num))) disk_size = size_in_gb("%s %s" % (info["CoercedSize"].split()[0], info["CoercedSize"].split()[1])) global_pdisk_size = global_pdisk_size + float(disk_size) hw_lst.append(("pdisk", disk, "size", disk_size)) for key in info.keys(): ignore_list = ["PdType", "EnclosureDeviceId", "CoercedSize", "ExitCode"] if key not in ignore_list: if "DriveTemperature" in key: if "C" in str(info[key].split()[0]): pdisk = info[key].split()[0].split("C")[0] hw_lst.append(("pdisk", disk, key, str(pdisk).strip())) hw_lst.append(("pdisk", disk, "%s_units" % key, "Celsius")) else: hw_lst.append(("pdisk", disk, key, str(info[key]).strip())) elif "InquiryData" in key: count = 0 for mystring in info[key].split(): hw_lst.append(("pdisk", disk, "%s[%d]" % (key, count), str(mystring.strip()))) count = count + 1 else: hw_lst.append(("pdisk", disk, key, str(info[key]).strip())) if global_pdisk_size > 0: hw_lst.append(("pdisk", "all", "size", "%.2f" % global_pdisk_size)) for ld_num in range(megacli.ld_get_num(ctrl)): disk = "disk%d" % ld_num info = megacli.ld_get_info(ctrl, ld_num) hw_lst.append(("ldisk", disk, "current_access_policy", info["CurrentAccessPolicy"])) hw_lst.append(("ldisk", disk, "current_cache_policy", info["CurrentCachePolicy"])) hw_lst.append(("ldisk", disk, "disk_cache_policy", info["DiskCachePolicy"])) hw_lst.append(("ldisk", disk, "name", info["Name"])) try: hw_lst.append(("ldisk", disk, "number_of_drives", str(info["NumberOfDrives"]))) except KeyError: pass try: hw_lst.append(("ldisk", disk, "number_of_drives_per_span", str(info["NumberOfDrivesPerSpan"]))) except KeyError: pass hw_lst.append(("ldisk", disk, "raid_level", info["RaidLevel"])) hw_lst.append(("ldisk", disk, "sector_size", str(info["SectorSize"]))) hw_lst.append(("ldisk", disk, "state", info["State"])) hw_lst.append(("ldisk", disk, "Size", size_in_gb(info["Size"]))) hw_lst.append(("ldisk", disk, "strip_size", info["StripSize"])) hw_lst.append(("disk", "megaraid", "count", str(disk_count))) return True else: return False