diff --git a/lib/ansible/runner/action_plugins/include_files.py b/lib/ansible/runner/action_plugins/include_vars.py
similarity index 65%
rename from lib/ansible/runner/action_plugins/include_files.py
rename to lib/ansible/runner/action_plugins/include_vars.py
index 3efc4d506b..9ec8c90913 100644
--- a/lib/ansible/runner/action_plugins/include_files.py
+++ b/lib/ansible/runner/action_plugins/include_vars.py
@@ -29,31 +29,19 @@ class ActionModule(object):
self.runner = runner
def run(self, conn, tmp, module_name, module_args, inject, complex_args=None, **kwargs):
- if not module_args and not 'first_available_file' in inject:
- result = dict(failed=True, msg="No Source file Given.")
+
+ if not module_args:
+ result = dict(failed=True, msg="No source file given")
return ReturnData(conn=conn, comm_ok=True, result=result)
- if 'first_available_file' in inject:
- found = False
- for fn in self.runner.module_vars.get('first_available_file'):
- fn_orig = fn
- fnt = template.template(self.runner.basedir, fn, inject)
- fnd = utils.path_dwim(self.runner.basedir, fnt)
- if not os.path.exists(fnd) and '_original_file' in inject:
- fnd = utils.path_dwim_relative(inject['_original_file'], 'templates', fnt, self.runner.basedir, check=False)
- if os.path.exists(fnd):
- source = fnd
- found = True
- break
- if not found:
- result = dict(failed=True, msg="could not find src in first_available_file list")
- return ReturnData(conn=conn, comm_ok=False, result=result)
- if not found:
- source = module_args
+
+ source = module_args
source = template.template(self.runner.basedir, source, inject)
+
if '_original_file' in inject:
source = utils.path_dwim_relative(inject['_original_file'], 'files', source, self.runner.basedir)
else:
source = utils.path_dwim(self.runner.basedir, source)
+
if os.path.exists(source):
data = utils.parse_yaml_from_file(source)
if type(data) != dict:
diff --git a/library/utilities/include_files b/library/utilities/include_files
deleted file mode 100644
index 99e4da74fc..0000000000
--- a/library/utilities/include_files
+++ /dev/null
@@ -1,44 +0,0 @@
-# -*- mode: python -*-
-
-# 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 .
-
-DOCUMENTATION = '''
----
-author: Benno Joy
-module: include_files
-short_description: Load variables in a file from a task
-description:
- - This module allows loading variables from a yaml file similar to vars_files but from a task.
- it would be specially useful for conditionally loading vars file from a role.
- - These variables will survive between plays.
-options:
- free-form:
- description:
- - Add the file name from which variables should be loaded, if called from a role it will look for
- the file in files directory else the path would be relative to playbook. An absolute path can
- also be provided.
- required: false
-version_added: "1.4"
-'''
-
-EXAMPLES = '''
-# Example loading variable conditionally based on os distribution
-- include_files: "{{ ansible_os_distribution }}.yml"
-
-# Example loading multiple variable files
-- include_files: "{{ item }}"
- with_fileglob: "*.yml"
-
-#Example loading the first available file
-- include_files:
- first_available_file:
- - "foo.yml"
- - "bar.yml"
-
-'''
diff --git a/library/utilities/include_vars b/library/utilities/include_vars
new file mode 100644
index 0000000000..cd63b15e56
--- /dev/null
+++ b/library/utilities/include_vars
@@ -0,0 +1,38 @@
+# -*- mode: python -*-
+
+# 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 .
+
+DOCUMENTATION = '''
+---
+author: Benno Joy
+module: include_vars
+short_description: Load variables from files, dynamically within a task.
+description:
+ - Loads variables from a YAML file dynamically during task runtime. It can work with conditionals, or use host specific variables to determine the path name to load from.
+options:
+ free-form:
+ description:
+ - The file name from which variables should be loaded, if called from a role it will look for
+ the file in files/ subdirectory of the role, otherwise the path would be relative to playbook. An absolute path can also be provided.
+ required: true
+version_added: "1.4"
+'''
+
+EXAMPLES = """
+# Conditionally decide to load in variables when x is 0, otherwise do not.
+- include_vars: contingency_plan.yml
+ when: x == 0
+
+# Load a variable file based on the OS type, or a default if not found.
+- include_vars: "{{ item }}"
+ with_first_found:
+ - "{{ ansible_os_distribution }}.yml"
+ - "default.yml"
+
+"""