[re2o_lookup] Get ipv6 prefix and ipv4 cidrs from subnet_names.

certbot_on_virtu
_pollion 2020-05-17 19:04:22 +02:00
parent aed4b4fadf
commit 011e743635
1 changed files with 48 additions and 0 deletions

View File

@ -524,6 +524,26 @@ class LookupModule(LookupBase):
except IndexError:
display.v("Error in re2oapi : No role_name provided")
raise AnsibleError("role_name not found in arguments.")
elif term == 'prefixv6':
prefixes = []
while dterms:
subnet_name = dterms.popleft()
prefixes.append(self._get_prefix(api_client, subnet_name))
if prefixes:
res.extend(prefixes)
else:
display.v("Error in re2oapi : No subnet_name provided")
raise AnsibleError("subnet_name not found in arguments.")
elif term == 'cidrs':
cidrs = []
while dterms:
subnet_name = dterms.popleft()
cidrs.append(self._get_cidrs(api_client, subnet_name))
if cidrs:
res.extend(cidrs)
else:
display.v("Error in re2oapi : No subnet_name provided")
raise AnsibleError("subnet_name not found in arguments.")
else:
try:
res.append(self._rawquery(api_client, term))
@ -688,3 +708,31 @@ class LookupModule(LookupBase):
display.vvv('\n')
return res
def _get_prefix(self, api_client, subnet_name):
prefixv6 = None
if self._is_cached(subnet_name):
display.vvv("Found subnet {} in cache.".format(subnet_name))
prefixv6 = self._get_cache(subnet_name)
else:
Mtypes = self._rawquery(api_client, 'machines/iptype')
iptype = list(filter(lambda x: x['type'] == subnet_name, Mtypes))
prefixv6 = iptype[0]['prefix_v6'] + '/64'
display.vvv("Storing subnet {} in cache".format(subnet_name))
self._set_cache(subnet_name, prefixv6)
return prefixv6
def _get_cidrs(self, api_client, subnet_name):
cidrs = None
if self._is_cached(subnet_name):
display.vvv("Found subnet {} in cache.".format(subnet_name))
cidrs = self._get_cache(subnet_name)
else:
Mtypes = self._rawquery(api_client, 'machines/iptype')
iptype = list(filter(lambda x: x['type'] == subnet_name, Mtypes))[0]
ips = iptype['domaine_ip_start']
ipe = iptype['domaine_ip_stop']
cidrs = str(netaddr.iprange_to_cidrs(ips, ipe)[0])
display.vvv("Storing subnet {} in cache".format(subnet_name))
self._set_cache(subnet_name, cidrs)
return cidrs