Config toggle for duplicate dict key warnings (fixes #56799) (#56805)

This commit is contained in:
Andrew Gaffney 2019-05-23 08:42:44 -05:00 committed by GitHub
parent 1da47bfa8c
commit 7f0bf0a98a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 18 additions and 2 deletions

View file

@ -0,0 +1,3 @@
---
minor_changes:
- added config toggle for YAML duplicate dict key warnings

View file

@ -1253,6 +1253,17 @@ DOCSITE_ROOT_URL:
ini: ini:
- {key: docsite_root_url, section: defaults} - {key: docsite_root_url, section: defaults}
version_added: "2.8" version_added: "2.8"
DUPLICATE_DICT_KEY_WARNINGS:
name: Toggle warnings for duplicate dict keys in YAML
default: True
description:
- By default Ansible will issue a warning when a duplicate dict key is encountered in YAML.
- These warnings can be silenced by adjusting this setting to False.
env: [{name: ANSIBLE_DUPLICATE_DICT_KEY_WARNINGS}]
ini:
- {key: duplicate_dict_key_warnings, section: defaults}
type: boolean
version_added: "2.9"
ERROR_ON_MISSING_HANDLER: ERROR_ON_MISSING_HANDLER:
name: Missing handler error name: Missing handler error
default: True default: True

View file

@ -22,6 +22,7 @@ __metaclass__ = type
from yaml.constructor import SafeConstructor, ConstructorError from yaml.constructor import SafeConstructor, ConstructorError
from yaml.nodes import MappingNode from yaml.nodes import MappingNode
from ansible import constants as C
from ansible.module_utils._text import to_bytes from ansible.module_utils._text import to_bytes
from ansible.parsing.yaml.objects import AnsibleMapping, AnsibleSequence, AnsibleUnicode from ansible.parsing.yaml.objects import AnsibleMapping, AnsibleSequence, AnsibleUnicode
from ansible.parsing.yaml.objects import AnsibleVaultEncryptedUnicode from ansible.parsing.yaml.objects import AnsibleVaultEncryptedUnicode
@ -70,8 +71,9 @@ class AnsibleConstructor(SafeConstructor):
"found unacceptable key (%s)" % exc, key_node.start_mark) "found unacceptable key (%s)" % exc, key_node.start_mark)
if key in mapping: if key in mapping:
display.warning(u'While constructing a mapping from {1}, line {2}, column {3}, found a duplicate dict key ({0}).' if C.DUPLICATE_DICT_KEY_WARNINGS:
u' Using last defined value only.'.format(key, *mapping.ansible_pos)) display.warning(u'While constructing a mapping from {1}, line {2}, column {3}, found a duplicate dict key ({0}).'
u' Using last defined value only.'.format(key, *mapping.ansible_pos))
value = self.construct_object(value_node, deep=deep) value = self.construct_object(value_node, deep=deep)
mapping[key] = value mapping[key] = value