mirror of
https://github.com/ansible/awx.git
synced 2024-10-31 23:51:09 +03:00
65 lines
1.9 KiB
Python
Executable File
65 lines
1.9 KiB
Python
Executable File
#!/usr/bin/env python3
|
|
|
|
import os
|
|
import sys
|
|
import hashlib
|
|
from supervisor import childutils
|
|
|
|
|
|
def hash(f):
|
|
s = hashlib.sha1()
|
|
with open(f, "rb") as fd:
|
|
for chunk in iter(lambda: fd.read(4096), b""):
|
|
s.update(chunk)
|
|
return s.hexdigest()
|
|
|
|
|
|
def last_hash(f):
|
|
with open(f, "r") as fd:
|
|
return fd.read().strip()
|
|
|
|
|
|
def write_hash(f, h):
|
|
with open(f, "w") as fd:
|
|
fd.write(h)
|
|
|
|
|
|
def main():
|
|
settings_file = "/etc/tower/settings.py"
|
|
hash_file = "/var/lib/awx/.configsha"
|
|
|
|
while 1:
|
|
rpc = childutils.getRPCInterface(os.environ)
|
|
headers, payload = childutils.listener.wait(sys.stdin, sys.stdout)
|
|
if not headers['eventname'].startswith('TICK'):
|
|
childutils.listener.ok(sys.stdout)
|
|
continue
|
|
try:
|
|
current_hash = hash(settings_file)
|
|
except:
|
|
sys.stderr.write("Could not open settings.py, skipping config watcher")
|
|
childutils.listener.ok(sys.stdout)
|
|
continue
|
|
try:
|
|
if current_hash == last_hash(hash_file):
|
|
childutils.listener.ok(sys.stdout)
|
|
continue
|
|
else:
|
|
sys.stderr.write("Config changed, reloading services")
|
|
for proc in rpc.supervisor.getAllProcessInfo():
|
|
group = proc['group']
|
|
name = proc['name']
|
|
program = "{}:{}".format(group, name)
|
|
if group == "tower-processes":
|
|
sys.stderr.write('Restarting %s\n' % program)
|
|
rpc.supervisor.stopProcess(program)
|
|
rpc.supervisor.startProcess(program)
|
|
except:
|
|
sys.stderr.write("No previous hash found")
|
|
|
|
write_hash(hash_file, current_hash)
|
|
childutils.listener.ok(sys.stdout)
|
|
|
|
if __name__ == '__main__':
|
|
main()
|