1
0
Fork 0
mirror of https://github.com/Luzifer/dns.git synced 2024-11-09 22:50:06 +00:00
dns/consul.py
Knut Ahlers 37da9126c6
Add consul support
Signed-off-by: Knut Ahlers <knut@ahlers.me>
2018-12-14 19:18:10 +01:00

46 lines
1.1 KiB
Python

import base64
import json
import os
import requests
def query_zone_entries(zone):
if os.getenv('CONSUL_HTTP_ADDR') == '' or os.getenv('CONSUL_HTTP_TOKEN') == '':
raise Exception(
'Consul query does not work with CONSUL_HTTP_ADDR or CONSUL_HTTP_TOKEN unset')
return parse_raw_consul(zone)
def read_raw_from_consul(zone):
resp = requests.get('{}/v1/kv/dns/{}?recurse=true'.format(
os.getenv('CONSUL_HTTP_ADDR'),
zone.rstrip('.'),
),
headers={
'X-Consul-Token': os.getenv('CONSUL_HTTP_TOKEN'),
})
if resp.status_code == 404:
return []
return resp.json()
def parse_raw_consul(zone):
entries = []
for raw_entry in read_raw_from_consul(zone):
sub_entries = json.loads(base64.b64decode(raw_entry['Value']))
# Key consists of at least 2 elements: dns/ahlers.me/subdomain OR dns/ahlers.me
key = raw_entry['Key'].split('/')[2:]
name = ''
if len(key) > 0 and key[0] != '@':
name = key[0]
for entry in sub_entries:
entry['name'] = name
entries.append(entry)
return entries