]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
cephadm: add host_pattern to supported scheduling
authorSebastian Wagner <sebastian.wagner@suse.com>
Mon, 9 Mar 2020 14:26:31 +0000 (15:26 +0100)
committerSebastian Wagner <sebastian.wagner@suse.com>
Tue, 10 Mar 2020 12:28:22 +0000 (13:28 +0100)
Signed-off-by: Sebastian Wagner <sebastian.wagner@suse.com>
src/pybind/mgr/cephadm/module.py
src/pybind/mgr/cephadm/tests/test_scheduling.py
src/python-common/ceph/deployment/service_spec.py

index 3a8eed618a91b382b6609efd7a349e7d4da67055..5746089e5d3188203e2c7c0bf6667d738f92cb11 100644 (file)
@@ -3083,6 +3083,15 @@ class HostAssignment(object):
             logger.debug('All hosts: {}'.format(candidates))
             return candidates
 
+        # respect host_pattern
+        if self.spec.placement.host_pattern:
+            candidates = [
+                HostPlacementSpec(x, '', '')
+                for x in self.spec.placement.pattern_matches_hosts(self.get_hosts_func(None))
+            ]
+            logger.debug('All hosts: {}'.format(candidates))
+            return candidates
+
         count = 0
         if self.spec.placement.hosts and \
            self.spec.placement.count and \
index e2a6a0191f7fabbc25dfdb7c479ef642445d20f5..d84c439e46e6de0d242e13a61bc99fdaa02aebde 100644 (file)
@@ -104,6 +104,14 @@ class NodeAssignmentTest(NamedTuple):
             [],
             ['host1', 'host2', 'host3']
         ),
+        # host_pattern
+        NodeAssignmentTest(
+            'mon',
+            PlacementSpec(host_pattern='mon*'),
+            'monhost1 monhost2 datahost'.split(),
+            [],
+            ['monhost1', 'monhost2']
+        ),
     ])
 def test_node_assignment(service_type, placement, hosts, daemons, expected):
     hosts = HostAssignment(
index 566e041fd91f74dea15532252b11ca5666d67fee..481bad7254cb80eb343e70925c69630299379971 100644 (file)
@@ -140,7 +140,9 @@ class PlacementSpec(object):
 
     def pattern_matches_hosts(self, all_hosts):
         # type: (List[str]) -> List[str]
-        return fnmatch.filter(all_hosts, self.host_pattern)  # type: ignore
+        if not self.host_pattern:
+            return []
+        return fnmatch.filter(all_hosts, self.host_pattern)
 
     def pretty_str(self):
         kv = []