From 7f125567cbb14f5f9ac57686ba6c24da1971cd3b Mon Sep 17 00:00:00 2001 From: Michael DeHaan Date: Thu, 31 Oct 2013 19:24:35 -0400 Subject: [PATCH] Some simplification of include_vars and renamed include_files to include_vars. --- .../{include_files.py => include_vars.py} | 26 +++-------- library/utilities/include_files | 44 ------------------- library/utilities/include_vars | 38 ++++++++++++++++ 3 files changed, 45 insertions(+), 63 deletions(-) rename lib/ansible/runner/action_plugins/{include_files.py => include_vars.py} (65%) delete mode 100644 library/utilities/include_files create mode 100644 library/utilities/include_vars 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 3efc4d506bd..9ec8c90913e 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 99e4da74fca..00000000000 --- 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 00000000000..cd63b15e565 --- /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" + +"""