templating - fixing bugs with autoconf

This commit is contained in:
bunkerity
2021-05-27 14:41:21 +02:00
parent f950abdc24
commit 0f8e56a668
6 changed files with 28 additions and 143 deletions

View File

@@ -1,5 +1,4 @@
# TODO : hard tests, jobs, check state when generating env, ...
# TODO : hard tests, jobs if swarm mode, check state when generating env, ...
from Config import Config
import utils
import os
@@ -23,17 +22,28 @@ class AutoConf :
def __gen_env(self) :
self.__env.clear()
# TODO : check actual state (e.g. : running ?)
for instance in self.__instances :
(id, name, labels) = self.__get_infos(self.__instances[instance])
for label in labels :
if label.startswith("bunkerized-nginx.") :
self.__env[label.replace("bunkerized-nginx.", "", 1)] = labels[label]
for id, instance in self.__instances.items() :
env = []
if self.__swarm :
env = instance.attrs["Spec"]["TaskTemplate"]["ContainerSpec"]["Env"]
else :
env = instance.attrs["Config"]["Env"]
for entry in env :
self.__env[entry.split("=")[0]] = entry.replace(entry.split("=")[0] + "=", "", 1)
if not "SERVER_NAME" in self.__env or self.__env["SERVER_NAME"] == "" :
self.__env["SERVER_NAME"] = []
else :
self.__env["SERVER_NAME"] = self.__env["SERVER_NAME"].split(" ")
for server in self.__servers :
(id, name, labels) = self.__get_infos(self.__servers[server])
first_server = labels["bunkerized-nginx.SERVER_NAME"].split(" ")[0]
for label in labels :
if label.startswith("bunkerized-nginx.") :
self.__env[first_server + "_" + label.replace("bunkerized-nginx.", "", 1)] = labels[label]
for server_name in labels["bunkerized-nginx.SERVER_NAME"].split(" ") :
if not server_name in self.__env["SERVER_NAME"] :
self.__env["SERVER_NAME"].append(server_name)
self.__env["SERVER_NAME"] = " ".join(self.__env["SERVER_NAME"])
def pre_process(self, objs) :
for instance in objs :

View File

@@ -60,7 +60,7 @@ class Config :
def generate(self, env) :
try :
# Write environment variables to fs
# Write environment variables to a file
with open("/tmp/variables.env", "w") as f :
for k, v in env.items() :
f.write(k + "=" + v + "\n")
@@ -68,8 +68,13 @@ class Config :
# Call the generator
proc = subprocess.run(["/bin/su", "-c", "/opt/gen/main.py --settings /opt/settings.json --templates /opt/confs --output /etc/nginx --variables /tmp/variables.env", "nginx"], capture_output=True)
# Print stdout/stderr just in case
# TODO
# Print stdout/stderr
stdout = proc.stdout.decode("ascii")
stderr = proc.stderr.decode("ascii")
if proc.stdout != "":
utils.log("[*] Generator output : " + stdout)
if proc.stderr != "" :
utils.log("[*] Generator error : " + stderr)
# We're done
if proc.returncode == 0 :
@@ -80,50 +85,6 @@ class Config :
utils.log("[!] Exception while generating site config : " + str(e))
return False
def activate(self, instances, vars, reload=True) :
try :
# Get first server name
first_server_name = vars["SERVER_NAME"].split(" ")[0]
# Check if file exists
if not os.path.isfile("/etc/nginx/" + first_server_name + "/server.conf") :
utils.log("[!] /etc/nginx/" + first_server_name + "/server.conf doesn't exist")
return False
# Include the server conf
utils.replace_in_file("/etc/nginx/nginx.conf", "}", "include /etc/nginx/" + first_server_name + "/server.conf;\n}")
# Reload
if not reload or self.reload(instances) :
return True
except Exception as e :
utils.log("[!] Exception while activating config : " + str(e))
return False
def deactivate(self, instances, vars) :
try :
# Get first server name
first_server_name = vars["SERVER_NAME"].split(" ")[0]
# Check if file exists
if not os.path.isfile("/etc/nginx/" + first_server_name + "/server.conf") :
utils.log("[!] /etc/nginx/" + first_server_name + "/server.conf doesn't exist")
return False
# Remove the include
utils.replace_in_file("/etc/nginx/nginx.conf", "include /etc/nginx/" + first_server_name + "/server.conf;\n", "")
# Reload
if self.reload(instances) :
return True
except Exception as e :
utils.log("[!] Exception while deactivating config : " + str(e))
return False
def reload(self, instances) :
return self.__api_call(instances, "/reload")