osd_count += 1
sm[n].size = osd_count
else:
- sm[n].size = spec.placement.get_host_selection_size(
+ sm[n].size = spec.placement.get_target_count(
self.inventory.all_specs())
sm[n].created = self.spec_store.spec_created[n]
continue
sm[n] = orchestrator.ServiceDescription(
spec=spec,
- size=spec.placement.get_host_selection_size(self.inventory.all_specs()),
+ size=spec.placement.get_target_count(self.inventory.all_specs()),
running=0,
events=self.events.get_for_service(spec.service_name()),
)
return fnmatch.filter(all_hosts, self.host_pattern)
return all_hosts
- def get_host_selection_size(self, hostspecs: Iterable[HostSpec]) -> int:
+ def get_target_count(self, hostspecs: Iterable[HostSpec]) -> int:
if self.count:
return self.count
- return len(self.filter_matching_hostspecs(hostspecs))
+ return len(self.filter_matching_hostspecs(hostspecs)) * (self.count_per_host or 1)
def pretty_str(self) -> str:
"""
HostPlacementSpec.parse(test_input)
+@pytest.mark.parametrize(
+ "p,hosts,size",
+ [
+ (
+ PlacementSpec(count=3),
+ ['host1', 'host2', 'host3', 'host4', 'host5'],
+ 3
+ ),
+ (
+ PlacementSpec(host_pattern='*'),
+ ['host1', 'host2', 'host3', 'host4', 'host5'],
+ 5
+ ),
+ (
+ PlacementSpec(count_per_host=2, host_pattern='*'),
+ ['host1', 'host2', 'host3', 'host4', 'host5'],
+ 10
+ ),
+ (
+ PlacementSpec(host_pattern='foo*'),
+ ['foo1', 'foo2', 'bar1', 'bar2'],
+ 2
+ ),
+ (
+ PlacementSpec(count_per_host=2, host_pattern='foo*'),
+ ['foo1', 'foo2', 'bar1', 'bar2'],
+ 4
+ ),
+ ])
+def test_placement_target_size(p, hosts, size):
+ assert p.get_target_count(
+ [HostPlacementSpec(n, '', '') for n in hosts]
+ ) == size
+
+
def _get_dict_spec(s_type, s_id):
dict_spec = {
"service_id": s_id,