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

Method create_sandbox

crates/openshell-driver-vm/src/driver.rs:514–626  ·  view source on GitHub ↗
(&self, sandbox: &Sandbox)

Source from the content-addressed store, hash-verified

512 // gRPC API surface; boxing here would diverge from every other handler.
513 #[allow(clippy::result_large_err)]
514 pub async fn create_sandbox(&self, sandbox: &Sandbox) -> Result<CreateSandboxResponse, Status> {
515 info!(
516 sandbox_id = %sandbox.id,
517 sandbox_name = %sandbox.name,
518 "vm driver: create_sandbox received"
519 );
520 validate_vm_sandbox(sandbox, self.config.gpu_enabled)?;
521
522 let state_dir = sandbox_state_dir(&self.config.state_dir, &sandbox.id)?;
523 let image_ref = self.resolved_sandbox_image(sandbox).ok_or_else(|| {
524 Status::failed_precondition(
525 "vm sandboxes require template.image or a configured default sandbox image",
526 )
527 })?;
528 info!(
529 sandbox_id = %sandbox.id,
530 image_ref = %image_ref,
531 state_dir = %state_dir.display(),
532 "vm driver: resolved image ref, preparing disks"
533 );
534
535 let snapshot = sandbox_snapshot(sandbox, provisioning_condition(), false);
536 {
537 let mut registry = self.registry.lock().await;
538 if registry.contains_key(&sandbox.id) {
539 return Err(Status::already_exists("sandbox already exists"));
540 }
541 registry.insert(
542 sandbox.id.clone(),
543 SandboxRecord {
544 snapshot: snapshot.clone(),
545 state_dir: state_dir.clone(),
546 process: None,
547 provisioning_task: None,
548 gpu_bdf: None,
549 qemu_network_allocated: false,
550 deleting: false,
551 },
552 );
553 }
554
555 let tls_paths = match self.config.tls_paths() {
556 Ok(paths) => paths,
557 Err(err) => {
558 let mut registry = self.registry.lock().await;
559 registry.remove(&sandbox.id);
560 return Err(Status::failed_precondition(err));
561 }
562 };
563
564 if let Err(err) = create_private_dir_all(&state_dir).await {
565 let mut registry = self.registry.lock().await;
566 registry.remove(&sandbox.id);
567 return Err(Status::internal(format!("create state dir failed: {err}")));
568 }
569
570 if let Err(err) = self.ensure_extension_state_dirs(&state_dir).await {
571 let mut registry = self.registry.lock().await;

Callers 2

spawn_create_sandboxFunction · 0.45

Calls 15

validate_vm_sandboxFunction · 0.85
sandbox_state_dirFunction · 0.85
sandbox_snapshotFunction · 0.85
create_private_dir_allFunction · 0.85
write_sandbox_requestFunction · 0.85
contains_keyMethod · 0.80
tls_pathsMethod · 0.80
publish_snapshotMethod · 0.80
abortMethod · 0.80
provisioning_conditionFunction · 0.70

Tested by

no test coverage detected