Skip to content

Commit e2a3dbc

Browse files
authored
Merge pull request #473 from upodroid/tolerations-preset
set tolerations using presets
2 parents 9ad88fc + 0115e2b commit e2a3dbc

File tree

4 files changed

+47
-9
lines changed

4 files changed

+47
-9
lines changed

pkg/config/config.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2941,7 +2941,7 @@ func validateDecoration(container v1.Container, config *prowapi.DecorationConfig
29412941
func resolvePresets(name string, labels map[string]string, spec *v1.PodSpec, presets []Preset) error {
29422942
for _, preset := range presets {
29432943
if spec != nil {
2944-
if err := mergePreset(preset, labels, spec.Containers, &spec.Volumes); err != nil {
2944+
if err := mergePreset(preset, labels, spec); err != nil {
29452945
return fmt.Errorf("job %s failed to merge presets for podspec: %w", name, err)
29462946
}
29472947
}

pkg/config/jobs.go

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import (
2424
"strings"
2525
"time"
2626

27+
"github.com/google/go-cmp/cmp"
2728
pipelinev1 "github.com/tektoncd/pipeline/pkg/apis/pipeline/v1"
2829

2930
v1 "k8s.io/api/core/v1"
@@ -45,9 +46,13 @@ type Preset struct {
4546
Env []v1.EnvVar `json:"env"`
4647
Volumes []v1.Volume `json:"volumes"`
4748
VolumeMounts []v1.VolumeMount `json:"volumeMounts"`
49+
Tolerations []v1.Toleration `json:"tolerations,omitempty"`
4850
}
4951

50-
func mergePreset(preset Preset, labels map[string]string, containers []v1.Container, volumes *[]v1.Volume) error {
52+
func mergePreset(preset Preset, labels map[string]string, podSpec *v1.PodSpec) error {
53+
containers := podSpec.Containers
54+
volumes := &podSpec.Volumes
55+
tolerations := &podSpec.Tolerations
5156
for l, v := range preset.Labels {
5257
if v2, ok := labels[l]; !ok || v2 != v {
5358
return nil
@@ -81,6 +86,15 @@ func mergePreset(preset Preset, labels map[string]string, containers []v1.Contai
8186
containers[i].VolumeMounts = append(containers[i].VolumeMounts, vm1)
8287
}
8388
}
89+
90+
for _, t1 := range preset.Tolerations {
91+
for _, t2 := range *tolerations {
92+
if cmp.Equal(t1, t2) {
93+
return fmt.Errorf("toleration duplicated in pod spec: %v", t1)
94+
}
95+
}
96+
*tolerations = append(*tolerations, t1)
97+
}
8498
return nil
8599
}
86100

pkg/config/jobs_test.go

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -401,10 +401,11 @@ func TestMergePreset(t *testing.T) {
401401
pod *coreapi.PodSpec
402402
presets []Preset
403403

404-
shouldError bool
405-
numEnv int
406-
numVol int
407-
numVolMounts int
404+
shouldError bool
405+
numEnv int
406+
numVol int
407+
numVolMounts int
408+
numTolerations int
408409
}{
409410
{
410411
name: "one volume",
@@ -499,11 +500,13 @@ func TestMergePreset(t *testing.T) {
499500
Env: []coreapi.EnvVar{{Name: "baz"}},
500501
VolumeMounts: []coreapi.VolumeMount{{Name: "baz"}},
501502
Volumes: []coreapi.Volume{{Name: "qux"}},
503+
Tolerations: []coreapi.Toleration{{Key: "foo", Operator: coreapi.TolerationOpEqual, Value: "bar", Effect: coreapi.TaintEffectNoSchedule}},
502504
},
503505
},
504-
numEnv: 1,
505-
numVol: 1,
506-
numVolMounts: 1,
506+
numEnv: 1,
507+
numVol: 1,
508+
numVolMounts: 1,
509+
numTolerations: 1,
507510
},
508511
{
509512
name: "two vm",
@@ -588,6 +591,17 @@ func TestMergePreset(t *testing.T) {
588591
},
589592
shouldError: true,
590593
},
594+
{
595+
name: "duplicate tolerations",
596+
jobLabels: map[string]string{"foo": "bar"},
597+
pod: &coreapi.PodSpec{Tolerations: []coreapi.Toleration{{Key: "kubernetes.io/arch", Operator: coreapi.TolerationOpEqual, Value: "arm64", Effect: coreapi.TaintEffectNoSchedule}}},
598+
presets: []Preset{
599+
{
600+
Tolerations: []coreapi.Toleration{{Key: "kubernetes.io/arch", Operator: coreapi.TolerationOpEqual, Value: "arm64", Effect: coreapi.TaintEffectNoSchedule}},
601+
},
602+
},
603+
shouldError: true,
604+
},
591605
}
592606
for _, tc := range tcs {
593607
t.Run(tc.name, func(t *testing.T) {
@@ -602,6 +616,9 @@ func TestMergePreset(t *testing.T) {
602616
if len(tc.pod.Volumes) != tc.numVol {
603617
t.Errorf("wrong number of volumes for podspec. Got %d, expected %d.", len(tc.pod.Volumes), tc.numVol)
604618
}
619+
if len(tc.pod.Tolerations) != tc.numTolerations {
620+
t.Errorf("wrong number of tolerations for podspec. Got %d, expected %d.", len(tc.pod.Tolerations), tc.numTolerations)
621+
}
605622
for _, c := range tc.pod.Containers {
606623
if len(c.VolumeMounts) != tc.numVolMounts {
607624
t.Errorf("wrong number of volume mounts for podspec. Got %d, expected %d.", len(c.VolumeMounts), tc.numVolMounts)

pkg/config/zz_generated.deepcopy.go

Lines changed: 7 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

0 commit comments

Comments
 (0)