Multiple service discovery

This commit is contained in:
Difrex 2016-08-02 19:02:25 +03:00
parent 651ed3420c
commit d62a424cf2
7 changed files with 39 additions and 10 deletions

2
.gitignore vendored
View File

@ -1,2 +1,4 @@
surok/__pycache__
__pycache__
*.pyc
*.swp

View File

@ -1 +1,12 @@
{}
{
"services": [
{
"name": "kioskservice",
"group": "production.romania"
}
],
"conf_name": "test",
"template": "templates/nginx_proxy.jj2",
"dest": "emailsender",
"reload_cmd": "/bin/echo reload nginx"
}

View File

@ -1,4 +1,7 @@
{
"marathon": "10.0.1.199:8080",
"confd": "conf.d"
"confd": "conf.d",
"domain": "marathon.mesos",
"wait_time": 20,
"lock_dir": "/var/tmp"
}

View File

@ -9,7 +9,7 @@ from surok.discovery import resolve
from surok.system import reload_conf
# Load base configurations
f = open('/etc/surok/conf/surok.json', 'r')
f = open('conf/surok.json', 'r')
conf = json.loads(f.read())
print(conf)
f.close()
@ -36,7 +36,7 @@ while 1:
for app in confs:
app_conf = load_app_conf(app)
app_hosts = resolve(app_conf, conf)
my = {'app': app_conf['name'], 'hosts': app_hosts}
my = { 'hosts': app_hosts }
service_conf = gen(my, app_conf['template'])
print(reload_conf(service_conf, app_conf))

View File

@ -2,10 +2,12 @@ import dns.resolver
def resolve(app, conf):
hosts = []
services = app['services']
domain = conf['domain']
for rdata in dns.resolver.query('_' + app['name'] + '.' + app['group'] + '._tcp.' + domain, 'SRV'):
for service in services:
for rdata in dns.resolver.query('_' + service['name'] + '.' + service['group'] + '._tcp.' + domain, 'SRV'):
info = str(rdata).split()
server = { 'name': info[3], 'port': info[2] }
server = { service['name']: { 'name': info[3], 'port': info[2] } }
hosts.append(server)
return hosts

View File

@ -28,14 +28,14 @@ def write_lock(name, service_conf):
def reload_conf(service_conf, app_conf):
# Check old config
if get_old(app_conf['name'], service_conf) != 1:
if get_old(app_conf['conf_name'], service_conf) != 1:
print('Write new configuration')
f = open(app_conf['dest'], 'w')
f.write(service_conf)
f.close()
write_lock(app_conf['name'], service_conf)
write_lock(app_conf['conf_name'], service_conf)
# Reload conf
stdout = os.popen(app_conf['reload_cmd']).read()

11
templates/nginx_proxy.jj2 Normal file
View File

@ -0,0 +1,11 @@
{% for host in my['hosts'] %}
server {{host['kioskservice']['name']}}:{{host['kioskservice']['port']}};
{% endfor %}
server {
listen 0.0.0.0:80;
server_name _;
location / {
}
}