List hosts in no group in the ungrouped group.

pull/146/head
Jeroen Hoekx 13 years ago
parent 3a24aa9a70
commit 961ccdb2f4

@ -168,6 +168,8 @@ class Inventory(object):
hosts = [] hosts = []
groups = {} groups = {}
ungrouped = []
for item in data: for item in data:
if type(item) == dict: if type(item) == dict:
if "group" in item: if "group" in item:
@ -186,13 +188,14 @@ class Inventory(object):
groups[group_name] = group_hosts groups[group_name] = group_hosts
hosts.extend(group_hosts) hosts.extend(group_hosts)
# or a host
elif "host" in item: elif "host" in item:
host_name = self._parse_yaml_host(item) host_name = self._parse_yaml_host(item)
hosts.append(host_name) hosts.append(host_name)
ungrouped.append(host_name)
else: else:
host_name = self._parse_yaml_host(item) host_name = self._parse_yaml_host(item)
hosts.append(host_name) hosts.append(host_name)
ungrouped.append(host_name)
# filter duplicate hosts # filter duplicate hosts
output_hosts = [] output_hosts = []
@ -200,6 +203,18 @@ class Inventory(object):
if host not in output_hosts: if host not in output_hosts:
output_hosts.append(host) output_hosts.append(host)
if len(ungrouped) > 0 :
# hosts can be defined top-level, but also in a group
really_ungrouped = []
for host in ungrouped:
already_grouped = False
for name, group_hosts in groups.items():
if host in group_hosts:
already_grouped = True
if not already_grouped:
really_ungrouped.append(host)
groups["ungrouped"] = really_ungrouped
return output_hosts, groups return output_hosts, groups
def _parse_yaml_host(self, item, variables=[]): def _parse_yaml_host(self, item, variables=[]):

@ -51,6 +51,13 @@ class TestInventory(unittest.TestCase):
expected_hosts=['thor', 'odin', 'loki'] expected_hosts=['thor', 'odin', 'loki']
assert hosts == expected_hosts assert hosts == expected_hosts
def test_simple_ungrouped(self):
inventory = self.simple_inventory()
hosts = inventory.list_hosts("ungrouped")
expected_hosts=['jupiter', 'saturn']
assert hosts == expected_hosts
def test_simple_combined(self): def test_simple_combined(self):
inventory = self.simple_inventory() inventory = self.simple_inventory()
hosts = inventory.list_hosts("norse:greek") hosts = inventory.list_hosts("norse:greek")
@ -176,6 +183,13 @@ class TestInventory(unittest.TestCase):
expected_hosts=['thor', 'odin', 'loki'] expected_hosts=['thor', 'odin', 'loki']
assert hosts == expected_hosts assert hosts == expected_hosts
def test_simple_ungrouped(self):
inventory = self.yaml_inventory()
hosts = inventory.list_hosts("ungrouped")
expected_hosts=['jupiter']
assert hosts == expected_hosts
def test_yaml_combined(self): def test_yaml_combined(self):
inventory = self.yaml_inventory() inventory = self.yaml_inventory()
hosts = inventory.list_hosts("norse:greek") hosts = inventory.list_hosts("norse:greek")

@ -5,6 +5,8 @@
vars: vars:
- moon: titan - moon: titan
- zeus
- group: greek - group: greek
hosts: hosts:
- zeus - zeus

Loading…
Cancel
Save