""" 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 and api_password is None: api_username = variables.get('vault_re2o_service_user') api_password = variables.get('vault_re2o_service_password') 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