Add option to fail on undefined variables to listify
And use it in the call to get the loop items for a task.
This commit is contained in:
parent
a586c74967
commit
2673eb0afb
3 changed files with 14 additions and 7 deletions
|
@ -143,7 +143,7 @@ class TaskExecutor:
|
|||
|
||||
items = None
|
||||
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)
|
||||
|
||||
return items
|
||||
|
|
|
@ -17,22 +17,29 @@
|
|||
from __future__ import (absolute_import, division, print_function)
|
||||
__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.utils.listify import listify_lookup_plugin_terms
|
||||
|
||||
class LookupModule(LookupBase):
|
||||
|
||||
def __lookup_variabless(self, terms, variables):
|
||||
def __lookup_variables(self, terms, variables):
|
||||
foo = variables.copy()
|
||||
foo.pop('vars')
|
||||
results = []
|
||||
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)
|
||||
return results
|
||||
|
||||
def run(self, terms, variables=None, **kwargs):
|
||||
|
||||
terms = self.__lookup_variabless(terms, variables)
|
||||
terms = self.__lookup_variables(terms, variables)
|
||||
|
||||
my_list = terms[:]
|
||||
my_list.reverse()
|
||||
|
|
|
@ -26,14 +26,14 @@ from ansible.template.safe_eval import safe_eval
|
|||
__all__ = ['listify_lookup_plugin_terms']
|
||||
|
||||
#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):
|
||||
stripped = terms.strip()
|
||||
templar = Templar(loader=loader, variables=variables)
|
||||
|
||||
#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
|
||||
terms = safe_eval(terms)
|
||||
|
|
Loading…
Reference in a new issue