diff --git a/lib/ansible/modules/utilities/logic/include_vars.py b/lib/ansible/modules/utilities/logic/include_vars.py index 7aceecb9781..79769f888dd 100644 --- a/lib/ansible/modules/utilities/logic/include_vars.py +++ b/lib/ansible/modules/utilities/logic/include_vars.py @@ -56,6 +56,12 @@ options: description: - List of file extensions to read when using C(dir). default: [yaml, yml, json] + ignore_unkown_extensions: + version_added: "2.7" + description: + - Ignore unkown file extensions within the directory. This allows users to specify a directory containing vars files + that are intermingled with non vars files extension types (For example, a directory with a README in it and vars files) + default: False free-form: description: - This module allows you to specify the 'file' option directly without any other options. diff --git a/lib/ansible/plugins/action/include_vars.py b/lib/ansible/plugins/action/include_vars.py index 8897f87af11..4d0844010c5 100644 --- a/lib/ansible/plugins/action/include_vars.py +++ b/lib/ansible/plugins/action/include_vars.py @@ -32,7 +32,7 @@ class ActionModule(ActionBase): TRANSFERS_FILES = False VALID_FILE_EXTENSIONS = ['yaml', 'yml', 'json'] - VALID_DIR_ARGUMENTS = ['dir', 'depth', 'files_matching', 'ignore_files', 'extensions'] + VALID_DIR_ARGUMENTS = ['dir', 'depth', 'files_matching', 'ignore_files', 'extensions', 'ignore_unknown_extensions'] VALID_FILE_ARGUMENTS = ['file', '_raw_params'] VALID_ALL = ['name'] @@ -68,6 +68,7 @@ class ActionModule(ActionBase): self.depth = self._task.args.get('depth', None) self.files_matching = self._task.args.get('files_matching', None) + self.ignore_unknown_extensions = self._task.args.get('ignore_unknown_extensions', False) self.ignore_files = self._task.args.get('ignore_files', None) self.valid_extensions = self._task.args.get('extensions', self.VALID_FILE_EXTENSIONS) @@ -274,9 +275,15 @@ class ActionModule(ActionBase): stop_iter = True if not stop_iter and not failed: - if path.exists(filepath) and not self._ignore_file(filename): - failed, err_msg, loaded_data = self._load_files(filepath, validate_extensions=True) - if not failed: - results.update(loaded_data) + if self.ignore_unknown_extensions: + if path.exists(filepath) and not self._ignore_file(filename) and self._is_valid_file_ext(filename): + failed, err_msg, loaded_data = self._load_files(filepath, validate_extensions=True) + if not failed: + results.update(loaded_data) + else: + if path.exists(filepath) and not self._ignore_file(filename): + failed, err_msg, loaded_data = self._load_files(filepath, validate_extensions=True) + if not failed: + results.update(loaded_data) return failed, err_msg, results