From 956b6ece86e83df6cb9407633254f2b49998f3a5 Mon Sep 17 00:00:00 2001 From: Brian Coca Date: Thu, 21 Sep 2017 22:22:01 -0400 Subject: [PATCH] dont validate group names in yaml plugin (cherry picked from commit a819cfcad79120987b41a4171205dfe7794cb57b) --- CHANGELOG.md | 1 + lib/ansible/plugins/inventory/yaml.py | 47 ++++++++++----------------- 2 files changed, 18 insertions(+), 30 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4784e906e1f..08261befd29 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -37,6 +37,7 @@ Ansible Changes By Release * Fix module doc for typo in telnet command option * Fix OpenBSD pkg_mgr fact (https://github.com/ansible/ansible/issues/30623) * Fix encoding error when there are nonascii values in the path to the ssh binary +* removed YAML inventory group name validation, broke existing setups and should be global in any case, and configurable diff --git a/lib/ansible/plugins/inventory/yaml.py b/lib/ansible/plugins/inventory/yaml.py index 8d5c457341c..ae964aa1d71 100644 --- a/lib/ansible/plugins/inventory/yaml.py +++ b/lib/ansible/plugins/inventory/yaml.py @@ -68,9 +68,6 @@ class InventoryModule(BaseFileInventoryPlugin): def __init__(self): super(InventoryModule, self).__init__() - self.patterns = {} - - self._compile_patterns() def verify_file(self, path): @@ -104,31 +101,27 @@ class InventoryModule(BaseFileInventoryPlugin): def _parse_group(self, group, group_data): - if self.patterns['groupname'].match(group): + self.inventory.add_group(group) - self.inventory.add_group(group) + 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 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 group_data.get('vars', False): + for var in group_data['vars']: + self.inventory.set_variable(group, var, group_data['vars'][var]) - if group_data.get('vars', False): - for var in group_data['vars']: - self.inventory.set_variable(group, var, group_data['vars'][var]) + if group_data.get('children', False): + for subgroup in group_data['children']: + self._parse_group(subgroup, group_data['children'][subgroup]) + self.inventory.add_child(group, subgroup) - if group_data.get('children', False): - for subgroup in group_data['children']: - self._parse_group(subgroup, group_data['children'][subgroup]) - self.inventory.add_child(group, subgroup) - - if group_data.get('hosts', False): - for host_pattern in group_data['hosts']: - hosts, port = self._parse_host(host_pattern) - self.populate_host_vars(hosts, group_data['hosts'][host_pattern] or {}, group, port) - else: - self.display.warning("Skipping '%s' as this is not a valid group name" % group) + if group_data.get('hosts', False): + for host_pattern in group_data['hosts']: + hosts, port = self._parse_host(host_pattern) + self.populate_host_vars(hosts, group_data['hosts'][host_pattern] or {}, group, port) def _parse_host(self, host_pattern): ''' @@ -162,9 +155,3 @@ class InventoryModule(BaseFileInventoryPlugin): hostnames = [pattern] return (hostnames, port) - - def _compile_patterns(self): - ''' - Compiles the regular expressions required to parse the inventory and stores them in self.patterns. - ''' - self.patterns['groupname'] = re.compile(u'''^[A-Za-z_][A-Za-z0-9_]*$''')