57 lines
2.6 KiB
Python
57 lines
2.6 KiB
Python
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()
|
|
|