]> git.proxmox.com Git - ceph.git/blame - ceph/src/ceph-volume/ceph_volume/tests/devices/lvm/test_activate.py
update sources to 12.2.10
[ceph.git] / ceph / src / ceph-volume / ceph_volume / tests / devices / lvm / test_activate.py
CommitLineData
181888fb 1import pytest
3efd9988
FG
2from ceph_volume.devices.lvm import activate
3from ceph_volume.api import lvm as api
94b18763 4from ceph_volume.tests.conftest import Capture
181888fb
FG
5
6
7class Args(object):
8
9 def __init__(self, **kw):
3efd9988
FG
10 # default flags
11 self.bluestore = False
12 self.filestore = False
94b18763 13 self.no_systemd = False
3efd9988 14 self.auto_detect_objectstore = None
181888fb
FG
15 for k, v in kw.items():
16 setattr(self, k, v)
17
18
19class 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)
3efd9988
FG
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)
181888fb
FG
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)
3efd9988 51
94b18763 52 def test_filestore_no_systemd(self, is_root, volumes, monkeypatch, capture):
91327a77 53 monkeypatch.setattr('ceph_volume.configuration.load', lambda: None)
94b18763
FG
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",
91327a77
AA
68 "ceph.osd_id=0", "ceph.osd_fsid=1234"])
69 )
94b18763
FG
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
91327a77
AA
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
94b18763
FG
142 def test_filestore_systemd(self, is_root, volumes, monkeypatch, capture):
143 fake_enable = Capture()
144 fake_start_osd = Capture()
91327a77 145 monkeypatch.setattr('ceph_volume.configuration.load', lambda: None)
94b18763
FG
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
91327a77
AA
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 != []
3efd9988
FG
247
248class 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
94b18763
FG
276
277
278class 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
316direct_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}