generated from coulomb/repo-seed
66 lines
1.6 KiB
Python
66 lines
1.6 KiB
Python
"""Domain models for OpsBridge."""
|
|
from __future__ import annotations
|
|
|
|
from dataclasses import dataclass, field
|
|
from enum import Enum
|
|
from typing import Optional
|
|
|
|
|
|
class BridgeState(str, Enum):
|
|
STOPPED = "stopped"
|
|
STARTING = "starting"
|
|
CONNECTED = "connected"
|
|
DEGRADED = "degraded"
|
|
RECONNECTING = "reconnecting"
|
|
FAILED = "failed"
|
|
|
|
|
|
class ActorType(str, Enum):
|
|
ADM = "adm" # human operator
|
|
AGT = "agt" # LLM-powered autonomous agent
|
|
ATM = "atm" # deterministic script / pipeline
|
|
|
|
|
|
class CertAcquisitionError(Exception):
|
|
"""Raised when cert_command fails to produce a certificate."""
|
|
|
|
|
|
@dataclass
|
|
class ReconnectPolicy:
|
|
max_attempts: int = 0 # 0 = infinite
|
|
backoff_initial: int = 5
|
|
backoff_max: int = 60
|
|
|
|
|
|
@dataclass
|
|
class HealthCheckConfig:
|
|
url: str
|
|
interval_seconds: int = 30
|
|
timeout_seconds: int = 5
|
|
|
|
|
|
@dataclass
|
|
class TunnelConfig:
|
|
name: str
|
|
host: str
|
|
remote_port: int
|
|
local_port: int
|
|
ssh_user: str
|
|
ssh_key: str
|
|
actor: str
|
|
reconnect: ReconnectPolicy = field(default_factory=ReconnectPolicy)
|
|
health_check: Optional[HealthCheckConfig] = None
|
|
direction: str = "reverse" # "reverse" (-R) or "local" (-L)
|
|
# Forward-destination host as seen from the remote end (direction "local")
|
|
# or from this workstation (direction "reverse"). Defaults to loopback;
|
|
# set e.g. a k3s ClusterIP to tunnel to an in-cluster Service.
|
|
remote_host: str = "127.0.0.1"
|
|
cert_command: Optional[str] = None
|
|
|
|
|
|
@dataclass
|
|
class ActorInfo:
|
|
name: str
|
|
actor_type: ActorType
|
|
description: str = ""
|