MCPcopy Create free account
hub / github.com/Dstack-TEE/dstack / create_vm

Method create_vm

vmm/src/main_service.rs:291–327  ·  view source on GitHub ↗
(self, request: VmConfiguration)

Source from the content-addressed store, hash-verified

289
290impl VmmRpc for RpcHandler {
291 async fn create_vm(self, request: VmConfiguration) -> Result<Id> {
292 let manifest = create_manifest_from_vm_config(request.clone(), &self.app.config.cvm)?;
293 let id = manifest.id.clone();
294 let app_id = manifest.app_id.clone();
295 let vm_work_dir = self.app.work_dir(&id);
296 vm_work_dir
297 .put_manifest(&manifest)
298 .context("Failed to write manifest")?;
299 let work_dir = self.prepare_work_dir(&id, &request, &app_id)?;
300 if let Err(err) = vm_work_dir.set_started(!request.stopped) {
301 warn!("Failed to set started: {}", err);
302 }
303
304 let result = self
305 .app
306 .load_vm(&work_dir, &Default::default(), false)
307 .await
308 .context("Failed to load VM");
309 let result = match result {
310 Ok(()) => {
311 if !request.stopped {
312 self.app.start_vm(&id).await
313 } else {
314 Ok(())
315 }
316 }
317 Err(err) => Err(err),
318 };
319 if let Err(err) = result {
320 if let Err(err) = fs::remove_dir_all(&work_dir) {
321 warn!("Failed to remove work dir: {}", err);
322 }
323 return Err(err);
324 }
325
326 Ok(Id { id })
327 }
328
329 async fn start_vm(self, request: Id) -> Result<()> {
330 self.app

Callers

nothing calls this directly

Calls 8

cloneMethod · 0.80
work_dirMethod · 0.80
put_manifestMethod · 0.80
prepare_work_dirMethod · 0.80
load_vmMethod · 0.80
set_startedMethod · 0.45
start_vmMethod · 0.45

Tested by

no test coverage detected