2016-08-01 14:56:35 +03:00
|
|
|
import dns.resolver
|
|
|
|
|
2016-08-09 15:23:32 +03:00
|
|
|
|
|
|
|
# Resolve service from mesos-dns SRV record
|
|
|
|
# return dict {"servicename": [{"name": "service.f.q.d.n", "port": 9999}]}
|
2016-08-01 14:56:35 +03:00
|
|
|
def resolve(app, conf):
|
2016-08-03 09:54:09 +03:00
|
|
|
hosts = {}
|
2016-08-02 19:02:25 +03:00
|
|
|
services = app['services']
|
2016-08-01 14:56:35 +03:00
|
|
|
domain = conf['domain']
|
2016-08-02 19:02:25 +03:00
|
|
|
for service in services:
|
2016-08-03 09:54:09 +03:00
|
|
|
hosts[service['name']] = []
|
|
|
|
try:
|
2016-08-09 15:23:32 +03:00
|
|
|
for rdata in dns.resolver.query('_' +
|
|
|
|
service['name'] + '.' +
|
|
|
|
service['group'] + '._tcp.' +
|
|
|
|
domain, 'SRV'):
|
2016-08-03 09:54:09 +03:00
|
|
|
info = str(rdata).split()
|
2016-08-09 15:23:32 +03:00
|
|
|
server = {'name': info[3], 'port': info[2]}
|
2016-08-03 09:54:09 +03:00
|
|
|
|
2016-08-09 15:23:32 +03:00
|
|
|
hosts[service['name']].append(server)
|
2016-08-03 09:54:09 +03:00
|
|
|
except Exception as e:
|
2016-08-09 15:23:32 +03:00
|
|
|
print(str(e) + ": Could not resolve " +
|
|
|
|
service['name'] + '.' +
|
|
|
|
service['group'] + '._tcp.' + domain)
|
2016-08-01 14:56:35 +03:00
|
|
|
|
|
|
|
return hosts
|