diff --git a/lib/ansible/runner/lookup_plugins/dnstxt.py b/lib/ansible/runner/lookup_plugins/dnstxt.py index 072d33f3c6d..7c56d8a00b6 100644 --- a/lib/ansible/runner/lookup_plugins/dnstxt.py +++ b/lib/ansible/runner/lookup_plugins/dnstxt.py @@ -40,9 +40,13 @@ class LookupModule(object): if HAVE_DNS == False: raise errors.AnsibleError("Can't LOOKUP(dnstxt): module dns.resolver is not installed") - def run(self, terms, **kwargs): - if isinstance(terms, basestring): - terms = [ terms ] + def run(self, terms, inject=None, **kwargs): + + terms = utils.listify_lookup_plugin_terms(terms, self.basedir, inject) + + + + ret = [] for term in terms: domain = term.split()[0] diff --git a/lib/ansible/runner/lookup_plugins/env.py b/lib/ansible/runner/lookup_plugins/env.py index 4e21cac788e..bd0fc4f6d9b 100644 --- a/lib/ansible/runner/lookup_plugins/env.py +++ b/lib/ansible/runner/lookup_plugins/env.py @@ -23,9 +23,10 @@ class LookupModule(object): def __init__(self, basedir=None, **kwargs): self.basedir = basedir - def run(self, terms, **kwargs): - if isinstance(terms, basestring): - terms = [ terms ] + def run(self, terms, inject=None, **kwargs): + + terms = utils.listify_lookup_plugin_terms(terms, self.basedir, inject) + ret = [] for term in terms: var = term.split()[0] diff --git a/lib/ansible/runner/lookup_plugins/first_found.py b/lib/ansible/runner/lookup_plugins/first_found.py index 09f6cc27f10..67010b1ff99 100644 --- a/lib/ansible/runner/lookup_plugins/first_found.py +++ b/lib/ansible/runner/lookup_plugins/first_found.py @@ -66,10 +66,6 @@ # this will include the tasks in the file generic where it is found first (staging or production) - - - - from ansible import utils, errors import os @@ -78,8 +74,12 @@ class LookupModule(object): def __init__(self, basedir=None, **kwargs): self.basedir = basedir - def run(self, terms, **kwargs): + def run(self, terms, inject=None, **kwargs): + + terms = utils.listify_lookup_plugin_terms(terms, self.basedir, inject) + result = None + for term in terms: if isinstance(term, dict): files = term.get('files', []) diff --git a/lib/ansible/runner/lookup_plugins/lines.py b/lib/ansible/runner/lookup_plugins/lines.py index 0a086e7823f..5d4b70a8579 100644 --- a/lib/ansible/runner/lookup_plugins/lines.py +++ b/lib/ansible/runner/lookup_plugins/lines.py @@ -23,9 +23,10 @@ class LookupModule(object): def __init__(self, basedir=None, **kwargs): self.basedir = basedir - def run(self, terms, **kwargs): - if isinstance(terms, basestring): - terms = [ terms ] + def run(self, terms, inject=None, **kwargs): + + terms = utils.listify_lookup_plugin_terms(terms, self.basedir, inject) + ret = [] for term in terms: p = subprocess.Popen(term, cwd=self.basedir, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE) diff --git a/lib/ansible/runner/lookup_plugins/password.py b/lib/ansible/runner/lookup_plugins/password.py index bdde7448f58..6b44e77b324 100644 --- a/lib/ansible/runner/lookup_plugins/password.py +++ b/lib/ansible/runner/lookup_plugins/password.py @@ -30,9 +30,10 @@ class LookupModule(object): def __init__(self, length=None, basedir=None, **kwargs): self.basedir = basedir - def run(self, terms, **kwargs): - if isinstance(terms, basestring): - terms = [ terms ] + def run(self, terms, inject=None, **kwargs): + + terms = utils.listify_lookup_plugin_terms(terms, self.basedir, inject) + ret = [] for term in terms: diff --git a/lib/ansible/runner/lookup_plugins/pipe.py b/lib/ansible/runner/lookup_plugins/pipe.py index 6a9d9dd2318..4205b887ffe 100644 --- a/lib/ansible/runner/lookup_plugins/pipe.py +++ b/lib/ansible/runner/lookup_plugins/pipe.py @@ -23,9 +23,13 @@ class LookupModule(object): def __init__(self, basedir=None, **kwargs): self.basedir = basedir - def run(self, terms, **kwargs): + def run(self, terms, inject=None, **kwargs): + + terms = utils.listify_lookup_plugin_terms(terms, self.basedir, inject) + if isinstance(terms, basestring): - terms = [ terms ] + terms = [ terms ] + ret = [] for term in terms: p = subprocess.Popen(term, cwd=self.basedir, shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE) diff --git a/lib/ansible/runner/lookup_plugins/random_choice.py b/lib/ansible/runner/lookup_plugins/random_choice.py index 60e3ede92ed..9b32c2f119b 100644 --- a/lib/ansible/runner/lookup_plugins/random_choice.py +++ b/lib/ansible/runner/lookup_plugins/random_choice.py @@ -16,6 +16,7 @@ # along with Ansible. If not, see . import random +from ansible import utils # useful for introducing chaos ... or just somewhat reasonably fair selection # amongst available mirrors @@ -32,8 +33,9 @@ class LookupModule(object): def __init__(self, basedir=None, **kwargs): self.basedir = basedir - def run(self, terms, **kwargs): - if isinstance(terms, basestring): - terms = [ terms ] + def run(self, terms, inject=None, **kwargs): + + terms = utils.listify_lookup_plugin_terms(terms, self.basedir, inject) + return [ random.choice(terms) ] diff --git a/lib/ansible/runner/lookup_plugins/redis_kv.py b/lib/ansible/runner/lookup_plugins/redis_kv.py index 768d6b75d38..22c5c3754f7 100644 --- a/lib/ansible/runner/lookup_plugins/redis_kv.py +++ b/lib/ansible/runner/lookup_plugins/redis_kv.py @@ -39,9 +39,10 @@ class LookupModule(object): if HAVE_REDIS == False: raise errors.AnsibleError("Can't LOOKUP(redis_kv): module redis is not installed") - def run(self, terms, **kwargs): - if isinstance(terms, basestring): - terms = [ terms ] + def run(self, terms, inject=None, **kwargs): + + terms = utils.listify_lookup_plugin_terms(terms, self.basedir, inject) + ret = [] for term in terms: (url,key) = term.split(',') diff --git a/lib/ansible/runner/lookup_plugins/sequence.py b/lib/ansible/runner/lookup_plugins/sequence.py index 9777aea984b..ef07417fc86 100644 --- a/lib/ansible/runner/lookup_plugins/sequence.py +++ b/lib/ansible/runner/lookup_plugins/sequence.py @@ -73,9 +73,9 @@ class LookupModule(object): calculating the number of entries in a sequence when a stride is specified. """ - def __init__(self, **kwargs): + def __init__(self, basedir, **kwargs): """absorb any keyword args""" - pass + self.basedir = basedir def reset(self): """set sensible defaults""" @@ -170,11 +170,10 @@ class LookupModule(object): "problem formatting %r with %r" % self.format ) - def run(self, terms, **kwargs): + def run(self, terms, inject=None, **kwargs): results = [] - if isinstance(terms, basestring): - terms = [terms] + terms = utils.listify_lookup_plugin_terms(terms, self.basedir, inject) for term in terms: try: diff --git a/lib/ansible/runner/lookup_plugins/template.py b/lib/ansible/runner/lookup_plugins/template.py index 67950071c2c..f1d877797a5 100644 --- a/lib/ansible/runner/lookup_plugins/template.py +++ b/lib/ansible/runner/lookup_plugins/template.py @@ -23,8 +23,9 @@ class LookupModule(object): self.basedir = basedir def run(self, terms, inject=None, **kwargs): - if isinstance(terms, basestring): - terms = [ terms ] + + terms = utils.listify_lookup_plugin_terms(terms, self.basedir, inject) + ret = [] for term in terms: ret.append(template.template_from_file(self.basedir, term, inject)) diff --git a/lib/ansible/utils/__init__.py b/lib/ansible/utils/__init__.py index 06ae73bf0b4..46e9376bff3 100644 --- a/lib/ansible/utils/__init__.py +++ b/lib/ansible/utils/__init__.py @@ -725,7 +725,11 @@ def listify_lookup_plugin_terms(terms, basedir, inject): if not '{' in terms and not '[' in terms and not terms.strip().startswith("/"): try: - terms = template.template(basedir, "{{ %s }}" % terms, inject) + new_terms = template.template(basedir, "{{ %s }}" % terms, inject) + if isinstance(new_terms, basestring) and new_terms.find("{{") != -1: + pass + else: + terms = new_terms except: pass