2016-08-01 15:24:13 +03:00
|
|
|
import os
|
2016-08-17 12:13:02 +03:00
|
|
|
import logging
|
2016-10-14 11:25:53 +03:00
|
|
|
import requests
|
2016-08-01 15:24:13 +03:00
|
|
|
|
2016-08-01 16:09:07 +03:00
|
|
|
|
2016-08-17 12:13:02 +03:00
|
|
|
# Get old configuration
|
2016-08-01 16:09:07 +03:00
|
|
|
def get_old(name, service_conf):
|
2016-08-17 12:13:02 +03:00
|
|
|
|
2016-08-01 16:09:07 +03:00
|
|
|
try:
|
|
|
|
path = '/var/tmp/surok.' + name
|
|
|
|
f = open(path, 'r')
|
|
|
|
old = f.read()
|
|
|
|
f.close()
|
|
|
|
except Exception as e:
|
|
|
|
print(str(e))
|
|
|
|
return 0
|
|
|
|
|
|
|
|
if old == service_conf:
|
|
|
|
return 1
|
|
|
|
else:
|
|
|
|
return 0
|
2016-08-17 12:13:02 +03:00
|
|
|
|
2016-08-01 16:09:07 +03:00
|
|
|
|
|
|
|
def write_lock(name, service_conf):
|
|
|
|
path = '/var/tmp/surok.' + name
|
|
|
|
f = open(path, 'w')
|
2016-08-01 15:24:13 +03:00
|
|
|
f.write(service_conf)
|
|
|
|
f.close()
|
|
|
|
|
2016-08-01 16:09:07 +03:00
|
|
|
|
2016-08-04 11:34:02 +03:00
|
|
|
def do_reload(service_conf, app_conf):
|
2016-08-17 12:13:02 +03:00
|
|
|
logging.warning('Write new configuration of ' + app_conf['conf_name'])
|
2016-08-01 16:09:07 +03:00
|
|
|
|
2016-08-04 11:34:02 +03:00
|
|
|
f = open(app_conf['dest'], 'w')
|
|
|
|
f.write(service_conf)
|
|
|
|
f.close()
|
2016-08-01 16:09:07 +03:00
|
|
|
|
2016-08-04 11:34:02 +03:00
|
|
|
write_lock(app_conf['conf_name'], service_conf)
|
2016-08-01 16:09:07 +03:00
|
|
|
|
2016-08-04 11:34:02 +03:00
|
|
|
# Reload conf
|
|
|
|
stdout = os.popen(app_conf['reload_cmd']).read()
|
|
|
|
return stdout
|
|
|
|
|
|
|
|
|
2016-08-17 12:13:02 +03:00
|
|
|
def reload_conf(service_conf, app_conf, first, conf):
|
|
|
|
|
2016-08-04 11:34:02 +03:00
|
|
|
# Check first loop
|
2016-08-17 12:13:02 +03:00
|
|
|
if first is True:
|
2016-08-04 11:34:02 +03:00
|
|
|
stdout = do_reload(service_conf, app_conf)
|
|
|
|
first = False
|
2016-08-17 12:13:02 +03:00
|
|
|
logging.info(stdout)
|
|
|
|
return first
|
2016-08-04 11:34:02 +03:00
|
|
|
|
2016-10-14 11:25:53 +03:00
|
|
|
# Check marathon enabled in configuration
|
|
|
|
if conf['marathon']['enabled'] is True:
|
|
|
|
restart_self_in_marathon(conf['marathon'])
|
|
|
|
|
2016-08-04 11:34:02 +03:00
|
|
|
if get_old(app_conf['conf_name'], service_conf) != 1:
|
|
|
|
stdout = do_reload(service_conf, app_conf)
|
2016-08-17 12:13:02 +03:00
|
|
|
logging.info(stdout)
|
|
|
|
return first
|
2016-08-01 16:09:07 +03:00
|
|
|
else:
|
2016-08-17 12:13:02 +03:00
|
|
|
if conf['loglevel'] == 'debug':
|
|
|
|
logging.debug('Same config ' +
|
|
|
|
app_conf['conf_name'] +
|
|
|
|
' Skip reload')
|
|
|
|
return first
|
2016-10-14 11:25:53 +03:00
|
|
|
|
|
|
|
|
|
|
|
# Do POST request to marathon API
|
|
|
|
# /v2/apps//app/name/restart
|
|
|
|
def restart_self_in_marathon(marathon):
|
|
|
|
host = marathon['host']
|
|
|
|
|
|
|
|
# Check MARATHON_APP_ID environment varible
|
|
|
|
if os.environ.get('MARATHON_APP_ID') is not True:
|
|
|
|
logging.error('Cannot find MARATHON_APP_ID. Not in Mesos?')
|
|
|
|
sys.exit(2)
|
|
|
|
app_id = os.environ['MARATHON_APP_ID']
|
|
|
|
uri = 'http://' + host + '/v2/apps/' + app_id + '/restart'
|
|
|
|
|
|
|
|
# Ok. In this step we made restart request to Marathon
|
|
|
|
if marathon['force'] is True:
|
|
|
|
r = requests.post(uri, data = {'force': 'true'})
|
|
|
|
else:
|
|
|
|
r = requests.post(uri, data = {})
|
|
|
|
|