32 lines
1.0 KiB
Python
32 lines
1.0 KiB
Python
from dataclasses import dataclass, field
|
|
import yaml
|
|
|
|
|
|
@dataclass
|
|
class ProxyRoute:
|
|
domain: str
|
|
target_host: str
|
|
target_port: int
|
|
containers: list[str] = field(default_factory=list)
|
|
timeout_seconds: int = 0 # idle timeout before stopping container (0 = never)
|
|
load_seconds: int = 0 # seconds to wait after starting container
|
|
|
|
|
|
def load_config(path: str) -> dict[str, ProxyRoute]:
|
|
"""Parse config.yml and return dict of domain -> ProxyRoute."""
|
|
with open(path) as f:
|
|
data = yaml.safe_load(f)
|
|
routes: dict[str, ProxyRoute] = {}
|
|
for h in data.get('proxy_hosts', []):
|
|
containers = [c['container_name'] for c in h.get('containers', [])]
|
|
route = ProxyRoute(
|
|
domain=h['domain'],
|
|
target_host=h['proxy_host'],
|
|
target_port=h['proxy_port'],
|
|
containers=containers,
|
|
timeout_seconds=h.get('proxy_timeout_seconds', 0),
|
|
load_seconds=h.get('proxy_load_seconds', 0),
|
|
)
|
|
routes[route.domain] = route
|
|
return routes
|