mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
List hosts in no group in the ungrouped group.
This commit is contained in:
parent
3a24aa9a70
commit
961ccdb2f4
3 changed files with 32 additions and 1 deletions
|
@ -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…
Reference in a new issue