diff options
author | Martin Krizek <martin.krizek@gmail.com> | 2020-10-21 22:32:45 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-10-21 15:32:45 -0500 |
commit | d53d247c84f9499f5a7f7014484ade81ffbc39f0 (patch) | |
tree | ece4e43f2feb53bccbd958ff7f8fe7f42b16314c | |
parent | cd89aadec10000d647de88af200441f52fb9ddca (diff) | |
download | ansible-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.yml | 2 | ||||
-rw-r--r-- | lib/ansible/template/__init__.py | 4 |
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: |