Commit b1493246 by Jesse Keating Committed by James Cammarata

Avoid range selection on empty groups

This prevents a traceback when the group is empty.
Fixes #6258
parent 5341040c
...@@ -227,6 +227,12 @@ class Inventory(object): ...@@ -227,6 +227,12 @@ class Inventory(object):
given a pattern like foo[0:5], where foo matches hosts, return the first 6 hosts given a pattern like foo[0:5], where foo matches hosts, return the first 6 hosts
""" """
# If there are no hosts to select from, just return the
# empty set. This prevents trying to do selections on an empty set.
# issue#6258
if not hosts:
return hosts
(loose_pattern, limits) = self._enumeration_info(pat) (loose_pattern, limits) = self._enumeration_info(pat)
if not limits: if not limits:
return hosts return hosts
......
...@@ -212,6 +212,11 @@ class TestInventory(unittest.TestCase): ...@@ -212,6 +212,11 @@ class TestInventory(unittest.TestCase):
inventory.subset('greek[0-2];norse[0]') inventory.subset('greek[0-2];norse[0]')
self.assertEqual(sorted(inventory.list_hosts()), sorted(['zeus','hera','thor'])) self.assertEqual(sorted(inventory.list_hosts()), sorted(['zeus','hera','thor']))
def test_subet_range_empty_group(self):
inventory = self.simple_inventory()
inventory.subset('missing[0]')
self.assertEqual(sorted(inventory.list_hosts()), sorted([]))
def test_subset_filename(self): def test_subset_filename(self):
inventory = self.simple_inventory() inventory = self.simple_inventory()
inventory.subset('@' + os.path.join(self.test_dir, 'restrict_pattern')) inventory.subset('@' + os.path.join(self.test_dir, 'restrict_pattern'))
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment