def _refresh_host_devices(self, host: str) -> Optional[str]:
try:
- devices = self._run_cephadm_json(host, 'osd', 'ceph-volume',
- ['--', 'inventory', '--format=json', '--filter-for-batch'])
+ try:
+ devices = self._run_cephadm_json(host, 'osd', 'ceph-volume',
+ ['--', 'inventory', '--format=json', '--filter-for-batch'])
+ except OrchestratorError as e:
+ if 'unrecognized arguments: --filter-for-batch' in str(e):
+ devices = self._run_cephadm_json(host, 'osd', 'ceph-volume',
+ ['--', 'inventory', '--format=json'])
+ else:
+ raise
+
networks = self._run_cephadm_json(host, 'mon', 'list-networks', [], no_fsid=True)
except OrchestratorError as e:
return str(e)
self.log.debug('Refreshed host %s devices (%d) networks (%s)' % (
host, len(devices), len(networks)))
- devices = inventory.Devices.from_json(devices)
- self.mgr.cache.update_host_devices_networks(host, devices.devices, networks)
+ ret = inventory.Devices.from_json(devices)
+ self.mgr.cache.update_host_devices_networks(host, ret.devices, networks)
self.update_osdspec_previews(host)
self.mgr.cache.save_host(host)
return None
from ceph.deployment.drive_group import DriveGroupSpec, DeviceSelection
from cephadm.serve import CephadmServe
from cephadm.services.osd import OSD, OSDRemovalQueue
+from cephadm.utils import CephadmNoImage
try:
from typing import Any, List
assert image == 'image@repo_digest'
else:
assert image == 'image'
+
+ @mock.patch("cephadm.serve.CephadmServe._run_cephadm")
+ def test_ceph_volume_no_filter_for_batch(self, _run_cephadm, cephadm_module: CephadmOrchestrator):
+ _run_cephadm.return_value = ('{}', '', 0)
+
+ error_message = """cephadm exited with an error code: 1, stderr:/usr/bin/podman:stderr usage: ceph-volume inventory [-h] [--format {plain,json,json-pretty}] [path]/usr/bin/podman:stderr ceph-volume inventory: error: unrecognized arguments: --filter-for-batch
+Traceback (most recent call last):
+ File "<stdin>", line 6112, in <module>
+ File "<stdin>", line 1299, in _infer_fsid
+ File "<stdin>", line 1382, in _infer_image
+ File "<stdin>", line 3612, in command_ceph_volume
+ File "<stdin>", line 1061, in call_throws"""
+
+ with with_host(cephadm_module, 'test'):
+ _run_cephadm.reset_mock()
+ _run_cephadm.side_effect = OrchestratorError(error_message)
+
+ s = CephadmServe(cephadm_module)._refresh_host_devices('test')
+ assert s == 'host test `cephadm ceph-volume` failed: ' + error_message
+
+ assert _run_cephadm.mock_calls == [
+ mock.call('test', 'osd', 'ceph-volume',
+ ['--', 'inventory', '--format=json', '--filter-for-batch'], image='',
+ no_fsid=False),
+ mock.call('test', 'osd', 'ceph-volume',
+ ['--', 'inventory', '--format=json'], image='',
+ no_fsid=False),
+ ]