pub trait WorkloadRuntime: Send + Sync {
// Required methods
fn deploy_workload<'life0, 'life1, 'async_trait>(
&'life0 self,
spec: &'life1 WorkloadSpec,
) -> Pin<Box<dyn Future<Output = Result<String>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
fn teardown_workload<'life0, 'life1, 'async_trait>(
&'life0 self,
name: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
fn is_running<'life0, 'life1, 'async_trait>(
&'life0 self,
name: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<bool>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait;
fn runtime_health<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<bool>> + Send + 'async_trait>>
where Self: 'async_trait,
'life0: 'async_trait;
}Expand description
Shared interface for deploying and managing WorkloadSpec containers.
This is the keystone abstraction (R256-F10) that makes sim and cloud literally interchangeable at the container level:
-
Camp/sim tier:
LocalDockerRuntimeincloudimplements this trait via the docker CLI pointed at OrbStack (or any Docker-compatible socket). No mesh — containers communicate over OrbStack’s bridge network. -
Yubaba/cloud-HA tier:
yubaba::runtime::ContainerRuntime(gRPC to containerd) will implement this trait. Mesh assignment is a separate orchestration step on top (handled by yubaba’s raft layer), not part of the shared deploy/supervise interface.
Callers that type against WorkloadRuntime automatically work with both
backends. Reconcilers in cloud use it today; yubaba wires its own impl
when R276 Tier-3 lands.
Required Methods§
Sourcefn deploy_workload<'life0, 'life1, 'async_trait>(
&'life0 self,
spec: &'life1 WorkloadSpec,
) -> Pin<Box<dyn Future<Output = Result<String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn deploy_workload<'life0, 'life1, 'async_trait>(
&'life0 self,
spec: &'life1 WorkloadSpec,
) -> Pin<Box<dyn Future<Output = Result<String>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Deploy a workload described by spec. Pulls the image if needed,
creates and starts the container, and returns an opaque workload ID
(typically the container name derived from spec.name).
Idempotent: re-deploying a running workload replaces it cleanly.
Sourcefn teardown_workload<'life0, 'life1, 'async_trait>(
&'life0 self,
name: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn teardown_workload<'life0, 'life1, 'async_trait>(
&'life0 self,
name: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<()>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Tear down a deployed workload — stop the process and remove all associated state. No-op when the workload is already gone.
Sourcefn is_running<'life0, 'life1, 'async_trait>(
&'life0 self,
name: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<bool>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
fn is_running<'life0, 'life1, 'async_trait>(
&'life0 self,
name: &'life1 str,
) -> Pin<Box<dyn Future<Output = Result<bool>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
'life1: 'async_trait,
Returns true when the named workload is currently running (i.e.
the container process is alive and has not exited).
Sourcefn runtime_health<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<bool>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
fn runtime_health<'life0, 'async_trait>(
&'life0 self,
) -> Pin<Box<dyn Future<Output = Result<bool>> + Send + 'async_trait>>where
Self: 'async_trait,
'life0: 'async_trait,
Probe the runtime backend. Returns true when the backend socket is
reachable and healthy (e.g. docker daemon up, containerd gRPC up).
Used by health endpoints and startup checks.
Dyn Compatibility§
This trait is dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".