]>
git.proxmox.com Git - ceph.git/blob - ceph/src/ceph-volume/ceph_volume/tests/devices/lvm/test_activate.py
2 from copy
import deepcopy
3 from ceph_volume
.devices
.lvm
import activate
4 from ceph_volume
.api
import lvm
as api
5 from ceph_volume
.tests
.conftest
import Capture
10 def __init__(self
, **kw
):
12 self
.bluestore
= False
13 self
.no_systemd
= False
14 self
.auto_detect_objectstore
= None
15 for k
, v
in kw
.items():
19 class TestActivate(object):
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
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")
29 volumes
.append(FooVolume
)
30 monkeypatch
.setattr(api
, 'get_lvs', lambda **kwargs
: volumes
)
31 monkeypatch
.setattr(activate
, 'activate_bluestore', capture
)
32 args
= Args(osd_id
=None, osd_fsid
='1234', bluestore
=True)
33 activate
.Activate([]).activate(args
)
34 assert capture
.calls
[0]['args'][0] == [FooVolume
]
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'
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'
48 def test_bluestore_no_systemd(self
, is_root
, monkeypatch
, capture
):
49 monkeypatch
.setattr('ceph_volume.configuration.load', lambda: None)
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(
59 lv_path
='/dev/vg/data',
60 lv_tags
="ceph.cluster_name=ceph,,ceph.journal_uuid=000," + \
61 "ceph.type=block,ceph.osd_id=0,ceph.osd_fsid=1234")
63 volumes
.append(DataVolume
)
64 monkeypatch
.setattr(api
, 'get_lvs', lambda **kwargs
: deepcopy(volumes
))
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
== []
71 def test_bluestore_systemd(self
, is_root
, monkeypatch
, capture
):
72 monkeypatch
.setattr('ceph_volume.configuration.load', lambda: None)
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(
82 lv_path
='/dev/vg/data',
83 lv_tags
="ceph.cluster_name=ceph,,ceph.journal_uuid=000," + \
84 "ceph.type=block,ceph.osd_id=0,ceph.osd_fsid=1234")
86 volumes
.append(DataVolume
)
87 monkeypatch
.setattr(api
, 'get_lvs', lambda **kwargs
: deepcopy(volumes
))
89 args
= Args(osd_id
=None, osd_fsid
='1234', no_systemd
=False,
91 activate
.Activate([]).activate(args
)
92 assert fake_enable
.calls
!= []
93 assert fake_start_osd
.calls
!= []
95 def test_bluestore_no_systemd_autodetect(self
, is_root
, monkeypatch
, capture
):
96 monkeypatch
.setattr('ceph_volume.configuration.load', lambda: None)
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(
106 lv_path
='/dev/vg/data',
107 lv_tags
="ceph.cluster_name=ceph,,ceph.block_uuid=000," + \
108 "ceph.type=block,ceph.osd_id=0,ceph.osd_fsid=1234")
110 volumes
.append(DataVolume
)
111 monkeypatch
.setattr(api
, 'get_lvs', lambda **kwargs
: deepcopy(volumes
))
113 args
= Args(osd_id
=None, osd_fsid
='1234', no_systemd
=True,
114 bluestore
=True, auto_detect_objectstore
=True)
115 activate
.Activate([]).activate(args
)
116 assert fake_enable
.calls
== []
117 assert fake_start_osd
.calls
== []
119 def test_bluestore_systemd_autodetect(self
, is_root
, monkeypatch
, capture
):
120 monkeypatch
.setattr('ceph_volume.configuration.load', lambda: None)
121 fake_enable
= Capture()
122 fake_start_osd
= Capture()
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
:
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(
132 lv_path
='/dev/vg/data',
133 lv_tags
="ceph.cluster_name=ceph,,ceph.journal_uuid=000," + \
134 "ceph.type=block,ceph.osd_id=0,ceph.osd_fsid=1234")
136 volumes
.append(DataVolume
)
137 monkeypatch
.setattr(api
, 'get_lvs', lambda **kwargs
: deepcopy(volumes
))
139 args
= Args(osd_id
=None, osd_fsid
='1234', no_systemd
=False,
140 bluestore
=True, auto_detect_objectstore
=False)
141 activate
.Activate([]).activate(args
)
142 assert fake_enable
.calls
!= []
143 assert fake_start_osd
.calls
!= []
145 class TestActivateFlags(object):
147 def test_default_objectstore(self
, capture
):
148 args
= ['0', 'asdf-ljh-asdf']
149 activation
= activate
.Activate(args
)
150 activation
.activate
= capture
152 parsed_args
= capture
.calls
[0]['args'][0]
153 assert parsed_args
.bluestore
is False
155 def test_uses_bluestore(self
, capture
):
156 args
= ['--bluestore', '0', 'asdf-ljh-asdf']
157 activation
= activate
.Activate(args
)
158 activation
.activate
= capture
160 parsed_args
= capture
.calls
[0]['args'][0]
161 assert parsed_args
.bluestore
is True
164 class TestActivateAll(object):
166 def test_does_not_detect_osds(self
, capsys
, is_root
, capture
, monkeypatch
):
167 monkeypatch
.setattr('ceph_volume.devices.lvm.activate.direct_report', lambda: {})
169 activation
= activate
.Activate(args
)
171 out
, err
= capsys
.readouterr()
172 assert 'Was unable to find any OSDs to activate' in err
173 assert 'Verify OSDs are present with ' in err
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)
179 activation
= activate
.Activate(args
)
181 out
, err
= capsys
.readouterr()
182 assert 'a8789a96ce8b process is active. Skipping activation' in err
183 assert 'b8218eaa1634 process is active. Skipping activation' in err
185 def test_detects_osds_to_activate_systemd(self
, is_root
, capture
, monkeypatch
):
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)
189 activation
= activate
.Activate(args
)
190 activation
.activate
= capture
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'
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
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'
211 # Activate All fixture
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",
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",
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",
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",
229 "ceph.crush_device_class": "",
230 "ceph.encrypted": "0",
231 "ceph.osd_fsid": "957d22b7-24ce-466a-9883-b8218eaa1634",
236 "vg_name": "ceph-d4962338-46ff-4cd5-8ea6-c033dbdc5b44"
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",
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",
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",
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",
253 "ceph.crush_device_class": "",
254 "ceph.encrypted": "0",
255 "ceph.osd_fsid": "d0f3e4ad-e52a-4520-afc0-a8789a96ce8b",
260 "vg_name": "ceph-7538bcf0-f155-4d3f-a9fd-d8b15905e532"