fall through file source list: first_available_file support

add first_available_file look up to _execute_template and _execute_copy
to runner.

add this data to playbook handler so it can be included into module_vars
This commit is contained in:
Seth Vidal 2012-04-27 16:43:55 -04:00
parent 40f5469869
commit 72fd971822
2 changed files with 32 additions and 2 deletions

View file

@ -390,7 +390,9 @@ class PlayBook(object):
module_args = tokens[1]
# include task specific vars
module_vars = task.get('vars')
module_vars = task.get('vars', {})
if 'first_available_file' in task:
module_vars['first_available_file'] = task.get('first_available_file')
# tasks can be direct (run on all nodes matching
# the pattern) or conditional, where they ran

View file

@ -390,6 +390,20 @@ class Runner(object):
# apply templating to source argument
inject = self.setup_cache.get(conn.host,{})
# if we have first_available_file in our vars
# look up the files and use the first one we find as src
if 'first_available_file' in self.module_vars:
found = False
for fn in self.module_vars.get('first_available_file'):
fn = utils.template(fn, inject, self.setup_cache)
if os.path.exists(fn):
source = fn
found = True
break
if not found:
return (host, True, dict(failed=True, msg="could not find src"), '')
source = utils.template(source, inject, self.setup_cache)
# transfer the file to a remote tmp location
@ -480,6 +494,20 @@ class Runner(object):
# apply templating to source argument so vars can be used in the path
inject = self.setup_cache.get(conn.host,{})
# if we have first_available_file in our vars
# look up the files and use the first one we find as src
if 'first_available_file' in self.module_vars:
found = False
for fn in self.module_vars.get('first_available_file'):
fn = utils.template(fn, inject, self.setup_cache)
if os.path.exists(fn):
source = fn
found = True
break
if not found:
return (host, True, dict(failed=True, msg="could not find src"), '')
source = utils.template(source, inject, self.setup_cache)
(host, ok, data, err) = (None, None, None, None)