]> git.proxmox.com Git - ceph.git/blame - ceph/src/ceph-volume/ceph_volume/tests/devices/lvm/test_activate.py
update sources to v12.2.5
[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
FG
52 def test_filestore_no_systemd(self, is_root, volumes, monkeypatch, capture):
53 fake_enable = Capture()
54 fake_start_osd = Capture()
55 monkeypatch.setattr('ceph_volume.util.system.device_is_mounted', lambda *a, **kw: True)
56 monkeypatch.setattr('ceph_volume.util.system.chown', lambda *a, **kw: True)
57 monkeypatch.setattr('ceph_volume.process.run', lambda *a, **kw: True)
58 monkeypatch.setattr(activate.systemctl, 'enable_volume', fake_enable)
59 monkeypatch.setattr(activate.systemctl, 'start_osd', fake_start_osd)
60 JournalVolume = api.Volume(
61 lv_name='journal',
62 lv_path='/dev/vg/journal',
63 lv_uuid='000',
64 lv_tags=','.join([
65 "ceph.cluster_name=ceph", "ceph.journal_device=/dev/vg/journal",
66 "ceph.journal_uuid=000", "ceph.type=journal",
67 "ceph.osd_id=0","ceph.osd_fsid=1234"])
68 )
69 DataVolume = api.Volume(
70 lv_name='data',
71 lv_path='/dev/vg/data',
72 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")
73 volumes.append(DataVolume)
74 volumes.append(JournalVolume)
75 monkeypatch.setattr(api, 'Volumes', lambda: volumes)
76 args = Args(osd_id=None, osd_fsid='1234', no_systemd=True, filestore=True)
77 activate.Activate([]).activate(args)
78 assert fake_enable.calls == []
79 assert fake_start_osd.calls == []
80
81 def test_filestore_systemd(self, is_root, volumes, monkeypatch, capture):
82 fake_enable = Capture()
83 fake_start_osd = Capture()
84 monkeypatch.setattr('ceph_volume.util.system.device_is_mounted', lambda *a, **kw: True)
85 monkeypatch.setattr('ceph_volume.util.system.chown', lambda *a, **kw: True)
86 monkeypatch.setattr('ceph_volume.process.run', lambda *a, **kw: True)
87 monkeypatch.setattr(activate.systemctl, 'enable_volume', fake_enable)
88 monkeypatch.setattr(activate.systemctl, 'start_osd', fake_start_osd)
89 JournalVolume = api.Volume(
90 lv_name='journal',
91 lv_path='/dev/vg/journal',
92 lv_uuid='000',
93 lv_tags=','.join([
94 "ceph.cluster_name=ceph", "ceph.journal_device=/dev/vg/journal",
95 "ceph.journal_uuid=000", "ceph.type=journal",
96 "ceph.osd_id=0","ceph.osd_fsid=1234"])
97 )
98 DataVolume = api.Volume(
99 lv_name='data',
100 lv_path='/dev/vg/data',
101 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")
102 volumes.append(DataVolume)
103 volumes.append(JournalVolume)
104 monkeypatch.setattr(api, 'Volumes', lambda: volumes)
105 args = Args(osd_id=None, osd_fsid='1234', no_systemd=False, filestore=True)
106 activate.Activate([]).activate(args)
107 assert fake_enable.calls != []
108 assert fake_start_osd.calls != []
109
110 def test_bluestore_no_systemd(self, is_root, volumes, monkeypatch, capture):
111 fake_enable = Capture()
112 fake_start_osd = Capture()
113 monkeypatch.setattr('ceph_volume.util.system.path_is_mounted', lambda *a, **kw: True)
114 monkeypatch.setattr('ceph_volume.util.system.chown', lambda *a, **kw: True)
115 monkeypatch.setattr('ceph_volume.process.run', lambda *a, **kw: True)
116 monkeypatch.setattr(activate.systemctl, 'enable_volume', fake_enable)
117 monkeypatch.setattr(activate.systemctl, 'start_osd', fake_start_osd)
118 DataVolume = api.Volume(
119 lv_name='data',
120 lv_path='/dev/vg/data',
121 lv_tags="ceph.cluster_name=ceph,,ceph.journal_uuid=000,ceph.type=block,ceph.osd_id=0,ceph.osd_fsid=1234")
122 volumes.append(DataVolume)
123 monkeypatch.setattr(api, 'Volumes', lambda: volumes)
124 args = Args(osd_id=None, osd_fsid='1234', no_systemd=True, bluestore=True)
125 activate.Activate([]).activate(args)
126 assert fake_enable.calls == []
127 assert fake_start_osd.calls == []
128
129 def test_bluestore_systemd(self, is_root, volumes, monkeypatch, capture):
130 fake_enable = Capture()
131 fake_start_osd = Capture()
132 monkeypatch.setattr('ceph_volume.util.system.path_is_mounted', lambda *a, **kw: True)
133 monkeypatch.setattr('ceph_volume.util.system.chown', lambda *a, **kw: True)
134 monkeypatch.setattr('ceph_volume.process.run', lambda *a, **kw: True)
135 monkeypatch.setattr(activate.systemctl, 'enable_volume', fake_enable)
136 monkeypatch.setattr(activate.systemctl, 'start_osd', fake_start_osd)
137 DataVolume = api.Volume(
138 lv_name='data',
139 lv_path='/dev/vg/data',
140 lv_tags="ceph.cluster_name=ceph,,ceph.journal_uuid=000,ceph.type=block,ceph.osd_id=0,ceph.osd_fsid=1234")
141 volumes.append(DataVolume)
142 monkeypatch.setattr(api, 'Volumes', lambda: volumes)
143 args = Args(osd_id=None, osd_fsid='1234', no_systemd=False, bluestore=True)
144 activate.Activate([]).activate(args)
145 assert fake_enable.calls != []
146 assert fake_start_osd.calls != []
147
3efd9988
FG
148
149class TestActivateFlags(object):
150
151 def test_default_objectstore(self, capture):
152 args = ['0', 'asdf-ljh-asdf']
153 activation = activate.Activate(args)
154 activation.activate = capture
155 activation.main()
156 parsed_args = capture.calls[0]['args'][0]
157 assert parsed_args.filestore is False
158 assert parsed_args.bluestore is True
159
160 def test_uses_filestore(self, capture):
161 args = ['--filestore', '0', 'asdf-ljh-asdf']
162 activation = activate.Activate(args)
163 activation.activate = capture
164 activation.main()
165 parsed_args = capture.calls[0]['args'][0]
166 assert parsed_args.filestore is True
167 assert parsed_args.bluestore is False
168
169 def test_uses_bluestore(self, capture):
170 args = ['--bluestore', '0', 'asdf-ljh-asdf']
171 activation = activate.Activate(args)
172 activation.activate = capture
173 activation.main()
174 parsed_args = capture.calls[0]['args'][0]
175 assert parsed_args.filestore is False
176 assert parsed_args.bluestore is True
94b18763
FG
177
178
179class TestActivateAll(object):
180
181 def test_does_not_detect_osds(self, capsys, is_root, capture, monkeypatch):
182 monkeypatch.setattr('ceph_volume.devices.lvm.activate.direct_report', lambda: {})
183 args = ['--all']
184 activation = activate.Activate(args)
185 activation.main()
186 out, err = capsys.readouterr()
187 assert 'Was unable to find any OSDs to activate' in out
188 assert 'Verify OSDs are present with ' in out
189
190 def test_detects_running_osds(self, capsys, is_root, capture, monkeypatch):
191 monkeypatch.setattr('ceph_volume.devices.lvm.activate.direct_report', lambda: direct_report)
192 monkeypatch.setattr('ceph_volume.devices.lvm.activate.systemctl.osd_is_active', lambda x: True)
193 args = ['--all']
194 activation = activate.Activate(args)
195 activation.main()
196 out, err = capsys.readouterr()
197 assert 'a8789a96ce8b process is active. Skipping activation' in out
198 assert 'b8218eaa1634 process is active. Skipping activation' in out
199
200 def test_detects_osds_to_activate(self, is_root, capture, monkeypatch):
201 monkeypatch.setattr('ceph_volume.devices.lvm.activate.direct_report', lambda: direct_report)
202 monkeypatch.setattr('ceph_volume.devices.lvm.activate.systemctl.osd_is_active', lambda x: False)
203 args = ['--all']
204 activation = activate.Activate(args)
205 activation.activate = capture
206 activation.main()
207 calls = sorted(capture.calls, key=lambda x: x['kwargs']['osd_id'])
208 assert calls[0]['kwargs']['osd_id'] == '0'
209 assert calls[0]['kwargs']['osd_fsid'] == '957d22b7-24ce-466a-9883-b8218eaa1634'
210 assert calls[1]['kwargs']['osd_id'] == '1'
211 assert calls[1]['kwargs']['osd_fsid'] == 'd0f3e4ad-e52a-4520-afc0-a8789a96ce8b'
212
213#
214# Activate All fixture
215#
216
217direct_report = {
218 "0": [
219 {
220 "lv_name": "osd-block-957d22b7-24ce-466a-9883-b8218eaa1634",
221 "lv_path": "/dev/ceph-d4962338-46ff-4cd5-8ea6-c033dbdc5b44/osd-block-957d22b7-24ce-466a-9883-b8218eaa1634",
222 "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",
223 "lv_uuid": "6MixOd-2Q1I-f8K3-PPOq-UJGV-L3A0-0XwUm4",
224 "name": "osd-block-957d22b7-24ce-466a-9883-b8218eaa1634",
225 "path": "/dev/ceph-d4962338-46ff-4cd5-8ea6-c033dbdc5b44/osd-block-957d22b7-24ce-466a-9883-b8218eaa1634",
226 "tags": {
227 "ceph.block_device": "/dev/ceph-d4962338-46ff-4cd5-8ea6-c033dbdc5b44/osd-block-957d22b7-24ce-466a-9883-b8218eaa1634",
228 "ceph.block_uuid": "6MixOd-2Q1I-f8K3-PPOq-UJGV-L3A0-0XwUm4",
229 "ceph.cephx_lockbox_secret": "",
230 "ceph.cluster_fsid": "d4962338-46ff-4cd5-8ea6-c033dbdc5b44",
231 "ceph.cluster_name": "ceph",
232 "ceph.crush_device_class": "None",
233 "ceph.encrypted": "0",
234 "ceph.osd_fsid": "957d22b7-24ce-466a-9883-b8218eaa1634",
235 "ceph.osd_id": "0",
236 "ceph.type": "block"
237 },
238 "type": "block",
239 "vg_name": "ceph-d4962338-46ff-4cd5-8ea6-c033dbdc5b44"
240 }
241 ],
242 "1": [
243 {
244 "lv_name": "osd-block-d0f3e4ad-e52a-4520-afc0-a8789a96ce8b",
245 "lv_path": "/dev/ceph-7538bcf0-f155-4d3f-a9fd-d8b15905e532/osd-block-d0f3e4ad-e52a-4520-afc0-a8789a96ce8b",
246 "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",
247 "lv_uuid": "1igwLb-ZlmV-eLgp-hapx-c1Hr-M5gz-sHjnyW",
248 "name": "osd-block-d0f3e4ad-e52a-4520-afc0-a8789a96ce8b",
249 "path": "/dev/ceph-7538bcf0-f155-4d3f-a9fd-d8b15905e532/osd-block-d0f3e4ad-e52a-4520-afc0-a8789a96ce8b",
250 "tags": {
251 "ceph.block_device": "/dev/ceph-7538bcf0-f155-4d3f-a9fd-d8b15905e532/osd-block-d0f3e4ad-e52a-4520-afc0-a8789a96ce8b",
252 "ceph.block_uuid": "1igwLb-ZlmV-eLgp-hapx-c1Hr-M5gz-sHjnyW",
253 "ceph.cephx_lockbox_secret": "",
254 "ceph.cluster_fsid": "d4962338-46ff-4cd5-8ea6-c033dbdc5b44",
255 "ceph.cluster_name": "ceph",
256 "ceph.crush_device_class": "None",
257 "ceph.encrypted": "0",
258 "ceph.osd_fsid": "d0f3e4ad-e52a-4520-afc0-a8789a96ce8b",
259 "ceph.osd_id": "1",
260 "ceph.type": "block"
261 },
262 "type": "block",
263 "vg_name": "ceph-7538bcf0-f155-4d3f-a9fd-d8b15905e532"
264 }
265 ]
266}