(
&self,
sandbox: &DriverSandbox,
)
| 731 | } |
| 732 | |
| 733 | async fn provision_sandbox_inner( |
| 734 | &self, |
| 735 | sandbox: &DriverSandbox, |
| 736 | ) -> Result<(), DockerProvisioningFailure> { |
| 737 | let validated = Self::validated_sandbox(sandbox, &self.config).map_err(|status| { |
| 738 | DockerProvisioningFailure::new("ContainerCreateFailed", status.message()) |
| 739 | })?; |
| 740 | let template = validated.template; |
| 741 | self.ensure_image_available(&sandbox.id, &template.image) |
| 742 | .await |
| 743 | .map_err(|status| { |
| 744 | DockerProvisioningFailure::new("ImagePullFailed", status.message()) |
| 745 | })?; |
| 746 | let token_file_created = write_sandbox_token_file(sandbox, &self.config) |
| 747 | .await |
| 748 | .map_err(|status| { |
| 749 | DockerProvisioningFailure::new("SandboxTokenWriteFailed", status.message()) |
| 750 | })?; |
| 751 | |
| 752 | let container_name = container_name_for_sandbox(sandbox); |
| 753 | let gpu_devices = self |
| 754 | .resolve_gpu_cdi_devices( |
| 755 | validated.gpu_requirements, |
| 756 | &validated.driver_config, |
| 757 | CdiGpuDefaultSelector::next_device_ids, |
| 758 | ) |
| 759 | .await |
| 760 | .map_err(|status| { |
| 761 | if token_file_created { |
| 762 | cleanup_sandbox_token_file(sandbox, &self.config); |
| 763 | } |
| 764 | DockerProvisioningFailure::new("ContainerCreateFailed", status.message()) |
| 765 | })?; |
| 766 | let create_body = build_container_create_body_with_gpu_devices( |
| 767 | sandbox, |
| 768 | &self.config, |
| 769 | &validated.driver_config, |
| 770 | gpu_devices.as_deref(), |
| 771 | ) |
| 772 | .map_err(|status| { |
| 773 | if token_file_created { |
| 774 | cleanup_sandbox_token_file(sandbox, &self.config); |
| 775 | } |
| 776 | DockerProvisioningFailure::new("ContainerCreateFailed", status.message()) |
| 777 | })?; |
| 778 | self.docker |
| 779 | .create_container( |
| 780 | Some( |
| 781 | CreateContainerOptionsBuilder::default() |
| 782 | .name(container_name.as_str()) |
| 783 | .build(), |
| 784 | ), |
| 785 | create_body, |
| 786 | ) |
| 787 | .await |
| 788 | .map_err(|err| { |
| 789 | if token_file_created { |
| 790 | cleanup_sandbox_token_file(sandbox, &self.config); |
no test coverage detected