private ClusterMessage GenerateCreateQueueMessage(ClusterCreateRequest request, Cluster newCluster, SshKey selectedSshKey, DatacenterNode selectedNode, Template template, int baseIp, int baseId) { var message = new ClusterMessage() { Pattern = "create", Data = new Data() { Id = baseId, Name = request.Name, Features = new Feature() { Traefik = request.InstallTraefik, }, Config = new Config() { User = "******", Password = "******", Ssh = new Ssh() { PrivateKey = selectedSshKey.Pem, PublicKey = selectedSshKey.Public } }, Nodes = new List <Node>() } }; var master = new Node() { Id = baseId, CpuCores = 2, Master = true, Disk = 30, Memory = 2048, Ip = $"10.0.{selectedNode.Id}.{baseIp}", ProxmoxNode = selectedNode.Name, Template = template.BaseTemplate }; message.Data.Nodes.Add(master); for (var i = 0; i < newCluster.Node; i++) { var node = new Node() { Id = baseId + i + 1, CpuCores = newCluster.Cpu, Master = false, Disk = newCluster.Storage, Memory = newCluster.Memory, Ip = $"10.0.{selectedNode.Id}.{baseIp + i + 1}", ProxmoxNode = selectedNode.Name, Template = template.BaseTemplate }; message.Data.Nodes.Add(node); } return(message); }
public async Task <IActionResult> Create([FromBody] ClusterCreateRequest request) { try { if ((await clusterBusiness.CreateClusterAsync(request))) { return(Ok()); } } catch (DuplicateException ex) { logger.LogWarning(ex, "Error on create cluster."); return(Conflict()); } catch (Exception e) { logger.LogError(e, "Error on create cluster."); } return(BadRequest()); }
public async Task <bool> CreateClusterAsync(ClusterCreateRequest request) { if ((await clusterRepository.ReadAsync(c => c.Name == request.Name)) != null) { throw new DuplicateException(); } var selectedSshKey = await sshKeyRepository.ReadAsync(request.SshKeyId); var selectedNode = await datacenterRepository.ReadAsync(f => f.Id == request.DeployNodeId); var template = await templateRepository.ReadAsync(t => t.Id == request.SelectedTemplate); var existingCluster = await clusterRepository.ReadsAsync(c => c.ProxmoxNodeId == request.DeployNodeId); var baseIp = existingCluster.Any() ? GetBasedRangeIp(existingCluster) : 10; var baseId = existingCluster.Any() ? ExtractBaseId(await clusterRepository.GetMaxOrder()) : 3000; if (baseIp > 0 && baseId > 0) { var newCluster = new Cluster() { Cpu = request.Cpu, Name = $"k3s-master-{request.Name}", Node = request.Node, Storage = request.Storage, User = "******", ProxmoxNodeId = selectedNode.Id, OrderId = baseId, Memory = request.Memory, Ip = $"10.0.{selectedNode.Id}.{baseIp}", SshKey = selectedSshKey.Public }; if ((await clusterRepository.InsertClusterAsync(newCluster)) > 0) { var nodeList = new List <ClusterNode>(); for (int i = 0; i < request.Node; i++) { nodeList.Add(new ClusterNode() { ClusterId = newCluster.Id, OrderId = baseId + i + 1, Name = $"k3s-node{i + 1}-{request.Name}", Ip = $"10.0.{selectedNode.Id}.{baseIp + i + 1}", }); } if ((await clusterNodeRepository.InsertClusterNodesAsync(nodeList.ToArray()) == request.Node)) { ClusterCreateMessage message = GenerateQueueMessage(request, newCluster, selectedSshKey, selectedNode, template, baseIp, baseId); queueService.QueueClusterCreation(message); await InjectClusterCacheConfigurationAsync(newCluster); } return(true); } } return(false); }
public CreateClusterAction(ClusterCreateRequest request) { Request = request; }
public async Task <bool> CreateClustersAsync(ClusterCreateRequest request) { var httpResponse = await httpClient.PostAsync("api/cluster", GetContent(request)); return(httpResponse.IsSuccessStatusCode); }