Skip to content

Commit

Permalink
ceph-volume: fixes for PR #2
Browse files Browse the repository at this point in the history
Fixes to resolve the following  issues raised in the PR
led_status
transport_map and lsm_Disk references
health_map access

Commit to be squashed prior to merge

Signed-off-by: Paul Cuzner <pcuzner@redhat.com>
(cherry picked from commit 2d5d245)
  • Loading branch information
pcuzner authored and Jan Fajerski committed Aug 27, 2020
1 parent bce0b66 commit 8197f18
Showing 1 changed file with 35 additions and 42 deletions.
77 changes: 35 additions & 42 deletions src/ceph-volume/ceph_volume/util/lsmdisk.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,30 @@
from lsm import Disk as lsm_Disk
except ImportError:
lsm_available = False
transport_map = {}
health_map = {}
else:
lsm_available = True
transport_map = {
lsm_Disk.LINK_TYPE_UNKNOWN: "Unavailable",
lsm_Disk.LINK_TYPE_FC: "Fibre Channel",
lsm_Disk.LINK_TYPE_SSA: "IBM SSA",
lsm_Disk.LINK_TYPE_SBP: "Serial Bus",
lsm_Disk.LINK_TYPE_SRP: "SCSI RDMA",
lsm_Disk.LINK_TYPE_ISCSI: "iSCSI",
lsm_Disk.LINK_TYPE_SAS: "SAS",
lsm_Disk.LINK_TYPE_ADT: "ADT (Tape)",
lsm_Disk.LINK_TYPE_ATA: "ATA/SATA",
lsm_Disk.LINK_TYPE_USB: "USB",
lsm_Disk.LINK_TYPE_SOP: "SCSI over PCI-E",
lsm_Disk.LINK_TYPE_PCIE: "PCI-E",
}
health_map = {
lsm_Disk.HEALTH_STATUS_UNKNOWN: "Unknown",
lsm_Disk.HEALTH_STATUS_FAIL: "Fail",
lsm_Disk.HEALTH_STATUS_WARN: "Warn",
lsm_Disk.HEALTH_STATUS_GOOD: "Good",
}

logger = logging.getLogger(__name__)

Expand Down Expand Up @@ -67,38 +89,35 @@ def led_status(self):
@property
def led_ident_state(self):
"""Query a disks IDENT LED state to discover when it is On, Off or Unknown (str)"""
led_state = self.led_status
if led_state == 1:
if self.led_status == 1:
return "Unsupported"
if led_state & lsm_Disk.LED_STATUS_IDENT_ON == lsm_Disk.LED_STATUS_IDENT_ON:
if self.led_status & lsm_Disk.LED_STATUS_IDENT_ON == lsm_Disk.LED_STATUS_IDENT_ON:
return "On"
elif led_state & lsm_Disk.LED_STATUS_IDENT_OFF == lsm_Disk.LED_STATUS_IDENT_OFF:
elif self.led_status & lsm_Disk.LED_STATUS_IDENT_OFF == lsm_Disk.LED_STATUS_IDENT_OFF:
return "Off"
elif led_state & lsm_Disk.LED_STATUS_IDENT_UNKNOWN == lsm_Disk.LED_STATUS_IDENT_UNKNOWN:
elif self.led_status & lsm_Disk.LED_STATUS_IDENT_UNKNOWN == lsm_Disk.LED_STATUS_IDENT_UNKNOWN:
return "Unknown"

return "Unsupported"

@property
def led_fault_state(self):
"""Query a disks FAULT LED state to discover when it is On, Off or Unknown (str)"""
led_state = self.led_status
if led_state == 1:
if self.led_status == 1:
return "Unsupported"
if led_state & lsm_Disk.LED_STATUS_FAULT_ON == lsm_Disk.LED_STATUS_FAULT_ON:
if self.led_status & lsm_Disk.LED_STATUS_FAULT_ON == lsm_Disk.LED_STATUS_FAULT_ON:
return "On"
elif led_state & lsm_Disk.LED_STATUS_FAULT_OFF == lsm_Disk.LED_STATUS_FAULT_OFF:
elif self.led_status & lsm_Disk.LED_STATUS_FAULT_OFF == lsm_Disk.LED_STATUS_FAULT_OFF:
return "Off"
elif led_state & lsm_Disk.LED_STATUS_FAULT_UNKNOWN == lsm_Disk.LED_STATUS_FAULT_UNKNOWN:
elif self.led_status & lsm_Disk.LED_STATUS_FAULT_UNKNOWN == lsm_Disk.LED_STATUS_FAULT_UNKNOWN:
return "Unknown"

return "Unsupported"

@property
def led_ident_support(self):
"""Query the LED state to determine IDENT support: Unknown, Supported, Unsupported (str)"""
led_state = self.led_status
if led_state == 1:
if self.led_status == 1:
return "Unknown"

ident_states = (
Expand All @@ -107,16 +126,15 @@ def led_ident_support(self):
lsm_Disk.LED_STATUS_IDENT_UNKNOWN
)

if (led_state & ident_states) == 0:
if (self.led_status & ident_states) == 0:
return "Unsupported"

return "Supported"

@property
def led_fault_support(self):
"""Query the LED state to determine FAULT support: Unknown, Supported, Unsupported (str)"""
led_state = self.led_status
if led_state == 1:
if self.led_status == 1:
return "Unknown"

fail_states = (
Expand All @@ -125,48 +143,23 @@ def led_fault_support(self):
lsm_Disk.LED_STATUS_FAULT_UNKNOWN
)

if led_state & fail_states == 0:
if self.led_status & fail_states == 0:
return "Unsupported"

return "Supported"

@property
def health(self):
"""Determine the health of the disk from LSM : Unknown, Fail, Warn or Good (str)"""
health_map = {
-1: "Unknown",
0: "Fail",
1: "Warn",
2: "Good",
}
_health_int = self._query_lsm('health_status_get', self.dev_path)
if _health_int is None:
_health_int = -1
return health_map.get(_health_int, "Unknown")

@property
def transport(self):
"""Translate a disks link type to a human readable format (str)"""
_link_type = self._query_lsm('link_type_get', self.dev_path)
return transport_map.get(_link_type, "Unknown")

if _link_type is not None:
_transport_map = {
lsm_Disk.LINK_TYPE_UNKNOWN: "Unavailable",
lsm_Disk.LINK_TYPE_FC: "Fibre Channel",
lsm_Disk.LINK_TYPE_SSA: "IBM SSA",
lsm_Disk.LINK_TYPE_SBP: "Serial Bus",
lsm_Disk.LINK_TYPE_SRP: "SCSI RDMA",
lsm_Disk.LINK_TYPE_ISCSI: "iSCSI",
lsm_Disk.LINK_TYPE_SAS: "SAS",
lsm_Disk.LINK_TYPE_ADT: "ADT (Tape)",
lsm_Disk.LINK_TYPE_ATA: "ATA/SATA",
lsm_Disk.LINK_TYPE_USB: "USB",
lsm_Disk.LINK_TYPE_SOP: "SCSI over PCI-E",
lsm_Disk.LINK_TYPE_PCIE: "PCI-E",
}
return _transport_map.get(_link_type, "Unknown")
else:
return "Unknown"

@property
def media_type(self):
Expand Down

0 comments on commit 8197f18

Please sign in to comment.