Add option to fail on undefined variables to listify
And use it in the call to get the loop items for a task.pull/4420/head
parent
a586c74967
commit
2673eb0afb
|
@ -143,7 +143,7 @@ class TaskExecutor:
|
||||||
|
|
||||||
items = None
|
items = None
|
||||||
if self._task.loop and self._task.loop in lookup_loader:
|
if self._task.loop and self._task.loop in lookup_loader:
|
||||||
loop_terms = listify_lookup_plugin_terms(terms=self._task.loop_args, variables=self._job_vars, loader=self._loader)
|
loop_terms = listify_lookup_plugin_terms(terms=self._task.loop_args, variables=self._job_vars, loader=self._loader, fail_on_undefined=True)
|
||||||
items = lookup_loader.get(self._task.loop, loader=self._loader).run(terms=loop_terms, variables=self._job_vars)
|
items = lookup_loader.get(self._task.loop, loader=self._loader).run(terms=loop_terms, variables=self._job_vars)
|
||||||
|
|
||||||
return items
|
return items
|
||||||
|
|
|
@ -17,22 +17,29 @@
|
||||||
from __future__ import (absolute_import, division, print_function)
|
from __future__ import (absolute_import, division, print_function)
|
||||||
__metaclass__ = type
|
__metaclass__ = type
|
||||||
|
|
||||||
from ansible.errors import AnsibleError
|
from jinja2.exceptions import UndefinedError
|
||||||
|
|
||||||
|
from ansible.errors import AnsibleError, AnsibleUndefinedVariable
|
||||||
from ansible.plugins.lookup import LookupBase
|
from ansible.plugins.lookup import LookupBase
|
||||||
from ansible.utils.listify import listify_lookup_plugin_terms
|
from ansible.utils.listify import listify_lookup_plugin_terms
|
||||||
|
|
||||||
class LookupModule(LookupBase):
|
class LookupModule(LookupBase):
|
||||||
|
|
||||||
def __lookup_variabless(self, terms, variables):
|
def __lookup_variables(self, terms, variables):
|
||||||
|
foo = variables.copy()
|
||||||
|
foo.pop('vars')
|
||||||
results = []
|
results = []
|
||||||
for x in terms:
|
for x in terms:
|
||||||
intermediate = listify_lookup_plugin_terms(x, variables, loader=self._loader)
|
try:
|
||||||
|
intermediate = listify_lookup_plugin_terms(x, variables, loader=self._loader, fail_on_undefined=True)
|
||||||
|
except UndefinedError, e:
|
||||||
|
raise AnsibleUndefinedVariable("One of the nested variables was undefined. The error was: %s" % e)
|
||||||
results.append(intermediate)
|
results.append(intermediate)
|
||||||
return results
|
return results
|
||||||
|
|
||||||
def run(self, terms, variables=None, **kwargs):
|
def run(self, terms, variables=None, **kwargs):
|
||||||
|
|
||||||
terms = self.__lookup_variabless(terms, variables)
|
terms = self.__lookup_variables(terms, variables)
|
||||||
|
|
||||||
my_list = terms[:]
|
my_list = terms[:]
|
||||||
my_list.reverse()
|
my_list.reverse()
|
||||||
|
|
|
@ -26,14 +26,14 @@ from ansible.template.safe_eval import safe_eval
|
||||||
__all__ = ['listify_lookup_plugin_terms']
|
__all__ = ['listify_lookup_plugin_terms']
|
||||||
|
|
||||||
#FIXME: probably just move this into lookup plugin base class
|
#FIXME: probably just move this into lookup plugin base class
|
||||||
def listify_lookup_plugin_terms(terms, variables, loader):
|
def listify_lookup_plugin_terms(terms, variables, loader, fail_on_undefined=False):
|
||||||
|
|
||||||
if isinstance(terms, basestring):
|
if isinstance(terms, basestring):
|
||||||
stripped = terms.strip()
|
stripped = terms.strip()
|
||||||
templar = Templar(loader=loader, variables=variables)
|
templar = Templar(loader=loader, variables=variables)
|
||||||
|
|
||||||
#FIXME: warn/deprecation on bare vars in with_ so we can eventually remove fail on undefined override
|
#FIXME: warn/deprecation on bare vars in with_ so we can eventually remove fail on undefined override
|
||||||
terms = templar.template(terms, convert_bare=True, fail_on_undefined=False)
|
terms = templar.template(terms, convert_bare=True, fail_on_undefined=fail_on_undefined)
|
||||||
|
|
||||||
#TODO: check if this is needed as template should also return correct type already
|
#TODO: check if this is needed as template should also return correct type already
|
||||||
terms = safe_eval(terms)
|
terms = safe_eval(terms)
|
||||||
|
|
Loading…
Reference in New Issue