]>
git.proxmox.com Git - ceph.git/blob - ceph/src/ceph-volume/ceph_volume/tests/devices/lvm/test_activate.py
2 from ceph_volume
.devices
.lvm
import activate
3 from ceph_volume
.api
import lvm
as api
4 from ceph_volume
.tests
.conftest
import Capture
9 def __init__(self
, **kw
):
11 self
.bluestore
= False
12 self
.filestore
= 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(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
)
30 args
= Args(osd_id
=None, osd_fsid
='1234', filestore
=True)
31 activate
.Activate([]).activate(args
)
32 assert capture
.calls
[0]['args'][0] == [FooVolume
]
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)
40 activate
.Activate([]).activate(args
)
41 assert capture
.calls
[0]['args'][0] == [FooVolume
]
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
)
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(
62 lv_path
='/dev/vg/journal',
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"])
69 DataVolume
= api
.Volume(
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
== []
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(
91 lv_path
='/dev/vg/journal',
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"])
98 DataVolume
= api
.Volume(
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
!= []
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(
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
== []
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(
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
!= []
149 class TestActivateFlags(object):
151 def test_default_objectstore(self
, capture
):
152 args
= ['0', 'asdf-ljh-asdf']
153 activation
= activate
.Activate(args
)
154 activation
.activate
= capture
156 parsed_args
= capture
.calls
[0]['args'][0]
157 assert parsed_args
.filestore
is False
158 assert parsed_args
.bluestore
is True
160 def test_uses_filestore(self
, capture
):
161 args
= ['--filestore', '0', 'asdf-ljh-asdf']
162 activation
= activate
.Activate(args
)
163 activation
.activate
= capture
165 parsed_args
= capture
.calls
[0]['args'][0]
166 assert parsed_args
.filestore
is True
167 assert parsed_args
.bluestore
is False
169 def test_uses_bluestore(self
, capture
):
170 args
= ['--bluestore', '0', 'asdf-ljh-asdf']
171 activation
= activate
.Activate(args
)
172 activation
.activate
= capture
174 parsed_args
= capture
.calls
[0]['args'][0]
175 assert parsed_args
.filestore
is False
176 assert parsed_args
.bluestore
is True
179 class TestActivateAll(object):
181 def test_does_not_detect_osds(self
, capsys
, is_root
, capture
, monkeypatch
):
182 monkeypatch
.setattr('ceph_volume.devices.lvm.activate.direct_report', lambda: {})
184 activation
= activate
.Activate(args
)
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
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)
194 activation
= activate
.Activate(args
)
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
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)
204 activation
= activate
.Activate(args
)
205 activation
.activate
= capture
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'
214 # Activate All fixture
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",
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",
239 "vg_name": "ceph-d4962338-46ff-4cd5-8ea6-c033dbdc5b44"
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",
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",
263 "vg_name": "ceph-7538bcf0-f155-4d3f-a9fd-d8b15905e532"