listify lookup plugin terms when they're specified as "{{ lookup(terms) }}"

Before this, they were not listified there but they were listified when
specified like this:

with_lookup: terms
This commit is contained in:
Toshio Kuratomi 2015-08-10 09:07:37 -07:00
parent e32d887609
commit d35b956900
23 changed files with 16 additions and 50 deletions

View file

@ -153,7 +153,6 @@ class TaskExecutor:
items = None items = None
if self._task.loop: if self._task.loop:
if self._task.loop in self._shared_loader_obj.lookup_loader: if self._task.loop in self._shared_loader_obj.lookup_loader:
loop_terms = listify_lookup_plugin_terms(terms=self._task.loop_args, templar=templar, loader=self._loader, fail_on_undefined=True)
items = self._shared_loader_obj.lookup_loader.get(self._task.loop, loader=self._loader, templar=templar).run(terms=loop_terms, variables=vars_copy) items = self._shared_loader_obj.lookup_loader.get(self._task.loop, loader=self._loader, templar=templar).run(terms=loop_terms, variables=vars_copy)
else: else:
raise AnsibleError("Unexpected failure in finding the lookup named '%s' in the available lookup plugins" % self._task.loop) raise AnsibleError("Unexpected failure in finding the lookup named '%s' in the available lookup plugins" % self._task.loop)

View file

@ -29,7 +29,13 @@ class LookupModule(LookupBase):
[1, 2, 3], [a, b] -> [1, a], [1, b], [2, a], [2, b], [3, a], [3, b] [1, 2, 3], [a, b] -> [1, a], [1, b], [2, a], [2, b], [3, a], [3, b]
""" """
def __lookup_variables(self, terms): def _lookup_variables(self, terms):
"""
Turn this:
terms == ["1,2,3", "a,b"]
into this:
terms == [[1,2,3], [a, b]]
"""
results = [] results = []
for x in terms: for x in terms:
intermediate = listify_lookup_plugin_terms(x, templar=self._templar, loader=self._loader) intermediate = listify_lookup_plugin_terms(x, templar=self._templar, loader=self._loader)
@ -38,7 +44,7 @@ class LookupModule(LookupBase):
def run(self, terms, variables=None, **kwargs): def run(self, terms, variables=None, **kwargs):
terms = self.__lookup_variables(terms) terms = self._lookup_variables(terms)
my_list = terms[:] my_list = terms[:]
if len(my_list) == 0: if len(my_list) == 0:

View file

@ -35,9 +35,6 @@ class LookupModule(LookupBase):
if not CREDSTASH_INSTALLED: if not CREDSTASH_INSTALLED:
raise AnsibleError('The credstash lookup plugin requires credstash to be installed.') raise AnsibleError('The credstash lookup plugin requires credstash to be installed.')
if isinstance(terms, basestring):
terms = [terms]
ret = [] ret = []
for term in terms: for term in terms:
try: try:

View file

@ -42,9 +42,6 @@ class LookupModule(LookupBase):
def run(self, terms, variables=None, **kwargs): def run(self, terms, variables=None, **kwargs):
if isinstance(terms, basestring):
terms = [ terms ]
basedir = self.get_basedir(variables) basedir = self.get_basedir(variables)
ret = [] ret = []

View file

@ -44,9 +44,6 @@ class LookupModule(LookupBase):
if HAVE_DNS == False: if HAVE_DNS == False:
raise AnsibleError("Can't LOOKUP(dnstxt): module dns.resolver is not installed") raise AnsibleError("Can't LOOKUP(dnstxt): module dns.resolver is not installed")
if isinstance(terms, basestring):
terms = [ terms ]
ret = [] ret = []
for term in terms: for term in terms:
domain = term.split()[0] domain = term.split()[0]

View file

@ -25,9 +25,6 @@ class LookupModule(LookupBase):
def run(self, terms, variables, **kwargs): def run(self, terms, variables, **kwargs):
if isinstance(terms, basestring):
terms = [ terms ]
ret = [] ret = []
for term in terms: for term in terms:
var = term.split()[0] var = term.split()[0]

