diff --git a/lookup_plugins/re2oapi.py b/lookup_plugins/re2oapi.py index 2a8b4819..baf2f416 100644 --- a/lookup_plugins/re2oapi.py +++ b/lookup_plugins/re2oapi.py @@ -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