文件
websafe-kb/scripts/lab/compose.py

44 行
1.5 KiB
Python

from __future__ import annotations
from pathlib import Path
from typing import Any, Dict, Tuple
from lab.utils import write_yaml
def compose_payload(profile: Dict[str, Any]) -> Dict[str, Any]:
services = {}
for service_name, service in profile.get("services", {}).items():
payload = {
"image": service["image"],
"networks": ["labnet"],
}
if service.get("ports"):
payload["ports"] = service["ports"]
if service.get("environment"):
payload["environment"] = service["environment"]
if service.get("command"):
payload["command"] = service["command"]
if service.get("working_dir"):
payload["working_dir"] = service["working_dir"]
if service.get("volumes"):
payload["volumes"] = service["volumes"]
if service.get("healthcheck"):
payload["healthcheck"] = service["healthcheck"]
if service.get("build"):
payload["build"] = service["build"]
if service.get("depends_on"):
payload["depends_on"] = service["depends_on"]
services[service_name] = payload
return {
"services": services,
"networks": {"labnet": {"driver": "bridge"}},
}
def generate_compose(profile: Dict[str, Any], run_dir: Path) -> Tuple[Path, Dict[str, Any]]:
payload = compose_payload(profile)
compose_path = run_dir / "compose" / "compose.yaml"
write_yaml(compose_path, payload)
return compose_path, payload