From 86d47bce5fc5e8a4c65d494ed7bc4cc65b6ccff7 Mon Sep 17 00:00:00 2001 From: Michael DeHaan Date: Tue, 16 Apr 2013 19:07:19 -0400 Subject: [PATCH] Make more lookup plugins tolerant of new variable system, with a little better 'do what I mean' logic to resolving what happens if you get a string back as a template result. --- lib/ansible/runner/lookup_plugins/dnstxt.py | 10 +++++++--- lib/ansible/runner/lookup_plugins/env.py | 7 ++++--- lib/ansible/runner/lookup_plugins/first_found.py | 10 +++++----- lib/ansible/runner/lookup_plugins/lines.py | 7 ++++--- lib/ansible/runner/lookup_plugins/password.py | 7 ++++--- lib/ansible/runner/lookup_plugins/pipe.py | 8 ++++++-- lib/ansible/runner/lookup_plugins/random_choice.py | 8 +++++--- lib/ansible/runner/lookup_plugins/redis_kv.py | 7 ++++--- lib/ansible/runner/lookup_plugins/sequence.py | 9 ++++----- lib/ansible/runner/lookup_plugins/template.py | 5 +++-- lib/ansible/utils/__init__.py | 6 +++++- 11 files changed, 51 insertions(+), 33 deletions(-) diff --git a/lib/ansible/runner/lookup_plugins/dnstxt.py b/lib/ansible/runner/lookup_plugins/dnstxt.py index 072d33f3c6..7c56d8a00b 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 4e21cac788..bd0fc4f6d9 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 09f6cc27f1..67010b1ff9 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 0a086e7823..5d4b70a857 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 bdde7448f5..6b44e77b32 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 6a9d9dd231..4205b887ff 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 60e3ede92e..9b32c2f119 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 768d6b75d3..22c5c3754f 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 9777aea984..ef07417fc8 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 67950071c2..f1d877797a 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 06ae73bf0b..46e9376bff 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