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; } }
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)); }
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)); }
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; } }
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; } }