mirror of
https://github.com/kevinveenbirkenbach/computer-playbook.git
synced 2025-08-26 21:45:20 +02:00
- Removed unused soft restart function and switched to argparse-based CLI. - Added --only argument to selectively restart subdirectories. - Updated systemctl service template to pass PATH_DOCKER_COMPOSE_INSTANCES as argument. - Ensures service unit correctly invokes the Python script with target path. See conversation: https://chatgpt.com/share/68a771d9-5fd8-800f-a410-08132699cc3a
61 lines
2.0 KiB
Python
61 lines
2.0 KiB
Python
import os
|
|
import sys
|
|
import subprocess
|
|
import argparse
|
|
|
|
def hard_restart_docker_services(dir_path):
|
|
"""
|
|
Perform a hard restart of docker-compose services in the given directory
|
|
using docker-compose down and docker-compose up -d.
|
|
"""
|
|
try:
|
|
print(f"Performing hard restart for docker-compose services in: {dir_path}")
|
|
subprocess.run(["docker-compose", "down"], cwd=dir_path, check=True)
|
|
subprocess.run(["docker-compose", "up", "-d"], cwd=dir_path, check=True)
|
|
print(f"Hard restart completed successfully in: {dir_path}")
|
|
except subprocess.CalledProcessError as e:
|
|
print(f"Error during hard restart in {dir_path}: {e}")
|
|
|
|
|
|
def main():
|
|
parser = argparse.ArgumentParser(
|
|
description="Restart docker-compose services in subdirectories."
|
|
)
|
|
parser.add_argument(
|
|
"parent_directory",
|
|
help="Path to the parent directory containing docker-compose projects"
|
|
)
|
|
parser.add_argument(
|
|
"--only",
|
|
nargs="+",
|
|
help="Restart only the specified subdirectories (by name)"
|
|
)
|
|
args = parser.parse_args()
|
|
|
|
parent_directory = args.parent_directory
|
|
|
|
if not os.path.isdir(parent_directory):
|
|
print(f"Error: {parent_directory} is not a valid directory.")
|
|
sys.exit(1)
|
|
|
|
for dir_entry in os.scandir(parent_directory):
|
|
if dir_entry.is_dir():
|
|
dir_path = dir_entry.path
|
|
dir_name = os.path.basename(dir_path)
|
|
print(f"Checking directory: {dir_path}")
|
|
|
|
docker_compose_file = os.path.join(dir_path, "docker-compose.yml")
|
|
|
|
if os.path.isfile(docker_compose_file):
|
|
if args.only and dir_name not in args.only:
|
|
print(f"Skipping {dir_name} (not in --only list).")
|
|
continue
|
|
print(f"Performing normal restart in {dir_name}...")
|
|
hard_restart_docker_services(dir_path)
|
|
else:
|
|
print(f"No docker-compose.yml found in {dir_path}. Skipping.")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|