diff --git a/lib/ansible/plugins/inventory/yaml.py b/lib/ansible/plugins/inventory/yaml.py index 062f7a235e..3b7777a5b1 100644 --- a/lib/ansible/plugins/inventory/yaml.py +++ b/lib/ansible/plugins/inventory/yaml.py @@ -49,7 +49,6 @@ all: # keys must be unique, i.e. only one 'hosts' per group last_var: MYVALUE ''' -import re import os from collections import MutableMapping @@ -106,8 +105,14 @@ class InventoryModule(BaseFileInventoryPlugin): if isinstance(group_data, MutableMapping): # make sure they are dicts for section in ['vars', 'children', 'hosts']: - if section in group_data and isinstance(group_data[section], string_types): - group_data[section] = {group_data[section]: None} + if section in group_data: + # convert strings to dicts as these are allowed + if isinstance(group_data[section], string_types): + group_data[section] = {group_data[section]: None} + + if not isinstance(group_data[section], MutableMapping): + raise AnsibleParserError('Invalid %s entry for %s group, requires a dictionary, found %s instead.' % + (section, group, type(group_data[section]))) if group_data.get('vars', False): for var in group_data['vars']: