Example #1
0
        PatchDeploymentAsync(Kubernetes k8sClient, MTADeployModel patchModel)
        {
            var namespaceParams = PrepareNamespaceParams(_groupName);
            var deployParams    = PrepareDeployParams(_deployName);

            var existingDeployment = await k8sClient.ReadNamespacedDeploymentAsync
                                         (deployParams.Item1, namespaceParams);

            existingDeployment.Spec.Template.Spec.Containers[0].Image = patchModel.Image;

            existingDeployment.Spec.Template.Spec.Containers[0].ImagePullPolicy =
                patchModel.ImagePullPolicy;

            existingDeployment.Spec.Replicas = patchModel.Replicas;

            var container = existingDeployment.Spec.Template.Spec.Containers[0];

            container.Name = deployParams.Item3;

            if (patchModel.Env.Count > 0)
            {
                var v1EnvList = new List <V1EnvVar>();
                foreach (var env in patchModel.Env)
                {
                    var v1Env = new V1EnvVar(env["name"], env["value"]);
                    v1EnvList.Add(v1Env);
                }
                container.Env = v1EnvList;
            }

            if (patchModel.Ports.Count > 0)
            {
                var containerPorts = new List <V1ContainerPort>();
                foreach (var port in patchModel.Ports)
                {
                    var v1ContainerPort = new V1ContainerPort(port);
                    containerPorts.Add(v1ContainerPort);
                }
                container.Ports = containerPorts;
            }

            try
            {
                var v1Patch      = new V1Patch(existingDeployment, V1Patch.PatchType.MergePatch);
                var v1Deployment = await k8sClient.PatchNamespacedDeploymentAsync
                                       (v1Patch, deployParams.Item1, namespaceParams);

                var deployModel = new MTADeployModel(v1Deployment);
                return(new Tuple <MTADeployModel, MTAErrorModel>(deployModel, null));
            }
            catch (HttpOperationException ex)
            {
                var errorModel = new MTAErrorModel(ex);
                return(new Tuple <MTADeployModel, MTAErrorModel>(null, errorModel));
            }
            catch (Exception)
            {
                throw;
            }
        }
Example #2
0
        public async Task <IActionResult> PatchDeploymentAsync
            ([FromBody] MTADeployModel patchBody,
            [FromRoute] string deployName,
            [FromRoute] string tenantName,
            [FromRoute] string groupName)
        {
            var deployController = new MTADeployController(deployName, tenantName, groupName);
            var respondeModel    = await deployController.PatchDeploymentAsync(_k8sClient, patchBody);

            if (respondeModel != null)
            {
                return(BadRequest(respondeModel));
            }

            return(Ok(respondeModel.Item1));
        }
Example #3
0
        public async Task <IActionResult> CreateDeploymentAsync
            ([FromBody] MTADeployModel deployBody,
            [FromRoute] string deployName,
            [FromRoute] string tenantName,
            [FromRoute] string groupName)
        {
            var path            = string.Concat(GetTemplatesPath(), "/template-deploy.yaml");
            var deploymentsList = await Yaml.LoadAllFromFileAsync(path);

            var yamlBody         = deploymentsList[0] as V1Deployment;
            var deployController = new MTADeployController(deployName, tenantName, groupName);
            var respondeModel    = await deployController.CreateDeploymentAsync
                                       (_k8sClient, yamlBody, deployBody);

            if (respondeModel.Item2 != null)
            {
                return(BadRequest(respondeModel.Item2));
            }

            return(Created(Url.RouteUrl("CreateDeployment", new { deployName, groupName }),
                           respondeModel.Item1));
        }
Example #4
0
        ReadDeploymentAsync(Kubernetes k8sClient)
        {
            try
            {
                var namespaceParams = PrepareNamespaceParams(_groupName);
                var deployParams    = PrepareDeployParams(_deployName);

                var v1Deployment = await k8sClient.ReadNamespacedDeploymentAsync
                                       (deployParams.Item1, namespaceParams);

                var deployModel = new MTADeployModel(v1Deployment);
                return(new Tuple <MTADeployModel, MTAErrorModel>(deployModel, null));
            }
            catch (HttpOperationException ex)
            {
                var errorModel = new MTAErrorModel(ex);
                return(new Tuple <MTADeployModel, MTAErrorModel>(null, errorModel));
            }
            catch (Exception)
            {
                throw;
            }
        }
Example #5
0
        CreateDeploymentAsync(Kubernetes k8sClient, V1Deployment yamlModel,
                              MTADeployModel deployModel)
        {
            try
            {
                var namespaceParams = PrepareNamespaceParams(_groupName);
                var deployParams    = PrepareDeployParams(_deployName);

                yamlModel.Metadata.Name = deployParams.Item1;
                yamlModel.Metadata.NamespaceProperty = namespaceParams;

                if (deployModel.Annotations != null)
                {
                    yamlModel.Metadata.Annotations = deployModel.Annotations;
                }

                if (deployModel.Labels != null)
                {
                    yamlModel.Metadata.Labels = deployModel.Labels;
                }

                yamlModel.Spec.Replicas = deployModel.Replicas;
                yamlModel.Spec.Selector.MatchLabels["app"]     = deployParams.Item2;
                yamlModel.Spec.Template.Metadata.Labels["app"] = deployParams.Item2;

                var container = yamlModel.Spec.Template.Spec.Containers[0];
                container.Name            = deployParams.Item3;
                container.Image           = deployModel.Image;
                container.ImagePullPolicy = deployModel.ImagePullPolicy;

                if (deployModel.Resources != null)
                {
                    if (deployModel.Resources.Requests != null)
                    {
                        var cpu = new ResourceQuantity(deployModel.Resources.Requests.CPU);
                        container.Resources.Requests["cpu"] = cpu;

                        var memory = new ResourceQuantity(deployModel.Resources.Requests.Memory);
                        container.Resources.Requests["memory"] = memory;
                    }

                    if (deployModel.Resources.Limits != null)
                    {
                        var cpu = new ResourceQuantity(deployModel.Resources.Limits.CPU);
                        container.Resources.Limits["cpu"] = cpu;

                        var memory = new ResourceQuantity(deployModel.Resources.Limits.Memory);
                        container.Resources.Limits["memory"] = memory;
                    }
                }

                if (deployModel.Env != null)
                {
                    var v1EnvList = new List <V1EnvVar>();
                    foreach (var env in deployModel.Env)
                    {
                        var v1Env = new V1EnvVar(env["name"], env["value"]);
                        v1EnvList.Add(v1Env);
                    }
                    container.Env = v1EnvList;
                }

                var containerPorts = new List <V1ContainerPort>();
                foreach (var port in deployModel.Ports)
                {
                    var v1ContainerPort = new V1ContainerPort(port);
                    containerPorts.Add(v1ContainerPort);
                }
                container.Ports = containerPorts;

                var v1Deployment = await k8sClient.CreateNamespacedDeploymentAsync
                                       (yamlModel, namespaceParams);

                deployModel = new MTADeployModel(v1Deployment);
                return(new Tuple <MTADeployModel, MTAErrorModel>(deployModel, null));
            }
            catch (HttpOperationException ex)
            {
                var errorModel = new MTAErrorModel(ex);
                return(new Tuple <MTADeployModel, MTAErrorModel>(null, errorModel));
            }
            catch (Exception)
            {
                throw;
            }
        }