Merge pull request #478 from dhozac/not-host
Allow exclusion of hosts/groups
This commit is contained in:
commit
ce838e0755
2 changed files with 34 additions and 9 deletions
|
@ -85,14 +85,21 @@ class Inventory(object):
|
||||||
patterns = pattern.replace(";",":").split(":")
|
patterns = pattern.replace(";",":").split(":")
|
||||||
|
|
||||||
groups = self.get_groups()
|
groups = self.get_groups()
|
||||||
|
for pat in patterns:
|
||||||
|
if pat.startswith("!"):
|
||||||
|
pat = pat[1:]
|
||||||
|
inverted = True
|
||||||
|
else:
|
||||||
|
inverted = False
|
||||||
for group in groups:
|
for group in groups:
|
||||||
for host in group.get_hosts():
|
for host in group.get_hosts():
|
||||||
for pat in patterns:
|
|
||||||
if group.name == pat or pat == 'all' or self._match(host.name, pat):
|
if group.name == pat or pat == 'all' or self._match(host.name, pat):
|
||||||
#must test explicitly for None because [] means no hosts allowed
|
#must test explicitly for None because [] means no hosts allowed
|
||||||
if self._restriction==None:
|
if self._restriction==None or host.name in self._restriction:
|
||||||
hosts[host.name] = host
|
if inverted:
|
||||||
elif host.name in self._restriction:
|
if host.name in hosts:
|
||||||
|
del hosts[host.name]
|
||||||
|
else:
|
||||||
hosts[host.name] = host
|
hosts[host.name] = host
|
||||||
return sorted(hosts.values(), key=lambda x: x.name)
|
return sorted(hosts.values(), key=lambda x: x.name)
|
||||||
|
|
||||||
|
|
|
@ -99,6 +99,17 @@ class TestInventory(unittest.TestCase):
|
||||||
print expected_hosts
|
print expected_hosts
|
||||||
assert sorted(hosts) == sorted(expected_hosts)
|
assert sorted(hosts) == sorted(expected_hosts)
|
||||||
|
|
||||||
|
def test_simple_exclude(self):
|
||||||
|
inventory = self.simple_inventory()
|
||||||
|
|
||||||
|
hosts = inventory.list_hosts("all:!greek")
|
||||||
|
expected_hosts=['jupiter', 'saturn', 'thor', 'odin', 'loki']
|
||||||
|
assert sorted(hosts) == sorted(expected_hosts)
|
||||||
|
|
||||||
|
hosts = inventory.list_hosts("all:!norse:!greek")
|
||||||
|
expected_hosts=['jupiter', 'saturn']
|
||||||
|
assert sorted(hosts) == sorted(expected_hosts)
|
||||||
|
|
||||||
def test_simple_vars(self):
|
def test_simple_vars(self):
|
||||||
inventory = self.simple_inventory()
|
inventory = self.simple_inventory()
|
||||||
vars = inventory.get_variables('thor')
|
vars = inventory.get_variables('thor')
|
||||||
|
@ -136,6 +147,13 @@ class TestInventory(unittest.TestCase):
|
||||||
print expected
|
print expected
|
||||||
assert vars == expected
|
assert vars == expected
|
||||||
|
|
||||||
|
def test_complex_exclude(self):
|
||||||
|
inventory = self.complex_inventory()
|
||||||
|
|
||||||
|
hosts = inventory.list_hosts("nc:!triangle:florida:!orlando")
|
||||||
|
expected_hosts=['rtp_a', 'rtp_b', 'rtb_c', 'miami']
|
||||||
|
assert sorted(hosts) == sorted(expected_hosts)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
###################################################
|
###################################################
|
||||||
|
|
Loading…
Reference in a new issue