]> git.proxmox.com Git - ceph.git/blame - ceph/src/ceph-volume/ceph_volume/tests/devices/lvm/test_activate.py
bump version to 18.2.2-pve1
[ceph.git] / ceph / src / ceph-volume / ceph_volume / tests / devices / lvm / test_activate.py
CommitLineData
181888fb 1import pytest
f6b5b4d7 2from copy import deepcopy
3efd9988
FG
3from ceph_volume.devices.lvm import activate
4from ceph_volume.api import lvm as api
94b18763 5from ceph_volume.tests.conftest import Capture
181888fb
FG
6
7
8class 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
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
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
145class 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
164class 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
214direct_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}