mirror of
https://github.com/ansible-collections/community.general.git
synced 2025-04-26 20:31:27 -07:00
Fix inventory cache interface (#50446)
* Replace InventoryFileCacheModule with a better developer-interface Use new interface for inventory plugins with backwards compatibility Auto-update the backing cache-plugin if the cache has changed after parsing the inventory plugin * Update CacheModules to use the config system and add a deprecation warning if they are being imported directly rather than using cache_loader * Fix foreman inventory caching * Add tests * Add integration test to check that fact caching works normally with cache plugins using ansible.constants and inventory caching provides a helpful error for non-compatible cache plugins * Add some developer documentation for inventory and cache plugins * Add user documentation for inventory caching * Add deprecation docs * Apply suggestions from docs review * Add changelog
This commit is contained in:
parent
831f068f98
commit
9687879840
24 changed files with 831 additions and 86 deletions
20
lib/ansible/plugins/cache/mongodb.py
vendored
20
lib/ansible/plugins/cache/mongodb.py
vendored
|
@ -27,6 +27,7 @@ DOCUMENTATION = '''
|
|||
section: defaults
|
||||
_prefix:
|
||||
description: User defined prefix to use when creating the DB entries
|
||||
default: ansible_facts
|
||||
env:
|
||||
- name: ANSIBLE_CACHE_PLUGIN_PREFIX
|
||||
ini:
|
||||
|
@ -50,20 +51,33 @@ from contextlib import contextmanager
|
|||
from ansible import constants as C
|
||||
from ansible.errors import AnsibleError
|
||||
from ansible.plugins.cache import BaseCacheModule
|
||||
from ansible.utils.display import Display
|
||||
|
||||
try:
|
||||
import pymongo
|
||||
except ImportError:
|
||||
raise AnsibleError("The 'pymongo' python module is required for the mongodb fact cache, 'pip install pymongo>=3.0'")
|
||||
|
||||
display = Display()
|
||||
|
||||
|
||||
class CacheModule(BaseCacheModule):
|
||||
"""
|
||||
A caching module backed by mongodb.
|
||||
"""
|
||||
def __init__(self, *args, **kwargs):
|
||||
self._timeout = int(C.CACHE_PLUGIN_TIMEOUT)
|
||||
self._prefix = C.CACHE_PLUGIN_PREFIX
|
||||
try:
|
||||
super(CacheModule, self).__init__(*args, **kwargs)
|
||||
self._connection = self.get_option('_uri')
|
||||
self._timeout = int(self.get_option('_timeout'))
|
||||
self._prefix = self.get_option('_prefix')
|
||||
except KeyError:
|
||||
display.deprecated('Rather than importing CacheModules directly, '
|
||||
'use ansible.plugins.loader.cache_loader', version='2.12')
|
||||
self._connection = C.CACHE_PLUGIN_CONNECTION
|
||||
self._timeout = int(C.CACHE_PLUGIN_TIMEOUT)
|
||||
self._prefix = C.CACHE_PLUGIN_PREFIX
|
||||
|
||||
self._cache = {}
|
||||
self._managed_indexes = False
|
||||
|
||||
|
@ -94,7 +108,7 @@ class CacheModule(BaseCacheModule):
|
|||
This is a context manager for opening and closing mongo connections as needed. This exists as to not create a global
|
||||
connection, due to pymongo not being fork safe (http://api.mongodb.com/python/current/faq.html#is-pymongo-fork-safe)
|
||||
'''
|
||||
mongo = pymongo.MongoClient(C.CACHE_PLUGIN_CONNECTION)
|
||||
mongo = pymongo.MongoClient(self._connection)
|
||||
try:
|
||||
db = mongo.get_default_database()
|
||||
except pymongo.errors.ConfigurationError:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue