[re2o_lookup] Add support for json, yaml, pickle and memcached cache plugins.
parent
f73b136b1e
commit
c0e02b29ba
|
@ -49,6 +49,11 @@ use_cpasswords = True
|
|||
# Specify cache plugin for re2o API. By default, cache nothing
|
||||
cache = jsonfile
|
||||
|
||||
# Only used for memcached plugin
|
||||
# List of connection information for the memcached DBs
|
||||
# Default is ['127.0.0.1:11211']
|
||||
# memcached_connection = ['127.0.0.1:11211']
|
||||
|
||||
# Time in second before the cache expired. 0 means never expire cache.
|
||||
# Default is 24 hours.
|
||||
timeout = 86400
|
||||
|
|
|
@ -374,6 +374,27 @@ class LookupModule(LookupBase):
|
|||
return config.getint(section, key)
|
||||
else:
|
||||
return config.get(section, key)
|
||||
else:
|
||||
return default
|
||||
|
||||
def _manage_cachedir(self, cachedir=None, plugin=None):
|
||||
try:
|
||||
self._uri = cachedir / plugin
|
||||
except Exception:
|
||||
raise AnsibleError("Undefined specification for cache plugin")
|
||||
|
||||
display.vvv("Cache directory is {}".format(self._uri))
|
||||
if not self._uri.exists():
|
||||
# Creates Ansible cache directory with right permissions
|
||||
# if it doesn't exist yet.
|
||||
display.vvv("Cache directory doesn't exist. Creating it.")
|
||||
try:
|
||||
self._uri.mkdir(mode=0o700, parents=True)
|
||||
except Exception as e:
|
||||
raise AnsibleError("""Unable to create {dir}.
|
||||
Original error was : {err}""".format(dir=self._uri,
|
||||
err=to_native(e)))
|
||||
|
||||
|
||||
def __init__(self, *args, **kwargs):
|
||||
super().__init__(*args, **kwargs)
|
||||
|
@ -410,29 +431,36 @@ class LookupModule(LookupBase):
|
|||
|
||||
if self._cache_plugin is not None:
|
||||
display.vvv("Using {} as cache plugin".format(self._cache_plugin))
|
||||
cachedir = Path.home() / ".cache/ansible/re2oapi"
|
||||
|
||||
if self._cache_plugin == 'jsonfile':
|
||||
self._cachedir = Path.home() / ".cache/Ansible/re2oapi"
|
||||
display.vvv("Cache directory is {}".format(self._cachedir))
|
||||
if not self._cachedir.exists():
|
||||
# Creates Ansible cache directory with right permissions
|
||||
# if it doesn't exist yet.
|
||||
display.vvv("Cache directory doesn't exist. Creating it.")
|
||||
try:
|
||||
self._cachedir.mkdir(mode=0o700, parents=True)
|
||||
except Exception as e:
|
||||
raise AnsibleError("""Unable to create {dir}.
|
||||
Original error was : {err}"""
|
||||
.format(dir=self._cachedir,
|
||||
err=to_native(e)))
|
||||
self._cache = cache_loader.get('jsonfile',
|
||||
_uri=self._cachedir,
|
||||
_timeout=self._timeout,
|
||||
)
|
||||
self._manage_cachedir(cachedir=cachedir, plugin='json')
|
||||
elif self._cache_plugin == 'yaml':
|
||||
self._manage_cachedir(cachedir=cachedir, plugin='yaml')
|
||||
elif self._cache_plugin == 'pickle':
|
||||
self._manage_cachedir(cachedir=cachedir, plugin='pickle')
|
||||
elif self._cache_plugin == 'memcached':
|
||||
# requires packages python3-memcache and memcached
|
||||
display.vvvv("Please make sure you have installed packages"
|
||||
"python3-memcache and memcached"
|
||||
)
|
||||
self._uri = self._readconfig(key='memcached_connection',
|
||||
default=['127.0.0.1:11211'],
|
||||
)
|
||||
else:
|
||||
raise AnsibleError("Cache plugin {} not supported"
|
||||
.format(self._cache_plugin))
|
||||
|
||||
self._cache = cache_loader.get(self._cache_plugin,
|
||||
_uri=self._uri,
|
||||
_timeout=self._timeout,
|
||||
)
|
||||
self._cachetoken = cache_loader.get(self._cache_plugin,
|
||||
_uri=self._uri,
|
||||
_timeout=self._timeouttoken,
|
||||
)
|
||||
|
||||
|
||||
def run(self, terms, variables=None, api_hostname=None, api_username=None,
|
||||
api_password=None, use_tls=True):
|
||||
|
||||
|
@ -546,7 +574,7 @@ class LookupModule(LookupBase):
|
|||
zones_name = [zone["name"][1:] for zone in zones]
|
||||
display.vvv("Storing dnszones in cache.")
|
||||
self._set_cache('dnszones', zones_name)
|
||||
|
||||
display.vvv('\n')
|
||||
return zones_name
|
||||
|
||||
def _getreverse(self, api_client):
|
||||
|
@ -615,6 +643,7 @@ class LookupModule(LookupBase):
|
|||
display.vvv("Storing dns reverse zones in cache.")
|
||||
self._set_cache('dnsreverse', list(set(res)))
|
||||
|
||||
display.vvv('\n')
|
||||
return res
|
||||
|
||||
def _rawquery(self, api_client, endpoint):
|
||||
|
@ -629,6 +658,8 @@ class LookupModule(LookupBase):
|
|||
res = api_client.list(endpoint)
|
||||
display.vvv("Storing result in cache.")
|
||||
self._set_cache(endpoint.replace('/', '_'), res)
|
||||
|
||||
display.vvv('\n')
|
||||
return res
|
||||
|
||||
def _get_role(self, api_client, role_name):
|
||||
|
@ -655,4 +686,5 @@ class LookupModule(LookupBase):
|
|||
display.vvv("Storing {} in cache.".format(role_name))
|
||||
self._set_cache(role_name, res)
|
||||
|
||||
display.vvv('\n')
|
||||
return res
|
||||
|
|
Loading…
Reference in New Issue