87 lines
3.1 KiB
Python
87 lines
3.1 KiB
Python
#!/usr/bin/env python3
|
|
|
|
import os
|
|
import subprocess
|
|
import sys
|
|
from escape_handler import start_exit_handler
|
|
|
|
DOCKER_DIR = "/home/andiamolino/docker"
|
|
|
|
def get_running_containers():
|
|
"""Gibt eine Liste der laufenden Container zurück."""
|
|
result = subprocess.run(["docker", "ps", "--format", "{{.Names}}"], capture_output=True, text=True)
|
|
return result.stdout.strip().split('\n') if result.stdout else []
|
|
|
|
def stop_container(container_name):
|
|
"""Stoppt einen spezifischen Container."""
|
|
subprocess.run(["docker", "stop", container_name], check=True)
|
|
|
|
def start_docker_compose(dir_path):
|
|
"""Startet Docker-Compose in einem bestimmten Verzeichnis."""
|
|
print(f"Starte Docker-Compose in {dir_path}")
|
|
subprocess.run(["docker-compose", "up", "-d"], cwd=dir_path, check=True)
|
|
|
|
def get_docker_compose_dirs():
|
|
"""Findet alle Verzeichnisse mit einer docker-compose.yml Datei."""
|
|
dirs = []
|
|
for dir_name in os.listdir(DOCKER_DIR):
|
|
dir_path = os.path.join(DOCKER_DIR, dir_name)
|
|
if os.path.isdir(dir_path) and dir_name != "containerdaten":
|
|
if os.path.exists(os.path.join(dir_path, "docker-compose.yml")):
|
|
dirs.append(dir_path)
|
|
return dirs
|
|
|
|
def main():
|
|
start_exit_handler
|
|
running_containers = get_running_containers()
|
|
|
|
if running_containers:
|
|
print("Laufende Container:")
|
|
for container in running_containers:
|
|
print(f"- {container}")
|
|
|
|
choice = input("Möchten Sie laufende Container stoppen? (j/n): ").strip().lower()
|
|
if choice == 'j':
|
|
for container in running_containers:
|
|
stop_container(container)
|
|
print("Alle laufenden Container wurden gestoppt.")
|
|
|
|
start_new = input("Möchten Sie neue Container starten? (j/n): ").strip().lower()
|
|
if start_new != 'j':
|
|
print("Keine neuen Container werden gestartet. Programm wird beendet.")
|
|
sys.exit(0)
|
|
|
|
docker_dirs = get_docker_compose_dirs()
|
|
|
|
print("\nGefundene Docker-Compose-Projekte:")
|
|
for i, dir_path in enumerate(docker_dirs, 1):
|
|
print(f"{i}. {os.path.basename(dir_path)}")
|
|
|
|
print("\nWählen Sie die zu startenden Projekte (durch Kommas getrennte Nummern, oder 'alle'):")
|
|
choice = input().strip().lower()
|
|
|
|
if choice == 'alle':
|
|
to_start = docker_dirs
|
|
else:
|
|
try:
|
|
indices = [int(x.strip()) - 1 for x in choice.split(',')]
|
|
to_start = [docker_dirs[i] for i in indices if 0 <= i < len(docker_dirs)]
|
|
except ValueError:
|
|
print("Ungültige Eingabe. Beende Programm.")
|
|
sys.exit(1)
|
|
|
|
# Stelle sicher, dass Traefik zuerst gestartet wird
|
|
traefik_dir = next((d for d in to_start if os.path.basename(d) == "traefik"), None)
|
|
if traefik_dir:
|
|
to_start.remove(traefik_dir)
|
|
to_start.insert(0, traefik_dir)
|
|
|
|
for dir_path in to_start:
|
|
try:
|
|
start_docker_compose(dir_path)
|
|
except subprocess.CalledProcessError as e:
|
|
print(f"Fehler beim Starten von {os.path.basename(dir_path)}: {e}")
|
|
|
|
if __name__ == "__main__":
|
|
main()
|