69 lines
2.2 KiB
Python
69 lines
2.2 KiB
Python
|
#!/usr/bin/python3
|
|||
|
|
|||
|
import signal, os, traceback, time, subprocess
|
|||
|
|
|||
|
import sys
|
|||
|
sys.path.append("/opt/bunkerweb/deps/python")
|
|||
|
sys.path.append("/opt/bunkerweb/utils")
|
|||
|
sys.path.append("/opt/bunkerweb/api")
|
|||
|
sys.path.append("/opt/bunkerweb/job")
|
|||
|
|
|||
|
from SwarmController import SwarmController
|
|||
|
from IngressController import IngressController
|
|||
|
from DockerController import DockerController
|
|||
|
from logger import log
|
|||
|
|
|||
|
# Get variables
|
|||
|
swarm = os.getenv("SWARM_MODE", "no") == "yes"
|
|||
|
kubernetes = os.getenv("KUBERNETES_MODE", "no") == "yes"
|
|||
|
docker_host = os.getenv("DOCKER_HOST", "unix:///var/run/docker.sock")
|
|||
|
wait_retry_interval = int(os.getenv("WAIT_RETRY_INTERVAL", "5"))
|
|||
|
|
|||
|
def exit_handler(signum, frame) :
|
|||
|
log("AUTOCONF", "ℹ️", "Stop signal received, exiting...")
|
|||
|
os._exit(0)
|
|||
|
signal.signal(signal.SIGINT, exit_handler)
|
|||
|
signal.signal(signal.SIGTERM, exit_handler)
|
|||
|
|
|||
|
try :
|
|||
|
|
|||
|
# Setup /data folder if needed
|
|||
|
proc = subprocess.run(["/opt/bunkerweb/helpers/data.sh", "AUTOCONF"], stdin=subprocess.DEVNULL, stderr=subprocess.STDOUT)
|
|||
|
if proc.returncode != 0 :
|
|||
|
os._exit(1)
|
|||
|
|
|||
|
# Instantiate the controller
|
|||
|
if swarm :
|
|||
|
log("AUTOCONF", "ℹ️", "Swarm mode detected")
|
|||
|
controller = SwarmController(docker_host)
|
|||
|
elif kubernetes :
|
|||
|
log("AUTOCONF", "ℹ️", "Kubernetes mode detected")
|
|||
|
controller = IngressController()
|
|||
|
else :
|
|||
|
log("AUTOCONF", "ℹ️", "Docker mode detected")
|
|||
|
controller = DockerController(docker_host)
|
|||
|
|
|||
|
# Wait for instances
|
|||
|
log("AUTOCONF", "ℹ️", "Waiting for BunkerWeb instances ...")
|
|||
|
instances = controller.wait(wait_retry_interval)
|
|||
|
log("AUTOCONF", "ℹ️", "BunkerWeb instances are ready 🚀")
|
|||
|
i = 1
|
|||
|
for instance in instances :
|
|||
|
log("AUTOCONF", "ℹ️", "Instance #" + str(i) + " : " + instance["name"])
|
|||
|
i += 1
|
|||
|
|
|||
|
# Run first configuration
|
|||
|
ret = controller.apply_config()
|
|||
|
if not ret :
|
|||
|
log("AUTOCONF", "❌", "Error while applying initial configuration")
|
|||
|
os._exit(1)
|
|||
|
|
|||
|
# Process events
|
|||
|
log("AUTOCONF", "ℹ️", "Processing events ...")
|
|||
|
controller.process_events()
|
|||
|
|
|||
|
except :
|
|||
|
log("AUTOCONF", "❌", "Exception while running autoconf :")
|
|||
|
print(traceback.format_exc())
|
|||
|
sys.exit(1)
|