Skip to content

Commit 6dd2cbb

Browse files
committed
refactor(supervisor): retain shared mode entry point with SPIFFE broker
Signed-off-by: Drew Newberry <anewberry@nvidia.com>
1 parent fdca13b commit 6dd2cbb

1 file changed

Lines changed: 25 additions & 43 deletions

File tree

‎crates/openshell-supervisor/src/shared.rs‎

Lines changed: 25 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -3,52 +3,34 @@
33

44
//! Supervisor host shared by the sandboxes of one gateway.
55
6-
use clap::Parser;
76
use miette::Result;
8-
use std::net::SocketAddr;
9-
use std::path::PathBuf;
107

11-
#[derive(Debug, Parser)]
12-
#[command(name = "openshell-supervisor experimental-host")]
13-
#[command(about = "Supervise the sandboxes a gateway registers with this process")]
14-
struct Args {
15-
/// Gateway gRPC endpoint; each session authenticates with its own credentials.
16-
#[arg(long, env = openshell_core::sandbox_env::ENDPOINT)]
17-
openshell_endpoint: String,
18-
19-
/// Mutually authenticated session-control listener used by the gateway.
20-
/// Kubernetes TCP probes connect to it without completing TLS.
21-
#[arg(long)]
22-
session_control_listen: SocketAddr,
23-
24-
/// Directory with the session-control `tls.crt`, `tls.key`, and client `ca.crt`.
25-
#[arg(long)]
26-
session_control_tls_dir: PathBuf,
27-
28-
/// Listener for routed runtime-initiated Sandbox Protocol connections.
29-
#[arg(long)]
30-
runtime_listen: SocketAddr,
31-
32-
/// Private directory for per-session files.
33-
#[arg(long)]
34-
session_root: PathBuf,
35-
36-
#[arg(long, default_value = "warn", env = openshell_core::sandbox_env::LOG_LEVEL)]
37-
log_level: String,
38-
}
39-
40-
pub fn run(raw_args: &[String]) -> Result<()> {
41-
let args = Args::parse_from(raw_args);
8+
pub fn run(args: crate::Args) -> Result<()> {
429
run_platform(args)
4310
}
4411

4512
#[cfg(unix)]
46-
fn run_platform(args: Args) -> Result<()> {
13+
fn run_platform(args: crate::Args) -> Result<()> {
4714
use miette::{IntoDiagnostic as _, WrapErr as _};
4815
use std::sync::Arc;
4916
use std::sync::atomic::AtomicBool;
5017
use tracing_subscriber::{Layer as _, layer::SubscriberExt as _, util::SubscriberInitExt as _};
5118

19+
let address = args
20+
.address
21+
.ok_or_else(|| miette::miette!("--address is required for --mode=shared"))?;
22+
let gateway_endpoint = args
23+
.gateway_endpoint
24+
.ok_or_else(|| miette::miette!("--gateway-endpoint is required for --mode=shared"))?;
25+
let session_control_tls_dir = args.session_control_tls_dir.ok_or_else(|| {
26+
miette::miette!("--session-control-tls-dir is required for --mode=shared")
27+
})?;
28+
let runtime_listen = args
29+
.runtime_listen
30+
.ok_or_else(|| miette::miette!("--runtime-listen is required for --mode=shared"))?;
31+
let session_root = args
32+
.session_root
33+
.ok_or_else(|| miette::miette!("--session-root is required for --mode=shared"))?;
5234
let runtime = tokio::runtime::Builder::new_multi_thread()
5335
.enable_all()
5436
.build()
@@ -87,7 +69,7 @@ fn run_platform(args: Args) -> Result<()> {
8769
tokio::signal::unix::signal(tokio::signal::unix::SignalKind::interrupt())
8870
.into_diagnostic()?;
8971
let tls_file = |name: &str| {
90-
let path = args.session_control_tls_dir.join(name);
72+
let path = session_control_tls_dir.join(name);
9173
std::fs::read(&path)
9274
.into_diagnostic()
9375
.wrap_err_with(|| format!("read session-control TLS file {}", path.display()))
@@ -100,19 +82,19 @@ fn run_platform(args: Args) -> Result<()> {
10082
.map_err(|error| miette::miette!("{error}"))?;
10183
let host = openshell_supervisor::shared_host::SharedHost::start(
10284
openshell_supervisor::shared_host::SharedHostConfig {
103-
gateway_endpoint: args.openshell_endpoint.clone(),
104-
session_root: args.session_root.clone(),
105-
runtime_listen: args.runtime_listen,
85+
gateway_endpoint,
86+
session_root,
87+
runtime_listen,
10688
removal_grace: openshell_sandbox_backend::session_control::SESSION_REMOVAL_GRACE,
10789
},
10890
)?;
109-
let control = tokio::net::TcpListener::bind(args.session_control_listen)
91+
let control = tokio::net::TcpListener::bind(address)
11092
.await
11193
.into_diagnostic()
11294
.wrap_err("bind session-control listener")?;
11395
tracing::info!(
11496
runtime = %host.runtime_addr(),
115-
control = %args.session_control_listen,
97+
control = %address,
11698
"Shared supervisor ready for sessions"
11799
);
118100
let (stop, stopped) = tokio::sync::watch::channel(false);
@@ -138,6 +120,6 @@ fn run_platform(args: Args) -> Result<()> {
138120
}
139121

140122
#[cfg(not(unix))]
141-
fn run_platform(_args: Args) -> Result<()> {
142-
Err(miette::miette!("experimental-host requires Unix"))
123+
fn run_platform(_args: crate::Args) -> Result<()> {
124+
Err(miette::miette!("--mode=shared requires Unix"))
143125
}

0 commit comments

Comments
 (0)