]> git.proxmox.com Git - ceph.git/blob - ceph/src/pybind/mgr/rook/tests/test_placement.py
import quincy beta 17.1.0
[ceph.git] / ceph / src / pybind / mgr / rook / tests / test_placement.py
1 # flake8: noqa
2
3 from rook.rook_cluster import placement_spec_to_node_selector, node_selector_to_placement_spec
4 from rook.rook_client.ceph.cephcluster import MatchExpressionsItem, MatchExpressionsList, NodeSelectorTermsItem
5 import pytest
6 from orchestrator import HostSpec
7 from ceph.deployment.service_spec import PlacementSpec
8
9 @pytest.mark.parametrize("hosts",
10 [ # noqa: E128
11 [
12 HostSpec(
13 hostname="node1",
14 labels=["label1"]
15 ),
16 HostSpec(
17 hostname="node2",
18 labels=[]
19 ),
20 HostSpec(
21 hostname="node3",
22 labels=["label1"]
23 )
24 ]
25 ])
26 @pytest.mark.parametrize("expected_placement_spec, expected_node_selector",
27 [ # noqa: E128
28 (
29 PlacementSpec(
30 label="label1"
31 ),
32 NodeSelectorTermsItem(
33 matchExpressions=MatchExpressionsList(
34 [
35 MatchExpressionsItem(
36 key="ceph-label/label1",
37 operator="Exists"
38 )
39 ]
40 )
41 )
42 ),
43 (
44 PlacementSpec(
45 label="label1",
46 host_pattern="*"
47 ),
48 NodeSelectorTermsItem(
49 matchExpressions=MatchExpressionsList(
50 [
51 MatchExpressionsItem(
52 key="ceph-label/label1",
53 operator="Exists"
54 ),
55 MatchExpressionsItem(
56 key="kubernetes.io/hostname",
57 operator="Exists",
58 )
59 ]
60 )
61 )
62 ),
63 (
64 PlacementSpec(
65 host_pattern="*"
66 ),
67 NodeSelectorTermsItem(
68 matchExpressions=MatchExpressionsList(
69 [
70 MatchExpressionsItem(
71 key="kubernetes.io/hostname",
72 operator="Exists",
73 )
74 ]
75 )
76 )
77 ),
78 (
79 PlacementSpec(
80 hosts=["node1", "node2", "node3"]
81 ),
82 NodeSelectorTermsItem(
83 matchExpressions=MatchExpressionsList(
84 [
85 MatchExpressionsItem(
86 key="kubernetes.io/hostname",
87 operator="In",
88 values=["node1", "node2", "node3"]
89 )
90 ]
91 )
92 )
93 ),
94 ])
95 def test_placement_spec_translate(hosts, expected_placement_spec, expected_node_selector):
96 node_selector = placement_spec_to_node_selector(expected_placement_spec, hosts)
97 assert [(getattr(expression, 'key', None), getattr(expression, 'operator', None), getattr(expression, 'values', None)) for expression in node_selector.matchExpressions] == [(getattr(expression, 'key', None), getattr(expression, 'operator', None), getattr(expression, 'values', None)) for expression in expected_node_selector.matchExpressions]
98 placement_spec = node_selector_to_placement_spec(expected_node_selector)
99 assert placement_spec == expected_placement_spec
100 assert (getattr(placement_spec, 'label', None), getattr(placement_spec, 'hosts', None), getattr(placement_spec, 'host_pattern', None)) == (getattr(expected_placement_spec, 'label', None), getattr(expected_placement_spec, 'hosts', None), getattr(expected_placement_spec, 'host_pattern', None))