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; } }
private V1Pod Pod(string name) { V1Pod pod = new V1Pod(); pod.Kind = "Pod"; pod.ApiVersion = "v1"; pod.Metadata = new V1ObjectMeta() { Name = name, Labels = new Dictionary <string, string>() }; pod.Metadata.Labels.Add("run", name); pod.Spec = new V1PodSpec() { Containers = new List <V1Container>(), }; var env1 = new V1EnvVar() { Name = "EULA", Value = "TRUE" }; var port1 = new V1ContainerPort(25565); var port2 = new V1ContainerPort(25575); V1VolumeMount v1mount = new V1VolumeMount("/data", "volume"); V1Container container = new V1Container() { Name = name, Image = "openhack/minecraft-server:2.0", Env = new List <V1EnvVar>(), Ports = new List <V1ContainerPort>(), VolumeMounts = new List <V1VolumeMount>() }; container.Ports.Add(port1); container.Ports.Add(port2); container.VolumeMounts.Add(v1mount); container.Env.Add(env1); pod.Spec.Containers.Add(container); V1Volume v1Volume = new V1Volume() { Name = "volume", PersistentVolumeClaim = new V1PersistentVolumeClaimVolumeSource() { ClaimName = "volume-minecraft" } }; pod.Spec.Volumes = new List <V1Volume>(); pod.Spec.Volumes.Add(v1Volume); return(pod); }
/// <summary> /// Removes the environment variable with the specified name /// </summary> /// <param name="config">The extended <see cref="V1Container"/></param> /// <param name="variable">The environment variable to remove</param> /// <returns>A boolean indicating whether or not the specified environment variable has been removed</returns> public static bool RemoveEnvironmentVariable(this V1Container config, V1EnvVar variable) { if (config.Env == null) { return(false); } var existingVariable = config.Env.FirstOrDefault(e => e.Name.Equals(variable.Name, StringComparison.OrdinalIgnoreCase)); if (existingVariable != null) { return(config.Env.Remove(existingVariable)); } return(false); }
/// <summary> /// Adds the specified environment variable /// </summary> /// <param name="config">The extended <see cref="V1Container"/></param> /// <param name="variable">The environment variable to set</param> public static void AddOrUpdateEnvironmentVariable(this V1Container config, V1EnvVar variable) { if (variable == null) { throw new ArgumentNullException(nameof(variable)); } if (config.Env == null) { config.Env = new List <V1EnvVar>(); } var existingVariable = config.Env.FirstOrDefault(e => e.Name.Equals(variable.Name, StringComparison.OrdinalIgnoreCase)); if (existingVariable != null) { config.Env.Remove(existingVariable); } config.Env.Add(variable); }
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; } }
private static V1Pod CreatePodDefinition() { Guid podIdentifier = Guid.NewGuid(); var podidentifierstring = podIdentifier.ToString(); string podName = "pod" + podidentifierstring; string containerPortName = "containerport"; string containerName = "container"; V1ObjectMeta meta = new V1ObjectMeta(); meta.Name = podName; V1EnvVar addr = new V1EnvVar(); addr.Name = "ACTIVITY_PARTITION_NAME"; addr.Value = "bam_EnrichedFPAttributesV2_Instances"; //V1EnvVar port = new V1EnvVar(); //addr.name("var2"); //addr.value("value2"); //V1ResourceRequirements res = new V1ResourceRequirements(); //Map<String, String> limits = new HashMap<>(); //limits.put("cpu", "300m"); //limits.put("memory", "500Mi"); //res.limits(limits); V1ContainerPort port = new V1ContainerPort(); port.Name = containerPortName; port.ContainerPort = 8080; V1Container container = new V1Container(); container.Name = containerName; container.Image = "bamreplacementwebapp:dev"; //container.Image = "nbsbamreplacementmigrationservice:dev"; //container.Image = "migrationservice:dev"; container.Ports = new List <V1ContainerPort>(); container.Ports.Add(port); container.Env = new List <V1EnvVar>(); container.Env.Add(addr); //container.Args = new List<string>(); //container.Args.Add("bam_EnrichedFPAttributesV2_Instances"); // container.Args.Add("bar"); // container.env(Arrays.asList(addr, port)); //container.resources(res); V1PodSpec spec = new V1PodSpec(); spec.Containers = new List <V1Container>(); spec.Containers.Add(container); V1Pod podBody = new V1Pod(); podBody.ApiVersion = "v1"; podBody.Kind = "Pod"; podBody.Metadata = meta; podBody.Spec = spec; return(podBody); }
private static V1Deployment CreateDeploymentDefinition() { Guid podIdentifier = Guid.NewGuid(); var podidentifierstring = podIdentifier.ToString(); string podName = "pod-" + podidentifierstring; string containerPortName = "containerport"; string containerName = "container"; string deploymentName = "poddeployment-" + podIdentifier; V1ObjectMeta deplMetadata = new V1ObjectMeta(); deplMetadata.Name = deploymentName; deplMetadata.Labels = new Dictionary <string, string>(); deplMetadata.Labels.Add("component", "migrationservice"); V1DeploymentSpec deplSpec = new V1DeploymentSpec(); deplSpec.Selector = new V1LabelSelector(); deplSpec.Selector.MatchLabels = new Dictionary <string, string>(); deplSpec.Selector.MatchLabels.Add("app", "bamreplacement"); deplSpec.Replicas = 3; // to be tokenized deplSpec.Strategy = new V1DeploymentStrategy(); deplSpec.Strategy.Type = "RollingUpdate"; deplSpec.Strategy.RollingUpdate = new V1RollingUpdateDeployment(); deplSpec.Strategy.RollingUpdate.MaxSurge = 1; deplSpec.Strategy.RollingUpdate.MaxUnavailable = 0; V1ObjectMeta podMetadata = new V1ObjectMeta(); podMetadata.Name = podName; podMetadata.Labels = new Dictionary <string, string>(); podMetadata.Labels.Add("app", "bamreplacement"); V1ContainerPort port = new V1ContainerPort(); port.Name = containerPortName; port.ContainerPort = 8080; V1EnvVar addr = new V1EnvVar(); addr.Name = "ACTIVITY_PARTITION_NAME"; addr.Value = "bam_EnrichedFPAttributesV2_Instances"; V1Container container = new V1Container(); container.Name = containerName; // container.Image = "abhishekagg24/stableapp:v1"; //container.Image = "nbsbamreplacementmigrationservice:dev"; container.Image = "bamreplacementwebapp:dev"; container.Ports = new List <V1ContainerPort>(); container.Ports.Add(port); container.Env = new List <V1EnvVar>(); container.Env.Add(addr); V1PodSpec podSpec = new V1PodSpec(); podSpec.Containers = new List <V1Container>(); podSpec.Containers.Add(container); deplSpec.Template = new V1PodTemplateSpec(); deplSpec.Template.Metadata = podMetadata; deplSpec.Template.Spec = podSpec; V1Deployment deployment = new V1Deployment(); deployment.ApiVersion = "apps/v1"; deployment.Kind = "Deployment"; deployment.Metadata = deplMetadata; deployment.Spec = deplSpec; return(deployment); }