def get_inventory(self, host_filter=None, refresh=False): """ There is no guarantee which devices are returned by get_inventory. """ if host_filter and host_filter.hosts is not None: assert isinstance(host_filter.hosts, list) if self._inventory: if host_filter: return list(filter(lambda host: host.name in host_filter.hosts, self._inventory)) return self._inventory try: c_v_out = check_output(['ceph-volume', 'inventory', '--format', 'json']) except OSError: cmd = """ . {tmpdir}/ceph-volume-virtualenv/bin/activate ceph-volume inventory --format json """ try: c_v_out = check_output(cmd.format(tmpdir=os.environ.get('TMPDIR', '/tmp')), shell=True) except (OSError, CalledProcessError): c_v_out = check_output(cmd.format(tmpdir='.'),shell=True) for out in c_v_out.splitlines(): self.log.error(out) devs = inventory.Devices.from_json(json.loads(out)) return [orchestrator.InventoryHost('localhost', devs)] self.log.error('c-v failed: ' + str(c_v_out)) raise Exception('c-v failed')
def get_inventory(self, host_filter=None, refresh=False): host_list = None if host_filter and host_filter.hosts: # Explicit host list host_list = host_filter.hosts elif host_filter and host_filter.labels: # TODO: query k8s API to resolve to host list, and pass # it into RookCluster.get_discovered_devices raise NotImplementedError() devs = self.rook_cluster.get_discovered_devices(host_list) result = [] for host_name, host_devs in devs.items(): devs = [] for d in host_devs: dev = inventory.Device( path='/dev/' + d['name'], sys_api=dict(rotational='1' if d['rotational'] else '0', size=d['size']), available=d['empty'], rejected_reasons=[] if d['empty'] else ['not empty'], ) devs.append(dev) result.append( orchestrator.InventoryHost(host_name, inventory.Devices(devs))) return result
def get_inventory( self, host_filter: Optional[orchestrator.InventoryFilter] = None, refresh: bool = False) -> List[orchestrator.InventoryHost]: host_list = None if host_filter and host_filter.hosts: # Explicit host list host_list = host_filter.hosts elif host_filter and host_filter.labels: # TODO: query k8s API to resolve to host list, and pass # it into RookCluster.get_discovered_devices raise NotImplementedError() discovered_devs = self.rook_cluster.get_discovered_devices(host_list) result = [] for host_name, host_devs in discovered_devs.items(): devs = [] for d in host_devs: devs.append(d) result.append( orchestrator.InventoryHost(host_name, inventory.Devices(devs))) return result
def get_inventory(self, host_filter=None, refresh=False): host_list = None if host_filter and host_filter.hosts: # Explicit host list host_list = host_filter.hosts elif host_filter and host_filter.labels: # TODO: query k8s API to resolve to host list, and pass # it into RookCluster.get_discovered_devices raise NotImplementedError() devs = self.rook_cluster.get_discovered_devices(host_list) result = [] for host_name, host_devs in devs.items(): devs = [] for d in host_devs: if 'cephVolumeData' in d and d['cephVolumeData']: devs.append(inventory.Device.from_json(json.loads(d['cephVolumeData']))) else: devs.append(inventory.Device( path = '/dev/' + d['name'], sys_api = dict( rotational = '1' if d['rotational'] else '0', size = d['size'] ), available = False, rejected_reasons=['device data coming from ceph-volume not provided'], )) result.append(orchestrator.InventoryHost(host_name, inventory.Devices(devs))) return result