Skip to content

Commit

Permalink
Fix Timeouts Default in v1 PipelienRun
Browse files Browse the repository at this point in the history
This commit fixes the SetDefault for v1 pipelinerun.timeouts. Previously
it would reset pipelinerun.timeouts fields with only timeouts.pipeline while
it should have kept timeouts.tasks and timeouts.finally as expected.
  • Loading branch information
JeromeJu authored and tekton-robot committed Apr 19, 2023
1 parent 048bf9a commit a1c1000
Show file tree
Hide file tree
Showing 2 changed files with 103 additions and 5 deletions.
6 changes: 5 additions & 1 deletion pkg/apis/pipeline/v1/pipelinerun_defaults.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,11 @@ func (pr *PipelineRun) SetDefaults(ctx context.Context) {
func (prs *PipelineRunSpec) SetDefaults(ctx context.Context) {
cfg := config.FromContextOrDefaults(ctx)

if prs.Timeouts != nil && prs.Timeouts.Pipeline == nil {
if prs.Timeouts == nil {
prs.Timeouts = &TimeoutFields{}
}

if prs.Timeouts.Pipeline == nil {
prs.Timeouts.Pipeline = &metav1.Duration{Duration: time.Duration(cfg.Defaults.DefaultTimeoutMinutes) * time.Minute}
}

Expand Down
102 changes: 98 additions & 4 deletions pkg/apis/pipeline/v1/pipelinerun_defaults_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,9 @@ package v1_test

import (
"context"
"strconv"
"testing"
"time"

"github.com/google/go-cmp/cmp"
"github.com/google/go-cmp/cmp/cmpopts"
Expand All @@ -37,13 +39,77 @@ func TestPipelineRunSpec_SetDefaults(t *testing.T) {
prs *v1.PipelineRunSpec
want *v1.PipelineRunSpec
}{
{
desc: "timeouts is nil",
prs: &v1.PipelineRunSpec{},
want: &v1.PipelineRunSpec{
TaskRunTemplate: v1.PipelineTaskRunTemplate{
ServiceAccountName: config.DefaultServiceAccountValue,
},
Timeouts: &v1.TimeoutFields{
Pipeline: &metav1.Duration{Duration: config.DefaultTimeoutMinutes * time.Minute},
},
},
},
{
desc: "timeouts is not nil",
prs: &v1.PipelineRunSpec{
Timeouts: &v1.TimeoutFields{},
},
want: &v1.PipelineRunSpec{
TaskRunTemplate: v1.PipelineTaskRunTemplate{
ServiceAccountName: config.DefaultServiceAccountValue,
},
Timeouts: &v1.TimeoutFields{
Pipeline: &metav1.Duration{Duration: config.DefaultTimeoutMinutes * time.Minute},
},
},
},
{
desc: "timeouts.pipeline is not nil",
prs: &v1.PipelineRunSpec{
Timeouts: &v1.TimeoutFields{
Pipeline: &metav1.Duration{Duration: (config.DefaultTimeoutMinutes + 1) * time.Minute},
},
},
want: &v1.PipelineRunSpec{
TaskRunTemplate: v1.PipelineTaskRunTemplate{
ServiceAccountName: config.DefaultServiceAccountValue,
},
Timeouts: &v1.TimeoutFields{
Pipeline: &metav1.Duration{Duration: (config.DefaultTimeoutMinutes + 1) * time.Minute},
},
},
},
{
desc: "timeouts.pipeline is nil with timeouts.tasks and timeouts.finally",
prs: &v1.PipelineRunSpec{
Timeouts: &v1.TimeoutFields{
Tasks: &metav1.Duration{Duration: (config.DefaultTimeoutMinutes + 1) * time.Minute},
Finally: &metav1.Duration{Duration: (config.DefaultTimeoutMinutes + 1) * time.Minute},
},
},
want: &v1.PipelineRunSpec{
TaskRunTemplate: v1.PipelineTaskRunTemplate{
ServiceAccountName: config.DefaultServiceAccountValue,
},
Timeouts: &v1.TimeoutFields{
Pipeline: &metav1.Duration{Duration: (config.DefaultTimeoutMinutes) * time.Minute},
Tasks: &metav1.Duration{Duration: (config.DefaultTimeoutMinutes + 1) * time.Minute},
Finally: &metav1.Duration{Duration: (config.DefaultTimeoutMinutes + 1) * time.Minute},
},
},
},
{
desc: "pod template is nil",
prs: &v1.PipelineRunSpec{},
want: &v1.PipelineRunSpec{
TaskRunTemplate: v1.PipelineTaskRunTemplate{
ServiceAccountName: config.DefaultServiceAccountValue,
},
Timeouts: &v1.TimeoutFields{
Pipeline: &metav1.Duration{Duration: (config.DefaultTimeoutMinutes) * time.Minute},
},
},
},
{
Expand All @@ -56,6 +122,9 @@ func TestPipelineRunSpec_SetDefaults(t *testing.T) {
},
},
},
Timeouts: &v1.TimeoutFields{
Pipeline: &metav1.Duration{Duration: (config.DefaultTimeoutMinutes) * time.Minute},
},
},
want: &v1.PipelineRunSpec{
TaskRunTemplate: v1.PipelineTaskRunTemplate{
Expand All @@ -66,6 +135,9 @@ func TestPipelineRunSpec_SetDefaults(t *testing.T) {
},
},
},
Timeouts: &v1.TimeoutFields{
Pipeline: &metav1.Duration{Duration: (config.DefaultTimeoutMinutes) * time.Minute},
},
},
},
}
Expand All @@ -91,6 +163,7 @@ func TestPipelineRunSpec_SetDefaults(t *testing.T) {
}

