import log import os import subprocess import time def copy_files_scp(scr: str = "/home/jonnybravo/Dokumente/", dest: str = 'ras-dan-01:/home/jonnybravo/.docker/hugo/content/', container: str = "hugo"): dest_host = dest.split(":")[0] dest_dir = dest.split(":")[1].rstrip("/") if ":" in dest else dest # compose.yml liegt zwei Ebenen über content/ # ~/.docker/hugo/content/ → ~/.docker/hugo/docker-compose.yml compose_file = os.path.join(os.path.dirname(dest_dir), "docker-compose.yml") ssh_opts = ["ssh", "-o", "StrictHostKeyChecking=no", dest_host] list_all_files_md = [os.path.join(scr, a) for a in os.listdir(scr) if a.endswith(".md")] for file in list_all_files_md: cmd = ["scp", "-o", "StrictHostKeyChecking=no", file, dest ] #print(cmd) result = subprocess.run(cmd, capture_output=True, text=True) if result.returncode != 0: log.log(f"SCP FEHLER: {result.stderr.strip() or result.stdout.strip()}", status="ERROR") return False else: log.log(f"Datei {file} wurde kopiert !", status="SUCCESS") if container == "": log.log("Es wird kein Container neugestartet", status="INFO") else: log.log(f"Der {container} wird auf {dest_host} via SSH neugestartet !", status="INFO") docker_cmd = ssh_opts + ["docker", "compose", "-f", compose_file, "restart", container] result_docker = subprocess.run(docker_cmd, capture_output=True, text=True) if result_docker.returncode != 0: log.log(f"Der {container} konnte nicht gestartet werden: {result_docker.stderr.strip() or result_docker.stdout.strip()}", status="ERROR") return False else: log.log(f"Der {container} konnte neu gestartet werden !", status="SUCCESS") # Warten bis Hugo antwortet (max 15s) deadline = time.time() + 15 while time.time() < deadline: check = subprocess.run( ssh_opts + ["curl", "-sk", "--max-time", "2", "-o", "/dev/null", "-w", "%{http_code}", "https://localhost:5443/"], capture_output=True, text=True, ) if check.stdout.strip() == "200": log.log("Hugo ist bereit und antwortet mit 200", status="SUCCESS") break time.sleep(1) else: log.log("Warnung: Hugo antwortet nicht innerhalb von 15s", status="WARN") return True if __name__ == "__main__": copy_files_scp()