]> git.proxmox.com Git - ceph.git/blob - ceph/src/ceph-volume/ceph_volume/tests/devices/lvm/test_activate.py
import ceph 16.2.7
[ceph.git] / ceph / src / ceph-volume / ceph_volume / tests / devices / lvm / test_activate.py
1 import pytest
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
6
7
8 class Args(object):
9
10 def __init__(self, **kw):
11 # default flags
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():
17 setattr(self, k, v)
18
19
20 class TestActivate(object):
21
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
25 # with/without osd_id
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")
29 volumes = []
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]
36
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")
40 volumes = []
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]
47
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")
51 volumes = []
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)
56
57 args = Args(osd_id=None, osd_fsid='2222')
58 with pytest.raises(RuntimeError):
59 activate.Activate([]).activate(args)
60
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'
66
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'
72
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(
83 lv_name='journal',
84 lv_path='/dev/vg/journal',
85 lv_uuid='000',
86 lv_tags=','.join([
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"])
90 )
91 DataVolume = api.Volume(
92 lv_name='data',
93 lv_path='/dev/vg/data',
94 lv_uuid='001',
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")
98 volumes = []
99 volumes.append(DataVolume)
100 volumes.append(JournalVolume)
101 monkeypatch.setattr(api, 'get_lvs', lambda **kwargs: deepcopy(volumes))
102
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 == []
107
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(
118 lv_name='journal',
119 lv_path='/dev/vg/journal',
120 lv_uuid='000',
121 lv_tags=','.join([
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"])
125 )
126 DataVolume = api.Volume(
127 lv_name='data',
128 lv_path='/dev/vg/data',
129 lv_uuid='001',
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")
133 volumes = []
134 volumes.append(DataVolume)
135 volumes.append(JournalVolume)
136 monkeypatch.setattr(api, 'get_lvs', lambda **kwargs: deepcopy(volumes))
137
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 == []
143
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(
154 lv_name='journal',
155 lv_path='/dev/vg/journal',
156 lv_uuid='000',
157 lv_tags=','.join([
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"])
161 )
162 DataVolume = api.Volume(
163 lv_name='data',
164 lv_path='/dev/vg/data',
165 lv_uuid='001',
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")
169 volumes = []
170 volumes.append(DataVolume)
171 volumes.append(JournalVolume)
172 monkeypatch.setattr(api, 'get_lvs', lambda **kwargs: deepcopy(volumes))
173
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 != []
179
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(
190 lv_name='journal',
191 lv_path='/dev/vg/journal',
192 lv_uuid='000',
193 lv_tags=','.join([
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"])
197 )
198 DataVolume = api.Volume(
199 lv_name='data',
200 lv_path='/dev/vg/data',
201 lv_uuid='001',
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")
205 volumes = []
206 volumes.append(DataVolume)
207 volumes.append(JournalVolume)
208 monkeypatch.setattr(api, 'get_lvs', lambda **kwargs: deepcopy(volumes))
209
210 args = Args(osd_id=None, osd_fsid='1234', no_systemd=False,
211 filestore=True)
212 activate.Activate([]).activate(args)
213 assert fake_enable.calls != []
214 assert fake_start_osd.calls != []
215
216 def test_bluestore_no_systemd(self, is_root, monkeypatch, capture):
217 fake_enable = Capture()
218 fake_start_osd = Capture()
219 monkeypatch.setattr('ceph_volume.util.system.path_is_mounted', lambda *a, **kw: True)
220 monkeypatch.setattr('ceph_volume.util.system.chown', lambda *a, **kw: True)
221 monkeypatch.setattr('ceph_volume.process.run', lambda *a, **kw: True)
222 monkeypatch.setattr(activate.systemctl, 'enable_volume', fake_enable)
223 monkeypatch.setattr(activate.systemctl, 'start_osd', fake_start_osd)
224 DataVolume = api.Volume(
225 lv_name='data',
226 lv_path='/dev/vg/data',
227 lv_tags="ceph.cluster_name=ceph,,ceph.journal_uuid=000," + \
228 "ceph.type=block,ceph.osd_id=0,ceph.osd_fsid=1234")
229 volumes = []
230 volumes.append(DataVolume)
231 monkeypatch.setattr(api, 'get_lvs', lambda **kwargs: deepcopy(volumes))
232
233 args = Args(osd_id=None, osd_fsid='1234', no_systemd=True, bluestore=True)
234 activate.Activate([]).activate(args)
235 assert fake_enable.calls == []
236 assert fake_start_osd.calls == []
237
238 def test_bluestore_systemd(self, is_root, monkeypatch, capture):
239 fake_enable = Capture()
240 fake_start_osd = Capture()
241 monkeypatch.setattr('ceph_volume.util.system.path_is_mounted', lambda *a, **kw: True)
242 monkeypatch.setattr('ceph_volume.util.system.chown', lambda *a, **kw: True)
243 monkeypatch.setattr('ceph_volume.process.run', lambda *a, **kw: True)
244 monkeypatch.setattr(activate.systemctl, 'enable_volume', fake_enable)
245 monkeypatch.setattr(activate.systemctl, 'start_osd', fake_start_osd)
246 DataVolume = api.Volume(
247 lv_name='data',
248 lv_path='/dev/vg/data',
249 lv_tags="ceph.cluster_name=ceph,,ceph.journal_uuid=000," + \
250 "ceph.type=block,ceph.osd_id=0,ceph.osd_fsid=1234")
251 volumes = []
252 volumes.append(DataVolume)
253 monkeypatch.setattr(api, 'get_lvs', lambda **kwargs: deepcopy(volumes))
254
255 args = Args(osd_id=None, osd_fsid='1234', no_systemd=False,
256 bluestore=True)
257 activate.Activate([]).activate(args)
258 assert fake_enable.calls != []
259 assert fake_start_osd.calls != []
260
261 def test_bluestore_no_systemd_autodetect(self, is_root, monkeypatch, capture):
262 fake_enable = Capture()
263 fake_start_osd = Capture()
264 monkeypatch.setattr('ceph_volume.util.system.path_is_mounted', lambda *a, **kw: True)
265 monkeypatch.setattr('ceph_volume.util.system.chown', lambda *a, **kw: True)
266 monkeypatch.setattr('ceph_volume.process.run', lambda *a, **kw: True)
267 monkeypatch.setattr(activate.systemctl, 'enable_volume', fake_enable)
268 monkeypatch.setattr(activate.systemctl, 'start_osd', fake_start_osd)
269 DataVolume = api.Volume(
270 lv_name='data',
271 lv_path='/dev/vg/data',
272 lv_tags="ceph.cluster_name=ceph,,ceph.block_uuid=000," + \
273 "ceph.type=block,ceph.osd_id=0,ceph.osd_fsid=1234")
274 volumes = []
275 volumes.append(DataVolume)
276 monkeypatch.setattr(api, 'get_lvs', lambda **kwargs: deepcopy(volumes))
277
278 args = Args(osd_id=None, osd_fsid='1234', no_systemd=True,
279 bluestore=True, auto_detect_objectstore=True)
280 activate.Activate([]).activate(args)
281 assert fake_enable.calls == []
282 assert fake_start_osd.calls == []
283
284 def test_bluestore_systemd_autodetect(self, is_root, monkeypatch, capture):
285 fake_enable = Capture()
286 fake_start_osd = Capture()
287 monkeypatch.setattr('ceph_volume.util.system.path_is_mounted',
288 lambda *a, **kw: True)
289 monkeypatch.setattr('ceph_volume.util.system.chown', lambda *a, **kw:
290 True)
291 monkeypatch.setattr('ceph_volume.process.run', lambda *a, **kw: True)
292 monkeypatch.setattr(activate.systemctl, 'enable_volume', fake_enable)
293 monkeypatch.setattr(activate.systemctl, 'start_osd', fake_start_osd)
294 DataVolume = api.Volume(
295 lv_name='data',
296 lv_path='/dev/vg/data',
297 lv_tags="ceph.cluster_name=ceph,,ceph.journal_uuid=000," + \
298 "ceph.type=block,ceph.osd_id=0,ceph.osd_fsid=1234")
299 volumes = []
300 volumes.append(DataVolume)
301 monkeypatch.setattr(api, 'get_lvs', lambda **kwargs: deepcopy(volumes))
302
303 args = Args(osd_id=None, osd_fsid='1234', no_systemd=False,
304 bluestore=True, auto_detect_objectstore=False)
305 activate.Activate([]).activate(args)
306 assert fake_enable.calls != []
307 assert fake_start_osd.calls != []
308
309 class TestActivateFlags(object):
310
311 def test_default_objectstore(self, capture):
312 args = ['0', 'asdf-ljh-asdf']
313 activation = activate.Activate(args)
314 activation.activate = capture
315 activation.main()
316 parsed_args = capture.calls[0]['args'][0]
317 assert parsed_args.filestore is False
318 assert parsed_args.bluestore is True
319
320 def test_uses_filestore(self, capture):
321 args = ['--filestore', '0', 'asdf-ljh-asdf']
322 activation = activate.Activate(args)
323 activation.activate = capture
324 activation.main()
325 parsed_args = capture.calls[0]['args'][0]
326 assert parsed_args.filestore is True
327 assert parsed_args.bluestore is False
328
329 def test_uses_bluestore(self, capture):
330 args = ['--bluestore', '0', 'asdf-ljh-asdf']
331 activation = activate.Activate(args)
332 activation.activate = capture
333 activation.main()
334 parsed_args = capture.calls[0]['args'][0]
335 assert parsed_args.filestore is False
336 assert parsed_args.bluestore is True
337
338
339 class TestActivateAll(object):
340
341 def test_does_not_detect_osds(self, capsys, is_root, capture, monkeypatch):
342 monkeypatch.setattr('ceph_volume.devices.lvm.activate.direct_report', lambda: {})
343 args = ['--all']
344 activation = activate.Activate(args)
345 activation.main()
346 out, err = capsys.readouterr()
347 assert 'Was unable to find any OSDs to activate' in err
348 assert 'Verify OSDs are present with ' in err
349
350 def test_detects_running_osds(self, capsys, is_root, capture, monkeypatch):
351 monkeypatch.setattr('ceph_volume.devices.lvm.activate.direct_report', lambda: direct_report)
352 monkeypatch.setattr('ceph_volume.devices.lvm.activate.systemctl.osd_is_active', lambda x: True)
353 args = ['--all']
354 activation = activate.Activate(args)
355 activation.main()
356 out, err = capsys.readouterr()
357 assert 'a8789a96ce8b process is active. Skipping activation' in err
358 assert 'b8218eaa1634 process is active. Skipping activation' in err
359
360 def test_detects_osds_to_activate_systemd(self, is_root, capture, monkeypatch):
361 monkeypatch.setattr('ceph_volume.devices.lvm.activate.direct_report', lambda: direct_report)
362 monkeypatch.setattr('ceph_volume.devices.lvm.activate.systemctl.osd_is_active', lambda x: False)
363 args = ['--all']
364 activation = activate.Activate(args)
365 activation.activate = capture
366 activation.main()
367 calls = sorted(capture.calls, key=lambda x: x['kwargs']['osd_id'])
368 assert calls[0]['kwargs']['osd_id'] == '0'
369 assert calls[0]['kwargs']['osd_fsid'] == '957d22b7-24ce-466a-9883-b8218eaa1634'
370 assert calls[1]['kwargs']['osd_id'] == '1'
371 assert calls[1]['kwargs']['osd_fsid'] == 'd0f3e4ad-e52a-4520-afc0-a8789a96ce8b'
372
373 def test_detects_osds_to_activate_no_systemd(self, is_root, capture, monkeypatch):
374 monkeypatch.setattr('ceph_volume.devices.lvm.activate.direct_report', lambda: direct_report)
375 args = ['--all', '--no-systemd']
376 activation = activate.Activate(args)
377 activation.activate = capture
378 activation.main()
379 calls = sorted(capture.calls, key=lambda x: x['kwargs']['osd_id'])
380 assert calls[0]['kwargs']['osd_id'] == '0'
381 assert calls[0]['kwargs']['osd_fsid'] == '957d22b7-24ce-466a-9883-b8218eaa1634'
382 assert calls[1]['kwargs']['osd_id'] == '1'
383 assert calls[1]['kwargs']['osd_fsid'] == 'd0f3e4ad-e52a-4520-afc0-a8789a96ce8b'
384
385 #
386 # Activate All fixture
387 #
388
389 direct_report = {
390 "0": [
391 {
392 "lv_name": "osd-block-957d22b7-24ce-466a-9883-b8218eaa1634",
393 "lv_path": "/dev/ceph-d4962338-46ff-4cd5-8ea6-c033dbdc5b44/osd-block-957d22b7-24ce-466a-9883-b8218eaa1634",
394 "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=None,ceph.encrypted=0,ceph.osd_fsid=957d22b7-24ce-466a-9883-b8218eaa1634,ceph.osd_id=0,ceph.type=block",
395 "lv_uuid": "6MixOd-2Q1I-f8K3-PPOq-UJGV-L3A0-0XwUm4",
396 "name": "osd-block-957d22b7-24ce-466a-9883-b8218eaa1634",
397 "path": "/dev/ceph-d4962338-46ff-4cd5-8ea6-c033dbdc5b44/osd-block-957d22b7-24ce-466a-9883-b8218eaa1634",
398 "tags": {
399 "ceph.block_device": "/dev/ceph-d4962338-46ff-4cd5-8ea6-c033dbdc5b44/osd-block-957d22b7-24ce-466a-9883-b8218eaa1634",
400 "ceph.block_uuid": "6MixOd-2Q1I-f8K3-PPOq-UJGV-L3A0-0XwUm4",
401 "ceph.cephx_lockbox_secret": "",
402 "ceph.cluster_fsid": "d4962338-46ff-4cd5-8ea6-c033dbdc5b44",
403 "ceph.cluster_name": "ceph",
404 "ceph.crush_device_class": "None",
405 "ceph.encrypted": "0",
406 "ceph.osd_fsid": "957d22b7-24ce-466a-9883-b8218eaa1634",
407 "ceph.osd_id": "0",
408 "ceph.type": "block"
409 },
410 "type": "block",
411 "vg_name": "ceph-d4962338-46ff-4cd5-8ea6-c033dbdc5b44"
412 }
413 ],
414 "1": [
415 {
416 "lv_name": "osd-block-d0f3e4ad-e52a-4520-afc0-a8789a96ce8b",
417 "lv_path": "/dev/ceph-7538bcf0-f155-4d3f-a9fd-d8b15905e532/osd-block-d0f3e4ad-e52a-4520-afc0-a8789a96ce8b",
418 "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=None,ceph.encrypted=0,ceph.osd_fsid=d0f3e4ad-e52a-4520-afc0-a8789a96ce8b,ceph.osd_id=1,ceph.type=block",
419 "lv_uuid": "1igwLb-ZlmV-eLgp-hapx-c1Hr-M5gz-sHjnyW",
420 "name": "osd-block-d0f3e4ad-e52a-4520-afc0-a8789a96ce8b",
421 "path": "/dev/ceph-7538bcf0-f155-4d3f-a9fd-d8b15905e532/osd-block-d0f3e4ad-e52a-4520-afc0-a8789a96ce8b",
422 "tags": {
423 "ceph.block_device": "/dev/ceph-7538bcf0-f155-4d3f-a9fd-d8b15905e532/osd-block-d0f3e4ad-e52a-4520-afc0-a8789a96ce8b",
424 "ceph.block_uuid": "1igwLb-ZlmV-eLgp-hapx-c1Hr-M5gz-sHjnyW",
425 "ceph.cephx_lockbox_secret": "",
426 "ceph.cluster_fsid": "d4962338-46ff-4cd5-8ea6-c033dbdc5b44",
427 "ceph.cluster_name": "ceph",
428 "ceph.crush_device_class": "None",
429 "ceph.encrypted": "0",
430 "ceph.osd_fsid": "d0f3e4ad-e52a-4520-afc0-a8789a96ce8b",
431 "ceph.osd_id": "1",
432 "ceph.type": "block"
433 },
434 "type": "block",
435 "vg_name": "ceph-7538bcf0-f155-4d3f-a9fd-d8b15905e532"
436 }
437 ]
438 }