コード例 #1
0
        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());
        }