]> git.proxmox.com Git - ceph.git/blob - ceph/src/ceph-volume/ceph_volume/tests/devices/lvm/test_activate.py
import quincy beta 17.1.0
[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 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(
226 lv_name='data',
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")
230 volumes = []
231 volumes.append(DataVolume)
232 monkeypatch.setattr(api, 'get_lvs', lambda **kwargs: deepcopy(volumes))
233
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 == []
238
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(
249 lv_name='data',
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")
253 volumes = []
254 volumes.append(DataVolume)
255 monkeypatch.setattr(api, 'get_lvs', lambda **kwargs: deepcopy(volumes))
256
257 args = Args(osd_id=None, osd_fsid='1234', no_systemd=False,
258 bluestore=True)
259 activate.Activate([]).activate(args)
260 assert fake_enable.calls != []
261 assert fake_start_osd.calls != []
262
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(
273 lv_name='data',
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")
277 volumes = []
278 volumes.append(DataVolume)
279 monkeypatch.setattr(api, 'get_lvs', lambda **kwargs: deepcopy(volumes))
280
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 == []
286
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:
294 True)
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(
299 lv_name='data',
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")
303 volumes = []
304 volumes.append(DataVolume)
305 monkeypatch.setattr(api, 'get_lvs', lambda **kwargs: deepcopy(volumes))
306
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 != []
312
313 class TestActivateFlags(object):
314
315 def test_default_objectstore(self, capture):
316 args = ['0', 'asdf-ljh-asdf']
317 activation = activate.Activate(args)
318 activation.activate = capture
319 activation.main()
320 parsed_args = capture.calls[0]['args'][0]
321 assert parsed_args.filestore is False
322 assert parsed_args.bluestore is False
323
324 def test_uses_filestore(self, capture):
325 args = ['--filestore', '0', 'asdf-ljh-asdf']
326 activation = activate.Activate(args)
327 activation.activate = capture
328 activation.main()
329 parsed_args = capture.calls[0]['args'][0]
330 assert parsed_args.filestore is True
331 assert parsed_args.bluestore is False
332
333 def test_uses_bluestore(self, capture):
334 args = ['--bluestore', '0', 'asdf-ljh-asdf']
335 activation = activate.Activate(args)
336 activation.activate = capture
337 activation.main()
338 parsed_args = capture.calls[0]['args'][0]
339 assert parsed_args.filestore is False
340 assert parsed_args.bluestore is True
341
342
343 class TestActivateAll(object):
344
345 def test_does_not_detect_osds(self, capsys, is_root, capture, monkeypatch):
346 monkeypatch.setattr('ceph_volume.devices.lvm.activate.direct_report', lambda: {})
347 args = ['--all']
348 activation = activate.Activate(args)
349 activation.main()
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
353
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)
357 args = ['--all']
358 activation = activate.Activate(args)
359 activation.main()
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
363
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)
367 args = ['--all']
368 activation = activate.Activate(args)
369 activation.activate = capture
370 activation.main()
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'
376
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
382 activation.main()
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'
388
389 #
390 # Activate All fixture
391 #
392
393 direct_report = {
394 "0": [
395 {
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",
402 "tags": {
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",
411 "ceph.osd_id": "0",
412 "ceph.type": "block"
413 },
414 "type": "block",
415 "vg_name": "ceph-d4962338-46ff-4cd5-8ea6-c033dbdc5b44"
416 }
417 ],
418 "1": [
419 {
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",
426 "tags": {
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",
435 "ceph.osd_id": "1",
436 "ceph.type": "block"
437 },
438 "type": "block",
439 "vg_name": "ceph-7538bcf0-f155-4d3f-a9fd-d8b15905e532"
440 }
441 ]
442 }