public async Task <(bool found, bool update)> DeleteClusterAsync(Guid id) { var cluster = await clusterRepository.ReadAsync(c => c.Id == id); if (cluster == null) { return(false, false); } cluster.DeleteAt = DateTime.UtcNow; if ((await clusterRepository.UpdateClusterAsync(cluster)) > 0) { var nodes = await clusterNodeRepository.ReadsAsync(c => c.ClusterId == cluster.Id && c.DeleteAt == null); var selectedNode = await datacenterRepository.ReadAsync(f => f.Id == cluster.ProxmoxNodeId); var qemuClient = new QemuClient(); foreach (var node in nodes) { node.DeleteAt = DateTime.UtcNow; await qemuClient.DeleteQemu(selectedNode.Name, node.OrderId); await clusterNodeRepository.UpdateClusterNodeAsync(node); } return(true, await qemuClient.DeleteQemu(selectedNode.Name, cluster.OrderId)); } return(true, false); }
public async Task StartCleanClusterQueueListener(Cluster cluster) { var qemuClient = new QemuClient(); var statusStopped = false; var retry = 0; var node = await datacenterRepository.ReadAsync(d => d.Id == cluster.ProxmoxNodeId); var taskStop = new List <Task <bool> >(); var taskDelete = new List <Task <bool> >(); if (node != null) { do { retry += 1; taskStop.Add(qemuClient.StopQemu(node.Name, cluster.OrderId)); taskDelete.Add(qemuClient.DeleteQemu(node.Name, cluster.OrderId)); foreach (var nodeDelete in cluster.Nodes) { taskStop.Add(qemuClient.StopQemu(node.Name, nodeDelete.OrderId)); taskDelete.Add(qemuClient.DeleteQemu(node.Name, nodeDelete.OrderId)); } if ((await Task.WhenAll(taskStop)).All(a => a)) { await Task.Delay(10000); statusStopped = (await Task.WhenAll(taskDelete)).All(a => a); } } while (!statusStopped && retry < 10); } }
public async Task <(bool found, bool restart)> RestartClusterMasterAsync(Guid id) { var cluster = await clusterRepository.ReadAsync(c => c.Id == id && c.DeleteAt == null); var selectedNode = await datacenterRepository.ReadAsync(f => f.Id == cluster.ProxmoxNodeId); if (cluster == null) { return(false, false); } var qemuClient = new QemuClient(); return(true, await qemuClient.RestartQemu(selectedNode.Name, cluster.OrderId)); }
public async Task <(bool found, bool update)> DeleteClusterAsync(string id) { var cluster = await clusterRepository.ReadAsync(c => c.Id == id); if (cluster == null) { return(false, false); } cluster.DeleteAt = DateTime.UtcNow; if ((await clusterRepository.UpdateAsync(cluster)) > 0) { await traefikRouterService.DeleteClusterRules(cluster); var selectedSshKey = await sshKeyRepository.ReadAsync(cluster.SshKeyId); var selectedNode = await datacenterRepository.ReadAsync(f => f.Id == cluster.ProxmoxNodeId); var nodes = await clusterNodeRepository.ReadsAsync(c => c.ClusterId == cluster.Id && c.DeleteAt == null); var qemuClient = new QemuClient(); foreach (var node in nodes) { node.DeleteAt = DateTime.UtcNow; await clusterNodeRepository.UpdateAsync(node); } var message = GenerateDeleteQueueMessage(cluster, selectedSshKey, selectedNode, int.Parse(cluster.Ip.Split(".").Last()), cluster.ProxmoxNodeId); queueService.QueueClusterDelete(message); return(true, true); } return(true, false); }