Пример #1
0
        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);
        }
Пример #2
0
        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);
            }
        }
Пример #3
0
        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));
        }
Пример #4
0
        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);
        }