for host in matching_hosts:
inventory_for_host = _find_inv_for_host(host, self.mgr.cache.devices)
logger.debug(f"Found inventory for host {inventory_for_host}")
- drive_selection = DriveSelection(drive_group, inventory_for_host)
+ drive_selection = DriveSelection(drive_group, inventory_for_host,
+ self.mgr.cache.get_daemons_with_volatile_status())
logger.debug(f"Found drive selection {drive_selection}")
host_ds_map.append((host, drive_selection))
return host_ds_map
- def driveselection_to_ceph_volume(self,
- drive_selection: DriveSelection,
+ @staticmethod
+ def driveselection_to_ceph_volume(drive_selection: DriveSelection,
osd_id_claims: Optional[List[str]] = None,
preview: bool = False) -> Optional[str]:
logger.debug(f"Translating DriveGroup <{drive_selection.spec}> to ceph-volume command")
import logging
try:
- from typing import List, Optional
+ from typing import List, Optional, Iterator, Tuple, Dict
except ImportError:
pass
def __init__(self,
spec, # type: DriveGroupSpec
disks, # type: List[Device]
+ daemons=None, # type: Iterator[Tuple[str, Dict[str, "DaemonDescription"]]]
):
self.disks = disks.copy()
self.spec = spec
+ self.daemons = daemons
+ self.osds_for_spec = self.find_osds_in_spec()
if self.spec.data_devices.paths: # type: ignore
# re: type: ignore there is *always* a path attribute assigned to DeviceSelection
self._db = self.assign_devices(self.spec.db_devices)
self._journal = self.assign_devices(self.spec.journal_devices)
+ def find_osds_in_spec(self) -> List["DaemonDescription"]:
+ osds: List["DaemonDescription"] = []
+ if not self.daemons:
+ return osds
+ for host, dm in self.daemons:
+ for name, dd in dm.items():
+ if dd.daemon_type == 'osd':
+ if dd.osdspec_affinity == self.spec.service_id:
+ osds.append(dd)
+ return osds
+
def data_devices(self):
# type: () -> List[Device]
return self._data
# type: () -> List[Device]
return self._journal
- @staticmethod
- def _limit_reached(device_filter, len_devices,
+ def _limit_reached(self, device_filter, len_devices,
disk_path):
# type: (DeviceSelection, int, str) -> bool
""" Check for the <limit> property and apply logic