コード例 #1
0
        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);
        }
コード例 #2
0
        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());
        }
コード例 #3
0
        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);
        }
コード例 #4
0
 public CreateClusterAction(ClusterCreateRequest request)
 {
     Request = request;
 }
コード例 #5
0
        public async Task <bool> CreateClustersAsync(ClusterCreateRequest request)
        {
            var httpResponse = await httpClient.PostAsync("api/cluster", GetContent(request));

            return(httpResponse.IsSuccessStatusCode);
        }