From 7f0bf0a98ab1faa7fcae2e3101e9b4346c3e23cc Mon Sep 17 00:00:00 2001 From: Andrew Gaffney Date: Thu, 23 May 2019 08:42:44 -0500 Subject: [PATCH] Config toggle for duplicate dict key warnings (fixes #56799) (#56805) --- .../fragments/56805-duplicate-dict-key-warnings.yml | 3 +++ lib/ansible/config/base.yml | 11 +++++++++++ lib/ansible/parsing/yaml/constructor.py | 6 ++++-- 3 files changed, 18 insertions(+), 2 deletions(-) create mode 100644 changelogs/fragments/56805-duplicate-dict-key-warnings.yml diff --git a/changelogs/fragments/56805-duplicate-dict-key-warnings.yml b/changelogs/fragments/56805-duplicate-dict-key-warnings.yml new file mode 100644 index 0000000000..82715cc54b --- /dev/null +++ b/changelogs/fragments/56805-duplicate-dict-key-warnings.yml @@ -0,0 +1,3 @@ +--- +minor_changes: + - added config toggle for YAML duplicate dict key warnings diff --git a/lib/ansible/config/base.yml b/lib/ansible/config/base.yml index f91c72746f..5aaf8e30ee 100644 --- a/lib/ansible/config/base.yml +++ b/lib/ansible/config/base.yml @@ -1253,6 +1253,17 @@ DOCSITE_ROOT_URL: ini: - {key: docsite_root_url, section: defaults} 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: name: Missing handler error default: True diff --git a/lib/ansible/parsing/yaml/constructor.py b/lib/ansible/parsing/yaml/constructor.py index 1483db814b..ea7c38edac 100644 --- a/lib/ansible/parsing/yaml/constructor.py +++ b/lib/ansible/parsing/yaml/constructor.py @@ -22,6 +22,7 @@ __metaclass__ = type from yaml.constructor import SafeConstructor, ConstructorError from yaml.nodes import MappingNode +from ansible import constants as C from ansible.module_utils._text import to_bytes from ansible.parsing.yaml.objects import AnsibleMapping, AnsibleSequence, AnsibleUnicode from ansible.parsing.yaml.objects import AnsibleVaultEncryptedUnicode @@ -70,8 +71,9 @@ class AnsibleConstructor(SafeConstructor): "found unacceptable key (%s)" % exc, key_node.start_mark) if key in mapping: - 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)) + if C.DUPLICATE_DICT_KEY_WARNINGS: + 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) mapping[key] = value