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,
        )
示例#2
0
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)
示例#3
0
    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)
示例#4
0
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)
示例#5
0
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)
示例#6
0
    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)
示例#7
0
    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)
示例#8
0
    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)
示例#9
0
    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)
示例#10
0
    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)
示例#11
0
    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)
示例#13
0
 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
示例#14
0
    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)