handle groups correctly when they are 'null' (#41698)

* handle groups correctly when they are 'null'

 - even if defined as mapping but having no keys, objects shoudl still be processed correctly
 - also add ansilbe_verbosity to vars not to display in ansible-inventory

fixes #41692
pull/41741/head
Brian Coca 6 years ago committed by GitHub
parent e91cee1a31
commit 05a49d6eb6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -42,6 +42,7 @@ INTERNAL_VARS = frozenset(['ansible_diff_mode',
'ansible_playbook_python', 'ansible_playbook_python',
'ansible_run_tags', 'ansible_run_tags',
'ansible_skip_tags', 'ansible_skip_tags',
'ansible_verbosity',
'ansible_version', 'ansible_version',
'inventory_dir', 'inventory_dir',
'inventory_file', 'inventory_file',

@ -59,6 +59,7 @@ all: # keys must be unique, i.e. only one 'hosts' per group
''' '''
import os import os
from collections import MutableMapping from collections import MutableMapping
from ansible.errors import AnsibleParserError from ansible.errors import AnsibleParserError
@ -112,10 +113,11 @@ class InventoryModule(BaseFileInventoryPlugin):
def _parse_group(self, group, group_data): def _parse_group(self, group, group_data):
if isinstance(group_data, MutableMapping): if isinstance(group_data, (MutableMapping, type(None))):
self.inventory.add_group(group) self.inventory.add_group(group)
if group_data is not None:
# make sure they are dicts # make sure they are dicts
for section in ['vars', 'children', 'hosts']: for section in ['vars', 'children', 'hosts']:
if section in group_data: if section in group_data:
@ -123,7 +125,7 @@ class InventoryModule(BaseFileInventoryPlugin):
if isinstance(group_data[section], string_types): if isinstance(group_data[section], string_types):
group_data[section] = {group_data[section]: None} group_data[section] = {group_data[section]: None}
if not isinstance(group_data[section], MutableMapping): if not isinstance(group_data[section], (MutableMapping, type(None))):
raise AnsibleParserError('Invalid "%s" entry for "%s" group, requires a dictionary, found "%s" instead.' % raise AnsibleParserError('Invalid "%s" entry for "%s" group, requires a dictionary, found "%s" instead.' %
(section, group, type(group_data[section]))) (section, group, type(group_data[section])))

Loading…
Cancel
Save