From 47fc0a759f7d95a770f3f1b0a75b5d14267de149 Mon Sep 17 00:00:00 2001 From: AlanCoding Date: Fri, 2 Nov 2018 10:10:38 -0400 Subject: [PATCH] fix bug where grandparent groups were excluded --- awx/main/models/inventory.py | 2 +- .../tests/functional/models/test_inventory.py | 22 +++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/awx/main/models/inventory.py b/awx/main/models/inventory.py index c7b9254ada..fd4deb6c75 100644 --- a/awx/main/models/inventory.py +++ b/awx/main/models/inventory.py @@ -294,7 +294,7 @@ class Inventory(CommonModelNameNotUnique, ResourceMixin, RelatedJobsMixin): # Remove any empty groups for group_name in list(data.keys()): - if not data.get(group_name, {}).get('hosts', []): + if not (data.get(group_name, {}).get('hosts', []) or data.get(group_name, {}).get('children', [])): data.pop(group_name) if hostvars: diff --git a/awx/main/tests/functional/models/test_inventory.py b/awx/main/tests/functional/models/test_inventory.py index 97cf1cb0a0..3129027a02 100644 --- a/awx/main/tests/functional/models/test_inventory.py +++ b/awx/main/tests/functional/models/test_inventory.py @@ -38,6 +38,28 @@ class TestInventoryScript: 'remote_tower_id': host.id } + def test_grandparent_group(self, inventory): + g1 = inventory.groups.create(name='g1', variables={'v1': 'v1'}) + g2 = inventory.groups.create(name='g2', variables={'v2': 'v2'}) + h1 = inventory.hosts.create(name='h1') + # h1 becomes indirect member of g1 group + g1.children.add(g2) + g2.hosts.add(h1) + # make sure we return g1 details in output + data = inventory.get_script_data(hostvars=1) + assert 'g1' in data + assert 'g2' in data + assert data['g1'] == { + 'hosts': [], + 'children': ['g2'], + 'vars': {'v1': 'v1'} + } + assert data['g2'] == { + 'hosts': ['h1'], + 'children': [], + 'vars': {'v2': 'v2'} + } + def test_slice_subset(self, inventory): for i in range(3): inventory.hosts.create(name='host{}'.format(i))