mirror of
https://github.com/ansible-collections/community.general.git
synced 2024-09-14 20:13:21 +02:00
Fix some subtle things that were keeping 'hostvars' from being usable in templates.
This commit is contained in:
parent
2b6d8a8be5
commit
2d06ee4c0d
2 changed files with 14 additions and 13 deletions
|
@ -335,11 +335,13 @@ class Runner(object):
|
|||
if not found:
|
||||
results=dict(failed=True, msg="could not find src in first_available_file list")
|
||||
return ReturnData(host=conn.host, results=results)
|
||||
|
||||
if self.module_vars is not None:
|
||||
inject.update(self.module_vars)
|
||||
|
||||
if self.module_vars is None:
|
||||
self.module_vars = {}
|
||||
lookup_table = self.module_vars.copy()
|
||||
lookup_table.update(inject)
|
||||
|
||||
source = utils.template(source, inject)
|
||||
source = utils.template(source, lookup_table)
|
||||
source = utils.path_dwim(self.basedir, source)
|
||||
|
||||
local_md5 = utils.md5(source)
|
||||
|
@ -361,7 +363,7 @@ class Runner(object):
|
|||
|
||||
# run the copy module
|
||||
args = "src=%s dest=%s" % (tmp_src, dest)
|
||||
exec_rc = self._execute_module(conn, tmp, module, args, inject=inject)
|
||||
exec_rc = self._execute_module(conn, tmp, module, args, inject=lookup_table)
|
||||
else:
|
||||
# no need to transfer the file, already correct md5
|
||||
result = dict(changed=False, md5sum=remote_md5, transferred=False)
|
||||
|
@ -440,7 +442,6 @@ class Runner(object):
|
|||
options = utils.parse_kv(self.module_args)
|
||||
source = options.get('src', None)
|
||||
dest = options.get('dest', None)
|
||||
metadata = options.get('metadata', None)
|
||||
if (source is None and 'first_available_file' not in self.module_vars) or dest is None:
|
||||
result = dict(failed=True, msg="src and dest are required")
|
||||
return ReturnData(host=conn.host, comm_ok=False, result=result)
|
||||
|
@ -459,17 +460,19 @@ class Runner(object):
|
|||
result = dict(failed=True, msg="could not find src in first_available_file list")
|
||||
return ReturnData(host=conn.host, comm_ok=False, result=result)
|
||||
|
||||
if self.module_vars is not None:
|
||||
inject.update(self.module_vars)
|
||||
if self.module_vars is None:
|
||||
self.module_vars = {}
|
||||
lookup_table = self.module_vars.copy()
|
||||
lookup_table.update(inject)
|
||||
|
||||
source = utils.template(source, inject)
|
||||
source = utils.template(source, lookup_table)
|
||||
|
||||
# install the template module
|
||||
copy_module = self._transfer_module(conn, tmp, 'copy')
|
||||
|
||||
# template the source data locally
|
||||
try:
|
||||
resultant = utils.template_from_file(self.basedir, source, inject)
|
||||
resultant = utils.template_from_file(self.basedir, source, lookup_table)
|
||||
except Exception, e:
|
||||
result = dict(failed=True, msg=str(e))
|
||||
return ReturnData(host=conn.host, comm_ok=False, result=result)
|
||||
|
@ -478,7 +481,7 @@ class Runner(object):
|
|||
|
||||
# run the COPY module
|
||||
args = "src=%s dest=%s" % (xfered, dest)
|
||||
exec_rc = self._execute_module(conn, tmp, copy_module, args, inject=inject)
|
||||
exec_rc = self._execute_module(conn, tmp, copy_module, args, inject=lookup_table)
|
||||
|
||||
# modify file attribs if needed
|
||||
if exec_rc.is_successful():
|
||||
|
|
|
@ -211,9 +211,7 @@ def template_from_file(basedir, path, vars):
|
|||
environment = jinja2.Environment(loader=jinja2.FileSystemLoader(basedir), trim_blocks=False)
|
||||
data = codecs.open(path_dwim(basedir, path), encoding="utf8").read()
|
||||
t = environment.from_string(data)
|
||||
# FIXME: possibly a bit inefficient here, do this in runner code
|
||||
vars = vars.copy()
|
||||
vars['hostvars'] = vars.get('setup_cache',{})
|
||||
res = t.render(vars)
|
||||
if data.endswith('\n') and not res.endswith('\n'):
|
||||
res = res + '\n'
|
||||
|
|
Loading…
Reference in a new issue