summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Krizek <martin.krizek@gmail.com>2020-10-21 22:32:45 +0200
committerGitHub <noreply@github.com>2020-10-21 15:32:45 -0500
commitd53d247c84f9499f5a7f7014484ade81ffbc39f0 (patch)
treeece4e43f2feb53bccbd958ff7f8fe7f42b16314c
parentcd89aadec10000d647de88af200441f52fb9ddca (diff)
downloadansible-d53d247c84f9499f5a7f7014484ade81ffbc39f0.tar.gz
Only apply the unroll wrapper once (#72003) (#72017)
Co-authored-by: Matt Martz <matt@sivel.net> Fixes #71920 (cherry picked from commit 419766617956440512f8c32d2fd278fae9799c1e)
-rw-r--r--changelogs/fragments/71920-fix-templating-recursion-error.yml2
-rw-r--r--lib/ansible/template/__init__.py4
2 files changed, 5 insertions, 1 deletions
diff --git a/changelogs/fragments/71920-fix-templating-recursion-error.yml b/changelogs/fragments/71920-fix-templating-recursion-error.yml
new file mode 100644
index 0000000000..b7ee60af99
--- /dev/null
+++ b/changelogs/fragments/71920-fix-templating-recursion-error.yml
@@ -0,0 +1,2 @@
+bugfixes:
+ - Fix ``RecursionError`` when templating large vars structures (https://github.com/ansible/ansible/issues/71920)
diff --git a/lib/ansible/template/__init__.py b/lib/ansible/template/__init__.py
index e19c91ff6a..e1884c9461 100644
--- a/lib/ansible/template/__init__.py
+++ b/lib/ansible/template/__init__.py
@@ -257,6 +257,7 @@ def _unroll_iterator(func):
return list(ret)
return ret
+ wrapper.__UNROLLED__ = True
return _update_wrapper(wrapper, func)
@@ -1025,7 +1026,8 @@ class Templar:
# Adds Ansible custom filters and tests
myenv.filters.update(self._get_filters())
for k in myenv.filters:
- myenv.filters[k] = _unroll_iterator(myenv.filters[k])
+ if not getattr(myenv.filters[k], '__UNROLLED__', False):
+ myenv.filters[k] = _unroll_iterator(myenv.filters[k])
myenv.tests.update(self._get_tests())
if escape_backslashes: