Skip to content

Commit 22a04e2

Browse files
committed
fix(gateway): keep vm driver opt-in
1 parent bbfcac8 commit 22a04e2

3 files changed

Lines changed: 40 additions & 7 deletions

File tree

crates/openshell-server/src/lib.rs

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -699,12 +699,16 @@ async fn build_compute_runtime(
699699

700700
fn configured_compute_driver(config: &Config) -> Result<ComputeDriverKind> {
701701
match config.compute_drivers.as_slice() {
702-
[] => openshell_core::config::detect_driver().ok_or_else(|| {
703-
Error::config(
702+
[] => match openshell_core::config::detect_driver() {
703+
Some(ComputeDriverKind::Vm) => Err(Error::config(
704+
"vm compute driver is opt-in only; set --drivers vm or OPENSHELL_DRIVERS=vm",
705+
)),
706+
Some(driver) => Ok(driver),
707+
None => Err(Error::config(
704708
"no compute driver configured and auto-detection found no suitable driver; \
705709
set --drivers or OPENSHELL_DRIVERS to kubernetes, podman, docker, or vm",
706-
)
707-
}),
710+
)),
711+
},
708712
[
709713
driver @ (ComputeDriverKind::Kubernetes
710714
| ComputeDriverKind::Vm
@@ -789,7 +793,7 @@ mod tests {
789793
// depending on the environment. This test verifies the auto-detection path
790794
// is taken rather than immediately returning an error.
791795
let result = configured_compute_driver(&config);
792-
// Either we get a detected driver or an error about none being detected
796+
// Either we get a detected driver or an error about none being detected.
793797
match result {
794798
Ok(driver) => {
795799
assert!(
@@ -805,7 +809,7 @@ mod tests {
805809
Err(e) => {
806810
assert!(
807811
e.to_string()
808-
.contains("no compute driver configured and none detected"),
812+
.contains("auto-detection found no suitable driver"),
809813
"unexpected error: {e}"
810814
);
811815
}

python/openshell/release_formula_test.py

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -51,7 +51,8 @@ def test_generate_homebrew_formula_uses_tagged_macos_driver_asset_without_defaul
5151
"v0.0.10/openshell-driver-vm-aarch64-apple-darwin.tar.gz"
5252
) in formula
5353
assert 'sha256 "' + "b" * 64 + '"' in formula
54-
assert "OPENSHELL_DRIVERS" not in formula
54+
assert "OPENSHELL_DRIVERS:" not in formula
55+
assert "#OPENSHELL_DRIVERS=vm" in formula
5556
assert 'OPENSHELL_DRIVER_DIR: "#{opt_libexec}"' in formula
5657
assert (
5758
'OPENSHELL_DOCKER_SUPERVISOR_IMAGE: "ghcr.io/nvidia/openshell/supervisor:0.0.10"'
@@ -61,6 +62,8 @@ def test_generate_homebrew_formula_uses_tagged_macos_driver_asset_without_defaul
6162
'docker_tls_dir="${OPENSHELL_DOCKER_TLS_DIR:-${HOME}/.local/state/openshell/homebrew/tls}"'
6263
) in formula
6364
assert 'export OPENSHELL_DOCKER_TLS_CA="${docker_tls_dir}/ca.crt"' in formula
65+
assert 'gateway_env="#{var}/openshell/gateway.env"' in formula
66+
assert '. "${gateway_env}"' in formula
6467
assert 'OPENSHELL_DOCKER_TLS_CA: "#{var}/openshell/tls/ca.crt"' not in formula
6568
assert "entitlements.atomic_write" in formula
6669
assert "brew services restart openshell" in formula

tasks/scripts/release.py

Lines changed: 26 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -300,6 +300,13 @@ def install
300300
export OPENSHELL_DOCKER_TLS_CERT="${{docker_tls_dir}}/client/tls.crt"
301301
export OPENSHELL_DOCKER_TLS_KEY="${{docker_tls_dir}}/client/tls.key"
302302
303+
gateway_env="#{{var}}/openshell/gateway.env"
304+
if [ -f "${{gateway_env}}" ]; then
305+
set -a
306+
. "${{gateway_env}}"
307+
set +a
308+
fi
309+
303310
exec "#{{opt_bin}}/openshell-gateway"
304311
SH
305312
chmod 0755, libexec/"openshell-gateway-homebrew-service"
@@ -311,6 +318,25 @@ def post_install
311318
(var/"log/openshell").mkpath
312319
system bin/"openshell-gateway", "generate-certs", "--output-dir", var/"openshell/tls", "--server-san", "host.openshell.internal"
313320
321+
gateway_env = var/"openshell/gateway.env"
322+
unless gateway_env.exist?
323+
gateway_env.atomic_write <<~ENV
324+
# OpenShell Gateway Environment Configuration
325+
# Edit freely; this file is not overwritten.
326+
#
327+
# Uncomment to force the VM compute driver. Leaving this unset keeps
328+
# normal Podman/Docker/Kubernetes auto-detection.
329+
#OPENSHELL_DRIVERS=vm
330+
331+
# VM driver paths configured by the Homebrew service.
332+
#OPENSHELL_VM_DRIVER_STATE_DIR=#{{var}}/openshell/vm-driver
333+
#OPENSHELL_VM_TLS_CA=#{{var}}/openshell/tls/ca.crt
334+
#OPENSHELL_VM_TLS_CERT=#{{var}}/openshell/tls/client/tls.crt
335+
#OPENSHELL_VM_TLS_KEY=#{{var}}/openshell/tls/client/tls.key
336+
ENV
337+
chmod 0600, gateway_env
338+
end
339+
314340
entitlements = var/"openshell/openshell-driver-vm.entitlements.plist"
315341
entitlements.atomic_write <<~XML
316342
<?xml version="1.0" encoding="UTF-8"?>

0 commit comments

Comments
 (0)