From f916bd7994948202af7806f7c68c5a8ca1200b1a Mon Sep 17 00:00:00 2001 From: Rick Stokkingreef Date: Tue, 6 Nov 2018 14:26:36 +0100 Subject: [PATCH 1/2] Fixed bug when all group vars are not included --- awx/main/models/inventory.py | 3 +++ .../tests/functional/models/test_inventory.py | 24 +++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/awx/main/models/inventory.py b/awx/main/models/inventory.py index fd4deb6c75..f59ec69a08 100644 --- a/awx/main/models/inventory.py +++ b/awx/main/models/inventory.py @@ -297,6 +297,9 @@ class Inventory(CommonModelNameNotUnique, ResourceMixin, RelatedJobsMixin): if not (data.get(group_name, {}).get('hosts', []) or data.get(group_name, {}).get('children', [])): data.pop(group_name) + # Add the all group + data['all'] = all_group + if hostvars: data.setdefault('_meta', dict()) data['_meta'].setdefault('hostvars', dict()) diff --git a/awx/main/tests/functional/models/test_inventory.py b/awx/main/tests/functional/models/test_inventory.py index 3129027a02..301330e9e4 100644 --- a/awx/main/tests/functional/models/test_inventory.py +++ b/awx/main/tests/functional/models/test_inventory.py @@ -38,6 +38,30 @@ class TestInventoryScript: 'remote_tower_id': host.id } + def test_all_group(self, inventory): + inventory.groups.create(name='all', variables={'a1': 'a1'}) + g1 = inventory.groups.create(name='g1', variables={'v1': 'v1'}) + h1 = inventory.hosts.create(name='h1') + inventory.hosts.create(name='h2') + # h1 becomes member of g1 group + g1.hosts.add(h1) + # make sure we return a1 details in output + data = inventory.get_script_data(hostvars=1) + assert 'all' in data + assert 'g1' in data + assert data['g1'] == { + 'hosts': ['h1'], + 'children': [], + 'vars': {'v1': 'v1'} + } + assert data['all'] == { + 'hosts': ['h2'], + 'children': ['g1'], + 'vars': {'a1': 'a1'} + } + + + def test_grandparent_group(self, inventory): g1 = inventory.groups.create(name='g1', variables={'v1': 'v1'}) g2 = inventory.groups.create(name='g2', variables={'v2': 'v2'}) From 7dbb86267382be3cb6a7994386e259203a12019d Mon Sep 17 00:00:00 2001 From: Rick Stokkingreef Date: Thu, 8 Nov 2018 12:07:07 +0100 Subject: [PATCH 2/2] Fixed test cases --- awx/main/models/inventory.py | 5 ++-- .../functional/api/test_script_endpoint.py | 1 + .../tests/functional/models/test_inventory.py | 27 +++++++------------ 3 files changed, 12 insertions(+), 21 deletions(-) diff --git a/awx/main/models/inventory.py b/awx/main/models/inventory.py index f59ec69a08..fbf69ce2a2 100644 --- a/awx/main/models/inventory.py +++ b/awx/main/models/inventory.py @@ -294,12 +294,11 @@ class Inventory(CommonModelNameNotUnique, ResourceMixin, RelatedJobsMixin): # Remove any empty groups for group_name in list(data.keys()): + if group_name == 'all': + continue if not (data.get(group_name, {}).get('hosts', []) or data.get(group_name, {}).get('children', [])): data.pop(group_name) - # Add the all group - data['all'] = all_group - if hostvars: data.setdefault('_meta', dict()) data['_meta'].setdefault('hostvars', dict()) diff --git a/awx/main/tests/functional/api/test_script_endpoint.py b/awx/main/tests/functional/api/test_script_endpoint.py index 4423d2347f..dd73e6d28f 100644 --- a/awx/main/tests/functional/api/test_script_endpoint.py +++ b/awx/main/tests/functional/api/test_script_endpoint.py @@ -13,6 +13,7 @@ def test_empty_inventory(post, get, admin_user, organization, group_factory): inventory.save() resp = get(reverse('api:inventory_script_view', kwargs={'version': 'v2', 'pk': inventory.pk}), admin_user) jdata = json.loads(resp.content) + jdata.pop('all') assert inventory.hosts.count() == 0 assert jdata == {} diff --git a/awx/main/tests/functional/models/test_inventory.py b/awx/main/tests/functional/models/test_inventory.py index 301330e9e4..537d6d0751 100644 --- a/awx/main/tests/functional/models/test_inventory.py +++ b/awx/main/tests/functional/models/test_inventory.py @@ -40,28 +40,17 @@ class TestInventoryScript: def test_all_group(self, inventory): inventory.groups.create(name='all', variables={'a1': 'a1'}) - g1 = inventory.groups.create(name='g1', variables={'v1': 'v1'}) - h1 = inventory.hosts.create(name='h1') - inventory.hosts.create(name='h2') - # h1 becomes member of g1 group - g1.hosts.add(h1) # make sure we return a1 details in output - data = inventory.get_script_data(hostvars=1) + data = inventory.get_script_data() assert 'all' in data - assert 'g1' in data - assert data['g1'] == { - 'hosts': ['h1'], - 'children': [], - 'vars': {'v1': 'v1'} - } assert data['all'] == { - 'hosts': ['h2'], - 'children': ['g1'], - 'vars': {'a1': 'a1'} + 'hosts': [], + 'children': [], + 'vars': { + 'a1': 'a1' + } } - - def test_grandparent_group(self, inventory): g1 = inventory.groups.create(name='g1', variables={'v1': 'v1'}) g2 = inventory.groups.create(name='g2', variables={'v2': 'v2'}) @@ -109,7 +98,9 @@ class TestInventoryScript: } if i < 2: expected_data['contains_two_hosts'] = {'hosts': ['host{}'.format(i)], 'children': [], 'vars': {}} - assert inventory.get_script_data(slice_number=i + 1, slice_count=3) == expected_data + data = inventory.get_script_data(slice_number=i + 1, slice_count=3) + data.pop('all') + assert data == expected_data @pytest.mark.django_db