]>
git.proxmox.com Git - ceph.git/blob - ceph/src/ceph-volume/ceph_volume/tests/devices/lvm/test_activate.py
2 from copy
import deepcopy
3 from ceph_volume
.devices
.lvm
import activate
4 from ceph_volume
.api
import lvm
as api
5 from ceph_volume
.tests
.conftest
import Capture
10 def __init__(self
, **kw
):
12 self
.bluestore
= False
13 self
.filestore
= False
14 self
.no_systemd
= False
15 self
.auto_detect_objectstore
= None
16 for k
, v
in kw
.items():
20 class TestActivate(object):
22 # these tests are very functional, hence the heavy patching, it is hard to
23 # test the negative side effect with an actual functional run, so we must
24 # setup a perfect scenario for this test to check it can really work
26 def test_no_osd_id_matches_fsid(self
, is_root
, monkeypatch
, capture
):
27 FooVolume
= api
.Volume(lv_name
='foo', lv_path
='/dev/vg/foo',
28 lv_tags
="ceph.osd_fsid=1234")
30 volumes
.append(FooVolume
)
31 monkeypatch
.setattr(api
, 'get_lvs', lambda **kwargs
: volumes
)
32 monkeypatch
.setattr(activate
, 'activate_filestore', capture
)
33 args
= Args(osd_id
=None, osd_fsid
='1234', filestore
=True)
34 activate
.Activate([]).activate(args
)
35 assert capture
.calls
[0]['args'][0] == [FooVolume
]
37 def test_no_osd_id_matches_fsid_bluestore(self
, is_root
, monkeypatch
, capture
):
38 FooVolume
= api
.Volume(lv_name
='foo', lv_path
='/dev/vg/foo',
39 lv_tags
="ceph.osd_fsid=1234")
41 volumes
.append(FooVolume
)
42 monkeypatch
.setattr(api
, 'get_lvs', lambda **kwargs
: volumes
)
43 monkeypatch
.setattr(activate
, 'activate_bluestore', capture
)
44 args
= Args(osd_id
=None, osd_fsid
='1234', bluestore
=True)
45 activate
.Activate([]).activate(args
)
46 assert capture
.calls
[0]['args'][0] == [FooVolume
]
48 def test_no_osd_id_no_matching_fsid(self
, is_root
, monkeypatch
, capture
):
49 FooVolume
= api
.Volume(lv_name
='foo', lv_path
='/dev/vg/foo',
50 lv_tags
="ceph.osd_fsid=1111")
52 volumes
.append(FooVolume
)
53 monkeypatch
.setattr(api
, 'get_lvs', lambda **kwargs
: [])
54 monkeypatch
.setattr(api
, 'get_single_lv', lambda **kwargs
: [])
55 monkeypatch
.setattr(activate
, 'activate_filestore', capture
)
57 args
= Args(osd_id
=None, osd_fsid
='2222')
58 with pytest
.raises(RuntimeError):
59 activate
.Activate([]).activate(args
)
61 def test_osd_id_no_osd_fsid(self
, is_root
):
62 args
= Args(osd_id
=42, osd_fsid
=None)
63 with pytest
.raises(RuntimeError) as result
:
64 activate
.Activate([]).activate(args
)
65 assert result
.value
.args
[0] == 'could not activate osd.42, please provide the osd_fsid too'
67 def test_no_osd_id_no_osd_fsid(self
, is_root
):
68 args
= Args(osd_id
=None, osd_fsid
=None)
69 with pytest
.raises(RuntimeError) as result
:
70 activate
.Activate([]).activate(args
)
71 assert result
.value
.args
[0] == 'Please provide both osd_id and osd_fsid'
73 def test_filestore_no_systemd(self
, is_root
, monkeypatch
, capture
):
74 monkeypatch
.setattr('ceph_volume.configuration.load', lambda: None)
75 fake_enable
= Capture()
76 fake_start_osd
= Capture()
77 monkeypatch
.setattr('ceph_volume.util.system.device_is_mounted', lambda *a
, **kw
: True)
78 monkeypatch
.setattr('ceph_volume.util.system.chown', lambda *a
, **kw
: True)
79 monkeypatch
.setattr('ceph_volume.process.run', lambda *a
, **kw
: True)
80 monkeypatch
.setattr(activate
.systemctl
, 'enable_volume', fake_enable
)
81 monkeypatch
.setattr(activate
.systemctl
, 'start_osd', fake_start_osd
)
82 JournalVolume
= api
.Volume(
84 lv_path
='/dev/vg/journal',
87 "ceph.cluster_name=ceph", "ceph.journal_device=/dev/vg/journal",
88 "ceph.journal_uuid=000", "ceph.type=journal",
89 "ceph.osd_id=0", "ceph.osd_fsid=1234"])
91 DataVolume
= api
.Volume(
93 lv_path
='/dev/vg/data',
95 lv_tags
="ceph.cluster_name=ceph,ceph.journal_device=/dev/vg/" + \
96 "journal,ceph.journal_uuid=000,ceph.type=data," + \
97 "ceph.osd_id=0,ceph.osd_fsid=1234")
99 volumes
.append(DataVolume
)
100 volumes
.append(JournalVolume
)
101 monkeypatch
.setattr(api
, 'get_lvs', lambda **kwargs
: deepcopy(volumes
))
103 args
= Args(osd_id
=None, osd_fsid
='1234', no_systemd
=True, filestore
=True)
104 activate
.Activate([]).activate(args
)
105 assert fake_enable
.calls
== []
106 assert fake_start_osd
.calls
== []
108 def test_filestore_no_systemd_autodetect(self
, is_root
, monkeypatch
, capture
):
109 monkeypatch
.setattr('ceph_volume.configuration.load', lambda: None)
110 fake_enable
= Capture()
111 fake_start_osd
= Capture()
112 monkeypatch
.setattr('ceph_volume.util.system.device_is_mounted', lambda *a
, **kw
: True)
113 monkeypatch
.setattr('ceph_volume.util.system.chown', lambda *a
, **kw
: True)
114 monkeypatch
.setattr('ceph_volume.process.run', lambda *a
, **kw
: True)
115 monkeypatch
.setattr(activate
.systemctl
, 'enable_volume', fake_enable
)
116 monkeypatch
.setattr(activate
.systemctl
, 'start_osd', fake_start_osd
)
117 JournalVolume
= api
.Volume(
119 lv_path
='/dev/vg/journal',
122 "ceph.cluster_name=ceph", "ceph.journal_device=/dev/vg/journal",
123 "ceph.journal_uuid=000", "ceph.type=journal",
124 "ceph.osd_id=0", "ceph.osd_fsid=1234"])
126 DataVolume
= api
.Volume(
128 lv_path
='/dev/vg/data',
130 lv_tags
="ceph.cluster_name=ceph,ceph.journal_device=/dev/vg/" + \
131 "journal,ceph.journal_uuid=000,ceph.type=data," + \
132 "ceph.osd_id=0,ceph.osd_fsid=1234")
134 volumes
.append(DataVolume
)
135 volumes
.append(JournalVolume
)
136 monkeypatch
.setattr(api
, 'get_lvs', lambda **kwargs
: deepcopy(volumes
))
138 args
= Args(osd_id
=None, osd_fsid
='1234', no_systemd
=True,
139 filestore
=True, auto_detect_objectstore
=True)
140 activate
.Activate([]).activate(args
)
141 assert fake_enable
.calls
== []
142 assert fake_start_osd
.calls
== []
144 def test_filestore_systemd_autodetect(self
, is_root
, monkeypatch
, capture
):
145 fake_enable
= Capture()
146 fake_start_osd
= Capture()
147 monkeypatch
.setattr('ceph_volume.configuration.load', lambda: None)
148 monkeypatch
.setattr('ceph_volume.util.system.device_is_mounted', lambda *a
, **kw
: True)
149 monkeypatch
.setattr('ceph_volume.util.system.chown', lambda *a
, **kw
: True)
150 monkeypatch
.setattr('ceph_volume.process.run', lambda *a
, **kw
: True)
151 monkeypatch
.setattr(activate
.systemctl
, 'enable_volume', fake_enable
)
152 monkeypatch
.setattr(activate
.systemctl
, 'start_osd', fake_start_osd
)
153 JournalVolume
= api
.Volume(
155 lv_path
='/dev/vg/journal',
158 "ceph.cluster_name=ceph", "ceph.journal_device=/dev/vg/journal",
159 "ceph.journal_uuid=000", "ceph.type=journal",
160 "ceph.osd_id=0","ceph.osd_fsid=1234"])
162 DataVolume
= api
.Volume(
164 lv_path
='/dev/vg/data',
166 lv_tags
="ceph.cluster_name=ceph,ceph.journal_device=/dev/vg/" + \
167 "journal,ceph.journal_uuid=000,ceph.type=data," + \
168 "ceph.osd_id=0,ceph.osd_fsid=1234")
170 volumes
.append(DataVolume
)
171 volumes
.append(JournalVolume
)
172 monkeypatch
.setattr(api
, 'get_lvs', lambda **kwargs
: deepcopy(volumes
))
174 args
= Args(osd_id
=None, osd_fsid
='1234', no_systemd
=False,
175 filestore
=True, auto_detect_objectstore
=False)
176 activate
.Activate([]).activate(args
)
177 assert fake_enable
.calls
!= []
178 assert fake_start_osd
.calls
!= []
180 def test_filestore_systemd(self
, is_root
, monkeypatch
, capture
):
181 fake_enable
= Capture()
182 fake_start_osd
= Capture()
183 monkeypatch
.setattr('ceph_volume.configuration.load', lambda: None)
184 monkeypatch
.setattr('ceph_volume.util.system.device_is_mounted', lambda *a
, **kw
: True)
185 monkeypatch
.setattr('ceph_volume.util.system.chown', lambda *a
, **kw
: True)
186 monkeypatch
.setattr('ceph_volume.process.run', lambda *a
, **kw
: True)
187 monkeypatch
.setattr(activate
.systemctl
, 'enable_volume', fake_enable
)
188 monkeypatch
.setattr(activate
.systemctl
, 'start_osd', fake_start_osd
)
189 JournalVolume
= api
.Volume(
191 lv_path
='/dev/vg/journal',
194 "ceph.cluster_name=ceph", "ceph.journal_device=/dev/vg/journal",
195 "ceph.journal_uuid=000", "ceph.type=journal",
196 "ceph.osd_id=0","ceph.osd_fsid=1234"])
198 DataVolume
= api
.Volume(
200 lv_path
='/dev/vg/data',
202 lv_tags
="ceph.cluster_name=ceph,ceph.journal_device=/dev/vg/" + \
203 "journal,ceph.journal_uuid=000,ceph.type=data," + \
204 "ceph.osd_id=0,ceph.osd_fsid=1234")
206 volumes
.append(DataVolume
)
207 volumes
.append(JournalVolume
)
208 monkeypatch
.setattr(api
, 'get_lvs', lambda **kwargs
: deepcopy(volumes
))
210 args
= Args(osd_id
=None, osd_fsid
='1234', no_systemd
=False,
212 activate
.Activate([]).activate(args
)
213 assert fake_enable
.calls
!= []
214 assert fake_start_osd
.calls
!= []
216 def test_bluestore_no_systemd(self
, is_root
, monkeypatch
, capture
):
217 monkeypatch
.setattr('ceph_volume.configuration.load', lambda: None)
218 fake_enable
= Capture()
219 fake_start_osd
= Capture()
220 monkeypatch
.setattr('ceph_volume.util.system.path_is_mounted', lambda *a
, **kw
: True)
221 monkeypatch
.setattr('ceph_volume.util.system.chown', lambda *a
, **kw
: True)
222 monkeypatch
.setattr('ceph_volume.process.run', lambda *a
, **kw
: True)
223 monkeypatch
.setattr(activate
.systemctl
, 'enable_volume', fake_enable
)
224 monkeypatch
.setattr(activate
.systemctl
, 'start_osd', fake_start_osd
)
225 DataVolume
= api
.Volume(
227 lv_path
='/dev/vg/data',
228 lv_tags
="ceph.cluster_name=ceph,,ceph.journal_uuid=000," + \
229 "ceph.type=block,ceph.osd_id=0,ceph.osd_fsid=1234")
231 volumes
.append(DataVolume
)
232 monkeypatch
.setattr(api
, 'get_lvs', lambda **kwargs
: deepcopy(volumes
))
234 args
= Args(osd_id
=None, osd_fsid
='1234', no_systemd
=True, bluestore
=True)
235 activate
.Activate([]).activate(args
)
236 assert fake_enable
.calls
== []
237 assert fake_start_osd
.calls
== []
239 def test_bluestore_systemd(self
, is_root
, monkeypatch
, capture
):
240 monkeypatch
.setattr('ceph_volume.configuration.load', lambda: None)
241 fake_enable
= Capture()
242 fake_start_osd
= Capture()
243 monkeypatch
.setattr('ceph_volume.util.system.path_is_mounted', lambda *a
, **kw
: True)
244 monkeypatch
.setattr('ceph_volume.util.system.chown', lambda *a
, **kw
: True)
245 monkeypatch
.setattr('ceph_volume.process.run', lambda *a
, **kw
: True)
246 monkeypatch
.setattr(activate
.systemctl
, 'enable_volume', fake_enable
)
247 monkeypatch
.setattr(activate
.systemctl
, 'start_osd', fake_start_osd
)
248 DataVolume
= api
.Volume(
250 lv_path
='/dev/vg/data',
251 lv_tags
="ceph.cluster_name=ceph,,ceph.journal_uuid=000," + \
252 "ceph.type=block,ceph.osd_id=0,ceph.osd_fsid=1234")
254 volumes
.append(DataVolume
)
255 monkeypatch
.setattr(api
, 'get_lvs', lambda **kwargs
: deepcopy(volumes
))
257 args
= Args(osd_id
=None, osd_fsid
='1234', no_systemd
=False,
259 activate
.Activate([]).activate(args
)
260 assert fake_enable
.calls
!= []
261 assert fake_start_osd
.calls
!= []
263 def test_bluestore_no_systemd_autodetect(self
, is_root
, monkeypatch
, capture
):
264 monkeypatch
.setattr('ceph_volume.configuration.load', lambda: None)
265 fake_enable
= Capture()
266 fake_start_osd
= Capture()
267 monkeypatch
.setattr('ceph_volume.util.system.path_is_mounted', lambda *a
, **kw
: True)
268 monkeypatch
.setattr('ceph_volume.util.system.chown', lambda *a
, **kw
: True)
269 monkeypatch
.setattr('ceph_volume.process.run', lambda *a
, **kw
: True)
270 monkeypatch
.setattr(activate
.systemctl
, 'enable_volume', fake_enable
)
271 monkeypatch
.setattr(activate
.systemctl
, 'start_osd', fake_start_osd
)
272 DataVolume
= api
.Volume(
274 lv_path
='/dev/vg/data',
275 lv_tags
="ceph.cluster_name=ceph,,ceph.block_uuid=000," + \
276 "ceph.type=block,ceph.osd_id=0,ceph.osd_fsid=1234")
278 volumes
.append(DataVolume
)
279 monkeypatch
.setattr(api
, 'get_lvs', lambda **kwargs
: deepcopy(volumes
))
281 args
= Args(osd_id
=None, osd_fsid
='1234', no_systemd
=True,
282 bluestore
=True, auto_detect_objectstore
=True)
283 activate
.Activate([]).activate(args
)
284 assert fake_enable
.calls
== []
285 assert fake_start_osd
.calls
== []
287 def test_bluestore_systemd_autodetect(self
, is_root
, monkeypatch
, capture
):
288 monkeypatch
.setattr('ceph_volume.configuration.load', lambda: None)
289 fake_enable
= Capture()
290 fake_start_osd
= Capture()
291 monkeypatch
.setattr('ceph_volume.util.system.path_is_mounted',
292 lambda *a
, **kw
: True)
293 monkeypatch
.setattr('ceph_volume.util.system.chown', lambda *a
, **kw
:
295 monkeypatch
.setattr('ceph_volume.process.run', lambda *a
, **kw
: True)
296 monkeypatch
.setattr(activate
.systemctl
, 'enable_volume', fake_enable
)
297 monkeypatch
.setattr(activate
.systemctl
, 'start_osd', fake_start_osd
)
298 DataVolume
= api
.Volume(
300 lv_path
='/dev/vg/data',
301 lv_tags
="ceph.cluster_name=ceph,,ceph.journal_uuid=000," + \
302 "ceph.type=block,ceph.osd_id=0,ceph.osd_fsid=1234")
304 volumes
.append(DataVolume
)
305 monkeypatch
.setattr(api
, 'get_lvs', lambda **kwargs
: deepcopy(volumes
))
307 args
= Args(osd_id
=None, osd_fsid
='1234', no_systemd
=False,
308 bluestore
=True, auto_detect_objectstore
=False)
309 activate
.Activate([]).activate(args
)
310 assert fake_enable
.calls
!= []
311 assert fake_start_osd
.calls
!= []
313 class TestActivateFlags(object):
315 def test_default_objectstore(self
, capture
):
316 args
= ['0', 'asdf-ljh-asdf']
317 activation
= activate
.Activate(args
)
318 activation
.activate
= capture
320 parsed_args
= capture
.calls
[0]['args'][0]
321 assert parsed_args
.filestore
is False
322 assert parsed_args
.bluestore
is False
324 def test_uses_filestore(self
, capture
):
325 args
= ['--filestore', '0', 'asdf-ljh-asdf']
326 activation
= activate
.Activate(args
)
327 activation
.activate
= capture
329 parsed_args
= capture
.calls
[0]['args'][0]
330 assert parsed_args
.filestore
is True
331 assert parsed_args
.bluestore
is False
333 def test_uses_bluestore(self
, capture
):
334 args
= ['--bluestore', '0', 'asdf-ljh-asdf']
335 activation
= activate
.Activate(args
)
336 activation
.activate
= capture
338 parsed_args
= capture
.calls
[0]['args'][0]
339 assert parsed_args
.filestore
is False
340 assert parsed_args
.bluestore
is True
343 class TestActivateAll(object):
345 def test_does_not_detect_osds(self
, capsys
, is_root
, capture
, monkeypatch
):
346 monkeypatch
.setattr('ceph_volume.devices.lvm.activate.direct_report', lambda: {})
348 activation
= activate
.Activate(args
)
350 out
, err
= capsys
.readouterr()
351 assert 'Was unable to find any OSDs to activate' in err
352 assert 'Verify OSDs are present with ' in err
354 def test_detects_running_osds(self
, capsys
, is_root
, capture
, monkeypatch
):
355 monkeypatch
.setattr('ceph_volume.devices.lvm.activate.direct_report', lambda: direct_report
)
356 monkeypatch
.setattr('ceph_volume.devices.lvm.activate.systemctl.osd_is_active', lambda x
: True)
358 activation
= activate
.Activate(args
)
360 out
, err
= capsys
.readouterr()
361 assert 'a8789a96ce8b process is active. Skipping activation' in err
362 assert 'b8218eaa1634 process is active. Skipping activation' in err
364 def test_detects_osds_to_activate_systemd(self
, is_root
, capture
, monkeypatch
):
365 monkeypatch
.setattr('ceph_volume.devices.lvm.activate.direct_report', lambda: direct_report
)
366 monkeypatch
.setattr('ceph_volume.devices.lvm.activate.systemctl.osd_is_active', lambda x
: False)
368 activation
= activate
.Activate(args
)
369 activation
.activate
= capture
371 calls
= sorted(capture
.calls
, key
=lambda x
: x
['kwargs']['osd_id'])
372 assert calls
[0]['kwargs']['osd_id'] == '0'
373 assert calls
[0]['kwargs']['osd_fsid'] == '957d22b7-24ce-466a-9883-b8218eaa1634'
374 assert calls
[1]['kwargs']['osd_id'] == '1'
375 assert calls
[1]['kwargs']['osd_fsid'] == 'd0f3e4ad-e52a-4520-afc0-a8789a96ce8b'
377 def test_detects_osds_to_activate_no_systemd(self
, is_root
, capture
, monkeypatch
):
378 monkeypatch
.setattr('ceph_volume.devices.lvm.activate.direct_report', lambda: direct_report
)
379 args
= ['--all', '--no-systemd']
380 activation
= activate
.Activate(args
)
381 activation
.activate
= capture
383 calls
= sorted(capture
.calls
, key
=lambda x
: x
['kwargs']['osd_id'])
384 assert calls
[0]['kwargs']['osd_id'] == '0'
385 assert calls
[0]['kwargs']['osd_fsid'] == '957d22b7-24ce-466a-9883-b8218eaa1634'
386 assert calls
[1]['kwargs']['osd_id'] == '1'
387 assert calls
[1]['kwargs']['osd_fsid'] == 'd0f3e4ad-e52a-4520-afc0-a8789a96ce8b'
390 # Activate All fixture
396 "lv_name": "osd-block-957d22b7-24ce-466a-9883-b8218eaa1634",
397 "lv_path": "/dev/ceph-d4962338-46ff-4cd5-8ea6-c033dbdc5b44/osd-block-957d22b7-24ce-466a-9883-b8218eaa1634",
398 "lv_tags": "ceph.block_device=/dev/ceph-d4962338-46ff-4cd5-8ea6-c033dbdc5b44/osd-block-957d22b7-24ce-466a-9883-b8218eaa1634,ceph.block_uuid=6MixOd-2Q1I-f8K3-PPOq-UJGV-L3A0-0XwUm4,ceph.cephx_lockbox_secret=,ceph.cluster_fsid=d4962338-46ff-4cd5-8ea6-c033dbdc5b44,ceph.cluster_name=ceph,ceph.crush_device_class=,ceph.encrypted=0,ceph.osd_fsid=957d22b7-24ce-466a-9883-b8218eaa1634,ceph.osd_id=0,ceph.type=block",
399 "lv_uuid": "6MixOd-2Q1I-f8K3-PPOq-UJGV-L3A0-0XwUm4",
400 "name": "osd-block-957d22b7-24ce-466a-9883-b8218eaa1634",
401 "path": "/dev/ceph-d4962338-46ff-4cd5-8ea6-c033dbdc5b44/osd-block-957d22b7-24ce-466a-9883-b8218eaa1634",
403 "ceph.block_device": "/dev/ceph-d4962338-46ff-4cd5-8ea6-c033dbdc5b44/osd-block-957d22b7-24ce-466a-9883-b8218eaa1634",
404 "ceph.block_uuid": "6MixOd-2Q1I-f8K3-PPOq-UJGV-L3A0-0XwUm4",
405 "ceph.cephx_lockbox_secret": "",
406 "ceph.cluster_fsid": "d4962338-46ff-4cd5-8ea6-c033dbdc5b44",
407 "ceph.cluster_name": "ceph",
408 "ceph.crush_device_class": "",
409 "ceph.encrypted": "0",
410 "ceph.osd_fsid": "957d22b7-24ce-466a-9883-b8218eaa1634",
415 "vg_name": "ceph-d4962338-46ff-4cd5-8ea6-c033dbdc5b44"
420 "lv_name": "osd-block-d0f3e4ad-e52a-4520-afc0-a8789a96ce8b",
421 "lv_path": "/dev/ceph-7538bcf0-f155-4d3f-a9fd-d8b15905e532/osd-block-d0f3e4ad-e52a-4520-afc0-a8789a96ce8b",
422 "lv_tags": "ceph.block_device=/dev/ceph-7538bcf0-f155-4d3f-a9fd-d8b15905e532/osd-block-d0f3e4ad-e52a-4520-afc0-a8789a96ce8b,ceph.block_uuid=1igwLb-ZlmV-eLgp-hapx-c1Hr-M5gz-sHjnyW,ceph.cephx_lockbox_secret=,ceph.cluster_fsid=d4962338-46ff-4cd5-8ea6-c033dbdc5b44,ceph.cluster_name=ceph,ceph.crush_device_class=,ceph.encrypted=0,ceph.osd_fsid=d0f3e4ad-e52a-4520-afc0-a8789a96ce8b,ceph.osd_id=1,ceph.type=block",
423 "lv_uuid": "1igwLb-ZlmV-eLgp-hapx-c1Hr-M5gz-sHjnyW",
424 "name": "osd-block-d0f3e4ad-e52a-4520-afc0-a8789a96ce8b",
425 "path": "/dev/ceph-7538bcf0-f155-4d3f-a9fd-d8b15905e532/osd-block-d0f3e4ad-e52a-4520-afc0-a8789a96ce8b",
427 "ceph.block_device": "/dev/ceph-7538bcf0-f155-4d3f-a9fd-d8b15905e532/osd-block-d0f3e4ad-e52a-4520-afc0-a8789a96ce8b",
428 "ceph.block_uuid": "1igwLb-ZlmV-eLgp-hapx-c1Hr-M5gz-sHjnyW",
429 "ceph.cephx_lockbox_secret": "",
430 "ceph.cluster_fsid": "d4962338-46ff-4cd5-8ea6-c033dbdc5b44",
431 "ceph.cluster_name": "ceph",
432 "ceph.crush_device_class": "",
433 "ceph.encrypted": "0",
434 "ceph.osd_fsid": "d0f3e4ad-e52a-4520-afc0-a8789a96ce8b",
439 "vg_name": "ceph-7538bcf0-f155-4d3f-a9fd-d8b15905e532"