def __init__(self, devices):
# type: (List[Device]) -> None
- self.devices = devices # type: List[Device]
+ # sort devices by path name so ordering is consistent
+ self.devices: List[Device] = sorted(devices, key=lambda d: d.path if d.path else '')
def __eq__(self, other: Any) -> bool:
if not isinstance(other, Devices):
'human_readable_type',
'device_id',
'lsm_data',
+ 'crush_device_class'
]
def __init__(self,
sys_api=None, # type: Optional[Dict[str, Any]]
available=None, # type: Optional[bool]
rejected_reasons=None, # type: Optional[List[str]]
- lvs=None, # type: Optional[List[str]]
+ lvs=None, # type: Optional[List[Dict[str, str]]]
device_id=None, # type: Optional[str]
lsm_data=None, # type: Optional[Dict[str, Dict[str, str]]]
created=None, # type: Optional[datetime.datetime]
- ceph_device=None # type: Optional[bool]
+ ceph_device=None, # type: Optional[bool]
+ crush_device_class=None # type: Optional[str]
):
+
self.path = path
self.sys_api = sys_api if sys_api is not None else {} # type: Dict[str, Any]
self.available = available
self.lsm_data = lsm_data if lsm_data is not None else {} # type: Dict[str, Dict[str, str]]
self.created = created if created is not None else datetime_now()
self.ceph_device = ceph_device
+ self.crush_device_class = crush_device_class
def __eq__(self, other):
# type: (Any) -> bool
return 'hdd' if self.sys_api["rotational"] == "1" else 'ssd'
def __repr__(self) -> str:
- device_desc: Dict[str, Union[str, List[str]]] = {
+ device_desc: Dict[str, Union[str, List[str], List[Dict[str, str]]]] = {
'path': self.path if self.path is not None else 'unknown',
'lvs': self.lvs if self.lvs else 'None',
'available': str(self.available),
- 'ceph_device': str(self.ceph_device)
+ 'ceph_device': str(self.ceph_device),
+ 'crush_device_class': str(self.crush_device_class)
}
if not self.available and self.rejected_reasons:
device_desc['rejection reasons'] = self.rejected_reasons