diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-21 11:54:28 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-21 11:54:28 +0000 |
commit | e6918187568dbd01842d8d1d2c808ce16a894239 (patch) | |
tree | 64f88b554b444a49f656b6c656111a145cbbaa28 /src/pybind/mgr/rook/tests/test_placement.py | |
parent | Initial commit. (diff) | |
download | ceph-e6918187568dbd01842d8d1d2c808ce16a894239.tar.xz ceph-e6918187568dbd01842d8d1d2c808ce16a894239.zip |
Adding upstream version 18.2.2.upstream/18.2.2
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/pybind/mgr/rook/tests/test_placement.py')
-rw-r--r-- | src/pybind/mgr/rook/tests/test_placement.py | 100 |
1 files changed, 100 insertions, 0 deletions
diff --git a/src/pybind/mgr/rook/tests/test_placement.py b/src/pybind/mgr/rook/tests/test_placement.py new file mode 100644 index 000000000..eeaf191e2 --- /dev/null +++ b/src/pybind/mgr/rook/tests/test_placement.py @@ -0,0 +1,100 @@ +# flake8: noqa + +from rook.rook_cluster import placement_spec_to_node_selector, node_selector_to_placement_spec +from rook.rook_client.ceph.cephcluster import MatchExpressionsItem, MatchExpressionsList, NodeSelectorTermsItem +import pytest +from orchestrator import HostSpec +from ceph.deployment.service_spec import PlacementSpec + +@pytest.mark.parametrize("hosts", + [ # noqa: E128 + [ + HostSpec( + hostname="node1", + labels=["label1"] + ), + HostSpec( + hostname="node2", + labels=[] + ), + HostSpec( + hostname="node3", + labels=["label1"] + ) + ] + ]) +@pytest.mark.parametrize("expected_placement_spec, expected_node_selector", + [ # noqa: E128 + ( + PlacementSpec( + label="label1" + ), + NodeSelectorTermsItem( + matchExpressions=MatchExpressionsList( + [ + MatchExpressionsItem( + key="ceph-label/label1", + operator="Exists" + ) + ] + ) + ) + ), + ( + PlacementSpec( + label="label1", + host_pattern="*" + ), + NodeSelectorTermsItem( + matchExpressions=MatchExpressionsList( + [ + MatchExpressionsItem( + key="ceph-label/label1", + operator="Exists" + ), + MatchExpressionsItem( + key="kubernetes.io/hostname", + operator="Exists", + ) + ] + ) + ) + ), + ( + PlacementSpec( + host_pattern="*" + ), + NodeSelectorTermsItem( + matchExpressions=MatchExpressionsList( + [ + MatchExpressionsItem( + key="kubernetes.io/hostname", + operator="Exists", + ) + ] + ) + ) + ), + ( + PlacementSpec( + hosts=["node1", "node2", "node3"] + ), + NodeSelectorTermsItem( + matchExpressions=MatchExpressionsList( + [ + MatchExpressionsItem( + key="kubernetes.io/hostname", + operator="In", + values=["node1", "node2", "node3"] + ) + ] + ) + ) + ), + ]) +def test_placement_spec_translate(hosts, expected_placement_spec, expected_node_selector): + node_selector = placement_spec_to_node_selector(expected_placement_spec, hosts) + 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] + placement_spec = node_selector_to_placement_spec(expected_node_selector) + assert placement_spec == expected_placement_spec + 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)) |