diff --git a/lib/ansible/runner/action_plugins/copy.py b/lib/ansible/runner/action_plugins/copy.py index def52b7db28..b1e5bac8359 100644 --- a/lib/ansible/runner/action_plugins/copy.py +++ b/lib/ansible/runner/action_plugins/copy.py @@ -18,7 +18,7 @@ import os from ansible import utils -from ansible import template +import ansible.utils.template as template from ansible import errors from ansible.runner.return_data import ReturnData import base64 diff --git a/lib/ansible/utils/template.py b/lib/ansible/utils/template.py index c1ed6d0e3ff..e38fd0dfa0f 100644 --- a/lib/ansible/utils/template.py +++ b/lib/ansible/utils/template.py @@ -23,6 +23,7 @@ from jinja2.runtime import StrictUndefined import yaml import json from ansible import errors +import ansible.utils as utils import ansible.constants as C import time import subprocess @@ -174,7 +175,8 @@ def _legacy_varFind(basedir, text, vars, lookup_fatal, depth, expand_lists): lookup_plugin_name, args = args.split(",", 1) args = args.strip() # args have to be templated - args = varReplace(basedir, args, vars, lookup_fatal, depth + 1, True) + args = legacy_varReplace(basedir, args, vars, lookup_fatal, depth + 1, True) + instance = utils.plugins.lookup_loader.get(lookup_plugin_name.lower(), basedir=basedir) if instance is not None: try: @@ -186,6 +188,7 @@ def _legacy_varFind(basedir, text, vars, lookup_fatal, depth, expand_lists): replacement = None else: raise + else: replacement = None return {'replacement': replacement, 'start': start, 'end': end} @@ -222,7 +225,7 @@ def legacy_varReplace(basedir, raw, vars, lookup_fatal=True, depth=0, expand_lis if expand_lists and isinstance(replacement, (list, tuple)): replacement = ",".join([str(x) for x in replacement]) if isinstance(replacement, (str, unicode)): - replacement = varReplace(basedir, replacement, vars, lookup_fatal, depth=depth+1, expand_lists=expand_lists) + replacement = legacy_varReplace(basedir, replacement, vars, lookup_fatal, depth=depth+1, expand_lists=expand_lists) if replacement is None: replacement = raw[m['start']:m['end']] @@ -436,10 +439,14 @@ def template_from_string(basedir, data, vars): else: return data - def test_foo(): - return 'test_foo!' - - t.globals['test_foo'] = test_foo + def lookup(name, *args, **kwargs): + instance = utils.plugins.lookup_loader.get(name.lower(), basedir=basedir) + if instance is not None: + return ",".join(instance.run(*args, inject=vars, **kwargs)) + else: + raise errors.AnsibleError("lookup plugin (%s) not found" % name) + + t.globals['lookup'] = lookup res = jinja2.utils.concat(t.root_render_func(t.new_context(_jinja2_vars(basedir, vars, t.globals), shared=True))) return res diff --git a/test/TestUtils.py b/test/TestUtils.py index c1d5870cddc..1a3d488985e 100644 --- a/test/TestUtils.py +++ b/test/TestUtils.py @@ -3,7 +3,7 @@ import unittest import ansible.utils -import ansible.template as template +import ansible.utils.template as template2 class TestUtils(unittest.TestCase): @@ -16,14 +16,14 @@ class TestUtils(unittest.TestCase): 'who': 'world', } - res = ansible.utils.varReplace(None, template, vars) + res = template2.legacy_varReplace(None, template, vars) assert res == 'hello world' def test_varReplace_trailing_dollar(self): template = '$what $who $' vars = dict(what='hello', who='world') - res = ansible.utils.varReplace(None, template, vars) + res = template2.legacy_varReplace(None, template, vars) assert res == 'hello world $' def test_varReplace_multiple(self): @@ -33,7 +33,7 @@ class TestUtils(unittest.TestCase): 'who': 'world', } - res = ansible.utils.varReplace(None, template, vars) + res = template2.legacy_varReplace(None, template, vars) assert res == 'hello world' @@ -43,7 +43,7 @@ class TestUtils(unittest.TestCase): 'whoVar': 'world', } - res = ansible.utils.varReplace(None, template, vars) + res = template2.legacy_varReplace(None, template, vars) print res assert res == 'hello world' @@ -53,7 +53,7 @@ class TestUtils(unittest.TestCase): 'who': 'world', } - res = ansible.utils.varReplace(None, template, vars) + res = template2.legacy_varReplace(None, template, vars) assert res == 'hello world!' @@ -63,7 +63,7 @@ class TestUtils(unittest.TestCase): 'who': 'world', } - res = ansible.utils.varReplace(None, template, vars) + res = template2.legacy_varReplace(None, template, vars) assert res == 'hello world' @@ -73,7 +73,7 @@ class TestUtils(unittest.TestCase): 'who': 'world', } - res = ansible.utils.varReplace(None, template, vars) + res = template2.legacy_varReplace(None, template, vars) assert res == 'hello world}' @@ -83,7 +83,7 @@ class TestUtils(unittest.TestCase): 'who': 'world', } - res = ansible.utils.varReplace(None, template, vars) + res = template2.legacy_varReplace(None, template, vars) assert res == template @@ -93,7 +93,7 @@ class TestUtils(unittest.TestCase): 'who': 'world', } - res = ansible.utils.varReplace(None, template, vars) + res = template2.legacy_varReplace(None, template, vars) assert res == 'hello world }' @@ -105,7 +105,7 @@ class TestUtils(unittest.TestCase): }, } - res = ansible.utils.varReplace(None, template, vars) + res = template2.legacy_varReplace(None, template, vars) print res assert res == template @@ -118,7 +118,7 @@ class TestUtils(unittest.TestCase): }, } - res = ansible.utils.varReplace(None, template, vars) + res = template2.legacy_varReplace(None, template, vars) assert res == 'hello world' @@ -131,7 +131,7 @@ class TestUtils(unittest.TestCase): 'what': 'hello', } - res = ansible.utils.varReplace(None, template, vars) + res = template2.legacy_varReplace(None, template, vars) assert res == 'hello 2' @@ -141,7 +141,7 @@ class TestUtils(unittest.TestCase): 'who': u'wórld', } - res = ansible.utils.varReplace(None, template, vars) + res = template2.legacy_varReplace(None, template, vars) assert res == u'hello wórld' @@ -151,7 +151,7 @@ class TestUtils(unittest.TestCase): 'data': [ 'no-one', 'world' ] } - res = ansible.utils.varReplace(None, template, vars) + res = template2.legacy_varReplace(None, template, vars) assert res == 'hello world' @@ -161,7 +161,7 @@ class TestUtils(unittest.TestCase): 'data': [ 'no-one', 'world' ] } - res = ansible.utils.varReplace(None, template, vars) + res = template2.legacy_varReplace(None, template, vars) assert res == template @@ -171,7 +171,7 @@ class TestUtils(unittest.TestCase): 'data': [ 'no-one', 'world' ] } - res = ansible.utils.varReplace(None, template, vars) + res = template2.legacy_varReplace(None, template, vars) assert res == template @@ -181,7 +181,7 @@ class TestUtils(unittest.TestCase): 'data': { 'no-one': 0, 'world': 1 } } - res = ansible.utils.varReplace(None, template, vars) + res = template2.legacy_varReplace(None, template, vars) assert res == template @@ -191,7 +191,7 @@ class TestUtils(unittest.TestCase): 'data': [ 'no-one', {'msg': [ 'world'] } ] } - res = ansible.utils.varReplace(None, template, vars) + res = template2.legacy_varReplace(None, template, vars) assert res == 'hello world' @@ -202,7 +202,7 @@ class TestUtils(unittest.TestCase): } template = '${foo}${bar}' - res = ansible.utils.varReplace(None, template, vars) + res = template2.legacy_varReplace(None, template, vars) assert res == 'foobar' def test_varReplace_escape_dot(self): @@ -215,7 +215,7 @@ class TestUtils(unittest.TestCase): } template = '${hostvars.{test.example.com}.foo}' - res = ansible.utils.varReplace(None, template, vars) + res = template2.legacy_varReplace(None, template, vars) assert res == 'bar' def test_varReplace_list_join(self): @@ -228,7 +228,7 @@ class TestUtils(unittest.TestCase): } template = 'yum pkg=${list} state=installed' - res = ansible.utils.varReplace(None, template, vars, expand_lists=True) + res = template2.legacy_varReplace(None, template, vars, expand_lists=True) assert res == 'yum pkg=foo,bar,baz state=installed' def test_varReplace_escaped_var(self): @@ -236,7 +236,7 @@ class TestUtils(unittest.TestCase): 'foo': 'bar', } template = 'action \$foo' - res = ansible.utils.varReplace(None, template, vars) + res = template2.legacy_varReplace(None, template, vars) assert res == 'action $foo' def test_varReplace_var_part(self): @@ -247,7 +247,7 @@ class TestUtils(unittest.TestCase): 'key': 'bar', } template = 'test ${foo.$key}' - res = ansible.utils.varReplace(None, template, vars) + res = template2.legacy_varReplace(None, template, vars) assert res == 'test result' def test_varReplace_var_partial_part(self): @@ -258,7 +258,7 @@ class TestUtils(unittest.TestCase): 'key': 'bar', } template = 'test ${foo.${key}baz}' - res = ansible.utils.varReplace(None, template, vars) + res = template2.legacy_varReplace(None, template, vars) assert res == 'test result' def test_varReplace_var_complex_var(self): @@ -269,7 +269,7 @@ class TestUtils(unittest.TestCase): }, } template = '${x.foo}' - res = template.template(None, template, vars) + res = template2.template(None, template, vars) assert res == 'result' def test_template_varReplace_iterated(self): @@ -279,21 +279,21 @@ class TestUtils(unittest.TestCase): 'person': 'one', } - res = template.template(None, template, vars) + res = template2.template(None, template, vars) assert res == u'hello oh great one' def test_varReplace_include(self): template = 'hello $FILE(world) $LOOKUP(file, $filename)' - res = template.template("test", template, {'filename': 'world'}, expand_lists=True) + res = template2.template("test", template, {'filename': 'world'}, expand_lists=True) assert res == u'hello world world' def test_varReplace_include_script(self): template = 'hello $PIPE(echo world) $LOOKUP(pipe, echo world)' - res = template.template("test", template, {}, expand_lists=True) + res = template2.template("test", template, {}, expand_lists=True) assert res == u'hello world world' @@ -325,19 +325,19 @@ class TestUtils(unittest.TestCase): } template = '${data.var}' - res = template.template(None, template, vars) + res = template2.template(None, template, vars) assert sorted(res) == sorted(vars['data']['var']) template = '${data.types}' - res = template.template(None, template, vars) + res = template2.template(None, template, vars) assert sorted(res) == sorted(vars['data']['types']) template = '${data.alphas}' - res = template.template(None, template, vars) + res = template2.template(None, template, vars) assert sorted(res) == sorted(vars['alphas']) template = '${data.nonexisting}' - res = template.template(None, template, vars) + res = template2.template(None, template, vars) assert res == template ##################################### @@ -348,7 +348,7 @@ class TestUtils(unittest.TestCase): 'who': 'world', } - res = template.template_from_file("test", "template-basic", vars) + res = template2.template_from_file("test", "template-basic", vars) assert res == 'hello world' @@ -357,7 +357,7 @@ class TestUtils(unittest.TestCase): 'who': 'world', } - res = template.template_from_file("test", "template-whitespace", vars) + res = template2.template_from_file("test", "template-whitespace", vars) assert res == 'hello world\n' @@ -366,7 +366,7 @@ class TestUtils(unittest.TestCase): 'who': u'wórld', } - res = template.template_from_file("test", "template-basic", vars) + res = template2.template_from_file("test", "template-basic", vars) assert res == u'hello wórld'