mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
Fine tune sanity (#53544)
* modify regex to use implicit charsets this should solve issues in py3 and unicode names * fix issue with subgroups in yaml inventory * clarify deprecation message * separated per name warning from deprecation * move noise to verbosity, simplify warnings * fix docs to reflect actual 'good' practice * change toggle to choice list to give users more options
This commit is contained in:
parent
86ba4f3e46
commit
9b67219096
5 changed files with 40 additions and 22 deletions
|
@ -140,40 +140,40 @@ It is suggested that you define groups based on purpose of the host (roles) and
|
||||||
|
|
||||||
# file: production
|
# file: production
|
||||||
|
|
||||||
[atlanta-webservers]
|
[atlanta_webservers]
|
||||||
www-atl-1.example.com
|
www-atl-1.example.com
|
||||||
www-atl-2.example.com
|
www-atl-2.example.com
|
||||||
|
|
||||||
[boston-webservers]
|
[boston_webservers]
|
||||||
www-bos-1.example.com
|
www-bos-1.example.com
|
||||||
www-bos-2.example.com
|
www-bos-2.example.com
|
||||||
|
|
||||||
[atlanta-dbservers]
|
[atlanta_dbservers]
|
||||||
db-atl-1.example.com
|
db-atl-1.example.com
|
||||||
db-atl-2.example.com
|
db-atl-2.example.com
|
||||||
|
|
||||||
[boston-dbservers]
|
[boston_dbservers]
|
||||||
db-bos-1.example.com
|
db-bos-1.example.com
|
||||||
|
|
||||||
# webservers in all geos
|
# webservers in all geos
|
||||||
[webservers:children]
|
[webservers:children]
|
||||||
atlanta-webservers
|
atlanta_webservers
|
||||||
boston-webservers
|
boston_webservers
|
||||||
|
|
||||||
# dbservers in all geos
|
# dbservers in all geos
|
||||||
[dbservers:children]
|
[dbservers:children]
|
||||||
atlanta-dbservers
|
atlanta_dbservers
|
||||||
boston-dbservers
|
boston_dbservers
|
||||||
|
|
||||||
# everything in the atlanta geo
|
# everything in the atlanta geo
|
||||||
[atlanta:children]
|
[atlanta:children]
|
||||||
atlanta-webservers
|
atlanta_webservers
|
||||||
atlanta-dbservers
|
atlanta_dbservers
|
||||||
|
|
||||||
# everything in the boston geo
|
# everything in the boston geo
|
||||||
[boston:children]
|
[boston:children]
|
||||||
boston-webservers
|
boston_webservers
|
||||||
boston-dbservers
|
boston_dbservers
|
||||||
|
|
||||||
.. _groups_and_hosts:
|
.. _groups_and_hosts:
|
||||||
|
|
||||||
|
|
|
@ -1467,15 +1467,17 @@ INTERPRETER_PYTHON_FALLBACK:
|
||||||
version_added: "2.8"
|
version_added: "2.8"
|
||||||
TRANSFORM_INVALID_GROUP_CHARS:
|
TRANSFORM_INVALID_GROUP_CHARS:
|
||||||
name: Transform invalid characters in group names
|
name: Transform invalid characters in group names
|
||||||
default: False
|
default: 'never'
|
||||||
description:
|
description:
|
||||||
- Make ansible transform invalid characters in group names supplied by inventory sources.
|
- Make ansible transform invalid characters in group names supplied by inventory sources.
|
||||||
- If 'false' it will allow for the group name but warn about the issue.
|
- If 'never' it will allow for the group name but warn about the issue.
|
||||||
- When 'true' it will replace any invalid charachters with '_' (underscore).
|
- When 'always' it will replace any invalid charachters with '_' (underscore) and warn the user
|
||||||
|
- When 'silently', it does the same as 'always' sans the warnings.
|
||||||
env: [{name: ANSIBLE_TRANSFORM_INVALID_GROUP_CHARS}]
|
env: [{name: ANSIBLE_TRANSFORM_INVALID_GROUP_CHARS}]
|
||||||
ini:
|
ini:
|
||||||
- {key: force_valid_group_names, section: defaults}
|
- {key: force_valid_group_names, section: defaults}
|
||||||
type: bool
|
type: string
|
||||||
|
choices: ['always', 'never', 'silently']
|
||||||
version_added: '2.8'
|
version_added: '2.8'
|
||||||
INVALID_TASK_ATTRIBUTE_FAILED:
|
INVALID_TASK_ATTRIBUTE_FAILED:
|
||||||
name: Controls whether invalid attributes for a task result in errors instead of warnings
|
name: Controls whether invalid attributes for a task result in errors instead of warnings
|
||||||
|
|
|
@ -119,7 +119,8 @@ VAULT_VERSION_MIN = 1.0
|
||||||
VAULT_VERSION_MAX = 1.0
|
VAULT_VERSION_MAX = 1.0
|
||||||
|
|
||||||
# This matches a string that cannot be used as a valid python variable name i.e 'not-valid', 'not!valid@either' '1_nor_This'
|
# This matches a string that cannot be used as a valid python variable name i.e 'not-valid', 'not!valid@either' '1_nor_This'
|
||||||
INVALID_VARIABLE_NAMES = re.compile(r'^[^a-zA-Z_]|[^a-zA-Z0-9_]')
|
INVALID_VARIABLE_NAMES = re.compile(r'^[\d\W]|[^\w]')
|
||||||
|
|
||||||
|
|
||||||
# FIXME: remove once play_context mangling is removed
|
# FIXME: remove once play_context mangling is removed
|
||||||
# the magic variable mapping dictionary below is used to translate
|
# the magic variable mapping dictionary below is used to translate
|
||||||
|
|
|
@ -31,16 +31,29 @@ display = Display()
|
||||||
def to_safe_group_name(name, replacer="_", force=False, silent=False):
|
def to_safe_group_name(name, replacer="_", force=False, silent=False):
|
||||||
# Converts 'bad' characters in a string to underscores (or provided replacer) so they can be used as Ansible hosts or groups
|
# Converts 'bad' characters in a string to underscores (or provided replacer) so they can be used as Ansible hosts or groups
|
||||||
|
|
||||||
|
warn = ''
|
||||||
if name: # when deserializing we might not have name yet
|
if name: # when deserializing we might not have name yet
|
||||||
invalid_chars = C.INVALID_VARIABLE_NAMES.findall(name)
|
invalid_chars = C.INVALID_VARIABLE_NAMES.findall(name)
|
||||||
if invalid_chars:
|
if invalid_chars:
|
||||||
msg = 'invalid character(s) "%s" in group name (%s)' % (to_text(set(invalid_chars)), to_text(name))
|
msg = 'invalid character(s) "%s" in group name (%s)' % (to_text(set(invalid_chars)), to_text(name))
|
||||||
if C.TRANSFORM_INVALID_GROUP_CHARS or force:
|
if C.TRANSFORM_INVALID_GROUP_CHARS not in ('never', 'ignore') or force:
|
||||||
name = C.INVALID_VARIABLE_NAMES.sub(replacer, name)
|
name = C.INVALID_VARIABLE_NAMES.sub(replacer, name)
|
||||||
if not silent:
|
if not (silent or C.TRANSFORM_INVALID_GROUP_CHARS == 'silently'):
|
||||||
display.warning('Replacing ' + msg)
|
display.vvvv('Replacing ' + msg)
|
||||||
|
warn = 'Invalid characters were found in group names and automatically replaced, use -vvvv to see details'
|
||||||
else:
|
else:
|
||||||
display.deprecated('Ignoring ' + msg, version='2.12')
|
if C.TRANSFORM_INVALID_GROUP_CHARS == 'never':
|
||||||
|
display.vvvv('Not replacing %s' % msg)
|
||||||
|
warn = True
|
||||||
|
warn = 'Invalid characters were found in group names but not replaced, use -vvvv to see details'
|
||||||
|
|
||||||
|
# remove this message after 2.10 AND changing the default to 'always'
|
||||||
|
display.deprecated('The TRANSFORM_INVALID_GROUP_CHARS settings is set to allow bad characters in group names by default,'
|
||||||
|
' this will change, but still be user configurable on deprecation', version='2.10')
|
||||||
|
|
||||||
|
if warn:
|
||||||
|
display.warning(warn)
|
||||||
|
|
||||||
return name
|
return name
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -153,7 +153,7 @@ class InventoryModule(BaseFileInventoryPlugin):
|
||||||
self.inventory.set_variable(group, var, group_data[key][var])
|
self.inventory.set_variable(group, var, group_data[key][var])
|
||||||
elif key == 'children':
|
elif key == 'children':
|
||||||
for subgroup in group_data[key]:
|
for subgroup in group_data[key]:
|
||||||
self._parse_group(subgroup, group_data[key][subgroup])
|
subgroup = self._parse_group(subgroup, group_data[key][subgroup])
|
||||||
self.inventory.add_child(group, subgroup)
|
self.inventory.add_child(group, subgroup)
|
||||||
|
|
||||||
elif key == 'hosts':
|
elif key == 'hosts':
|
||||||
|
@ -166,6 +166,8 @@ class InventoryModule(BaseFileInventoryPlugin):
|
||||||
else:
|
else:
|
||||||
self.display.warning("Skipping '%s' as this is not a valid group definition" % group)
|
self.display.warning("Skipping '%s' as this is not a valid group definition" % group)
|
||||||
|
|
||||||
|
return group
|
||||||
|
|
||||||
def _parse_host(self, host_pattern):
|
def _parse_host(self, host_pattern):
|
||||||
'''
|
'''
|
||||||
Each host key can be a pattern, try to process it and add variables as needed
|
Each host key can be a pattern, try to process it and add variables as needed
|
||||||
|
|
Loading…
Reference in a new issue