private async Task ProcessStateAsync(Cluster cluster, k8s.Models.V1NodeList clusterNodes) { try { foreach (var clusterNode in clusterNodes.Items) { logger.LogInformation($"Node => {JsonSerializer.Serialize(clusterNode)}"); if (clusterNode.Metadata.Name.Contains("master")) { cluster.State = clusterNode.Status.Conditions.FirstOrDefault(c => c.Reason == "KubeletReady")?.Type; var _ = await clusterRepository.UpdateAsync(cluster); } else { var node = cluster.Nodes.FirstOrDefault(n => n.Name == clusterNode.Metadata.Name); if (node != null) { node.State = clusterNode.Status.Conditions.FirstOrDefault(c => c.Reason == "KubeletReady")?.Type; var __ = await clusterNodeRepository.UpdateAsync(node); } } } } catch (Exception e) { logger.LogError(e, "Error on processing state"); } }
public async Task StartQueueListener() { await queueService.OnQueueMessageInit(async (message) => { logger.LogInformation(message); var clusterResult = JsonSerializer.Deserialize <ClusterCreationResultMessage>(message); var cluster = await clusterRepository.ReadAsync(c => c.OrderId == clusterResult.Data.OrderId); if (cluster != null && clusterResult.Pattern == "success") { cluster.KubeConfig = clusterResult.Data.KubeConfig.Replace($"server: https://{cluster.Ip}:6443", $"server: https://{cluster.Name}.{cluster.Domain}:6443"); cluster.KubeConfigJson = clusterResult.Data.KubeConfigAsJson; if ((await clusterRepository.UpdateAsync(cluster)) > 0) { await hubContext.Clients.All.NotificationReceived("Cluster ready", "Cluster created and ready to use.", "success"); } } }); await queueService.OnQueueDeleteMessageInit(async (message) => { logger.LogInformation(message); var cluster = JsonSerializer.Deserialize <Cluster>(message); await StartCleanClusterQueueListener(cluster); }); }
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); }