public async Task <IActionResult> Scrub(int id) { var vm = await DatabaseContext.UserLabVms .Include(l => l.HypervisorVmTemplate) .ThenInclude(l => l.HypervisorNode) .ThenInclude(l => l.Hypervisor) .Include(l => l.UserLab) .ThenInclude(l => l.BridgeInstances) .WhereIncludesUser(GetUser()) .FirstAsync(v => v.Id == id); if (vm.IsCoreRouter) { return(NotFound()); } var api = ProxmoxManager.GetProxmoxApi(vm.HypervisorVmTemplate.HypervisorNode); await api.DestroyVm(vm.ProxmoxVmId); await api.CloneTemplate(api.HypervisorNode, vm.HypervisorVmTemplate.TemplateVmId, vm.ProxmoxVmId); await _userLabInstantiation.LinkVmToBridges(vm.UserLab, vm, api, vm.HypervisorVmTemplate.HypervisorNode); var status = await api.GetVmStatus(vm.ProxmoxVmId); while (status.Lock == "clone") { status = await api.GetVmStatus(vm.ProxmoxVmId); } await api.StartVM(vm.ProxmoxVmId); return(Ok()); }