autoconf - various bug fixes in Swarm mode

This commit is contained in:
bunkerity 2021-07-30 17:08:54 +02:00
parent f866ef6325
commit 24d9cce82f
No known key found for this signature in database
GPG Key ID: 3D80806F12602A7C
9 changed files with 46 additions and 10 deletions

View File

@ -12,6 +12,21 @@ class Config :
self.__type = type self.__type = type
self.__api_uri = api_uri self.__api_uri = api_uri
def __jobs(self) :
log("config", "INFO", "starting jobs ...")
proc = subprocess.run(["/bin/su", "-c", "/opt/bunkerized-nginx/entrypoint/jobs.sh", "nginx"], capture_output=True)
stdout = proc.stdout.decode("ascii")
stderr = proc.stderr.decode("ascii")
if len(stdout) > 1 :
log("config", "INFO", "jobs stdout : " + stdout)
if stderr != "" :
log("config", "ERROR", "jobs stderr : " + stderr)
if proc.returncode != 0 :
log("config", "ERROR", "jobs error (return code = " + str(proc.returncode) + ")")
return False
return True
def gen(self, env) : def gen(self, env) :
try : try :
# Write environment variables to a file # Write environment variables to a file

View File

@ -11,7 +11,7 @@ class Type(Enum) :
class Controller(ABC) : class Controller(ABC) :
def __init__(self, type, api_uri=None, lock=None) : def __init__(self, type, api_uri=None, lock=None) :
self.__config = Config(type, api_uri) self._config = Config(type, api_uri)
self.lock = lock self.lock = lock
@abstractmethod @abstractmethod
@ -27,7 +27,11 @@ class Controller(ABC) :
return fixed_env return fixed_env
def gen_conf(self, env) : def gen_conf(self, env) :
return self.__config.gen(env) return self._config.gen(env)
@abstractmethod
def wait(self) :
pass
@abstractmethod @abstractmethod
def process_events(self, current_env) : def process_events(self, current_env) :
@ -38,4 +42,4 @@ class Controller(ABC) :
pass pass
def _reload(self, instances) : def _reload(self, instances) :
return self.__config.reload(instances) return self._config.reload(instances)

View File

@ -57,3 +57,7 @@ class DockerController(Controller.Controller) :
def reload(self) : def reload(self) :
return self._reload(self.__get_instances()) return self._reload(self.__get_instances())
def wait(self) :
# TODO : healthcheck ?
return True

View File

@ -1,5 +1,5 @@
from kubernetes import client, config, watch from kubernetes import client, config, watch
from threading import Thread from threading import Thread, Lock
import Controller import Controller
@ -96,3 +96,6 @@ class IngressController(Controller.Controller) :
def reload(self) : def reload(self) :
return self._reload(self.__get_ingresses()) return self._reload(self.__get_ingresses())
def wait(self) :
return self._config.wait(self.__get_ingresses())

View File

@ -1,4 +1,5 @@
import docker import docker
from threading import Lock
from logger import log from logger import log
@ -59,3 +60,6 @@ class SwarmController(Controller.Controller) :
def reload(self) : def reload(self) :
return self._reload(self.__get_instances()) return self._reload(self.__get_instances())
def wait(self) :
return self._config.wait(self.__get_instances())

View File

@ -28,12 +28,18 @@ else :
# Run the reload server in background if needed # Run the reload server in background if needed
if swarm or kubernetes : if swarm or kubernetes :
log("autoconf", "INFO", "start reload server in background")
(server, thread) = run_reload_server(controller) (server, thread) = run_reload_server(controller)
# Apply the first config for existing services # Apply the first config for existing services
current_env = controller.get_env() current_env = controller.get_env()
if current_env != {} : if current_env != {} :
controller.gen_conf(current_env) log("autoconf", "INFO", "generating the initial configuration...")
if controller.gen_conf(current_env) :
log("autoconf", "INFO", "initial configuration successfully generated")
else :
log("autoconf", "ERROR", "error while generating initial configuration")
# Process events # Process events
log("autoconf", "INFO", "waiting for events ...")
controller.process_events(current_env) controller.process_events(current_env)

View File

@ -1,4 +1,4 @@
#!/bin/bash #!/bin/sh
# /etc/letsencrypt # /etc/letsencrypt
if [ ! -r "/etc/letsencrypt" ] || [ ! -x "/etc/letsencrypt" ] ; then if [ ! -r "/etc/letsencrypt" ] || [ ! -x "/etc/letsencrypt" ] ; then

View File

@ -1,4 +1,4 @@
#!/bin/bash #!/bin/sh
# /etc/letsencrypt # /etc/letsencrypt
if [ ! -w "/etc/letsencrypt" ] || [ ! -r "/etc/letsencrypt" ] || [ ! -x "/etc/letsencrypt" ] ; then if [ ! -w "/etc/letsencrypt" ] || [ ! -r "/etc/letsencrypt" ] || [ ! -x "/etc/letsencrypt" ] ; then

View File

@ -1,4 +1,4 @@
import abc, requests, redis, os, datetime, traceback, re, shutil, enum, filecmp, subprocess import abc, requests, redis, os, datetime, traceback, re, shutil, enum, filecmp, subprocess, stat, socket
from logger import log from logger import log
@ -19,9 +19,9 @@ class JobManagement() :
if os.path.isfile("/usr/sbin/nginx") and os.path.isfile("/tmp/nginx.pid") : if os.path.isfile("/usr/sbin/nginx") and os.path.isfile("/tmp/nginx.pid") :
self.__local_nginx = True self.__local_nginx = True
self.__autoconf_socket = None self.__autoconf_socket = None
if os.path.exists("/tmp/autoconf.sock") and stat.S_ISSOCK(os.stat("/tmp/autoconf.sock")) : if os.path.exists("/tmp/autoconf.sock") and stat.S_ISSOCK(os.stat("/tmp/autoconf.sock").st_mode) :
self.__autoconf_socket = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) self.__autoconf_socket = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
self.__autoconf_socket.connect() self.__autoconf_socket.connect("/tmp/autoconf.sock")
def __autoconf_order(self, order) : def __autoconf_order(self, order) :
self.__autoconf_socket.sendall(order) self.__autoconf_socket.sendall(order)