View file

@ -66,9 +66,6 @@ class LookupModule(LookupBase):
def run(self, terms, variables, **kwargs): def run(self, terms, variables, **kwargs):
if isinstance(terms, basestring):
terms = [ terms ]
validate_certs = kwargs.get('validate_certs', True) validate_certs = kwargs.get('validate_certs', True)
etcd = Etcd(validate_certs=validate_certs) etcd = Etcd(validate_certs=validate_certs)

View file

@ -27,9 +27,6 @@ class LookupModule(LookupBase):
def run(self, terms, variables=None, **kwargs): def run(self, terms, variables=None, **kwargs):
if not isinstance(terms, list):
terms = [ terms ]
ret = [] ret = []
basedir = self.get_basedir(variables) basedir = self.get_basedir(variables)

View file

@ -63,6 +63,7 @@ class LookupModule(LookupBase):
def run(self, terms, variables, **kwargs): def run(self, terms, variables, **kwargs):
### FIXME: Is this needed now that listify is run on all lookup plugin terms?
if not isinstance(terms, list): if not isinstance(terms, list):
raise AnsibleError("with_flattened expects a list") raise AnsibleError("with_flattened expects a list")

View file

@ -27,6 +27,7 @@ class LookupModule(LookupBase):
def run(self, terms, variables, **kwargs): def run(self, terms, variables, **kwargs):
### FIXME: Is this needed now that listify is run on all lookup plugin terms?
if not isinstance(terms, list): if not isinstance(terms, list):
raise AnsibleError("with_indexed_items expects a list") raise AnsibleError("with_indexed_items expects a list")

View file

@ -53,9 +53,6 @@ class LookupModule(LookupBase):
def run(self, terms, variables=None, **kwargs): def run(self, terms, variables=None, **kwargs):
if isinstance(terms, basestring):
terms = [ terms ]
basedir = self.get_basedir(variables) basedir = self.get_basedir(variables)
self.basedir = basedir self.basedir = basedir
self.cp = ConfigParser.ConfigParser() self.cp = ConfigParser.ConfigParser()

View file

@ -25,6 +25,7 @@ from ansible.plugins.lookup import LookupBase
class LookupModule(LookupBase): class LookupModule(LookupBase):
def run(self, terms, inject=None, **kwargs): def run(self, terms, inject=None, **kwargs):
### FIXME: Is this needed now that listify is run on all lookup plugin terms?
if not isinstance(terms, list): if not isinstance(terms, list):
raise AnsibleError("with_inventory_hostnames expects a list") raise AnsibleError("with_inventory_hostnames expects a list")

View file

@ -23,8 +23,5 @@ class LookupModule(LookupBase):
def run(self, terms, **kwargs): def run(self, terms, **kwargs):
if not isinstance(terms, list):
terms = [ terms ]
return self._flatten(terms) return self._flatten(terms)

View file

@ -25,7 +25,7 @@ from ansible.utils.listify import listify_lookup_plugin_terms
class LookupModule(LookupBase): class LookupModule(LookupBase):
def __lookup_variables(self, terms, variables): def _lookup_variables(self, terms, variables):
foo = variables.copy() foo = variables.copy()
foo.pop('vars') foo.pop('vars')
results = [] results = []
@ -39,7 +39,7 @@ class LookupModule(LookupBase):
def run(self, terms, variables=None, **kwargs): def run(self, terms, variables=None, **kwargs):
terms = self.__lookup_variables(terms, variables) terms = self._lookup_variables(terms, variables)
my_list = terms[:] my_list = terms[:]
my_list.reverse() my_list.reverse()

View file

@ -59,9 +59,6 @@ class LookupModule(LookupBase):
ret = [] ret = []
if not isinstance(terms, list):
terms = [ terms ]
for term in terms: for term in terms:
# you can't have escaped spaces in yor pathname # you can't have escaped spaces in yor pathname
params = term.split() params = term.split()

