diff --git a/lib/ansible/runner.py b/lib/ansible/runner.py index 135130c5750..b66535933f9 100644 --- a/lib/ansible/runner.py +++ b/lib/ansible/runner.py @@ -29,6 +29,7 @@ import tempfile import time import base64 import getpass +import codecs import ansible.constants as C import ansible.connection @@ -202,7 +203,7 @@ class Runner(object): afd, afile = tempfile.mkstemp() afo = os.fdopen(afd, 'w') - afo.write(data) + afo.write(data.encode("utf8")) afo.flush() afo.close() @@ -432,7 +433,6 @@ class Runner(object): # apply templating to source argument inject = self.setup_cache.get(conn.host,{}) - print source source = utils.template(source, inject, self.setup_cache) # files are saved in dest dir, with a subdir for each host, then the filename @@ -542,7 +542,7 @@ class Runner(object): copy_module = self._transfer_module(conn, tmp, 'copy') # template the source data locally - source_data = file(utils.path_dwim(self.basedir, source)).read() + source_data = codecs.open(utils.path_dwim(self.basedir, source), encoding="utf8").read() resultant = '' try: resultant = utils.template(source_data, inject, self.setup_cache) diff --git a/lib/ansible/utils.py b/lib/ansible/utils.py index 92c7aea7c18..1c396f30c38 100644 --- a/lib/ansible/utils.py +++ b/lib/ansible/utils.py @@ -21,6 +21,7 @@ import sys import os import shlex import re +import codecs import jinja2 import yaml import optparse @@ -233,7 +234,7 @@ def varReplace(raw, vars): def template(text, vars, setup_cache, no_engine=False): ''' run a text buffer through the templating engine ''' vars = vars.copy() - text = varReplace(str(text), vars) + text = varReplace(unicode(text), vars) vars['hostvars'] = setup_cache if no_engine: # used when processing include: directives so that Jinja is evaluated @@ -251,7 +252,7 @@ def double_template(text, vars, setup_cache): def template_from_file(path, vars, setup_cache, no_engine=False): ''' run a file through the templating engine ''' - data = file(path).read() + data = codecs.open(path, encoding="utf8").read() return template(data, vars, setup_cache, no_engine=no_engine) def parse_yaml(data):