(&self, sandbox: &DriverSandbox)
| 661 | } |
| 662 | |
| 663 | async fn create_sandbox_inner(&self, sandbox: &DriverSandbox) -> Result<(), Status> { |
| 664 | let validated = Self::validated_sandbox(sandbox, &self.config)?; |
| 665 | Self::validate_sandbox_auth(sandbox)?; |
| 666 | self.validate_user_volume_mounts_available(&validated.driver_config) |
| 667 | .await?; |
| 668 | let gpu_devices = self |
| 669 | .resolve_gpu_cdi_devices( |
| 670 | validated.gpu_requirements, |
| 671 | &validated.driver_config, |
| 672 | CdiGpuDefaultSelector::peek_device_ids, |
| 673 | ) |
| 674 | .await?; |
| 675 | let _ = build_container_create_body_with_gpu_devices( |
| 676 | sandbox, |
| 677 | &self.config, |
| 678 | &validated.driver_config, |
| 679 | gpu_devices.as_deref(), |
| 680 | )?; |
| 681 | |
| 682 | if self |
| 683 | .find_managed_container_summary(&sandbox.id, &sandbox.name) |
| 684 | .await? |
| 685 | .is_some() |
| 686 | { |
| 687 | return Err(Status::already_exists("sandbox already exists")); |
| 688 | } |
| 689 | |
| 690 | self.reserve_pending_sandbox(sandbox).await?; |
| 691 | let image = sandbox_image(sandbox).unwrap_or_default(); |
| 692 | self.publish_docker_progress( |
| 693 | &sandbox.id, |
| 694 | "Scheduled", |
| 695 | format!("Docker sandbox accepted for image \"{image}\""), |
| 696 | HashMap::from([("image_ref".to_string(), image)]), |
| 697 | ); |
| 698 | self.publish_sandbox_snapshot(pending_sandbox_snapshot( |
| 699 | sandbox, |
| 700 | &self.config.sandbox_namespace, |
| 701 | provisioning_condition(), |
| 702 | false, |
| 703 | )); |
| 704 | |
| 705 | let driver = self.clone(); |
| 706 | let sandbox_for_task = sandbox.clone(); |
| 707 | let sandbox_id = sandbox.id.clone(); |
| 708 | let task = tokio::spawn(async move { |
| 709 | driver.provision_sandbox(sandbox_for_task).await; |
| 710 | }); |
| 711 | |
| 712 | let mut pending = self.pending.lock().await; |
| 713 | if let Some(record) = pending.get_mut(&sandbox_id) { |
| 714 | record.task = Some(task); |
| 715 | } else { |
| 716 | task.abort(); |
| 717 | } |
| 718 | |
| 719 | Ok(()) |
| 720 | } |
no test coverage detected