diff --git a/api/openapi-spec/swagger.json b/api/openapi-spec/swagger.json
index cc304120ee5..866205206f6 100644
--- a/api/openapi-spec/swagger.json
+++ b/api/openapi-spec/swagger.json
@@ -63113,7 +63113,7 @@
"type": "string"
},
"failedJobsHistoryLimit": {
- "description": "The number of failed finished jobs to retain. This is a pointer to distinguish between explicit zero and not specified.",
+ "description": "The number of failed finished jobs to retain. This is a pointer to distinguish between explicit zero and not specified. Defaults to 1.",
"type": "integer",
"format": "int32"
},
@@ -63131,7 +63131,7 @@
"format": "int64"
},
"successfulJobsHistoryLimit": {
- "description": "The number of successful finished jobs to retain. This is a pointer to distinguish between explicit zero and not specified.",
+ "description": "The number of successful finished jobs to retain. This is a pointer to distinguish between explicit zero and not specified. Defaults to 3.",
"type": "integer",
"format": "int32"
},
diff --git a/api/swagger-spec/batch_v1beta1.json b/api/swagger-spec/batch_v1beta1.json
index 366230779b1..b53a81323b8 100644
--- a/api/swagger-spec/batch_v1beta1.json
+++ b/api/swagger-spec/batch_v1beta1.json
@@ -1497,12 +1497,12 @@
"successfulJobsHistoryLimit": {
"type": "integer",
"format": "int32",
- "description": "The number of successful finished jobs to retain. This is a pointer to distinguish between explicit zero and not specified."
+ "description": "The number of successful finished jobs to retain. This is a pointer to distinguish between explicit zero and not specified. Defaults to 3."
},
"failedJobsHistoryLimit": {
"type": "integer",
"format": "int32",
- "description": "The number of failed finished jobs to retain. This is a pointer to distinguish between explicit zero and not specified."
+ "description": "The number of failed finished jobs to retain. This is a pointer to distinguish between explicit zero and not specified. Defaults to 1."
}
}
},
diff --git a/docs/api-reference/batch/v1beta1/definitions.html b/docs/api-reference/batch/v1beta1/definitions.html
index c12abd10008..b0aef880643 100755
--- a/docs/api-reference/batch/v1beta1/definitions.html
+++ b/docs/api-reference/batch/v1beta1/definitions.html
@@ -3428,14 +3428,14 @@ When an object is created, the system will populate this list with the current s
successfulJobsHistoryLimit |
-The number of successful finished jobs to retain. This is a pointer to distinguish between explicit zero and not specified. |
+The number of successful finished jobs to retain. This is a pointer to distinguish between explicit zero and not specified. Defaults to 3. |
false |
integer (int32) |
|
failedJobsHistoryLimit |
-The number of failed finished jobs to retain. This is a pointer to distinguish between explicit zero and not specified. |
+The number of failed finished jobs to retain. This is a pointer to distinguish between explicit zero and not specified. Defaults to 1. |
false |
integer (int32) |
|
diff --git a/pkg/apis/batch/fuzzer/fuzzer.go b/pkg/apis/batch/fuzzer/fuzzer.go
index 07a8cc1ed59..4b0a8b9064d 100644
--- a/pkg/apis/batch/fuzzer/fuzzer.go
+++ b/pkg/apis/batch/fuzzer/fuzzer.go
@@ -53,14 +53,10 @@ var Funcs = func(codecs runtimeserializer.CodecFactory) []interface{} {
sds := int64(c.RandUint64())
sj.StartingDeadlineSeconds = &sds
sj.Schedule = c.RandString()
- if hasSuccessLimit := c.RandBool(); hasSuccessLimit {
- successfulJobsHistoryLimit := int32(c.Rand.Int31())
- sj.SuccessfulJobsHistoryLimit = &successfulJobsHistoryLimit
- }
- if hasFailedLimit := c.RandBool(); hasFailedLimit {
- failedJobsHistoryLimit := int32(c.Rand.Int31())
- sj.FailedJobsHistoryLimit = &failedJobsHistoryLimit
- }
+ successfulJobsHistoryLimit := int32(c.Rand.Int31())
+ sj.SuccessfulJobsHistoryLimit = &successfulJobsHistoryLimit
+ failedJobsHistoryLimit := int32(c.Rand.Int31())
+ sj.FailedJobsHistoryLimit = &failedJobsHistoryLimit
},
func(cp *batch.ConcurrencyPolicy, c fuzz.Continue) {
policies := []batch.ConcurrencyPolicy{batch.AllowConcurrent, batch.ForbidConcurrent, batch.ReplaceConcurrent}
diff --git a/pkg/apis/batch/v1beta1/defaults.go b/pkg/apis/batch/v1beta1/defaults.go
index 9ae68472480..58fee5f5834 100644
--- a/pkg/apis/batch/v1beta1/defaults.go
+++ b/pkg/apis/batch/v1beta1/defaults.go
@@ -32,4 +32,12 @@ func SetDefaults_CronJob(obj *batchv1beta1.CronJob) {
if obj.Spec.Suspend == nil {
obj.Spec.Suspend = new(bool)
}
+ if obj.Spec.SuccessfulJobsHistoryLimit == nil {
+ obj.Spec.SuccessfulJobsHistoryLimit = new(int32)
+ *obj.Spec.SuccessfulJobsHistoryLimit = 3
+ }
+ if obj.Spec.FailedJobsHistoryLimit == nil {
+ obj.Spec.FailedJobsHistoryLimit = new(int32)
+ *obj.Spec.FailedJobsHistoryLimit = 1
+ }
}
diff --git a/pkg/apis/batch/v1beta1/defaults_test.go b/pkg/apis/batch/v1beta1/defaults_test.go
index 8c23ae19222..1f11b0566df 100644
--- a/pkg/apis/batch/v1beta1/defaults_test.go
+++ b/pkg/apis/batch/v1beta1/defaults_test.go
@@ -38,22 +38,28 @@ func TestSetDefaultCronJob(t *testing.T) {
original: &batchv1beta1.CronJob{},
expected: &batchv1beta1.CronJob{
Spec: batchv1beta1.CronJobSpec{
- ConcurrencyPolicy: batchv1beta1.AllowConcurrent,
- Suspend: newBool(false),
+ ConcurrencyPolicy: batchv1beta1.AllowConcurrent,
+ Suspend: newBool(false),
+ SuccessfulJobsHistoryLimit: newInt32(3),
+ FailedJobsHistoryLimit: newInt32(1),
},
},
},
"set fields should not be defaulted": {
original: &batchv1beta1.CronJob{
Spec: batchv1beta1.CronJobSpec{
- ConcurrencyPolicy: batchv1beta1.ForbidConcurrent,
- Suspend: newBool(true),
+ ConcurrencyPolicy: batchv1beta1.ForbidConcurrent,
+ Suspend: newBool(true),
+ SuccessfulJobsHistoryLimit: newInt32(5),
+ FailedJobsHistoryLimit: newInt32(5),
},
},
expected: &batchv1beta1.CronJob{
Spec: batchv1beta1.CronJobSpec{
- ConcurrencyPolicy: batchv1beta1.ForbidConcurrent,
- Suspend: newBool(true),
+ ConcurrencyPolicy: batchv1beta1.ForbidConcurrent,
+ Suspend: newBool(true),
+ SuccessfulJobsHistoryLimit: newInt32(5),
+ FailedJobsHistoryLimit: newInt32(5),
},
},
},
@@ -74,6 +80,12 @@ func TestSetDefaultCronJob(t *testing.T) {
if *actual.Spec.Suspend != *expected.Spec.Suspend {
t.Errorf("%s: got different suspend than expected: %v %v", name, *actual.Spec.Suspend, *expected.Spec.Suspend)
}
+ if *actual.Spec.SuccessfulJobsHistoryLimit != *expected.Spec.SuccessfulJobsHistoryLimit {
+ t.Errorf("%s: got different successfulJobsHistoryLimit than expected: %v %v", name, *actual.Spec.SuccessfulJobsHistoryLimit, *expected.Spec.SuccessfulJobsHistoryLimit)
+ }
+ if *actual.Spec.FailedJobsHistoryLimit != *expected.Spec.FailedJobsHistoryLimit {
+ t.Errorf("%s: got different failedJobsHistoryLimit than expected: %v %v", name, *actual.Spec.FailedJobsHistoryLimit, *expected.Spec.FailedJobsHistoryLimit)
+ }
}
}
@@ -102,3 +114,9 @@ func newBool(val bool) *bool {
*p = val
return p
}
+
+func newInt32(val int32) *int32 {
+ p := new(int32)
+ *p = val
+ return p
+}
diff --git a/staging/src/k8s.io/api/batch/v1beta1/generated.proto b/staging/src/k8s.io/api/batch/v1beta1/generated.proto
index f8aa2f32841..f7b871632b2 100644
--- a/staging/src/k8s.io/api/batch/v1beta1/generated.proto
+++ b/staging/src/k8s.io/api/batch/v1beta1/generated.proto
@@ -85,11 +85,13 @@ message CronJobSpec {
// The number of successful finished jobs to retain.
// This is a pointer to distinguish between explicit zero and not specified.
+ // Defaults to 3.
// +optional
optional int32 successfulJobsHistoryLimit = 6;
// The number of failed finished jobs to retain.
// This is a pointer to distinguish between explicit zero and not specified.
+ // Defaults to 1.
// +optional
optional int32 failedJobsHistoryLimit = 7;
}
diff --git a/staging/src/k8s.io/api/batch/v1beta1/types.go b/staging/src/k8s.io/api/batch/v1beta1/types.go
index 43e447473d5..ad13bba2f92 100644
--- a/staging/src/k8s.io/api/batch/v1beta1/types.go
+++ b/staging/src/k8s.io/api/batch/v1beta1/types.go
@@ -114,11 +114,13 @@ type CronJobSpec struct {
// The number of successful finished jobs to retain.
// This is a pointer to distinguish between explicit zero and not specified.
+ // Defaults to 3.
// +optional
SuccessfulJobsHistoryLimit *int32 `json:"successfulJobsHistoryLimit,omitempty" protobuf:"varint,6,opt,name=successfulJobsHistoryLimit"`
// The number of failed finished jobs to retain.
// This is a pointer to distinguish between explicit zero and not specified.
+ // Defaults to 1.
// +optional
FailedJobsHistoryLimit *int32 `json:"failedJobsHistoryLimit,omitempty" protobuf:"varint,7,opt,name=failedJobsHistoryLimit"`
}
diff --git a/staging/src/k8s.io/api/batch/v1beta1/types_swagger_doc_generated.go b/staging/src/k8s.io/api/batch/v1beta1/types_swagger_doc_generated.go
index 6da290d1f01..f4c74e4327e 100644
--- a/staging/src/k8s.io/api/batch/v1beta1/types_swagger_doc_generated.go
+++ b/staging/src/k8s.io/api/batch/v1beta1/types_swagger_doc_generated.go
@@ -55,8 +55,8 @@ var map_CronJobSpec = map[string]string{
"concurrencyPolicy": "Specifies how to treat concurrent executions of a Job. Defaults to Allow.",
"suspend": "This flag tells the controller to suspend subsequent executions, it does not apply to already started executions. Defaults to false.",
"jobTemplate": "Specifies the job that will be created when executing a CronJob.",
- "successfulJobsHistoryLimit": "The number of successful finished jobs to retain. This is a pointer to distinguish between explicit zero and not specified.",
- "failedJobsHistoryLimit": "The number of failed finished jobs to retain. This is a pointer to distinguish between explicit zero and not specified.",
+ "successfulJobsHistoryLimit": "The number of successful finished jobs to retain. This is a pointer to distinguish between explicit zero and not specified. Defaults to 3.",
+ "failedJobsHistoryLimit": "The number of failed finished jobs to retain. This is a pointer to distinguish between explicit zero and not specified. Defaults to 1.",
}
func (CronJobSpec) SwaggerDoc() map[string]string {