templating - fixing bugs with autoconf
This commit is contained in:
@@ -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 :
|
||||
|
||||
@@ -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")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user