summaryrefslogtreecommitdiffstats
path: root/ansible_collections/community/general/plugins/plugin_utils
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-26 04:05:57 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-26 04:05:57 +0000
commit0dcbb2c58231264c2f0a0374733b5e9cf8747e1f (patch)
tree7f133117f9ebecefdc96e42e01ee7557247d5d8a /ansible_collections/community/general/plugins/plugin_utils
parentAdding debian version 9.4.0+dfsg-1. (diff)
downloadansible-0dcbb2c58231264c2f0a0374733b5e9cf8747e1f.tar.xz
ansible-0dcbb2c58231264c2f0a0374733b5e9cf8747e1f.zip
Merging upstream version 9.5.1+dfsg.
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'ansible_collections/community/general/plugins/plugin_utils')
-rw-r--r--ansible_collections/community/general/plugins/plugin_utils/unsafe.py41
1 files changed, 41 insertions, 0 deletions
diff --git a/ansible_collections/community/general/plugins/plugin_utils/unsafe.py b/ansible_collections/community/general/plugins/plugin_utils/unsafe.py
new file mode 100644
index 000000000..1eb61bea0
--- /dev/null
+++ b/ansible_collections/community/general/plugins/plugin_utils/unsafe.py
@@ -0,0 +1,41 @@
+# Copyright (c) 2023, Felix Fontein <felix@fontein.de>
+# GNU General Public License v3.0+ (see LICENSES/GPL-3.0-or-later.txt or https://www.gnu.org/licenses/gpl-3.0.txt)
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+from __future__ import (absolute_import, division, print_function)
+__metaclass__ = type
+
+import re
+
+from ansible.module_utils.six import binary_type, text_type
+from ansible.module_utils.common._collections_compat import Mapping, Set
+from ansible.module_utils.common.collections import is_sequence
+from ansible.utils.unsafe_proxy import (
+ AnsibleUnsafe,
+ wrap_var as _make_unsafe,
+)
+
+_RE_TEMPLATE_CHARS = re.compile(u'[{}]')
+_RE_TEMPLATE_CHARS_BYTES = re.compile(b'[{}]')
+
+
+def make_unsafe(value):
+ if value is None or isinstance(value, AnsibleUnsafe):
+ return value
+
+ if isinstance(value, Mapping):
+ return dict((make_unsafe(key), make_unsafe(val)) for key, val in value.items())
+ elif isinstance(value, Set):
+ return set(make_unsafe(elt) for elt in value)
+ elif is_sequence(value):
+ return type(value)(make_unsafe(elt) for elt in value)
+ elif isinstance(value, binary_type):
+ if _RE_TEMPLATE_CHARS_BYTES.search(value):
+ value = _make_unsafe(value)
+ return value
+ elif isinstance(value, text_type):
+ if _RE_TEMPLATE_CHARS.search(value):
+ value = _make_unsafe(value)
+ return value
+
+ return value