diff --git a/lib/ansible/template/__init__.py b/lib/ansible/template/__init__.py index 67a08f16447..31d60a1d3d1 100644 --- a/lib/ansible/template/__init__.py +++ b/lib/ansible/template/__init__.py @@ -310,7 +310,9 @@ class Templar: return C.DEFAULT_NULL_REPRESENTATION # Using a cache in order to prevent template calls with already templated variables - sha1_hash = sha1(variable.encode('utf-8') + str(preserve_trailing_newlines) + str(escape_backslashes) + str(fail_on_undefined) + str(overrides)).hexdigest() + variable_hash = sha1(text_type(variable).encode('utf-8')) + options_hash = sha1((text_type(preserve_trailing_newlines) + text_type(escape_backslashes) + text_type(fail_on_undefined) + text_type(overrides)).encode('utf-8')) + sha1_hash = variable_hash.hexdigest() + options_hash.hexdigest() if sha1_hash in self._cached_result: result = self._cached_result[sha1_hash] else: diff --git a/lib/ansible/vars/hostvars.py b/lib/ansible/vars/hostvars.py index ff7fa84fb6c..bba46075efe 100644 --- a/lib/ansible/vars/hostvars.py +++ b/lib/ansible/vars/hostvars.py @@ -76,7 +76,7 @@ class HostVars(collections.Mapping): data = self._variable_manager.get_vars(loader=self._loader, host=host, play=self._play, include_hostvars=False) # Using cache in order to avoid template call - sha1_hash = sha1(str(data)).hexdigest() + sha1_hash = sha1(str(data).encode('utf-8')).hexdigest() if sha1_hash in self._cached_result: result = self._cached_result[sha1_hash] else: