Commit dad9695a by Michael DeHaan

Merge pull request #478 from dhozac/not-host

Allow exclusion of hosts/groups
parents 38b186b1 05a7a372
...@@ -85,15 +85,22 @@ class Inventory(object): ...@@ -85,15 +85,22 @@ class Inventory(object):
patterns = pattern.replace(";",":").split(":") patterns = pattern.replace(";",":").split(":")
groups = self.get_groups() groups = self.get_groups()
for group in groups: for pat in patterns:
for host in group.get_hosts(): if pat.startswith("!"):
for pat in patterns: pat = pat[1:]
if group.name == pat or pat == 'all' or self._match(host.name, pat): inverted = True
#must test explicitly for None because [] means no hosts allowed else:
if self._restriction==None: inverted = False
hosts[host.name] = host for group in groups:
elif host.name in self._restriction: for host in group.get_hosts():
hosts[host.name] = host if group.name == pat or pat == 'all' or self._match(host.name, pat):
#must test explicitly for None because [] means no hosts allowed
if self._restriction==None or host.name in self._restriction:
if inverted:
if host.name in hosts:
del hosts[host.name]
else:
hosts[host.name] = host
return sorted(hosts.values(), key=lambda x: x.name) return sorted(hosts.values(), key=lambda x: x.name)
def get_groups(self): def get_groups(self):
......
...@@ -99,6 +99,17 @@ class TestInventory(unittest.TestCase): ...@@ -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): ...@@ -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)
################################################### ###################################################
......
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