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