Provide slightly better msg on fact cache error (#18759)
If the configured fact_cache plugin (fact_caching config) fails, raise a fatal error instead of failing mysteriously later. Fixes #18751
This commit is contained in:
parent
2979488b08
commit
6c4f554f5a
2 changed files with 18 additions and 0 deletions
9
lib/ansible/plugins/cache/__init__.py
vendored
9
lib/ansible/plugins/cache/__init__.py
vendored
|
@ -20,6 +20,7 @@ __metaclass__ = type
|
|||
from collections import MutableMapping
|
||||
|
||||
from ansible import constants as C
|
||||
from ansible.errors import AnsibleError
|
||||
from ansible.plugins import cache_loader
|
||||
|
||||
try:
|
||||
|
@ -33,6 +34,14 @@ class FactCache(MutableMapping):
|
|||
|
||||
def __init__(self, *args, **kwargs):
|
||||
self._plugin = cache_loader.get(C.CACHE_PLUGIN)
|
||||
if not self._plugin:
|
||||
raise AnsibleError('Unable to load the facts cache plugin (%s)\n'
|
||||
'Check fact cache config options :\n'
|
||||
'Current values:\n'
|
||||
' fact_caching: %s\n'
|
||||
' fact_caching_connection: %s' %
|
||||
(C.CACHE_PLUGIN, C.CACHE_PLUGIN, C.CACHE_PLUGIN_CONNECTION))
|
||||
|
||||
# Backwards compat: self._display isn't really needed, just import the global display and use that.
|
||||
self._display = display
|
||||
|
||||
|
|
9
test/units/plugins/cache/test_cache.py
vendored
9
test/units/plugins/cache/test_cache.py
vendored
|
@ -20,6 +20,7 @@ from __future__ import (absolute_import, division, print_function)
|
|||
__metaclass__ = type
|
||||
|
||||
from ansible.compat.tests import unittest, mock
|
||||
from ansible.errors import AnsibleError
|
||||
from ansible.plugins.cache import FactCache
|
||||
from ansible.plugins.cache.base import BaseCacheModule
|
||||
from ansible.plugins.cache.memory import CacheModule as MemoryCache
|
||||
|
@ -56,6 +57,14 @@ class TestFactCache(unittest.TestCase):
|
|||
self.assertEqual(type(a_copy), dict)
|
||||
self.assertEqual(a_copy, dict(avocado='fruit', daisy='flower'))
|
||||
|
||||
def test_plugin_load_failure(self):
|
||||
# See https://github.com/ansible/ansible/issues/18751
|
||||
# Note no fact_connection config set, so this will fail
|
||||
with mock.patch('ansible.constants.CACHE_PLUGIN', 'json'):
|
||||
self.assertRaisesRegexp(AnsibleError,
|
||||
"Unable to load the facts cache plugin.*json.*",
|
||||
FactCache)
|
||||
|
||||
|
||||
class TestAbstractClass(unittest.TestCase):
|
||||
|
||||
|
|
Loading…
Reference in a new issue