def _vd_to_lsm_vol(vd_id, dg_id, sys_id, vd_basic_info, vd_pd_info_list, vd_prop_info, vd_path): vol_id = f"{sys_id}:VD{vd_id:d}" name = f"VD {vd_id:d}" if "Name" in list(vd_basic_info.keys()) and vd_basic_info["Name"]: name += ": {}".format(vd_basic_info["Name"]) vpd83 = vd_prop_info.get("SCSI NAA Id", "") if len(vpd83) != 0: vol_id = vpd83 block_size = size_human_2_size_bytes(vd_pd_info_list[0]["SeSz"]) num_of_blocks = vd_prop_info["Number of Blocks"] admin_state = Volume.ADMIN_STATE_ENABLED if vd_prop_info["Exposed to OS"] != "Yes" or \ vd_basic_info["Access"] != "RW": admin_state = Volume.ADMIN_STATE_DISABLED pool_id = _pool_id_of(dg_id, sys_id) plugin_data = vd_path return Volume( vol_id, name, vpd83, block_size, num_of_blocks, admin_state, sys_id, pool_id, plugin_data, )
def _hp_size_to_lsm(hp_size): """ HP Using 'TB, GB, MB, KB' and etc, for LSM, they are 'TiB' and etc. Return int of block bytes """ re_regex = re.compile("^([0-9.]+) +([EPTGMK])B") re_match = re_regex.match(hp_size) if re_match: return size_human_2_size_bytes("%s%siB" % (re_match.group(1), re_match.group(2))) raise LsmError(ErrorNumber.PLUGIN_BUG, "_hp_size_to_lsm(): Got unexpected HP size string %s" % hp_size)
def disks(self, search_key=None, search_value=None, flags=Client.FLAG_RSVD): rc_lsm_disks = [] mega_disk_path_regex = re.compile( r"^Drive (\/c[0-9]+\/e[0-9]+\/s[0-9]+) - Detailed Information$") for ctrl_num in range(self._ctrl_count()): sys_id = self._sys_id_of_ctrl_num(ctrl_num) disk_show_output = self._storcli_exec( ["/c%d/eall/sall" % ctrl_num, "show", "all"]) for drive_name in disk_show_output.keys(): re_match = mega_disk_path_regex.match(drive_name) if not re_match: continue mega_disk_path = re_match.group(1) # Assuming only 1 disk attached to each slot. disk_show_basic_dict = disk_show_output["Drive %s" % mega_disk_path][0] disk_show_attr_dict = disk_show_output[drive_name][ 'Drive %s Device attributes' % mega_disk_path] disk_show_stat_dict = disk_show_output[drive_name][ 'Drive %s State' % mega_disk_path] disk_id = disk_show_attr_dict['SN'].strip() disk_name = "Disk %s %s %s" % ( disk_show_basic_dict['DID'], disk_show_attr_dict['Manufacturer Id'].strip(), disk_show_attr_dict['Model Number']) disk_type = _disk_type_of(disk_show_basic_dict) blk_size = size_human_2_size_bytes( disk_show_basic_dict['SeSz']) blk_count = _blk_count_of(disk_show_attr_dict['Coerced size']) status = _disk_status_of(disk_show_basic_dict, disk_show_stat_dict) plugin_data = "%s:%s" % (ctrl_num, disk_show_basic_dict['EID:Slt']) vpd83 = disk_show_attr_dict["WWN"] rc_lsm_disks.append( Disk( disk_id, disk_name, disk_type, blk_size, blk_count, status, sys_id, plugin_data, _vpd83=vpd83)) return search_property(rc_lsm_disks, search_key, search_value)
def _mega_size_to_lsm(mega_size): """ LSI Using 'TB, GB, MB, KB' and etc, for LSM, they are 'TiB' and etc. Return int of block bytes """ re_regex = re.compile("^([0-9.]+) *([EPTGMK])B$") re_match = re_regex.match(mega_size) if re_match: return size_human_2_size_bytes("%s%siB" % (re_match.group(1), re_match.group(2))) raise LsmError( ErrorNumber.PLUGIN_BUG, "_mega_size_to_lsm(): Got unexpected LSI size string %s" % mega_size)
def _arcconf_size_to_lsm(arcconf_size): """ ARCCONF displays the disk size in terms of 'TB, GB, MB, KB' for LSM, they are 'TiB' and etc. Returning int of block bytes """ re_regex = re.compile("^([0-9.]+) +([EPTGMK])B") re_match = re_regex.match(arcconf_size) if re_match: return size_human_2_size_bytes("%s%siB" % (re_match.group(1), re_match.group(2))) raise LsmError( ErrorNumber.PLUGIN_BUG, "_arcconf_size_to_lsm(): Got unexpected size string %s" % arcconf_size)
def _vd_to_lsm_vol(vd_id, dg_id, sys_id, vd_basic_info, vd_pd_info_list, vd_prop_info, vd_path): vol_id = "%s:VD%d" % (sys_id, vd_id) name = "VD %d" % vd_id vpd83 = '' # TODO(Gris Ge): Beg LSI to provide this information. block_size = size_human_2_size_bytes(vd_pd_info_list[0]['SeSz']) num_of_blocks = vd_prop_info['Number of Blocks'] admin_state = Volume.ADMIN_STATE_ENABLED if vd_prop_info['Exposed to OS'] != 'Yes' or \ vd_basic_info['Access'] != 'RW': admin_state = Volume.ADMIN_STATE_DISABLED pool_id = _pool_id_of(dg_id, sys_id) plugin_data = vd_path return Volume( vol_id, name, vpd83, block_size, num_of_blocks, admin_state, sys_id, pool_id, plugin_data)
def disks(self, search_key=None, search_value=None, flags=Client.FLAG_RSVD): rc_lsm_disks = [] mega_disk_path_regex = re.compile( r"^Drive (\/c[0-9]+\/e[0-9]+\/s[0-9]+) - Detailed Information$") for ctrl_num in range(self._ctrl_count()): sys_id = self._sys_id_of_ctrl_num(ctrl_num) disk_show_output = self._storcli_exec( ["/c%d/eall/sall" % ctrl_num, "show", "all"]) for drive_name in disk_show_output.keys(): re_match = mega_disk_path_regex.match(drive_name) if not re_match: continue mega_disk_path = re_match.group(1) # Assuming only 1 disk attached to each slot. disk_show_basic_dict = disk_show_output[ "Drive %s" % mega_disk_path][0] disk_show_attr_dict = disk_show_output[drive_name][ 'Drive %s Device attributes' % mega_disk_path] disk_show_stat_dict = disk_show_output[drive_name][ 'Drive %s State' % mega_disk_path] disk_id = disk_show_attr_dict['SN'].strip() disk_name = "Disk %s %s %s" % ( disk_show_basic_dict['DID'], disk_show_attr_dict['Manufacturer Id'].strip(), disk_show_attr_dict['Model Number']) disk_type = _disk_type_of(disk_show_basic_dict) blk_size = size_human_2_size_bytes( disk_show_basic_dict['SeSz']) blk_count = _blk_count_of(disk_show_attr_dict['Coerced size']) status = _disk_status_of( disk_show_basic_dict, disk_show_stat_dict) plugin_data = "%s:%s" % ( ctrl_num, disk_show_basic_dict['EID:Slt']) rc_lsm_disks.append( Disk( disk_id, disk_name, disk_type, blk_size, blk_count, status, sys_id, plugin_data)) return search_property(rc_lsm_disks, search_key, search_value)
def _vd_to_lsm_vol(vd_id, dg_id, sys_id, vd_basic_info, vd_pd_info_list, vd_prop_info, vd_path): vol_id = "%s:VD%d" % (sys_id, vd_id) name = "VD %d" % vd_id if 'Name' in vd_basic_info.keys() and vd_basic_info['Name']: name += ": %s" % vd_basic_info['Name'] vpd83 = vd_prop_info.get('SCSI NAA Id', '') block_size = size_human_2_size_bytes(vd_pd_info_list[0]['SeSz']) num_of_blocks = vd_prop_info['Number of Blocks'] admin_state = Volume.ADMIN_STATE_ENABLED if vd_prop_info['Exposed to OS'] != 'Yes' or \ vd_basic_info['Access'] != 'RW': admin_state = Volume.ADMIN_STATE_DISABLED pool_id = _pool_id_of(dg_id, sys_id) plugin_data = vd_path return Volume(vol_id, name, vpd83, block_size, num_of_blocks, admin_state, sys_id, pool_id, plugin_data)
def _vd_to_lsm_vol(vd_id, dg_id, sys_id, vd_basic_info, vd_pd_info_list, vd_prop_info, vd_path): vol_id = "%s:VD%d" % (sys_id, vd_id) name = "VD %d" % vd_id if 'Name' in vd_basic_info.keys() and vd_basic_info['Name']: name += ": %s" % vd_basic_info['Name'] vpd83 = '' # TODO(Gris Ge): Beg LSI to provide this information. block_size = size_human_2_size_bytes(vd_pd_info_list[0]['SeSz']) num_of_blocks = vd_prop_info['Number of Blocks'] admin_state = Volume.ADMIN_STATE_ENABLED if vd_prop_info['Exposed to OS'] != 'Yes' or \ vd_basic_info['Access'] != 'RW': admin_state = Volume.ADMIN_STATE_DISABLED pool_id = _pool_id_of(dg_id, sys_id) plugin_data = vd_path return Volume( vol_id, name, vpd83, block_size, num_of_blocks, admin_state, sys_id, pool_id, plugin_data)
def _vd_to_lsm_vol(vd_id, dg_id, sys_id, vd_basic_info, vd_pd_info_list, vd_prop_info, vd_path): vol_id = "%s:VD%d" % (sys_id, vd_id) name = "VD %d" % vd_id if 'Name' in list(vd_basic_info.keys()) and vd_basic_info['Name']: name += ": %s" % vd_basic_info['Name'] vpd83 = vd_prop_info.get('SCSI NAA Id', '') if (len(vpd83) != 0): vol_id = vpd83 block_size = size_human_2_size_bytes(vd_pd_info_list[0]['SeSz']) num_of_blocks = vd_prop_info['Number of Blocks'] admin_state = Volume.ADMIN_STATE_ENABLED if vd_prop_info['Exposed to OS'] != 'Yes' or \ vd_basic_info['Access'] != 'RW': admin_state = Volume.ADMIN_STATE_DISABLED pool_id = _pool_id_of(dg_id, sys_id) plugin_data = vd_path return Volume(vol_id, name, vpd83, block_size, num_of_blocks, admin_state, sys_id, pool_id, plugin_data)
def disks(self, search_key=None, search_value=None, flags=Client.FLAG_RSVD): rc_lsm_disks = [] mega_disk_path_regex = re.compile( r""" ^Drive \ ( \/c[0-9]+\/ # Controller ID (:?e[0-9]+\/){0,1} # Enclosure ID(optional) s[0-9]+ # Slot ID )\ -\ Detailed\ Information$""", re.X) for ctrl_num in range(self._ctrl_count()): sys_id = self._sys_id_of_ctrl_num(ctrl_num) try: disk_show_output = self._storcli_exec( ["/c%d/eall/sall" % ctrl_num, "show", "all"]) except ExecError: disk_show_output = {} try: disk_show_output.update( self._storcli_exec(["/c%d/sall" % ctrl_num, "show", "all"])) except (ExecError, TypeError, LsmError): pass for drive_name in list(disk_show_output.keys()): re_match = mega_disk_path_regex.match(drive_name) if not re_match: continue mega_disk_path = re_match.group(1) # Assuming only 1 disk attached to each slot. disk_show_basic_dict = disk_show_output["Drive %s" % mega_disk_path][0] disk_show_attr_dict = disk_show_output[drive_name][ 'Drive %s Device attributes' % mega_disk_path] disk_show_stat_dict = disk_show_output[drive_name][ 'Drive %s State' % mega_disk_path] disk_id = disk_show_attr_dict['SN'].strip() disk_name = "Disk %s %s %s" % ( disk_show_basic_dict['DID'], disk_show_attr_dict['Manufacturer Id'].strip(), disk_show_attr_dict['Model Number']) disk_type = _disk_type_of(disk_show_basic_dict) blk_size = size_human_2_size_bytes( disk_show_basic_dict['SeSz']) blk_count = _blk_count_of(disk_show_attr_dict['Coerced size']) status = _disk_status_of(disk_show_basic_dict, disk_show_stat_dict) plugin_data = "%s:%s" % (ctrl_num, disk_show_basic_dict['EID:Slt']) vpd83 = disk_show_attr_dict["WWN"].lower() if vpd83 == 'na': vpd83 = '' rpm = _disk_rpm_of(disk_show_basic_dict) link_type = _disk_link_type_of(disk_show_basic_dict) rc_lsm_disks.append( Disk(disk_id, disk_name, disk_type, blk_size, blk_count, status, sys_id, plugin_data, _vpd83=vpd83, _rpm=rpm, _link_type=link_type)) return search_property(rc_lsm_disks, search_key, search_value)
def disks( self, search_key=None, search_value=None, flags=Client.FLAG_RSVD, ): _ = flags rc_lsm_disks = [] mega_disk_path_regex = re.compile( r""" ^Drive \ ( \/c[0-9]+\/ # Controller ID (:?e[0-9]+\/){0,1} # Enclosure ID(optional) s[0-9]+ # Slot ID )\ -\ Detailed\ Information$""", re.X, ) for ctrl_num in range(self._ctrl_count()): sys_id = self._sys_id_of_ctrl_num(ctrl_num) try: disk_show_output = self._storcli_exec( f"/c{ctrl_num:d}/eall/sall show all", ignore_failure=True, ) except ExecError: disk_show_output = {} try: disk_show_output.update( self._storcli_exec( f"/c{ctrl_num:d}/sall show all", ignore_failure=True, ), ) except (ExecError, TypeError): pass for drive_name in list(disk_show_output.keys()): re_match = mega_disk_path_regex.match(drive_name) if not re_match: continue mega_disk_path = re_match.group(1) # Assuming only 1 disk attached to each slot. disk_show_basic_dict = disk_show_output[ f"Drive {mega_disk_path}"][0] disk_show_attr_dict = disk_show_output[drive_name][ f"Drive {mega_disk_path} Device attributes"] disk_show_stat_dict = disk_show_output[drive_name][ f"Drive {mega_disk_path} State"] disk_id = disk_show_attr_dict["SN"].strip() disk_name = "Disk {} {} {}".format( disk_show_basic_dict["DID"], disk_show_attr_dict["Manufacturer Id"].strip(), disk_show_attr_dict["Model Number"], ) disk_type = _disk_type_of(disk_show_basic_dict) blk_size = size_human_2_size_bytes( disk_show_basic_dict["SeSz"], ) blk_count = _blk_count_of(disk_show_attr_dict["Coerced size"]) status = _disk_status_of( disk_show_basic_dict, disk_show_stat_dict, ) plugin_data = f"{ctrl_num}:{disk_show_basic_dict['EID:Slt']}" vpd83 = disk_show_attr_dict["WWN"].lower() if vpd83 == "na": vpd83 = "" rpm = _disk_rpm_of(disk_show_basic_dict) link_type = _disk_link_type_of(disk_show_basic_dict) rc_lsm_disks.append( Disk( disk_id, disk_name, disk_type, blk_size, blk_count, status, sys_id, plugin_data, _vpd83=vpd83, _rpm=rpm, _link_type=link_type, )) return search_property(rc_lsm_disks, search_key, search_value)
def _size(s): size_bytes = size_human_2_size_bytes(s) if size_bytes <= 0: raise ArgError("Incorrect size argument format: '%s'" % s) return size_bytes
def disks(self, search_key=None, search_value=None, flags=Client.FLAG_RSVD): rc_lsm_disks = [] mega_disk_path_regex = re.compile( r""" ^Drive \ ( \/c[0-9]+\/ # Controller ID (:?e[0-9]+\/){0,1} # Enclosure ID(optional) s[0-9]+ # Slot ID )\ -\ Detailed\ Information$""", re.X) for ctrl_num in range(self._ctrl_count()): sys_id = self._sys_id_of_ctrl_num(ctrl_num) try: disk_show_output = self._storcli_exec( ["/c%d/eall/sall" % ctrl_num, "show", "all"]) except ExecError: disk_show_output = {} try: disk_show_output.update( self._storcli_exec( ["/c%d/sall" % ctrl_num, "show", "all"])) except (ExecError, TypeError): pass for drive_name in list(disk_show_output.keys()): re_match = mega_disk_path_regex.match(drive_name) if not re_match: continue mega_disk_path = re_match.group(1) # Assuming only 1 disk attached to each slot. disk_show_basic_dict = disk_show_output[ "Drive %s" % mega_disk_path][0] disk_show_attr_dict = disk_show_output[drive_name][ 'Drive %s Device attributes' % mega_disk_path] disk_show_stat_dict = disk_show_output[drive_name][ 'Drive %s State' % mega_disk_path] disk_id = disk_show_attr_dict['SN'].strip() disk_name = "Disk %s %s %s" % ( disk_show_basic_dict['DID'], disk_show_attr_dict['Manufacturer Id'].strip(), disk_show_attr_dict['Model Number']) disk_type = _disk_type_of(disk_show_basic_dict) blk_size = size_human_2_size_bytes( disk_show_basic_dict['SeSz']) blk_count = _blk_count_of(disk_show_attr_dict['Coerced size']) status = _disk_status_of( disk_show_basic_dict, disk_show_stat_dict) plugin_data = "%s:%s" % ( ctrl_num, disk_show_basic_dict['EID:Slt']) vpd83 = disk_show_attr_dict["WWN"].lower() rpm = _disk_rpm_of(disk_show_basic_dict) link_type = _disk_link_type_of(disk_show_basic_dict) rc_lsm_disks.append( Disk( disk_id, disk_name, disk_type, blk_size, blk_count, status, sys_id, plugin_data, _vpd83=vpd83, _rpm=rpm, _link_type=link_type)) return search_property(rc_lsm_disks, search_key, search_value)