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 collections import MutableMapping
|
||||||
|
|
||||||
from ansible import constants as C
|
from ansible import constants as C
|
||||||
|
from ansible.errors import AnsibleError
|
||||||
from ansible.plugins import cache_loader
|
from ansible.plugins import cache_loader
|
||||||
|
|
||||||
try:
|
try:
|
||||||
|
@ -33,6 +34,14 @@ class FactCache(MutableMapping):
|
||||||
|
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
self._plugin = cache_loader.get(C.CACHE_PLUGIN)
|
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.
|
# Backwards compat: self._display isn't really needed, just import the global display and use that.
|
||||||
self._display = display
|
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
|
__metaclass__ = type
|
||||||
|
|
||||||
from ansible.compat.tests import unittest, mock
|
from ansible.compat.tests import unittest, mock
|
||||||
|
from ansible.errors import AnsibleError
|
||||||
from ansible.plugins.cache import FactCache
|
from ansible.plugins.cache import FactCache
|
||||||
from ansible.plugins.cache.base import BaseCacheModule
|
from ansible.plugins.cache.base import BaseCacheModule
|
||||||
from ansible.plugins.cache.memory import CacheModule as MemoryCache
|
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(type(a_copy), dict)
|
||||||
self.assertEqual(a_copy, dict(avocado='fruit', daisy='flower'))
|
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):
|
class TestAbstractClass(unittest.TestCase):
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue