diff --git a/.gitignore b/.gitignore index ffa90d4..6e332f6 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,4 @@ surok/__pycache__ __pycache__ +*.pyc +*.swp diff --git a/conf.d/1.json b/conf.d/1.json deleted file mode 100644 index 0967ef4..0000000 --- a/conf.d/1.json +++ /dev/null @@ -1 +0,0 @@ -{} diff --git a/conf.d/selfcheck.json b/conf.d/selfcheck.json new file mode 100644 index 0000000..56cec93 --- /dev/null +++ b/conf.d/selfcheck.json @@ -0,0 +1,12 @@ +{ + "services": [ + { + "name": "", + "group": "mesos" + } + ], + "conf_name": "selfcheck", + "template": "templates/selfcheck.jj2", + "dest": "selfcheck", + "reload_cmd": "/bin/echo selfcheck ok" +} diff --git a/conf/surok.json b/conf/surok.json index 96046a7..ecdca24 100644 --- a/conf/surok.json +++ b/conf/surok.json @@ -1,4 +1,7 @@ { - "marathon": "10.0.1.199:8080", - "confd": "conf.d" + "marathon": "TODO", + "confd": "conf.d", + "domain": "marathon.mesos", + "wait_time": 20, + "lock_dir": "/var/tmp" } diff --git a/surok/discovery.py b/surok/discovery.py index b43a298..f4a6ff4 100644 --- a/surok/discovery.py +++ b/surok/discovery.py @@ -1,11 +1,18 @@ import dns.resolver def resolve(app, conf): - hosts = [] + hosts = {} + services = app['services'] domain = conf['domain'] - for rdata in dns.resolver.query('_' + app['name'] + '.' + app['group'] + '._tcp.' + domain, 'SRV'): - info = str(rdata).split() - server = { 'name': info[3], 'port': info[2] } - hosts.append(server) + for service in services: + hosts[service['name']] = [] + try: + for rdata in dns.resolver.query('_' + service['name'] + '.' + service['group'] + '._tcp.' + domain, 'SRV'): + info = str(rdata).split() + server = { 'name': info[3], 'port': info[2] } + + hosts[ service['name'] ].append(server) + except Exception as e: + print("Could not resolve " + service['name'] + '.' + service['group'] + '._tcp.' + domain) return hosts diff --git a/surok/system.py b/surok/system.py index 686fca8..bd1bb7e 100644 --- a/surok/system.py +++ b/surok/system.py @@ -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() diff --git a/surok/templates.py b/surok/templates.py index 6fd3363..8056af0 100644 --- a/surok/templates.py +++ b/surok/templates.py @@ -1,4 +1,5 @@ from jinja2 import Environment, PackageLoader, Template +import os # Return rendered configuration @@ -8,5 +9,6 @@ def gen(my, jj2): f.close() template = Template(temp) + my['env'] = os.environ return template.render(my=my) diff --git a/templates/nginx_proxy.jj2 b/templates/nginx_proxy.jj2 new file mode 100644 index 0000000..4abe0b3 --- /dev/null +++ b/templates/nginx_proxy.jj2 @@ -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 / { + } +} diff --git a/templates/selfcheck.jj2 b/templates/selfcheck.jj2 new file mode 100644 index 0000000..d86bac9 --- /dev/null +++ b/templates/selfcheck.jj2 @@ -0,0 +1 @@ +OK