From 7306a5397ed770d6d2069b51bf6fc92ad0de7313 Mon Sep 17 00:00:00 2001 From: Brian Coca Date: Wed, 10 Jun 2015 22:55:50 -0400 Subject: [PATCH] simplified function, always attempt to template, always check if string before return, should avoid most cases of strings being passed to lookups --- lib/ansible/utils/listify.py | 25 ++----------------------- 1 file changed, 2 insertions(+), 23 deletions(-) diff --git a/lib/ansible/utils/listify.py b/lib/ansible/utils/listify.py index a26b4b98295..c8fc97bed79 100644 --- a/lib/ansible/utils/listify.py +++ b/lib/ansible/utils/listify.py @@ -33,34 +33,13 @@ LOOKUP_REGEX = re.compile(r'lookup\s*\(') def listify_lookup_plugin_terms(terms, variables, loader): if isinstance(terms, basestring): - # someone did: - # with_items: alist - # OR - # with_items: {{ alist }} - stripped = terms.strip() templar = Templar(loader=loader, variables=variables) - if not (stripped.startswith('{') or stripped.startswith('[')) and not stripped.startswith("/") and not stripped.startswith('set([') and not LOOKUP_REGEX.search(terms): - # if not already a list, get ready to evaluate with Jinja2 - # not sure why the "/" is in above code :) - try: - new_terms = templar.template("{{ %s }}" % terms) - if isinstance(new_terms, basestring) and "{{" in new_terms: - pass - else: - terms = new_terms - except: - pass - else: - terms = templar.template(terms) + terms = templar.template(terms, convert_bare=True) - if '{' in terms or '[' in terms: - # Jinja2 already evaluated a variable to a list. - # Jinja2-ified list needs to be converted back to a real type - return safe_eval(terms) + terms = safe_eval(terms) if isinstance(terms, basestring): terms = [ terms ] return terms -