Skip to content

Commit

Permalink
plugin_filter: check for type error (ansible#46664)
Browse files Browse the repository at this point in the history
* Parsing plugin filter may raise TypeError, gracefully handle this exception
and let user know about the syntax error in plugin filter file.

* Test for plugin_filtering

Fixes: ansible#46658

Signed-off-by: Abhijeet Kasurde <akasurde@redhat.com>
(cherry picked from commit b32b411)
  • Loading branch information
Akasurde committed Oct 30, 2018
1 parent 6cfdd9f commit 9fdecfa
Show file tree
Hide file tree
Showing 5 changed files with 26 additions and 4 deletions.
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
minor_changes:
- Parsing plugin filter may raise TypeError, gracefully handle this exception and let user know about the syntax error in plugin filter file.
13 changes: 9 additions & 4 deletions lib/ansible/plugins/loader.py
Original file line number Diff line number Diff line change
Expand Up @@ -574,10 +574,9 @@ def all(self, *args, **kwargs):

def _load_plugin_filter():
filters = defaultdict(frozenset)

user_set = False
if C.PLUGIN_FILTERS_CFG is None:
filter_cfg = '/etc/ansible/plugin_filters.yml'
user_set = False
else:
filter_cfg = C.PLUGIN_FILTERS_CFG
user_set = True
Expand Down Expand Up @@ -605,11 +604,17 @@ def _load_plugin_filter():
if version == u'1.0':
# Modules and action plugins share the same blacklist since the difference between the
# two isn't visible to the users
filters['ansible.modules'] = frozenset(filter_data['module_blacklist'])
try:
filters['ansible.modules'] = frozenset(filter_data['module_blacklist'])
except TypeError:
display.warning(u'Unable to parse the plugin filter file {0} as'
u' module_blacklist is not a list.'
u' Skipping.'.format(filter_cfg))
return filters
filters['ansible.plugins.action'] = filters['ansible.modules']
else:
display.warning(u'The plugin filter file, {0} was a version not recognized by this'
u' version of Ansible. Skipping.')
u' version of Ansible. Skipping.'.format(filter_cfg))
else:
if user_set:
display.warning(u'The plugin filter file, {0} does not exist.'
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
[defaults]
retry_files_enabled = False
plugin_filters_cfg = ./no_blacklist_module.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
---
filter_version: 1.0
module_blacklist:
9 changes: 9 additions & 0 deletions test/integration/targets/plugin_filtering/runme.sh
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,15 @@ if test $? != 0 ; then
exit 1
fi

#
# Check that if no modules are blacklisted then Ansible should not through traceback
#
ANSIBLE_CONFIG=no_blacklist_module.ini ansible-playbook tempfile.yml -i ../../inventory -vvv "$@"
if test $? != 0 ; then
echo "### Failed to run tempfile with no modules blacklisted"
exit 1
fi

#
# Check that with these modules filtered out, all of these modules fail to be found
#
Expand Down

0 comments on commit 9fdecfa

Please sign in to comment.