Merge pull request #1502 from dhozac/improved-lookup-plugins
Improved lookup plugins
This commit is contained in:
commit
4c156e4df8
5 changed files with 52 additions and 26 deletions
|
@ -112,7 +112,7 @@ class Play(object):
|
|||
if plugin_name not in self.playbook.lookup_plugins_list:
|
||||
raise errors.AnsibleError("cannot find lookup plugin named %s for usage in with_%s" % (plugin_name, plugin_name))
|
||||
terms = utils.varReplaceWithItems(self.basedir, x[k], task_vars)
|
||||
items = self.playbook.lookup_plugins_list[plugin_name].LookupModule(None).run(terms)
|
||||
items = self.playbook.lookup_plugins_list[plugin_name].LookupModule(basedir=self.basedir, runner=None).run(terms, inject=task_vars)
|
||||
|
||||
for item in items:
|
||||
mv = task_vars.copy()
|
||||
|
|
|
@ -170,12 +170,12 @@ class Runner(object):
|
|||
for (k,v) in action_plugin_list.iteritems():
|
||||
self.action_plugins[k] = v.ActionModule(self)
|
||||
for (k,v) in lookup_plugin_list.iteritems():
|
||||
self.lookup_plugins[k] = v.LookupModule(self)
|
||||
self.lookup_plugins[k] = v.LookupModule(runner=self, basedir=self.basedir)
|
||||
|
||||
for (k,v) in utils.import_plugins(os.path.join(self.basedir, 'action_plugins')).iteritems():
|
||||
self.action_plugins[k] = v.ActionModule(self)
|
||||
for (k,v) in utils.import_plugins(os.path.join(self.basedir, 'lookup_plugins')).iteritems():
|
||||
self.lookup_plugins[k] = v.LookupModule(self)
|
||||
self.lookup_plugins[k] = v.LookupModule(runner=self, basedir=self.basedir)
|
||||
|
||||
# *****************************************************
|
||||
|
||||
|
@ -290,27 +290,25 @@ class Runner(object):
|
|||
inject['groups'] = self.inventory.groups_list()
|
||||
|
||||
# allow with_foo to work in playbooks...
|
||||
items = []
|
||||
items = None
|
||||
items_plugin = self.module_vars.get('items_lookup_plugin', None)
|
||||
if items_plugin is not None:
|
||||
if items_plugin is not None and items_plugin in self.lookup_plugins:
|
||||
items_terms = self.module_vars.get('items_lookup_terms', '')
|
||||
if items_plugin in self.lookup_plugins:
|
||||
items_terms = utils.varReplaceWithItems(self.basedir, items_terms, inject)
|
||||
items = self.lookup_plugins[items_plugin].run(items_terms)
|
||||
items_terms = utils.varReplaceWithItems(self.basedir, items_terms, inject)
|
||||
items = self.lookup_plugins[items_plugin].run(items_terms, inject=inject)
|
||||
if type(items) != list:
|
||||
raise errors.AnsibleError("lookup plugins have to return a list: %r" % items)
|
||||
|
||||
if type(items) != list:
|
||||
raise errors.AnsibleError("lookup plugins have to return a list: %r" % items)
|
||||
|
||||
if len(items) and self.module_name in [ 'apt', 'yum' ]:
|
||||
# hack for apt and soon yum, with_items maps back into a single module call
|
||||
inject['item'] = ",".join(items)
|
||||
items = []
|
||||
if len(items) and self.module_name in [ 'apt', 'yum' ]:
|
||||
# hack for apt and soon yum, with_items maps back into a single module call
|
||||
inject['item'] = ",".join(items)
|
||||
items = None
|
||||
|
||||
# logic to decide how to run things depends on whether with_items is used
|
||||
|
||||
if len(items) == 0:
|
||||
if items is None:
|
||||
return self._executor_internal_inner(host, self.module_name, self.module_args, inject, port)
|
||||
else:
|
||||
elif len(items) > 0:
|
||||
# executing using with_items, so make multiple calls
|
||||
# TODO: refactor
|
||||
aggregrate = {}
|
||||
|
@ -339,6 +337,9 @@ class Runner(object):
|
|||
if not all_failed:
|
||||
del rd_result['failed']
|
||||
return ReturnData(host=host, comm_ok=all_comm_ok, result=rd_result)
|
||||
else:
|
||||
self.callbacks.on_skipped(host, None)
|
||||
return ReturnData(host=host, comm_ok=True, result=dict(skipped=True))
|
||||
|
||||
# *****************************************************
|
||||
|
||||
|
|
|
@ -21,11 +21,11 @@ from ansible import utils
|
|||
|
||||
class LookupModule(object):
|
||||
|
||||
def __init__(self, runner):
|
||||
self.runner = runner
|
||||
def __init__(self, basedir=None, **kwargs):
|
||||
self.basedir = basedir
|
||||
|
||||
def run(self, terms):
|
||||
return [ f for f in glob.glob(utils.path_dwim(self.runner.basedir, terms)) if os.path.isfile(f) ]
|
||||
def run(self, terms, **kwargs):
|
||||
return [ f for f in glob.glob(utils.path_dwim(self.basedir, terms)) if os.path.isfile(f) ]
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -15,14 +15,12 @@
|
|||
# You should have received a copy of the GNU General Public License
|
||||
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import os
|
||||
|
||||
class LookupModule(object):
|
||||
|
||||
def __init__(self, runner):
|
||||
self.runner = runner
|
||||
def __init__(self, **kwargs):
|
||||
pass
|
||||
|
||||
def run(self, terms):
|
||||
def run(self, terms, **kwargs):
|
||||
return terms
|
||||
|
||||
|
||||
|
|
27
lib/ansible/runner/lookup_plugins/template.py
Normal file
27
lib/ansible/runner/lookup_plugins/template.py
Normal file
|
@ -0,0 +1,27 @@
|
|||
# (c) 2012, Michael DeHaan <michael.dehaan@gmail.com>
|
||||
#
|
||||
# This file is part of Ansible
|
||||
#
|
||||
# Ansible is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# Ansible is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU General Public License
|
||||
# along with Ansible. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
from ansible import utils
|
||||
|
||||
class LookupModule(object):
|
||||
|
||||
def __init__(self, basedir=None, **kwargs):
|
||||
self.basedir = basedir
|
||||
|
||||
def run(self, terms, inject=None, **kwargs):
|
||||
return utils.template_from_file(self.basedir, terms, inject)
|
||||
|
Loading…
Reference in a new issue