MCPcopy Create free account
hub / github.com/NVIDIA/OpenShell / new

Method new

crates/openshell-driver-docker/src/lib.rs:354–439  ·  view source on GitHub ↗
(
        config: &Config,
        docker_config: &DockerComputeConfig,
        supervisor_readiness: Arc<dyn SupervisorReadiness>,
    )

Source from the content-addressed store, hash-verified

352
353impl DockerComputeDriver {
354 pub async fn new(
355 config: &Config,
356 docker_config: &DockerComputeConfig,
357 supervisor_readiness: Arc<dyn SupervisorReadiness>,
358 ) -> CoreResult<Self> {
359 let docker = Docker::connect_with_local_defaults()
360 .map_err(|err| Error::execution(format!("failed to create Docker client: {err}")))?;
361 let version = docker.version().await.map_err(|err| {
362 Error::execution(format!("failed to query Docker daemon version: {err}"))
363 })?;
364 let info = docker.info().await.map_err(|err| {
365 Error::execution(format!("failed to query Docker daemon info: {err}"))
366 })?;
367 let supports_gpu = info
368 .cdi_spec_dirs
369 .as_ref()
370 .is_some_and(|dirs| !dirs.is_empty());
371 let cdi_gpu_inventory = docker_cdi_gpu_inventory(&info);
372 let allow_all_default_gpu = docker_info_reports_wsl2(&info);
373 validate_sandbox_pids_limit(docker_config.sandbox_pids_limit)?;
374 let gateway_port = config.bind_address.port();
375 if gateway_port == 0 {
376 return Err(Error::config(
377 "docker compute driver requires a fixed non-zero gateway bind port",
378 ));
379 }
380 let network_name = docker_network_name(docker_config);
381 let bridge_gateway_ip = ensure_bridge_network(&docker, &network_name).await?;
382 let host_gateway_ip = parse_optional_host_gateway_ip(&docker_config.host_gateway_ip)?;
383 let gateway_route =
384 docker_gateway_route(&info, bridge_gateway_ip, gateway_port, host_gateway_ip);
385 let mut docker_config = docker_config.clone();
386 if docker_config.grpc_endpoint.trim().is_empty() {
387 let scheme = if docker_guest_tls_configured(&docker_config) {
388 "https"
389 } else {
390 "http"
391 };
392 docker_config.grpc_endpoint =
393 format!("{scheme}://{HOST_OPENSHELL_INTERNAL}:{gateway_port}");
394 }
395 let grpc_endpoint = docker_container_openshell_endpoint(
396 &docker_config.grpc_endpoint,
397 HOST_OPENSHELL_INTERNAL,
398 gateway_port,
399 );
400 let daemon_arch = normalize_docker_arch(version.arch.as_deref().unwrap_or_default());
401 let supervisor_bin = resolve_supervisor_bin(&docker, &docker_config, &daemon_arch).await?;
402 let guest_tls = docker_guest_tls_paths(&docker_config)?;
403
404 let driver = Self {
405 docker: Arc::new(docker),
406 config: DockerDriverRuntimeConfig {
407 default_image: docker_config.default_image.clone(),
408 image_pull_policy: docker_config.image_pull_policy.clone(),
409 sandbox_namespace: docker_config.sandbox_namespace.clone(),
410 grpc_endpoint,
411 network_name,

Callers

nothing calls this directly

Calls 15

docker_cdi_gpu_inventoryFunction · 0.85
configFunction · 0.85
docker_network_nameFunction · 0.85
ensure_bridge_networkFunction · 0.85
docker_gateway_routeFunction · 0.85
normalize_docker_archFunction · 0.85
resolve_supervisor_binFunction · 0.85
docker_guest_tls_pathsFunction · 0.85

Tested by

no test coverage detected