POC of re2oAPI lookup plugin

certbot_on_virtu
_pollion 2020-04-19 18:26:32 +02:00
parent 996fe339de
commit 2d97278f4d
3 changed files with 71 additions and 0 deletions

3
.gitmodules vendored
View File

@ -1,3 +1,6 @@
[submodule "roles/re2o-mail-server/templates/re2o-services/mail-server/mail-aliases"]
path = roles/re2o-mail-server/templates/re2o-services/mail-server/mail-aliases
url = https://gitlab.crans.org/nounous/mail-aliases
[submodule "re2o-re2oapi"]
path = lookup_plugins/re2oapi
url = git@gitlab.crans.org:nounous/re2o-re2oapi.git

@ -0,0 +1 @@
Subproject commit 6565b92f3bfc13d02b95888ae021f5bd6f7ef317

View File

@ -0,0 +1,67 @@
"""
A Proof Of Concept of lookup plugin to query the re2o API.
For a detailed example look at https://github.com/ansible/ansible/blob/3dbf89e8aeb80eb2d1484b1cb63458e4bb12795a/lib/ansible/plugins/lookup/aws_ssm.py
For now:
- Need to clone nounous/re2o-re2oapi.git and checkout to crans branch.
- This Re2oAPIClient needs python3-iso8601
TODO: Implement a small client for our needs, this will also remove the sys.path extension ...
"""
from ansible.plugins.lookup import LookupBase
from ansible.errors import AnsibleError
import sys
sys.path.append('./lookup_plugins/')
from re2oapi import Re2oAPIClient
class LookupModule(LookupBase):
"""
If terms = dnszones then this module queries the re2o api and returns the list of all dns zones
"""
def run(self, terms, variables=None, api_hostname=None, api_username=None,
api_password=None, use_tls=True):
"""
:arg terms: a list of lookups to run
e.g. ['dnszones']
:kwarg variables: ansible variables active at the time of the lookup
:kwarg api_hostname: The hostname of re2o instance.
:kwarg api_username: The username to connect to the API.
:kwarg api_password: The password to use to connect to the API.
:kwarg use_tls: A boolean to specify whether to use tls or not. You should !
:returns: A list of results to the specific queries.
"""
if api_hostname is None:
raise AnsibleError('You must specify a hostname to contact re2oAPI')
if api_username is None:
raise AnsibleError('You must specify a valid username to connect to re2oAPI')
if api_password is None:
raise AnsibleError('You must specify a valid password to connect to re2oAPI')
api_client = Re2oAPIClient(api_hostname, api_username, api_password, use_tls=True)
res = []
for term in terms:
if term == 'dnszones':
res.append(self._getzones(api_client))
return res
def _getzones(self, api_client):
zones = api_client.list('dns/zones')
zones_name = [zone["name"][1:] for zone in zones]
return zones_name