Skip to content

Commit 7dd0077

Browse files
committed
refactor(server): key driver config tables by name
Signed-off-by: Evan Lezar <elezar@nvidia.com>
1 parent df11988 commit 7dd0077

3 files changed

Lines changed: 42 additions & 19 deletions

File tree

crates/openshell-server/src/cli.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -761,7 +761,7 @@ fn build_vm_config(
761761
) -> Result<VmComputeConfig> {
762762
let mut cfg = if let Some(file) = file {
763763
let merged = config_file::driver_table(
764-
ComputeDriverKind::Vm,
764+
ComputeDriverKind::Vm.as_str(),
765765
&file.openshell.gateway,
766766
file.openshell.drivers.get("vm"),
767767
);
@@ -796,7 +796,7 @@ fn build_docker_config(
796796
) -> Result<DockerComputeConfig> {
797797
let mut cfg = if let Some(file) = file {
798798
let merged = config_file::driver_table(
799-
ComputeDriverKind::Docker,
799+
ComputeDriverKind::Docker.as_str(),
800800
&file.openshell.gateway,
801801
file.openshell.drivers.get("docker"),
802802
);
@@ -1807,7 +1807,7 @@ namespace = "agents"
18071807
"#,
18081808
);
18091809
let merged = crate::config_file::driver_table(
1810-
super::ComputeDriverKind::Kubernetes,
1810+
super::ComputeDriverKind::Kubernetes.as_str(),
18111811
&file.openshell.gateway,
18121812
file.openshell.drivers.get("kubernetes"),
18131813
);
@@ -1830,7 +1830,7 @@ default_image = "k8s-specific:1.0"
18301830
"#,
18311831
);
18321832
let merged = crate::config_file::driver_table(
1833-
super::ComputeDriverKind::Kubernetes,
1833+
super::ComputeDriverKind::Kubernetes.as_str(),
18341834
&file.openshell.gateway,
18351835
file.openshell.drivers.get("kubernetes"),
18361836
);

crates/openshell-server/src/config_file.rs

Lines changed: 36 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -231,7 +231,7 @@ pub fn load(path: &Path) -> Result<ConfigFile, ConfigFileError> {
231231
/// the gateway section, which keeps each driver's `deny_unknown_fields`
232232
/// invariant intact.
233233
pub fn driver_table(
234-
driver: ComputeDriverKind,
234+
driver_name: &str,
235235
gateway: &GatewayFileSection,
236236
raw: Option<&toml::Value>,
237237
) -> toml::Value {
@@ -240,7 +240,7 @@ pub fn driver_table(
240240
_ => toml::Table::new(),
241241
};
242242

243-
for key in inheritable_keys(driver) {
243+
for key in inheritable_keys(driver_name) {
244244
if merged.contains_key(*key) {
245245
continue;
246246
}
@@ -255,9 +255,9 @@ pub fn driver_table(
255255
/// Inheritance allowlist (the Q4 "high-overlap set"). Each driver opts in
256256
/// to a specific subset so a gateway-wide default does not accidentally land
257257
/// in a driver table that does not understand the field.
258-
fn inheritable_keys(driver: ComputeDriverKind) -> &'static [&'static str] {
259-
match driver {
260-
ComputeDriverKind::Kubernetes => &[
258+
fn inheritable_keys(driver_name: &str) -> &'static [&'static str] {
259+
match driver_name.parse::<ComputeDriverKind>().ok() {
260+
Some(ComputeDriverKind::Kubernetes) => &[
261261
"namespace",
262262
"default_image",
263263
"supervisor_image",
@@ -267,7 +267,7 @@ fn inheritable_keys(driver: ComputeDriverKind) -> &'static [&'static str] {
267267
"enable_user_namespaces",
268268
"sa_token_ttl_secs",
269269
],
270-
ComputeDriverKind::Docker => &[
270+
Some(ComputeDriverKind::Docker) => &[
271271
"sandbox_namespace",
272272
"default_image",
273273
"supervisor_image",
@@ -276,20 +276,21 @@ fn inheritable_keys(driver: ComputeDriverKind) -> &'static [&'static str] {
276276
"guest_tls_cert",
277277
"guest_tls_key",
278278
],
279-
ComputeDriverKind::Podman => &[
279+
Some(ComputeDriverKind::Podman) => &[
280280
"default_image",
281281
"supervisor_image",
282282
"host_gateway_ip",
283283
"guest_tls_ca",
284284
"guest_tls_cert",
285285
"guest_tls_key",
286286
],
287-
ComputeDriverKind::Vm => &[
287+
Some(ComputeDriverKind::Vm) => &[
288288
"default_image",
289289
"guest_tls_ca",
290290
"guest_tls_cert",
291291
"guest_tls_key",
292292
],
293+
None => &[],
293294
}
294295
}
295296

@@ -484,7 +485,7 @@ version = 2
484485
namespace = "agents"
485486
};
486487
let merged = driver_table(
487-
ComputeDriverKind::Kubernetes,
488+
ComputeDriverKind::Kubernetes.as_str(),
488489
&gateway,
489490
Some(&toml::Value::Table(raw)),
490491
);
@@ -511,7 +512,7 @@ version = 2
511512
host_gateway_ip: Some("10.0.0.1".to_string()),
512513
..Default::default()
513514
};
514-
let merged = driver_table(ComputeDriverKind::Docker, &gateway, None);
515+
let merged = driver_table(ComputeDriverKind::Docker.as_str(), &gateway, None);
515516
let table = merged.as_table().expect("table");
516517
assert_eq!(
517518
table.get("sandbox_namespace").and_then(|v| v.as_str()),
@@ -534,7 +535,7 @@ version = 2
534535
host_gateway_ip: Some("192.168.127.254".to_string()),
535536
..Default::default()
536537
};
537-
let merged = driver_table(ComputeDriverKind::Podman, &gateway, None);
538+
let merged = driver_table(ComputeDriverKind::Podman.as_str(), &gateway, None);
538539
let table = merged.as_table().expect("table");
539540
assert_eq!(
540541
table.get("default_image").and_then(|v| v.as_str()),
@@ -556,7 +557,7 @@ version = 2
556557
default_image = "driver-specific"
557558
};
558559
let merged = driver_table(
559-
ComputeDriverKind::Podman,
560+
ComputeDriverKind::Podman.as_str(),
560561
&gateway,
561562
Some(&toml::Value::Table(raw)),
562563
);
@@ -578,7 +579,7 @@ version = 2
578579
client_tls_secret_name: Some("openshell-sandbox-tls".to_string()),
579580
..Default::default()
580581
};
581-
let merged = driver_table(ComputeDriverKind::Docker, &gateway, None);
582+
let merged = driver_table(ComputeDriverKind::Docker.as_str(), &gateway, None);
582583
assert!(
583584
!merged
584585
.as_table()
@@ -587,6 +588,28 @@ version = 2
587588
);
588589
}
589590

591+
#[test]
592+
fn remote_driver_table_does_not_inherit_gateway_defaults() {
593+
let gateway = GatewayFileSection {
594+
default_image: Some("gateway-default:1.0".to_string()),
595+
host_gateway_ip: Some("10.0.0.1".to_string()),
596+
..Default::default()
597+
};
598+
let raw = toml::toml! {
599+
socket_path = "/run/openshell/kyma.sock"
600+
};
601+
602+
let merged = driver_table("kyma", &gateway, Some(&toml::Value::Table(raw)));
603+
let table = merged.as_table().expect("table");
604+
605+
assert_eq!(
606+
table.get("socket_path").and_then(|v| v.as_str()),
607+
Some("/run/openshell/kyma.sock")
608+
);
609+
assert!(!table.contains_key("default_image"));
610+
assert!(!table.contains_key("host_gateway_ip"));
611+
}
612+
590613
#[test]
591614
fn missing_path_is_io_error() {
592615
let err = load(Path::new("/nonexistent/openshell-gateway.toml"))

crates/openshell-server/src/lib.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -834,7 +834,7 @@ fn kubernetes_config_from_file(
834834
return Ok(KubernetesComputeConfig::default());
835835
};
836836
let merged = config_file::driver_table(
837-
ComputeDriverKind::Kubernetes,
837+
ComputeDriverKind::Kubernetes.as_str(),
838838
&file.openshell.gateway,
839839
file.openshell.drivers.get("kubernetes"),
840840
);
@@ -865,7 +865,7 @@ fn podman_config_from_file(file: Option<&config_file::ConfigFile>) -> Result<Pod
865865
return Ok(PodmanComputeConfig::default());
866866
};
867867
let merged = config_file::driver_table(
868-
ComputeDriverKind::Podman,
868+
ComputeDriverKind::Podman.as_str(),
869869
&file.openshell.gateway,
870870
file.openshell.drivers.get("podman"),
871871
);

0 commit comments

Comments
 (0)