View file

@ -26,9 +26,6 @@ class LookupModule(LookupBase):
def run(self, terms, variables, **kwargs): def run(self, terms, variables, **kwargs):
if isinstance(terms, basestring):
terms = [ terms ]
ret = [] ret = []
for term in terms: for term in terms:
''' '''

View file

@ -43,9 +43,6 @@ class LookupModule(LookupBase):
if not HAVE_REDIS: if not HAVE_REDIS:
raise AnsibleError("Can't LOOKUP(redis_kv): module redis is not installed") raise AnsibleError("Can't LOOKUP(redis_kv): module redis is not installed")
if not isinstance(terms, list):
terms = [ terms ]
ret = [] ret = []
for term in terms: for term in terms:
(url,key) = term.split(',') (url,key) = term.split(',')

View file

@ -184,9 +184,6 @@ class LookupModule(LookupBase):
def run(self, terms, variables, **kwargs): def run(self, terms, variables, **kwargs):
results = [] results = []
if isinstance(terms, basestring):
terms = [ terms ]
for term in terms: for term in terms:
try: try:
self.reset() # clear out things for this iteration self.reset() # clear out things for this iteration

View file

@ -34,7 +34,6 @@ class LookupModule(LookupBase):
"subelements lookup expects a list of two or three items, " "subelements lookup expects a list of two or three items, "
+ msg) + msg)
terms = listify_lookup_plugin_terms(terms, templar=self._templar, loader=self._loader)
terms[0] = listify_lookup_plugin_terms(terms[0], templar=self._templar, loader=self._loader) terms[0] = listify_lookup_plugin_terms(terms[0], templar=self._templar, loader=self._loader)
# check lookup terms - check number of terms # check lookup terms - check number of terms

View file

@ -27,9 +27,6 @@ class LookupModule(LookupBase):
def run(self, terms, variables, **kwargs): def run(self, terms, variables, **kwargs):
if not isinstance(terms, list):
terms = [ terms ]
basedir = self.get_basedir(variables) basedir = self.get_basedir(variables)
ret = [] ret = []

View file

@ -31,7 +31,7 @@ class LookupModule(LookupBase):
[1, 2], [3] -> [1, 3], [2, None] [1, 2], [3] -> [1, 3], [2, None]
""" """
def __lookup_variables(self, terms): def _lookup_variables(self, terms):
results = [] results = []
for x in terms: for x in terms:
intermediate = listify_lookup_plugin_terms(x, templar=self._templar, loader=self._loader) intermediate = listify_lookup_plugin_terms(x, templar=self._templar, loader=self._loader)
@ -40,7 +40,7 @@ class LookupModule(LookupBase):
def run(self, terms, variables=None, **kwargs): def run(self, terms, variables=None, **kwargs):
terms = self.__lookup_variables(terms) terms = self._lookup_variables(terms)
my_list = terms[:] my_list = terms[:]
if len(my_list) == 0: if len(my_list) == 0:

View file

@ -29,9 +29,6 @@ class LookupModule(LookupBase):
def run(self, terms, variables=None, **kwargs): def run(self, terms, variables=None, **kwargs):
if isinstance(terms, basestring):
terms = [ terms ]
validate_certs = kwargs.get('validate_certs', True) validate_certs = kwargs.get('validate_certs', True)
ret = [] ret = []

View file

@ -251,6 +251,7 @@ class Templar:
instance = self._lookup_loader.get(name.lower(), loader=self._loader, templar=self) instance = self._lookup_loader.get(name.lower(), loader=self._loader, templar=self)
if instance is not None: if instance is not None:
loop_terms = listify_lookup_plugin_terms(terms=8args, templar=self, loader=self._loader, fail_on_undefined=True)
# safely catch run failures per #5059 # safely catch run failures per #5059
try: try:
ran = instance.run(*args, variables=self._available_variables, **kwargs) ran = instance.run(*args, variables=self._available_variables, **kwargs)