]>
Commit | Line | Data |
---|---|---|
1 | import pytest | |
2 | from ceph_volume.devices.lvm import activate | |
3 | from ceph_volume.api import lvm as api | |
4 | from ceph_volume.tests.conftest import Capture | |
5 | ||
6 | ||
7 | class Args(object): | |
8 | ||
9 | def __init__(self, **kw): | |
10 | # default flags | |
11 | self.bluestore = False | |
12 | self.filestore = False | |
13 | self.no_systemd = False | |
14 | self.auto_detect_objectstore = None | |
15 | for k, v in kw.items(): | |
16 | setattr(self, k, v) | |
17 | ||
18 | ||
19 | class TestActivate(object): | |
20 | ||
21 | # these tests are very functional, hence the heavy patching, it is hard to | |
22 | # test the negative side effect with an actual functional run, so we must | |
23 | # setup a perfect scenario for this test to check it can really work | |
24 | # with/without osd_id | |
25 | def test_no_osd_id_matches_fsid(self, is_root, volumes, monkeypatch, capture): | |
26 | FooVolume = api.Volume(lv_name='foo', lv_path='/dev/vg/foo', lv_tags="ceph.osd_fsid=1234") | |
27 | volumes.append(FooVolume) | |
28 | monkeypatch.setattr(api, 'Volumes', lambda: volumes) | |
29 | monkeypatch.setattr(activate, 'activate_filestore', capture) | |
30 | args = Args(osd_id=None, osd_fsid='1234', filestore=True) | |
31 | activate.Activate([]).activate(args) | |
32 | assert capture.calls[0]['args'][0] == [FooVolume] | |
33 | ||
34 | def test_no_osd_id_matches_fsid_bluestore(self, is_root, volumes, monkeypatch, capture): | |
35 | FooVolume = api.Volume(lv_name='foo', lv_path='/dev/vg/foo', lv_tags="ceph.osd_fsid=1234") | |
36 | volumes.append(FooVolume) | |
37 | monkeypatch.setattr(api, 'Volumes', lambda: volumes) | |
38 | monkeypatch.setattr(activate, 'activate_bluestore', capture) | |
39 | args = Args(osd_id=None, osd_fsid='1234', bluestore=True) | |
40 | activate.Activate([]).activate(args) | |
41 | assert capture.calls[0]['args'][0] == [FooVolume] | |
42 | ||
43 | def test_no_osd_id_no_matching_fsid(self, is_root, volumes, monkeypatch, capture): | |
44 | FooVolume = api.Volume(lv_name='foo', lv_path='/dev/vg/foo', lv_tags="ceph.osd_fsid=11234") | |
45 | volumes.append(FooVolume) | |
46 | monkeypatch.setattr(api, 'Volumes', lambda: volumes) | |
47 | monkeypatch.setattr(activate, 'activate_filestore', capture) | |
48 | args = Args(osd_id=None, osd_fsid='1234') | |
49 | with pytest.raises(RuntimeError): | |
50 | activate.Activate([]).activate(args) | |
51 | ||
52 | def test_filestore_no_systemd(self, is_root, volumes, monkeypatch, capture): | |
53 | monkeypatch.setattr('ceph_volume.configuration.load', lambda: None) | |
54 | fake_enable = Capture() | |
55 | fake_start_osd = Capture() | |
56 | monkeypatch.setattr('ceph_volume.util.system.device_is_mounted', lambda *a, **kw: True) | |
57 | monkeypatch.setattr('ceph_volume.util.system.chown', lambda *a, **kw: True) | |
58 | monkeypatch.setattr('ceph_volume.process.run', lambda *a, **kw: True) | |
59 | monkeypatch.setattr(activate.systemctl, 'enable_volume', fake_enable) | |
60 | monkeypatch.setattr(activate.systemctl, 'start_osd', fake_start_osd) | |
61 | JournalVolume = api.Volume( | |
62 | lv_name='journal', | |
63 | lv_path='/dev/vg/journal', | |
64 | lv_uuid='000', | |
65 | lv_tags=','.join([ | |
66 | "ceph.cluster_name=ceph", "ceph.journal_device=/dev/vg/journal", | |
67 | "ceph.journal_uuid=000", "ceph.type=journal", | |
68 | "ceph.osd_id=0", "ceph.osd_fsid=1234"]) | |
69 | ) | |
70 | DataVolume = api.Volume( | |
71 | lv_name='data', | |
72 | lv_path='/dev/vg/data', | |
73 | lv_tags="ceph.cluster_name=ceph,ceph.journal_device=/dev/vg/journal,ceph.journal_uuid=000,ceph.type=data,ceph.osd_id=0,ceph.osd_fsid=1234") | |
74 | volumes.append(DataVolume) | |
75 | volumes.append(JournalVolume) | |
76 | monkeypatch.setattr(api, 'Volumes', lambda: volumes) | |
77 | args = Args(osd_id=None, osd_fsid='1234', no_systemd=True, filestore=True) | |
78 | activate.Activate([]).activate(args) | |
79 | assert fake_enable.calls == [] | |
80 | assert fake_start_osd.calls == [] | |
81 | ||
82 | def test_filestore_no_systemd_autodetect(self, is_root, volumes, monkeypatch, capture): | |
83 | monkeypatch.setattr('ceph_volume.configuration.load', lambda: None) | |
84 | fake_enable = Capture() | |
85 | fake_start_osd = Capture() | |
86 | monkeypatch.setattr('ceph_volume.util.system.device_is_mounted', lambda *a, **kw: True) | |
87 | monkeypatch.setattr('ceph_volume.util.system.chown', lambda *a, **kw: True) | |
88 | monkeypatch.setattr('ceph_volume.process.run', lambda *a, **kw: True) | |
89 | monkeypatch.setattr(activate.systemctl, 'enable_volume', fake_enable) | |
90 | monkeypatch.setattr(activate.systemctl, 'start_osd', fake_start_osd) | |
91 | JournalVolume = api.Volume( | |
92 | lv_name='journal', | |
93 | lv_path='/dev/vg/journal', | |
94 | lv_uuid='000', | |
95 | lv_tags=','.join([ | |
96 | "ceph.cluster_name=ceph", "ceph.journal_device=/dev/vg/journal", | |
97 | "ceph.journal_uuid=000", "ceph.type=journal", | |
98 | "ceph.osd_id=0", "ceph.osd_fsid=1234"]) | |
99 | ) | |
100 | DataVolume = api.Volume( | |
101 | lv_name='data', | |
102 | lv_path='/dev/vg/data', | |
103 | lv_tags="ceph.cluster_name=ceph,ceph.journal_device=/dev/vg/journal,ceph.journal_uuid=000,ceph.type=data,ceph.osd_id=0,ceph.osd_fsid=1234") | |
104 | volumes.append(DataVolume) | |
105 | volumes.append(JournalVolume) | |
106 | monkeypatch.setattr(api, 'Volumes', lambda: volumes) | |
107 | args = Args(osd_id=None, osd_fsid='1234', no_systemd=True, filestore=True, auto_detect_objectstore=True) | |
108 | activate.Activate([]).activate(args) | |
109 | assert fake_enable.calls == [] | |
110 | assert fake_start_osd.calls == [] | |
111 | ||
112 | def test_filestore_systemd_autodetect(self, is_root, volumes, monkeypatch, capture): | |
113 | fake_enable = Capture() | |
114 | fake_start_osd = Capture() | |
115 | monkeypatch.setattr('ceph_volume.configuration.load', lambda: None) | |
116 | monkeypatch.setattr('ceph_volume.util.system.device_is_mounted', lambda *a, **kw: True) | |
117 | monkeypatch.setattr('ceph_volume.util.system.chown', lambda *a, **kw: True) | |
118 | monkeypatch.setattr('ceph_volume.process.run', lambda *a, **kw: True) | |
119 | monkeypatch.setattr(activate.systemctl, 'enable_volume', fake_enable) | |
120 | monkeypatch.setattr(activate.systemctl, 'start_osd', fake_start_osd) | |
121 | JournalVolume = api.Volume( | |
122 | lv_name='journal', | |
123 | lv_path='/dev/vg/journal', | |
124 | lv_uuid='000', | |
125 | lv_tags=','.join([ | |
126 | "ceph.cluster_name=ceph", "ceph.journal_device=/dev/vg/journal", | |
127 | "ceph.journal_uuid=000", "ceph.type=journal", | |
128 | "ceph.osd_id=0","ceph.osd_fsid=1234"]) | |
129 | ) | |
130 | DataVolume = api.Volume( | |
131 | lv_name='data', | |
132 | lv_path='/dev/vg/data', | |
133 | lv_tags="ceph.cluster_name=ceph,ceph.journal_device=/dev/vg/journal,ceph.journal_uuid=000,ceph.type=data,ceph.osd_id=0,ceph.osd_fsid=1234") | |
134 | volumes.append(DataVolume) | |
135 | volumes.append(JournalVolume) | |
136 | monkeypatch.setattr(api, 'Volumes', lambda: volumes) | |
137 | args = Args(osd_id=None, osd_fsid='1234', no_systemd=False, filestore=True, auto_detect_objectstore=False) | |
138 | activate.Activate([]).activate(args) | |
139 | assert fake_enable.calls != [] | |
140 | assert fake_start_osd.calls != [] | |
141 | ||
142 | def test_filestore_systemd(self, is_root, volumes, monkeypatch, capture): | |
143 | fake_enable = Capture() | |
144 | fake_start_osd = Capture() | |
145 | monkeypatch.setattr('ceph_volume.configuration.load', lambda: None) | |
146 | monkeypatch.setattr('ceph_volume.util.system.device_is_mounted', lambda *a, **kw: True) | |
147 | monkeypatch.setattr('ceph_volume.util.system.chown', lambda *a, **kw: True) | |
148 | monkeypatch.setattr('ceph_volume.process.run', lambda *a, **kw: True) | |
149 | monkeypatch.setattr(activate.systemctl, 'enable_volume', fake_enable) | |
150 | monkeypatch.setattr(activate.systemctl, 'start_osd', fake_start_osd) | |
151 | JournalVolume = api.Volume( | |
152 | lv_name='journal', | |
153 | lv_path='/dev/vg/journal', | |
154 | lv_uuid='000', | |
155 | lv_tags=','.join([ | |
156 | "ceph.cluster_name=ceph", "ceph.journal_device=/dev/vg/journal", | |
157 | "ceph.journal_uuid=000", "ceph.type=journal", | |
158 | "ceph.osd_id=0","ceph.osd_fsid=1234"]) | |
159 | ) | |
160 | DataVolume = api.Volume( | |
161 | lv_name='data', | |
162 | lv_path='/dev/vg/data', | |
163 | lv_tags="ceph.cluster_name=ceph,ceph.journal_device=/dev/vg/journal,ceph.journal_uuid=000,ceph.type=data,ceph.osd_id=0,ceph.osd_fsid=1234") | |
164 | volumes.append(DataVolume) | |
165 | volumes.append(JournalVolume) | |
166 | monkeypatch.setattr(api, 'Volumes', lambda: volumes) | |
167 | args = Args(osd_id=None, osd_fsid='1234', no_systemd=False, filestore=True) | |
168 | activate.Activate([]).activate(args) | |
169 | assert fake_enable.calls != [] | |
170 | assert fake_start_osd.calls != [] | |
171 | ||
172 | def test_bluestore_no_systemd(self, is_root, volumes, monkeypatch, capture): | |
173 | fake_enable = Capture() | |
174 | fake_start_osd = Capture() | |
175 | monkeypatch.setattr('ceph_volume.util.system.path_is_mounted', lambda *a, **kw: True) | |
176 | monkeypatch.setattr('ceph_volume.util.system.chown', lambda *a, **kw: True) | |
177 | monkeypatch.setattr('ceph_volume.process.run', lambda *a, **kw: True) | |
178 | monkeypatch.setattr(activate.systemctl, 'enable_volume', fake_enable) | |
179 | monkeypatch.setattr(activate.systemctl, 'start_osd', fake_start_osd) | |
180 | DataVolume = api.Volume( | |
181 | lv_name='data', | |
182 | lv_path='/dev/vg/data', | |
183 | lv_tags="ceph.cluster_name=ceph,,ceph.journal_uuid=000,ceph.type=block,ceph.osd_id=0,ceph.osd_fsid=1234") | |
184 | volumes.append(DataVolume) | |
185 | monkeypatch.setattr(api, 'Volumes', lambda: volumes) | |
186 | args = Args(osd_id=None, osd_fsid='1234', no_systemd=True, bluestore=True) | |
187 | activate.Activate([]).activate(args) | |
188 | assert fake_enable.calls == [] | |
189 | assert fake_start_osd.calls == [] | |
190 | ||
191 | def test_bluestore_systemd(self, is_root, volumes, monkeypatch, capture): | |
192 | fake_enable = Capture() | |
193 | fake_start_osd = Capture() | |
194 | monkeypatch.setattr('ceph_volume.util.system.path_is_mounted', lambda *a, **kw: True) | |
195 | monkeypatch.setattr('ceph_volume.util.system.chown', lambda *a, **kw: True) | |
196 | monkeypatch.setattr('ceph_volume.process.run', lambda *a, **kw: True) | |
197 | monkeypatch.setattr(activate.systemctl, 'enable_volume', fake_enable) | |
198 | monkeypatch.setattr(activate.systemctl, 'start_osd', fake_start_osd) | |
199 | DataVolume = api.Volume( | |
200 | lv_name='data', | |
201 | lv_path='/dev/vg/data', | |
202 | lv_tags="ceph.cluster_name=ceph,,ceph.journal_uuid=000,ceph.type=block,ceph.osd_id=0,ceph.osd_fsid=1234") | |
203 | volumes.append(DataVolume) | |
204 | monkeypatch.setattr(api, 'Volumes', lambda: volumes) | |
205 | args = Args(osd_id=None, osd_fsid='1234', no_systemd=False, bluestore=True) | |
206 | activate.Activate([]).activate(args) | |
207 | assert fake_enable.calls != [] | |
208 | assert fake_start_osd.calls != [] | |
209 | ||
210 | def test_bluestore_no_systemd_autodetect(self, is_root, volumes, monkeypatch, capture): | |
211 | fake_enable = Capture() | |
212 | fake_start_osd = Capture() | |
213 | monkeypatch.setattr('ceph_volume.util.system.path_is_mounted', lambda *a, **kw: True) | |
214 | monkeypatch.setattr('ceph_volume.util.system.chown', lambda *a, **kw: True) | |
215 | monkeypatch.setattr('ceph_volume.process.run', lambda *a, **kw: True) | |
216 | monkeypatch.setattr(activate.systemctl, 'enable_volume', fake_enable) | |
217 | monkeypatch.setattr(activate.systemctl, 'start_osd', fake_start_osd) | |
218 | DataVolume = api.Volume( | |
219 | lv_name='data', | |
220 | lv_path='/dev/vg/data', | |
221 | lv_tags="ceph.cluster_name=ceph,,ceph.block_uuid=000,ceph.type=block,ceph.osd_id=0,ceph.osd_fsid=1234") | |
222 | volumes.append(DataVolume) | |
223 | monkeypatch.setattr(api, 'Volumes', lambda: volumes) | |
224 | args = Args(osd_id=None, osd_fsid='1234', no_systemd=True, bluestore=True, auto_detect_objectstore=True) | |
225 | activate.Activate([]).activate(args) | |
226 | assert fake_enable.calls == [] | |
227 | assert fake_start_osd.calls == [] | |
228 | ||
229 | def test_bluestore_systemd_autodetect(self, is_root, volumes, monkeypatch, capture): | |
230 | fake_enable = Capture() | |
231 | fake_start_osd = Capture() | |
232 | monkeypatch.setattr('ceph_volume.util.system.path_is_mounted', lambda *a, **kw: True) | |
233 | monkeypatch.setattr('ceph_volume.util.system.chown', lambda *a, **kw: True) | |
234 | monkeypatch.setattr('ceph_volume.process.run', lambda *a, **kw: True) | |
235 | monkeypatch.setattr(activate.systemctl, 'enable_volume', fake_enable) | |
236 | monkeypatch.setattr(activate.systemctl, 'start_osd', fake_start_osd) | |
237 | DataVolume = api.Volume( | |
238 | lv_name='data', | |
239 | lv_path='/dev/vg/data', | |
240 | lv_tags="ceph.cluster_name=ceph,,ceph.journal_uuid=000,ceph.type=block,ceph.osd_id=0,ceph.osd_fsid=1234") | |
241 | volumes.append(DataVolume) | |
242 | monkeypatch.setattr(api, 'Volumes', lambda: volumes) | |
243 | args = Args(osd_id=None, osd_fsid='1234', no_systemd=False, bluestore=True, auto_detect_objectstore=False) | |
244 | activate.Activate([]).activate(args) | |
245 | assert fake_enable.calls != [] | |
246 | assert fake_start_osd.calls != [] | |
247 | ||
248 | class TestActivateFlags(object): | |
249 | ||
250 | def test_default_objectstore(self, capture): | |
251 | args = ['0', 'asdf-ljh-asdf'] | |
252 | activation = activate.Activate(args) | |
253 | activation.activate = capture | |
254 | activation.main() | |
255 | parsed_args = capture.calls[0]['args'][0] | |
256 | assert parsed_args.filestore is False | |
257 | assert parsed_args.bluestore is True | |
258 | ||
259 | def test_uses_filestore(self, capture): | |
260 | args = ['--filestore', '0', 'asdf-ljh-asdf'] | |
261 | activation = activate.Activate(args) | |
262 | activation.activate = capture | |
263 | activation.main() | |
264 | parsed_args = capture.calls[0]['args'][0] | |
265 | assert parsed_args.filestore is True | |
266 | assert parsed_args.bluestore is False | |
267 | ||
268 | def test_uses_bluestore(self, capture): | |
269 | args = ['--bluestore', '0', 'asdf-ljh-asdf'] | |
270 | activation = activate.Activate(args) | |
271 | activation.activate = capture | |
272 | activation.main() | |
273 | parsed_args = capture.calls[0]['args'][0] | |
274 | assert parsed_args.filestore is False | |
275 | assert parsed_args.bluestore is True | |
276 | ||
277 | ||
278 | class TestActivateAll(object): | |
279 | ||
280 | def test_does_not_detect_osds(self, capsys, is_root, capture, monkeypatch): | |
281 | monkeypatch.setattr('ceph_volume.devices.lvm.activate.direct_report', lambda: {}) | |
282 | args = ['--all'] | |
283 | activation = activate.Activate(args) | |
284 | activation.main() | |
285 | out, err = capsys.readouterr() | |
286 | assert 'Was unable to find any OSDs to activate' in out | |
287 | assert 'Verify OSDs are present with ' in out | |
288 | ||
289 | def test_detects_running_osds(self, capsys, is_root, capture, monkeypatch): | |
290 | monkeypatch.setattr('ceph_volume.devices.lvm.activate.direct_report', lambda: direct_report) | |
291 | monkeypatch.setattr('ceph_volume.devices.lvm.activate.systemctl.osd_is_active', lambda x: True) | |
292 | args = ['--all'] | |
293 | activation = activate.Activate(args) | |
294 | activation.main() | |
295 | out, err = capsys.readouterr() | |
296 | assert 'a8789a96ce8b process is active. Skipping activation' in out | |
297 | assert 'b8218eaa1634 process is active. Skipping activation' in out | |
298 | ||
299 | def test_detects_osds_to_activate(self, is_root, capture, monkeypatch): | |
300 | monkeypatch.setattr('ceph_volume.devices.lvm.activate.direct_report', lambda: direct_report) | |
301 | monkeypatch.setattr('ceph_volume.devices.lvm.activate.systemctl.osd_is_active', lambda x: False) | |
302 | args = ['--all'] | |
303 | activation = activate.Activate(args) | |
304 | activation.activate = capture | |
305 | activation.main() | |
306 | calls = sorted(capture.calls, key=lambda x: x['kwargs']['osd_id']) | |
307 | assert calls[0]['kwargs']['osd_id'] == '0' | |
308 | assert calls[0]['kwargs']['osd_fsid'] == '957d22b7-24ce-466a-9883-b8218eaa1634' | |
309 | assert calls[1]['kwargs']['osd_id'] == '1' | |
310 | assert calls[1]['kwargs']['osd_fsid'] == 'd0f3e4ad-e52a-4520-afc0-a8789a96ce8b' | |
311 | ||
312 | # | |
313 | # Activate All fixture | |
314 | # | |
315 | ||
316 | direct_report = { | |
317 | "0": [ | |
318 | { | |
319 | "lv_name": "osd-block-957d22b7-24ce-466a-9883-b8218eaa1634", | |
320 | "lv_path": "/dev/ceph-d4962338-46ff-4cd5-8ea6-c033dbdc5b44/osd-block-957d22b7-24ce-466a-9883-b8218eaa1634", | |
321 | "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", | |
322 | "lv_uuid": "6MixOd-2Q1I-f8K3-PPOq-UJGV-L3A0-0XwUm4", | |
323 | "name": "osd-block-957d22b7-24ce-466a-9883-b8218eaa1634", | |
324 | "path": "/dev/ceph-d4962338-46ff-4cd5-8ea6-c033dbdc5b44/osd-block-957d22b7-24ce-466a-9883-b8218eaa1634", | |
325 | "tags": { | |
326 | "ceph.block_device": "/dev/ceph-d4962338-46ff-4cd5-8ea6-c033dbdc5b44/osd-block-957d22b7-24ce-466a-9883-b8218eaa1634", | |
327 | "ceph.block_uuid": "6MixOd-2Q1I-f8K3-PPOq-UJGV-L3A0-0XwUm4", | |
328 | "ceph.cephx_lockbox_secret": "", | |
329 | "ceph.cluster_fsid": "d4962338-46ff-4cd5-8ea6-c033dbdc5b44", | |
330 | "ceph.cluster_name": "ceph", | |
331 | "ceph.crush_device_class": "None", | |
332 | "ceph.encrypted": "0", | |
333 | "ceph.osd_fsid": "957d22b7-24ce-466a-9883-b8218eaa1634", | |
334 | "ceph.osd_id": "0", | |
335 | "ceph.type": "block" | |
336 | }, | |
337 | "type": "block", | |
338 | "vg_name": "ceph-d4962338-46ff-4cd5-8ea6-c033dbdc5b44" | |
339 | } | |
340 | ], | |
341 | "1": [ | |
342 | { | |
343 | "lv_name": "osd-block-d0f3e4ad-e52a-4520-afc0-a8789a96ce8b", | |
344 | "lv_path": "/dev/ceph-7538bcf0-f155-4d3f-a9fd-d8b15905e532/osd-block-d0f3e4ad-e52a-4520-afc0-a8789a96ce8b", | |
345 | "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", | |
346 | "lv_uuid": "1igwLb-ZlmV-eLgp-hapx-c1Hr-M5gz-sHjnyW", | |
347 | "name": "osd-block-d0f3e4ad-e52a-4520-afc0-a8789a96ce8b", | |
348 | "path": "/dev/ceph-7538bcf0-f155-4d3f-a9fd-d8b15905e532/osd-block-d0f3e4ad-e52a-4520-afc0-a8789a96ce8b", | |
349 | "tags": { | |
350 | "ceph.block_device": "/dev/ceph-7538bcf0-f155-4d3f-a9fd-d8b15905e532/osd-block-d0f3e4ad-e52a-4520-afc0-a8789a96ce8b", | |
351 | "ceph.block_uuid": "1igwLb-ZlmV-eLgp-hapx-c1Hr-M5gz-sHjnyW", | |
352 | "ceph.cephx_lockbox_secret": "", | |
353 | "ceph.cluster_fsid": "d4962338-46ff-4cd5-8ea6-c033dbdc5b44", | |
354 | "ceph.cluster_name": "ceph", | |
355 | "ceph.crush_device_class": "None", | |
356 | "ceph.encrypted": "0", | |
357 | "ceph.osd_fsid": "d0f3e4ad-e52a-4520-afc0-a8789a96ce8b", | |
358 | "ceph.osd_id": "1", | |
359 | "ceph.type": "block" | |
360 | }, | |
361 | "type": "block", | |
362 | "vg_name": "ceph-7538bcf0-f155-4d3f-a9fd-d8b15905e532" | |
363 | } | |
364 | ] | |
365 | } |