func TestPipelineRunDefaulting(t *testing.T) {
const defaultTimeoutMinutes = 5
tests := []struct {
name string
in *v1.PipelineRun
Expand All @@ -104,6 +177,9 @@ func TestPipelineRunDefaulting(t *testing.T) {
TaskRunTemplate: v1.PipelineTaskRunTemplate{
ServiceAccountName: config.DefaultServiceAccountValue,
},
Timeouts: &v1.TimeoutFields{
Pipeline: &metav1.Duration{Duration: (config.DefaultTimeoutMinutes) * time.Minute},
},
},
},
}, {
Expand All @@ -128,6 +204,9 @@ func TestPipelineRunDefaulting(t *testing.T) {
TaskRunTemplate: v1.PipelineTaskRunTemplate{
ServiceAccountName: config.DefaultServiceAccountValue,
},
Timeouts: &v1.TimeoutFields{
Pipeline: &metav1.Duration{Duration: (config.DefaultTimeoutMinutes) * time.Minute},
},
},
},
}, {
Expand All @@ -143,6 +222,9 @@ func TestPipelineRunDefaulting(t *testing.T) {
TaskRunTemplate: v1.PipelineTaskRunTemplate{
ServiceAccountName: config.DefaultServiceAccountValue,
},
Timeouts: &v1.TimeoutFields{
Pipeline: &metav1.Duration{Duration: (config.DefaultTimeoutMinutes) * time.Minute},
},
},
},
wc: func(ctx context.Context) context.Context {
Expand All @@ -168,6 +250,9 @@ func TestPipelineRunDefaulting(t *testing.T) {
TaskRunTemplate: v1.PipelineTaskRunTemplate{
ServiceAccountName: "tekton",
},
Timeouts: &v1.TimeoutFields{
Pipeline: &metav1.Duration{Duration: defaultTimeoutMinutes * time.Minute},
},
},
},
wc: func(ctx context.Context) context.Context {
Expand All @@ -177,7 +262,7 @@ func TestPipelineRunDefaulting(t *testing.T) {
Name: config.GetDefaultsConfigName(),
},
Data: map[string]string{
"default-timeout-minutes": "5",
"default-timeout-minutes": strconv.Itoa(defaultTimeoutMinutes),
"default-service-account": "tekton",
},
})
Expand All @@ -201,6 +286,9 @@ func TestPipelineRunDefaulting(t *testing.T) {
},
},
},
Timeouts: &v1.TimeoutFields{
Pipeline: &metav1.Duration{Duration: defaultTimeoutMinutes * time.Minute},
},
},
},
wc: func(ctx context.Context) context.Context {
Expand All @@ -210,7 +298,7 @@ func TestPipelineRunDefaulting(t *testing.T) {
Name: config.GetDefaultsConfigName(),
},
Data: map[string]string{
"default-timeout-minutes": "5",
"default-timeout-minutes": strconv.Itoa(defaultTimeoutMinutes),
"default-service-account": "tekton",
"default-pod-template": "nodeSelector: { 'label': 'value' }",
},
Expand Down Expand Up @@ -242,6 +330,9 @@ func TestPipelineRunDefaulting(t *testing.T) {
},
},
},
Timeouts: &v1.TimeoutFields{
Pipeline: &metav1.Duration{Duration: defaultTimeoutMinutes * time.Minute},
},
},
},
wc: func(ctx context.Context) context.Context {
Expand All @@ -251,7 +342,7 @@ func TestPipelineRunDefaulting(t *testing.T) {
Name: config.GetDefaultsConfigName(),
},
Data: map[string]string{
"default-timeout-minutes": "5",
"default-timeout-minutes": strconv.Itoa(defaultTimeoutMinutes),
"default-service-account": "tekton",
"default-pod-template": "nodeSelector: { 'label': 'value' }",
},
Expand Down Expand Up @@ -290,6 +381,9 @@ func TestPipelineRunDefaulting(t *testing.T) {
HostNetwork: true,
},
},
Timeouts: &v1.TimeoutFields{
Pipeline: &metav1.Duration{Duration: defaultTimeoutMinutes * time.Minute},
},
},
},
wc: func(ctx context.Context) context.Context {
Expand All @@ -299,7 +393,7 @@ func TestPipelineRunDefaulting(t *testing.T) {
Name: config.GetDefaultsConfigName(),
},
Data: map[string]string{
"default-timeout-minutes": "5",
"default-timeout-minutes": strconv.Itoa(defaultTimeoutMinutes),
"default-service-account": "tekton",
"default-pod-template": "nodeSelector: { 'label': 'value' }\nhostNetwork: true",
},
Expand Down

0 comments on commit a1c1000

Please sign in to comment.