Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,8 @@ protected static MessageDigest getLabelDigestFunction() {

private String schedulerName;

private String priorityClassName;

private String nodeSelector;

private Node.Mode nodeUsageMode;
Expand Down Expand Up @@ -608,6 +610,15 @@ public void setSchedulerName(String schedulerName) {
this.schedulerName = Util.fixEmpty(schedulerName);
}

public String getPriorityClassName() {
return priorityClassName;
}

@DataBoundSetter
public void setPriorityClassName(String priorityClassName) {
this.priorityClassName = Util.fixEmpty(priorityClassName);
}

@Deprecated
@DataBoundSetter
public void setAlwaysPullImage(boolean alwaysPullImage) {
Expand Down Expand Up @@ -1173,6 +1184,7 @@ public String toString() {
+ (label == null ? "" : ", label='" + label + '\'')
+ (serviceAccount == null ? "" : ", serviceAccount='" + serviceAccount + '\'')
+ (schedulerName == null ? "" : ", schedulerName='" + schedulerName + '\'')
+ (priorityClassName == null ? "" : ", priorityClassName='" + priorityClassName + '\'')
+ (nodeSelector == null ? "" : ", nodeSelector='" + nodeSelector + '\'')
+ (nodeUsageMode == null ? "" : ", nodeUsageMode=" + nodeUsageMode)
+ (resourceRequestCpu == null ? "" : ", resourceRequestCpu='" + resourceRequestCpu + '\'')
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -256,6 +256,9 @@ public Pod build() {
if (template.getSchedulerName() != null) {
builder.withSchedulerName(substituteEnv(template.getSchedulerName()));
}
if (template.getPriorityClassName() != null) {
builder.withPriorityClassName(substituteEnv(template.getPriorityClassName()));
}

List<LocalObjectReference> imagePullSecrets = template.getImagePullSecrets().stream()
.map((x) -> x.toLocalObjectReference())
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -332,6 +332,7 @@ public static Pod combine(Pod parent, Pod template) {
.withServiceAccount(h.resolve(PodSpec::getServiceAccount, PodTemplateUtils::isNullOrEmpty)) //
.withServiceAccountName(h.resolve(PodSpec::getServiceAccountName, PodTemplateUtils::isNullOrEmpty)) //
.withSchedulerName(h.resolve(PodSpec::getSchedulerName, PodTemplateUtils::isNullOrEmpty))
.withPriorityClassName(h.resolve(PodSpec::getPriorityClassName, PodTemplateUtils::isNullOrEmpty))
.withActiveDeadlineSeconds(h.resolve(PodSpec::getActiveDeadlineSeconds, Objects::isNull)) //
.withHostNetwork(h.resolve(PodSpec::getHostNetwork, Objects::isNull)) //
.withShareProcessNamespace(h.resolve(PodSpec::getShareProcessNamespace, Objects::isNull)) //
Expand Down Expand Up @@ -473,6 +474,7 @@ public static PodTemplate combine(PodTemplate parent, PodTemplate template) {
podTemplate.setNodeSelector(h.resolve(PodTemplate::getNodeSelector, PodTemplateUtils::isNullOrEmpty));
podTemplate.setServiceAccount(h.resolve(PodTemplate::getServiceAccount, PodTemplateUtils::isNullOrEmpty));
podTemplate.setSchedulerName(h.resolve(PodTemplate::getSchedulerName, PodTemplateUtils::isNullOrEmpty));
podTemplate.setPriorityClassName(h.resolve(PodTemplate::getPriorityClassName, PodTemplateUtils::isNullOrEmpty));
podTemplate.setEnvVars(combineEnvVars(parent, template));
podTemplate.setContainers(new ArrayList<>(combinedContainers.values()));
podTemplate.setWorkspaceVolume(workspaceVolume);
Expand All @@ -496,6 +498,7 @@ public static PodTemplate combine(PodTemplate parent, PodTemplate template) {
h.resolve(PodTemplate::getActiveDeadlineSeconds, i -> Objects.equals(i, 0)));
podTemplate.setServiceAccount(h.resolve(PodTemplate::getServiceAccount, PodTemplateUtils::isNullOrEmpty));
podTemplate.setSchedulerName(h.resolve(PodTemplate::getSchedulerName, PodTemplateUtils::isNullOrEmpty));
podTemplate.setPriorityClassName(h.resolve(PodTemplate::getPriorityClassName, PodTemplateUtils::isNullOrEmpty));
podTemplate.setPodRetention(template.getPodRetention());
podTemplate.setShowRawYaml(h.resolve(PodTemplate::isShowRawYaml, v -> v));
podTemplate.setRunAsUser(h.resolve(PodTemplate::getRunAsUser, Objects::isNull));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,9 @@ public class KubernetesDeclarativeAgent extends RetryableDeclarativeAgent<Kubern
@CheckForNull
private String schedulerName;

@CheckForNull
private String priorityClassName;

@CheckForNull
private String nodeSelector;

Expand Down Expand Up @@ -205,6 +208,15 @@ public void setSchedulerName(String schedulerName) {
this.schedulerName = schedulerName;
}

public String getPriorityClassName() {
return priorityClassName;
}

@DataBoundSetter
public void setPriorityClassName(String priorityClassName) {
this.priorityClassName = priorityClassName;
}

public String getNodeSelector() {
return nodeSelector;
}
Expand Down Expand Up @@ -426,6 +438,9 @@ public Map<String, Object> getAsArgs() {
if (!StringUtils.isEmpty(serviceAccount)) {
argMap.put("serviceAccount", serviceAccount);
}
if (!StringUtils.isEmpty(priorityClassName)) {
argMap.put("priorityClassName", priorityClassName);
}
if (!StringUtils.isEmpty(nodeSelector)) {
argMap.put("nodeSelector", nodeSelector);
}
Expand Down Expand Up @@ -475,6 +490,7 @@ public static class DescriptorImpl extends DeclarativeAgentDescriptor<Kubernetes
"idleMinutes",
"activeDeadlineSeconds",
"serviceAccount",
"priorityClassName",
"nodeSelector",
"workingDir",
"workspaceVolume",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,9 @@ public class PodTemplateStep extends Step implements Serializable {
@CheckForNull
private String schedulerName;

@CheckForNull
private String priorityClassName;

@CheckForNull
private String nodeSelector;

Expand Down Expand Up @@ -310,6 +313,16 @@ public void setSchedulerName(@CheckForNull String schedulerName) {
this.schedulerName = Util.fixEmpty(schedulerName);
}

@CheckForNull
public String getPriorityClassName() {
return priorityClassName;
}

@DataBoundSetter
public void setPriorityClassName(@CheckForNull String priorityClassName) {
this.priorityClassName = Util.fixEmpty(priorityClassName);
}

@CheckForNull
public String getNodeSelector() {
return nodeSelector;
Expand Down Expand Up @@ -458,6 +471,7 @@ public static class DescriptorImpl extends StepDescriptor {
"idleMinutes",
"activeDeadlineSeconds",
"serviceAccount",
"priorityClassName",
"nodeSelector",
"workingDir",
"workspaceVolume",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -116,6 +116,7 @@ public boolean start() throws Exception {
newTemplate.setNodeUsageMode(step.getNodeUsageMode());
newTemplate.setServiceAccount(step.getServiceAccount());
newTemplate.setSchedulerName(step.getSchedulerName());
newTemplate.setPriorityClassName(step.getPriorityClassName());
newTemplate.setRunAsUser(step.getRunAsUser());
newTemplate.setRunAsGroup(step.getRunAsGroup());
if (step.getHostNetwork() != null) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -114,6 +114,10 @@ THE SOFTWARE.
<f:textbox/>
</f:entry>

<f:entry field="priorityClassName" title="${%Priority Class Name}">
<f:textbox/>
</f:entry>

<f:entry field="runAsUser" title="${%Run As User ID}">
<f:textbox/>
</f:entry>
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
The Kubernetes priority class name to assign to the pod.
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,9 @@
<f:entry field="serviceAccount" title="${%Service Account}">
<f:textbox/>
</f:entry>
<f:entry field="priorityClassName" title="${%Priority Class Name}">
<f:textbox/>
</f:entry>
<f:entry field="nodeSelector" title="${%Node Selector}">
<f:textbox/>
</f:entry>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -82,6 +82,9 @@
<f:entry field="serviceAccount" title="${%Service Account}">
<f:textbox/>
</f:entry>
<f:entry field="priorityClassName" title="${%Priority Class Name}">
<f:textbox/>
</f:entry>
<f:entry field="nodeSelector" title="${%Node Selector}">
<f:textbox/>
</f:entry>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -865,6 +865,36 @@ public void yamlOverrideSchedulerName() {
assertEquals("custom-scheduler", pod.getSpec().getSchedulerName());
}

@Test
public void yamlOverridePriorityClassName() {
PodTemplate parent = new PodTemplate();
parent.setYaml("apiVersion: v1\n" + "kind: Pod\n"
+ "metadata:\n"
+ " labels:\n"
+ " some-label: some-label-value\n"
+ "spec:\n"
+ " priorityClassName: parent-priority\n");

PodTemplate child = new PodTemplate();
child.setYaml("spec:\n" + " priorityClassName: child-priority\n");
child.setInheritFrom("parent");
child.setYamlMergeStrategy(merge());
PodTemplate result = combine(parent, child);
Pod pod = new PodTemplateBuilder(result, slave).build();
assertEquals("child-priority", pod.getSpec().getPriorityClassName());
}

@Test
public void topLevelPriorityClassNameIsApplied() {
PodTemplate template = new PodTemplate();
template.setPriorityClassName("high-priority");
setupStubs();

Pod pod = new PodTemplateBuilder(template, slave).build();

assertEquals("high-priority", pod.getSpec().getPriorityClassName());
}

@Test
public void yamlOverrideSecurityContext() {
PodTemplate parent = new PodTemplate();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -168,6 +168,26 @@ public void shouldOverrideNodeSelectorIfSpecified() {
assertEquals("key:value", result.getNodeSelector());
}

@Test
public void shouldOverridePriorityClassNameIfSpecified() {
PodTemplate parent = new PodTemplate();
parent.setName("parent");
parent.setPriorityClassName("parent-priority");

PodTemplate template1 = new PodTemplate();
template1.setName("template1");
template1.setPriorityClassName("child-priority");

PodTemplate template2 = new PodTemplate();
template2.setName("template2");

PodTemplate result = combine(parent, template1);
assertEquals("child-priority", result.getPriorityClassName());

result = combine(parent, template2);
assertEquals("parent-priority", result.getPriorityClassName());
}

@Test
public void shouldCombineAllImagePullSecrets() {
PodTemplate parent = new PodTemplate();
Expand Down Expand Up @@ -252,6 +272,7 @@ public void shouldUnwrapParent() {
parent.setName("parent");
parent.setLabel("parent");
parent.setServiceAccount("sa");
parent.setPriorityClassName("parent-priority");
parent.setNodeSelector("key:value");
parent.setImagePullSecrets(asList(SECRET_1));
parent.setYaml("Yaml");
Expand All @@ -263,12 +284,14 @@ public void shouldUnwrapParent() {
template1.setName("template1");
template1.setInheritFrom("parent");
template1.setServiceAccount("sa1");
template1.setPriorityClassName("child-priority");
template1.setImagePullSecrets(asList(SECRET_2, SECRET_3));
template1.setYaml("Yaml2");

PodTemplate result = unwrap(template1, asList(parent, template1));
assertEquals(3, result.getImagePullSecrets().size());
assertEquals("sa1", result.getServiceAccount());
assertEquals("child-priority", result.getPriorityClassName());
assertEquals("key:value", result.getNodeSelector());
assertThat(result.getYamls(), hasSize(2));
assertThat(result.getYamls(), contains("Yaml", "Yaml2"));
Expand All @@ -284,6 +307,7 @@ public void shouldDropNoDataWhenIdentical() {
podTemplate.setNamespace("NameSpace");
podTemplate.setLabel("Label");
podTemplate.setServiceAccount("ServiceAccount");
podTemplate.setPriorityClassName("PriorityClassName");
podTemplate.setNodeSelector("NodeSelector");
podTemplate.setNodeUsageMode(Node.Mode.EXCLUSIVE);
podTemplate.setImagePullSecrets(asList(SECRET_1));
Expand All @@ -301,6 +325,7 @@ public void shouldDropNoDataWhenIdentical() {
assertEquals("NameSpace", selfCombined.getNamespace());
assertEquals("Label", selfCombined.getLabel());
assertEquals("ServiceAccount", selfCombined.getServiceAccount());
assertEquals("PriorityClassName", selfCombined.getPriorityClassName());
assertEquals("NodeSelector", selfCombined.getNodeSelector());
assertEquals(Node.Mode.EXCLUSIVE, selfCombined.getNodeUsageMode());
assertEquals(asList(SECRET_1), selfCombined.getImagePullSecrets());
Expand Down