[re2o_lookup] Adapt get_role from bcfg2/ip.py

certbot_on_virtu
_pollion 2020-04-26 14:49:29 +02:00
parent 2dbe3c50b9
commit a44eb7ea54
1 changed files with 27 additions and 1 deletions

View File

@ -12,6 +12,7 @@ import datetime
import requests import requests
import stat import stat
import json import json
import collections
from ansible.module_utils._text import to_native from ansible.module_utils._text import to_native
from ansible.plugins.lookup import LookupBase from ansible.plugins.lookup import LookupBase
@ -309,6 +310,10 @@ class LookupModule(LookupBase):
- dnszones: Queries the re2o API and returns the list of all dns zones - dnszones: Queries the re2o API and returns the list of all dns zones
nicely formatted to be rendered in a template. nicely formatted to be rendered in a template.
- get_role, role_name: Works in pair. Fails if role_name not provided.
Queries the re2o API and returns the list of
all machines whose role_type is role_name.
If a term is not in the previous list, make a raw query to the API If a term is not in the previous list, make a raw query to the API
with endpoint term. with endpoint term.
@ -361,10 +366,25 @@ class LookupModule(LookupBase):
api_password, use_tls=True) api_password, use_tls=True)
res = [] res = []
for term in terms: dterms = collections.deque(terms)
machines_roles = None # TODO : Cache this.
display.vvv("Lookup terms are {}".format(terms))
while dterms:
term = dterms.popleft()
display.v("\nLookup for {} \n".format(term)) display.v("\nLookup for {} \n".format(term))
if term == 'dnszones': if term == 'dnszones':
res.append(self._getzones(api_client)) res.append(self._getzones(api_client))
elif term == 'get_role':
try:
role_name = dterms.popleft()
roles, machines_roles = self._get_role(api_client,
role_name,
machines_roles,
)
res.append(roles)
except IndexError:
display.v("Error in re2oapi : No role_name provided")
raise AnsibleError("role_name not found in arguments.")
else: else:
try: try:
res.append(self._rawquery(api_client, term)) res.append(self._rawquery(api_client, term))
@ -384,3 +404,9 @@ class LookupModule(LookupBase):
def _rawquery(self, api_client, endpoint): def _rawquery(self, api_client, endpoint):
display.v("Make a raw query to endpoint {}".format(endpoint)) display.v("Make a raw query to endpoint {}".format(endpoint))
return api_client.list(endpoint) return api_client.list(endpoint)
def _get_role(self, api_client, role_name, machines_roles):
if machines_roles is None:
machines_roles = api_client.list("machines/role")
return list(filter(lambda machine: machine["role_type"] == role_name,
machines_roles)), machines_roles