]>
Commit | Line | Data |
---|---|---|
181888fb | 1 | import pytest |
f6b5b4d7 | 2 | from copy import deepcopy |
3efd9988 FG |
3 | from ceph_volume.devices.lvm import activate |
4 | from ceph_volume.api import lvm as api | |
94b18763 | 5 | from ceph_volume.tests.conftest import Capture |
181888fb FG |
6 | |
7 | ||
8 | class Args(object): | |
9 | ||
10 | def __init__(self, **kw): | |
3efd9988 FG |
11 | # default flags |
12 | self.bluestore = 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 | ||
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 | |
f6b5b4d7 TL |
25 | def test_no_osd_id_matches_fsid_bluestore(self, is_root, monkeypatch, capture): |
26 | FooVolume = api.Volume(lv_name='foo', lv_path='/dev/vg/foo', | |
27 | lv_tags="ceph.osd_fsid=1234") | |
28 | volumes = [] | |
3efd9988 | 29 | volumes.append(FooVolume) |
f6b5b4d7 | 30 | monkeypatch.setattr(api, 'get_lvs', lambda **kwargs: volumes) |
3efd9988 FG |
31 | monkeypatch.setattr(activate, 'activate_bluestore', capture) |
32 | args = Args(osd_id=None, osd_fsid='1234', bluestore=True) | |
181888fb FG |
33 | activate.Activate([]).activate(args) |
34 | assert capture.calls[0]['args'][0] == [FooVolume] | |
35 | ||
522d829b TL |
36 | def test_osd_id_no_osd_fsid(self, is_root): |
37 | args = Args(osd_id=42, osd_fsid=None) | |
38 | with pytest.raises(RuntimeError) as result: | |
39 | activate.Activate([]).activate(args) | |
40 | assert result.value.args[0] == 'could not activate osd.42, please provide the osd_fsid too' | |
41 | ||
42 | def test_no_osd_id_no_osd_fsid(self, is_root): | |
43 | args = Args(osd_id=None, osd_fsid=None) | |
44 | with pytest.raises(RuntimeError) as result: | |
45 | activate.Activate([]).activate(args) | |
46 | assert result.value.args[0] == 'Please provide both osd_id and osd_fsid' | |
47 | ||
f6b5b4d7 | 48 | def test_bluestore_no_systemd(self, is_root, monkeypatch, capture): |
20effc67 | 49 | monkeypatch.setattr('ceph_volume.configuration.load', lambda: None) |
94b18763 FG |
50 | fake_enable = Capture() |
51 | fake_start_osd = Capture() | |
52 | monkeypatch.setattr('ceph_volume.util.system.path_is_mounted', lambda *a, **kw: True) | |
53 | monkeypatch.setattr('ceph_volume.util.system.chown', lambda *a, **kw: True) | |
54 | monkeypatch.setattr('ceph_volume.process.run', lambda *a, **kw: True) | |
55 | monkeypatch.setattr(activate.systemctl, 'enable_volume', fake_enable) | |
56 | monkeypatch.setattr(activate.systemctl, 'start_osd', fake_start_osd) | |
57 | DataVolume = api.Volume( | |
58 | lv_name='data', | |
59 | lv_path='/dev/vg/data', | |
f6b5b4d7 TL |
60 | lv_tags="ceph.cluster_name=ceph,,ceph.journal_uuid=000," + \ |
61 | "ceph.type=block,ceph.osd_id=0,ceph.osd_fsid=1234") | |
62 | volumes = [] | |
94b18763 | 63 | volumes.append(DataVolume) |
f6b5b4d7 TL |
64 | monkeypatch.setattr(api, 'get_lvs', lambda **kwargs: deepcopy(volumes)) |
65 | ||
94b18763 FG |
66 | args = Args(osd_id=None, osd_fsid='1234', no_systemd=True, bluestore=True) |
67 | activate.Activate([]).activate(args) | |
68 | assert fake_enable.calls == [] | |
69 | assert fake_start_osd.calls == [] | |
70 | ||
f6b5b4d7 | 71 | def test_bluestore_systemd(self, is_root, monkeypatch, capture): |
20effc67 | 72 | monkeypatch.setattr('ceph_volume.configuration.load', lambda: None) |
94b18763 FG |
73 | fake_enable = Capture() |
74 | fake_start_osd = Capture() | |
75 | monkeypatch.setattr('ceph_volume.util.system.path_is_mounted', lambda *a, **kw: True) | |
76 | monkeypatch.setattr('ceph_volume.util.system.chown', lambda *a, **kw: True) | |
77 | monkeypatch.setattr('ceph_volume.process.run', lambda *a, **kw: True) | |
78 | monkeypatch.setattr(activate.systemctl, 'enable_volume', fake_enable) | |
79 | monkeypatch.setattr(activate.systemctl, 'start_osd', fake_start_osd) | |
80 | DataVolume = api.Volume( | |
81 | lv_name='data', | |
82 | lv_path='/dev/vg/data', | |
f6b5b4d7 TL |
83 | lv_tags="ceph.cluster_name=ceph,,ceph.journal_uuid=000," + \ |
84 | "ceph.type=block,ceph.osd_id=0,ceph.osd_fsid=1234") | |
85 | volumes = [] | |
94b18763 | 86 | volumes.append(DataVolume) |
f6b5b4d7 TL |
87 | monkeypatch.setattr(api, 'get_lvs', lambda **kwargs: deepcopy(volumes)) |
88 | ||
89 | args = Args(osd_id=None, osd_fsid='1234', no_systemd=False, | |
90 | bluestore=True) | |
94b18763 FG |
91 | activate.Activate([]).activate(args) |
92 | assert fake_enable.calls != [] | |
93 | assert fake_start_osd.calls != [] | |
94 | ||
f6b5b4d7 | 95 | def test_bluestore_no_systemd_autodetect(self, is_root, monkeypatch, capture): |
20effc67 | 96 | monkeypatch.setattr('ceph_volume.configuration.load', lambda: None) |
91327a77 AA |
97 | fake_enable = Capture() |
98 | fake_start_osd = Capture() | |
99 | monkeypatch.setattr('ceph_volume.util.system.path_is_mounted', lambda *a, **kw: True) | |
100 | monkeypatch.setattr('ceph_volume.util.system.chown', lambda *a, **kw: True) | |
101 | monkeypatch.setattr('ceph_volume.process.run', lambda *a, **kw: True) | |
102 | monkeypatch.setattr(activate.systemctl, 'enable_volume', fake_enable) | |
103 | monkeypatch.setattr(activate.systemctl, 'start_osd', fake_start_osd) | |
104 | DataVolume = api.Volume( | |
105 | lv_name='data', | |
106 | lv_path='/dev/vg/data', | |
f6b5b4d7 TL |
107 | lv_tags="ceph.cluster_name=ceph,,ceph.block_uuid=000," + \ |
108 | "ceph.type=block,ceph.osd_id=0,ceph.osd_fsid=1234") | |
109 | volumes = [] | |
91327a77 | 110 | volumes.append(DataVolume) |
f6b5b4d7 TL |
111 | monkeypatch.setattr(api, 'get_lvs', lambda **kwargs: deepcopy(volumes)) |
112 | ||
113 | args = Args(osd_id=None, osd_fsid='1234', no_systemd=True, | |
114 | bluestore=True, auto_detect_objectstore=True) | |
91327a77 AA |
115 | activate.Activate([]).activate(args) |
116 | assert fake_enable.calls == [] | |
117 | assert fake_start_osd.calls == [] | |
118 | ||
f6b5b4d7 | 119 | def test_bluestore_systemd_autodetect(self, is_root, monkeypatch, capture): |
20effc67 | 120 | monkeypatch.setattr('ceph_volume.configuration.load', lambda: None) |
91327a77 AA |
121 | fake_enable = Capture() |
122 | fake_start_osd = Capture() | |
f6b5b4d7 TL |
123 | monkeypatch.setattr('ceph_volume.util.system.path_is_mounted', |
124 | lambda *a, **kw: True) | |
125 | monkeypatch.setattr('ceph_volume.util.system.chown', lambda *a, **kw: | |
126 | True) | |
91327a77 AA |
127 | monkeypatch.setattr('ceph_volume.process.run', lambda *a, **kw: True) |
128 | monkeypatch.setattr(activate.systemctl, 'enable_volume', fake_enable) | |
129 | monkeypatch.setattr(activate.systemctl, 'start_osd', fake_start_osd) | |
130 | DataVolume = api.Volume( | |
131 | lv_name='data', | |
132 | lv_path='/dev/vg/data', | |
f6b5b4d7 TL |
133 | lv_tags="ceph.cluster_name=ceph,,ceph.journal_uuid=000," + \ |
134 | "ceph.type=block,ceph.osd_id=0,ceph.osd_fsid=1234") | |
135 | volumes = [] | |
91327a77 | 136 | volumes.append(DataVolume) |
f6b5b4d7 TL |
137 | monkeypatch.setattr(api, 'get_lvs', lambda **kwargs: deepcopy(volumes)) |
138 | ||
139 | args = Args(osd_id=None, osd_fsid='1234', no_systemd=False, | |
140 | bluestore=True, auto_detect_objectstore=False) | |
91327a77 AA |
141 | activate.Activate([]).activate(args) |
142 | assert fake_enable.calls != [] | |
143 | assert fake_start_osd.calls != [] | |
3efd9988 FG |
144 | |
145 | class TestActivateFlags(object): | |
146 | ||
147 | def test_default_objectstore(self, capture): | |
148 | args = ['0', 'asdf-ljh-asdf'] | |
149 | activation = activate.Activate(args) | |
150 | activation.activate = capture | |
151 | activation.main() | |
152 | parsed_args = capture.calls[0]['args'][0] | |
3efd9988 FG |
153 | assert parsed_args.bluestore is False |
154 | ||
155 | def test_uses_bluestore(self, capture): | |
156 | args = ['--bluestore', '0', 'asdf-ljh-asdf'] | |
157 | activation = activate.Activate(args) | |
158 | activation.activate = capture | |
159 | activation.main() | |
160 | parsed_args = capture.calls[0]['args'][0] | |
3efd9988 | 161 | assert parsed_args.bluestore is True |
94b18763 FG |
162 | |
163 | ||
164 | class TestActivateAll(object): | |
165 | ||
166 | def test_does_not_detect_osds(self, capsys, is_root, capture, monkeypatch): | |
167 | monkeypatch.setattr('ceph_volume.devices.lvm.activate.direct_report', lambda: {}) | |
168 | args = ['--all'] | |
169 | activation = activate.Activate(args) | |
170 | activation.main() | |
171 | out, err = capsys.readouterr() | |
494da23a TL |
172 | assert 'Was unable to find any OSDs to activate' in err |
173 | assert 'Verify OSDs are present with ' in err | |
94b18763 FG |
174 | |
175 | def test_detects_running_osds(self, capsys, is_root, capture, monkeypatch): | |
176 | monkeypatch.setattr('ceph_volume.devices.lvm.activate.direct_report', lambda: direct_report) | |
177 | monkeypatch.setattr('ceph_volume.devices.lvm.activate.systemctl.osd_is_active', lambda x: True) | |
178 | args = ['--all'] | |
179 | activation = activate.Activate(args) | |
180 | activation.main() | |
181 | out, err = capsys.readouterr() | |
494da23a TL |
182 | assert 'a8789a96ce8b process is active. Skipping activation' in err |
183 | assert 'b8218eaa1634 process is active. Skipping activation' in err | |
94b18763 | 184 | |
a4b75251 | 185 | def test_detects_osds_to_activate_systemd(self, is_root, capture, monkeypatch): |
94b18763 FG |
186 | monkeypatch.setattr('ceph_volume.devices.lvm.activate.direct_report', lambda: direct_report) |
187 | monkeypatch.setattr('ceph_volume.devices.lvm.activate.systemctl.osd_is_active', lambda x: False) | |
188 | args = ['--all'] | |
189 | activation = activate.Activate(args) | |
190 | activation.activate = capture | |
191 | activation.main() | |
192 | calls = sorted(capture.calls, key=lambda x: x['kwargs']['osd_id']) | |
193 | assert calls[0]['kwargs']['osd_id'] == '0' | |
194 | assert calls[0]['kwargs']['osd_fsid'] == '957d22b7-24ce-466a-9883-b8218eaa1634' | |
195 | assert calls[1]['kwargs']['osd_id'] == '1' | |
196 | assert calls[1]['kwargs']['osd_fsid'] == 'd0f3e4ad-e52a-4520-afc0-a8789a96ce8b' | |
197 | ||
a4b75251 TL |
198 | def test_detects_osds_to_activate_no_systemd(self, is_root, capture, monkeypatch): |
199 | monkeypatch.setattr('ceph_volume.devices.lvm.activate.direct_report', lambda: direct_report) | |
200 | args = ['--all', '--no-systemd'] | |
201 | activation = activate.Activate(args) | |
202 | activation.activate = capture | |
203 | activation.main() | |
204 | calls = sorted(capture.calls, key=lambda x: x['kwargs']['osd_id']) | |
205 | assert calls[0]['kwargs']['osd_id'] == '0' | |
206 | assert calls[0]['kwargs']['osd_fsid'] == '957d22b7-24ce-466a-9883-b8218eaa1634' | |
207 | assert calls[1]['kwargs']['osd_id'] == '1' | |
208 | assert calls[1]['kwargs']['osd_fsid'] == 'd0f3e4ad-e52a-4520-afc0-a8789a96ce8b' | |
209 | ||
94b18763 FG |
210 | # |
211 | # Activate All fixture | |
212 | # | |
213 | ||
214 | direct_report = { | |
215 | "0": [ | |
216 | { | |
217 | "lv_name": "osd-block-957d22b7-24ce-466a-9883-b8218eaa1634", | |
218 | "lv_path": "/dev/ceph-d4962338-46ff-4cd5-8ea6-c033dbdc5b44/osd-block-957d22b7-24ce-466a-9883-b8218eaa1634", | |
20effc67 | 219 | "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", |
94b18763 FG |
220 | "lv_uuid": "6MixOd-2Q1I-f8K3-PPOq-UJGV-L3A0-0XwUm4", |
221 | "name": "osd-block-957d22b7-24ce-466a-9883-b8218eaa1634", | |
222 | "path": "/dev/ceph-d4962338-46ff-4cd5-8ea6-c033dbdc5b44/osd-block-957d22b7-24ce-466a-9883-b8218eaa1634", | |
223 | "tags": { | |
224 | "ceph.block_device": "/dev/ceph-d4962338-46ff-4cd5-8ea6-c033dbdc5b44/osd-block-957d22b7-24ce-466a-9883-b8218eaa1634", | |
225 | "ceph.block_uuid": "6MixOd-2Q1I-f8K3-PPOq-UJGV-L3A0-0XwUm4", | |
226 | "ceph.cephx_lockbox_secret": "", | |
227 | "ceph.cluster_fsid": "d4962338-46ff-4cd5-8ea6-c033dbdc5b44", | |
228 | "ceph.cluster_name": "ceph", | |
20effc67 | 229 | "ceph.crush_device_class": "", |
94b18763 FG |
230 | "ceph.encrypted": "0", |
231 | "ceph.osd_fsid": "957d22b7-24ce-466a-9883-b8218eaa1634", | |
232 | "ceph.osd_id": "0", | |
233 | "ceph.type": "block" | |
234 | }, | |
235 | "type": "block", | |
236 | "vg_name": "ceph-d4962338-46ff-4cd5-8ea6-c033dbdc5b44" | |
237 | } | |
238 | ], | |
239 | "1": [ | |
240 | { | |
241 | "lv_name": "osd-block-d0f3e4ad-e52a-4520-afc0-a8789a96ce8b", | |
242 | "lv_path": "/dev/ceph-7538bcf0-f155-4d3f-a9fd-d8b15905e532/osd-block-d0f3e4ad-e52a-4520-afc0-a8789a96ce8b", | |
20effc67 | 243 | "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", |
94b18763 FG |
244 | "lv_uuid": "1igwLb-ZlmV-eLgp-hapx-c1Hr-M5gz-sHjnyW", |
245 | "name": "osd-block-d0f3e4ad-e52a-4520-afc0-a8789a96ce8b", | |
246 | "path": "/dev/ceph-7538bcf0-f155-4d3f-a9fd-d8b15905e532/osd-block-d0f3e4ad-e52a-4520-afc0-a8789a96ce8b", | |
247 | "tags": { | |
248 | "ceph.block_device": "/dev/ceph-7538bcf0-f155-4d3f-a9fd-d8b15905e532/osd-block-d0f3e4ad-e52a-4520-afc0-a8789a96ce8b", | |
249 | "ceph.block_uuid": "1igwLb-ZlmV-eLgp-hapx-c1Hr-M5gz-sHjnyW", | |
250 | "ceph.cephx_lockbox_secret": "", | |
251 | "ceph.cluster_fsid": "d4962338-46ff-4cd5-8ea6-c033dbdc5b44", | |
252 | "ceph.cluster_name": "ceph", | |
20effc67 | 253 | "ceph.crush_device_class": "", |
94b18763 FG |
254 | "ceph.encrypted": "0", |
255 | "ceph.osd_fsid": "d0f3e4ad-e52a-4520-afc0-a8789a96ce8b", | |
256 | "ceph.osd_id": "1", | |
257 | "ceph.type": "block" | |
258 | }, | |
259 | "type": "block", | |
260 | "vg_name": "ceph-7538bcf0-f155-4d3f-a9fd-d8b15905e532" | |
261 | } | |
262 | ] | |
263 | } |