From e42f1ddbd74bc5d8f67b5e121ac91e9241108ff9 Mon Sep 17 00:00:00 2001 From: Ben Date: Wed, 13 Mar 2024 10:01:14 +0100 Subject: [PATCH] Adds support for command overrides to container recipes. --- Framework/KubernetesWorkflow/K8sController.cs | 9 ++++++++- .../KubernetesWorkflow/Recipe/CommandOverride.cs | 12 ++++++++++++ .../KubernetesWorkflow/Recipe/ContainerRecipe.cs | 4 +++- .../Recipe/ContainerRecipeFactory.cs | 9 ++++++++- 4 files changed, 31 insertions(+), 3 deletions(-) create mode 100644 Framework/KubernetesWorkflow/Recipe/CommandOverride.cs diff --git a/Framework/KubernetesWorkflow/K8sController.cs b/Framework/KubernetesWorkflow/K8sController.cs index bfea181..8af6fd8 100644 --- a/Framework/KubernetesWorkflow/K8sController.cs +++ b/Framework/KubernetesWorkflow/K8sController.cs @@ -498,10 +498,17 @@ namespace KubernetesWorkflow Ports = CreateContainerPorts(recipe), Env = CreateEnv(recipe), VolumeMounts = CreateContainerVolumeMounts(recipe), - Resources = CreateResourceLimits(recipe) + Resources = CreateResourceLimits(recipe), + Command = CreateCommandList(recipe) }; } + private IList CreateCommandList(ContainerRecipe recipe) + { + if (recipe.CommandOverride == null || !recipe.CommandOverride.Command.Any()) return null!; + return recipe.CommandOverride.Command.ToList(); + } + private V1ResourceRequirements CreateResourceLimits(ContainerRecipe recipe) { return new V1ResourceRequirements diff --git a/Framework/KubernetesWorkflow/Recipe/CommandOverride.cs b/Framework/KubernetesWorkflow/Recipe/CommandOverride.cs new file mode 100644 index 0000000..7821c81 --- /dev/null +++ b/Framework/KubernetesWorkflow/Recipe/CommandOverride.cs @@ -0,0 +1,12 @@ +namespace KubernetesWorkflow.Recipe +{ + public class CommandOverride + { + public CommandOverride(params string[] command) + { + Command = command; + } + + public string[] Command { get; } + } +} diff --git a/Framework/KubernetesWorkflow/Recipe/ContainerRecipe.cs b/Framework/KubernetesWorkflow/Recipe/ContainerRecipe.cs index fb7c8a4..78fcb63 100644 --- a/Framework/KubernetesWorkflow/Recipe/ContainerRecipe.cs +++ b/Framework/KubernetesWorkflow/Recipe/ContainerRecipe.cs @@ -2,13 +2,14 @@ { public class ContainerRecipe { - public ContainerRecipe(int number, string? nameOverride, string image, ContainerResources resources, SchedulingAffinity schedulingAffinity, bool setCriticalPriority, Port[] exposedPorts, Port[] internalPorts, EnvVar[] envVars, PodLabels podLabels, PodAnnotations podAnnotations, VolumeMount[] volumes, ContainerAdditionals additionals) + public ContainerRecipe(int number, string? nameOverride, string image, ContainerResources resources, SchedulingAffinity schedulingAffinity, CommandOverride commandOverride, bool setCriticalPriority, Port[] exposedPorts, Port[] internalPorts, EnvVar[] envVars, PodLabels podLabels, PodAnnotations podAnnotations, VolumeMount[] volumes, ContainerAdditionals additionals) { Number = number; NameOverride = nameOverride; Image = image; Resources = resources; SchedulingAffinity = schedulingAffinity; + CommandOverride = commandOverride; SetCriticalPriority = setCriticalPriority; ExposedPorts = exposedPorts; InternalPorts = internalPorts; @@ -35,6 +36,7 @@ public string? NameOverride { get; } public ContainerResources Resources { get; } public SchedulingAffinity SchedulingAffinity { get; } + public CommandOverride CommandOverride { get; } public bool SetCriticalPriority { get; } public string Image { get; } public Port[] ExposedPorts { get; } diff --git a/Framework/KubernetesWorkflow/Recipe/ContainerRecipeFactory.cs b/Framework/KubernetesWorkflow/Recipe/ContainerRecipeFactory.cs index 931013d..6b6ae2d 100644 --- a/Framework/KubernetesWorkflow/Recipe/ContainerRecipeFactory.cs +++ b/Framework/KubernetesWorkflow/Recipe/ContainerRecipeFactory.cs @@ -14,6 +14,7 @@ namespace KubernetesWorkflow.Recipe private RecipeComponentFactory factory = null!; private ContainerResources resources = new ContainerResources(); private SchedulingAffinity schedulingAffinity = new SchedulingAffinity(); + private CommandOverride commandOverride = new CommandOverride(); private bool setCriticalPriority; public ContainerRecipe CreateRecipe(int index, int containerNumber, RecipeComponentFactory factory, StartupConfig config) @@ -24,7 +25,7 @@ namespace KubernetesWorkflow.Recipe Initialize(config); - var recipe = new ContainerRecipe(containerNumber, config.NameOverride, Image, resources, schedulingAffinity, setCriticalPriority, + var recipe = new ContainerRecipe(containerNumber, config.NameOverride, Image, resources, schedulingAffinity, commandOverride, setCriticalPriority, exposedPorts.ToArray(), internalPorts.ToArray(), envVars.ToArray(), @@ -43,6 +44,7 @@ namespace KubernetesWorkflow.Recipe this.factory = null!; resources = new ContainerResources(); schedulingAffinity = new SchedulingAffinity(); + commandOverride = new CommandOverride(); setCriticalPriority = false; return recipe; @@ -130,6 +132,11 @@ namespace KubernetesWorkflow.Recipe schedulingAffinity = new SchedulingAffinity(notIn); } + protected void OverrideCommand(params string[] command) + { + commandOverride = new CommandOverride(command); + } + protected void SetSystemCriticalPriority() { setCriticalPriority = true;