mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-23 11:50:44 +00:00
Merge pull request #48075 from clamoriniere1A/feature/job_failure_policy
Automatic merge from submit-queue (batch tested with PRs 51335, 51364, 51130, 48075, 50920) [API] Feature/job failure policy **What this PR does / why we need it**: Implements the Backoff policy and failed pod limit defined in https://github.com/kubernetes/community/pull/583 **Which issue this PR fixes**: fixes #27997, fixes #30243 **Special notes for your reviewer**: This is a WIP PR, I updated the api batchv1.JobSpec in order to prepare the backoff policy implementation in the JobController. **Release note**: ```release-note Add backoff policy and failed pod limit for a job ```
This commit is contained in:
commit
73ed961b8e
@ -57933,10 +57933,15 @@
|
||||
],
|
||||
"properties": {
|
||||
"activeDeadlineSeconds": {
|
||||
"description": "Optional duration in seconds relative to the startTime that the job may be active before the system tries to terminate it; value must be positive integer",
|
||||
"description": "Specifies the duration in seconds relative to the startTime that the job may be active before the system tries to terminate it; value must be positive integer",
|
||||
"type": "integer",
|
||||
"format": "int64"
|
||||
},
|
||||
"backoffLimit": {
|
||||
"description": "Specifies the number of retries before marking this job failed. Defaults to 6",
|
||||
"type": "integer",
|
||||
"format": "int32"
|
||||
},
|
||||
"completions": {
|
||||
"description": "Specifies the desired number of successfully finished pods the job should be run with. Setting to nil means that the success of any pod signals the success of all pods, and allows parallelism to have any positive value. Setting to 1 means that parallelism is limited to 1 and the success of that pod signals the success of the job. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/",
|
||||
"type": "integer",
|
||||
|
@ -1385,7 +1385,12 @@
|
||||
"activeDeadlineSeconds": {
|
||||
"type": "integer",
|
||||
"format": "int64",
|
||||
"description": "Optional duration in seconds relative to the startTime that the job may be active before the system tries to terminate it; value must be positive integer"
|
||||
"description": "Specifies the duration in seconds relative to the startTime that the job may be active before the system tries to terminate it; value must be positive integer"
|
||||
},
|
||||
"backoffLimit": {
|
||||
"type": "integer",
|
||||
"format": "int32",
|
||||
"description": "Specifies the number of retries before marking this job failed. Defaults to 6"
|
||||
},
|
||||
"selector": {
|
||||
"$ref": "v1.LabelSelector",
|
||||
|
@ -1440,7 +1440,12 @@
|
||||
"activeDeadlineSeconds": {
|
||||
"type": "integer",
|
||||
"format": "int64",
|
||||
"description": "Optional duration in seconds relative to the startTime that the job may be active before the system tries to terminate it; value must be positive integer"
|
||||
"description": "Specifies the duration in seconds relative to the startTime that the job may be active before the system tries to terminate it; value must be positive integer"
|
||||
},
|
||||
"backoffLimit": {
|
||||
"type": "integer",
|
||||
"format": "int32",
|
||||
"description": "Specifies the number of retries before marking this job failed. Defaults to 6"
|
||||
},
|
||||
"selector": {
|
||||
"$ref": "v1.LabelSelector",
|
||||
|
@ -1440,7 +1440,12 @@
|
||||
"activeDeadlineSeconds": {
|
||||
"type": "integer",
|
||||
"format": "int64",
|
||||
"description": "Optional duration in seconds relative to the startTime that the job may be active before the system tries to terminate it; value must be positive integer"
|
||||
"description": "Specifies the duration in seconds relative to the startTime that the job may be active before the system tries to terminate it; value must be positive integer"
|
||||
},
|
||||
"backoffLimit": {
|
||||
"type": "integer",
|
||||
"format": "int32",
|
||||
"description": "Specifies the number of retries before marking this job failed. Defaults to 6"
|
||||
},
|
||||
"selector": {
|
||||
"$ref": "v1.LabelSelector",
|
||||
|
@ -2407,12 +2407,19 @@ When an object is created, the system will populate this list with the current s
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="tableblock halign-left valign-top"><p class="tableblock">activeDeadlineSeconds</p></td>
|
||||
<td class="tableblock halign-left valign-top"><p class="tableblock">Optional duration in seconds relative to the startTime that the job may be active before the system tries to terminate it; value must be positive integer</p></td>
|
||||
<td class="tableblock halign-left valign-top"><p class="tableblock">Specifies the duration in seconds relative to the startTime that the job may be active before the system tries to terminate it; value must be positive integer</p></td>
|
||||
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
|
||||
<td class="tableblock halign-left valign-top"><p class="tableblock">integer (int64)</p></td>
|
||||
<td class="tableblock halign-left valign-top"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="tableblock halign-left valign-top"><p class="tableblock">backoffLimit</p></td>
|
||||
<td class="tableblock halign-left valign-top"><p class="tableblock">Specifies the number of retries before marking this job failed. Defaults to 6</p></td>
|
||||
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
|
||||
<td class="tableblock halign-left valign-top"><p class="tableblock">integer (int32)</p></td>
|
||||
<td class="tableblock halign-left valign-top"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="tableblock halign-left valign-top"><p class="tableblock">selector</p></td>
|
||||
<td class="tableblock halign-left valign-top"><p class="tableblock">A label query over pods that should match the pod count. Normally, the system sets this field for you. More info: <a href="https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors">https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors</a></p></td>
|
||||
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
|
||||
|
@ -2441,12 +2441,19 @@ When an object is created, the system will populate this list with the current s
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="tableblock halign-left valign-top"><p class="tableblock">activeDeadlineSeconds</p></td>
|
||||
<td class="tableblock halign-left valign-top"><p class="tableblock">Optional duration in seconds relative to the startTime that the job may be active before the system tries to terminate it; value must be positive integer</p></td>
|
||||
<td class="tableblock halign-left valign-top"><p class="tableblock">Specifies the duration in seconds relative to the startTime that the job may be active before the system tries to terminate it; value must be positive integer</p></td>
|
||||
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
|
||||
<td class="tableblock halign-left valign-top"><p class="tableblock">integer (int64)</p></td>
|
||||
<td class="tableblock halign-left valign-top"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="tableblock halign-left valign-top"><p class="tableblock">backoffLimit</p></td>
|
||||
<td class="tableblock halign-left valign-top"><p class="tableblock">Specifies the number of retries before marking this job failed. Defaults to 6</p></td>
|
||||
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
|
||||
<td class="tableblock halign-left valign-top"><p class="tableblock">integer (int32)</p></td>
|
||||
<td class="tableblock halign-left valign-top"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="tableblock halign-left valign-top"><p class="tableblock">selector</p></td>
|
||||
<td class="tableblock halign-left valign-top"><p class="tableblock">A label query over pods that should match the pod count. Normally, the system sets this field for you. More info: <a href="https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors">https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors</a></p></td>
|
||||
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
|
||||
|
@ -2414,12 +2414,19 @@ When an object is created, the system will populate this list with the current s
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="tableblock halign-left valign-top"><p class="tableblock">activeDeadlineSeconds</p></td>
|
||||
<td class="tableblock halign-left valign-top"><p class="tableblock">Optional duration in seconds relative to the startTime that the job may be active before the system tries to terminate it; value must be positive integer</p></td>
|
||||
<td class="tableblock halign-left valign-top"><p class="tableblock">Specifies the duration in seconds relative to the startTime that the job may be active before the system tries to terminate it; value must be positive integer</p></td>
|
||||
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
|
||||
<td class="tableblock halign-left valign-top"><p class="tableblock">integer (int64)</p></td>
|
||||
<td class="tableblock halign-left valign-top"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="tableblock halign-left valign-top"><p class="tableblock">backoffLimit</p></td>
|
||||
<td class="tableblock halign-left valign-top"><p class="tableblock">Specifies the number of retries before marking this job failed. Defaults to 6</p></td>
|
||||
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
|
||||
<td class="tableblock halign-left valign-top"><p class="tableblock">integer (int32)</p></td>
|
||||
<td class="tableblock halign-left valign-top"></td>
|
||||
</tr>
|
||||
<tr>
|
||||
<td class="tableblock halign-left valign-top"><p class="tableblock">selector</p></td>
|
||||
<td class="tableblock halign-left valign-top"><p class="tableblock">A label query over pods that should match the pod count. Normally, the system sets this field for you. More info: <a href="https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors">https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors</a></p></td>
|
||||
<td class="tableblock halign-left valign-top"><p class="tableblock">false</p></td>
|
||||
|
@ -36,8 +36,10 @@ var Funcs = func(codecs runtimeserializer.CodecFactory) []interface{} {
|
||||
c.FuzzNoCustom(j) // fuzz self without calling this function again
|
||||
completions := int32(c.Rand.Int31())
|
||||
parallelism := int32(c.Rand.Int31())
|
||||
backoffLimit := int32(c.Rand.Int31())
|
||||
j.Completions = &completions
|
||||
j.Parallelism = ¶llelism
|
||||
j.BackoffLimit = &backoffLimit
|
||||
if c.Rand.Int31()%2 == 0 {
|
||||
j.ManualSelector = newBool(true)
|
||||
} else {
|
||||
|
@ -109,6 +109,16 @@ type JobSpec struct {
|
||||
// +optional
|
||||
ActiveDeadlineSeconds *int64
|
||||
|
||||
// Optional number of retries before marking this job failed.
|
||||
// Defaults to 6
|
||||
// +optional
|
||||
BackoffLimit *int32
|
||||
|
||||
// TODO enabled it when https://github.com/kubernetes/kubernetes/issues/28486 has been fixed
|
||||
// Optional number of failed pods to retain.
|
||||
// +optional
|
||||
// FailedPodsLimit *int32
|
||||
|
||||
// A label query over pods that should match the pod count.
|
||||
// Normally, the system sets this field for you.
|
||||
// +optional
|
||||
|
@ -53,6 +53,7 @@ func Convert_batch_JobSpec_To_v1_JobSpec(in *batch.JobSpec, out *batchv1.JobSpec
|
||||
out.Parallelism = in.Parallelism
|
||||
out.Completions = in.Completions
|
||||
out.ActiveDeadlineSeconds = in.ActiveDeadlineSeconds
|
||||
out.BackoffLimit = in.BackoffLimit
|
||||
out.Selector = in.Selector
|
||||
if in.ManualSelector != nil {
|
||||
out.ManualSelector = new(bool)
|
||||
@ -71,6 +72,7 @@ func Convert_v1_JobSpec_To_batch_JobSpec(in *batchv1.JobSpec, out *batch.JobSpec
|
||||
out.Parallelism = in.Parallelism
|
||||
out.Completions = in.Completions
|
||||
out.ActiveDeadlineSeconds = in.ActiveDeadlineSeconds
|
||||
out.BackoffLimit = in.BackoffLimit
|
||||
out.Selector = in.Selector
|
||||
if in.ManualSelector != nil {
|
||||
out.ManualSelector = new(bool)
|
||||
|
@ -38,6 +38,10 @@ func SetDefaults_Job(obj *batchv1.Job) {
|
||||
obj.Spec.Parallelism = new(int32)
|
||||
*obj.Spec.Parallelism = 1
|
||||
}
|
||||
if obj.Spec.BackoffLimit == nil {
|
||||
obj.Spec.BackoffLimit = new(int32)
|
||||
*obj.Spec.BackoffLimit = 6
|
||||
}
|
||||
labels := obj.Spec.Template.Labels
|
||||
if labels != nil && len(obj.Labels) == 0 {
|
||||
obj.Labels = labels
|
||||
|
@ -38,7 +38,7 @@ func TestSetDefaultJob(t *testing.T) {
|
||||
expected *batchv1.Job
|
||||
expectLabels bool
|
||||
}{
|
||||
"both unspecified -> sets both to 1": {
|
||||
"All unspecified -> sets all to default values": {
|
||||
original: &batchv1.Job{
|
||||
Spec: batchv1.JobSpec{
|
||||
Template: v1.PodTemplateSpec{
|
||||
@ -48,13 +48,14 @@ func TestSetDefaultJob(t *testing.T) {
|
||||
},
|
||||
expected: &batchv1.Job{
|
||||
Spec: batchv1.JobSpec{
|
||||
Completions: newInt32(1),
|
||||
Parallelism: newInt32(1),
|
||||
Completions: newInt32(1),
|
||||
Parallelism: newInt32(1),
|
||||
BackoffLimit: newInt32(6),
|
||||
},
|
||||
},
|
||||
expectLabels: true,
|
||||
},
|
||||
"both unspecified -> sets both to 1 and no default labels": {
|
||||
"All unspecified -> all integers are defaulted and no default labels": {
|
||||
original: &batchv1.Job{
|
||||
ObjectMeta: metav1.ObjectMeta{
|
||||
Labels: map[string]string{"mylabel": "myvalue"},
|
||||
@ -67,12 +68,13 @@ func TestSetDefaultJob(t *testing.T) {
|
||||
},
|
||||
expected: &batchv1.Job{
|
||||
Spec: batchv1.JobSpec{
|
||||
Completions: newInt32(1),
|
||||
Parallelism: newInt32(1),
|
||||
Completions: newInt32(1),
|
||||
Parallelism: newInt32(1),
|
||||
BackoffLimit: newInt32(6),
|
||||
},
|
||||
},
|
||||
},
|
||||
"WQ: Parallelism explicitly 0 and completions unset -> no change": {
|
||||
"WQ: Parallelism explicitly 0 and completions unset -> BackoffLimit is defaulted": {
|
||||
original: &batchv1.Job{
|
||||
Spec: batchv1.JobSpec{
|
||||
Parallelism: newInt32(0),
|
||||
@ -83,12 +85,13 @@ func TestSetDefaultJob(t *testing.T) {
|
||||
},
|
||||
expected: &batchv1.Job{
|
||||
Spec: batchv1.JobSpec{
|
||||
Parallelism: newInt32(0),
|
||||
Parallelism: newInt32(0),
|
||||
BackoffLimit: newInt32(6),
|
||||
},
|
||||
},
|
||||
expectLabels: true,
|
||||
},
|
||||
"WQ: Parallelism explicitly 2 and completions unset -> no change": {
|
||||
"WQ: Parallelism explicitly 2 and completions unset -> BackoffLimit is defaulted": {
|
||||
original: &batchv1.Job{
|
||||
Spec: batchv1.JobSpec{
|
||||
Parallelism: newInt32(2),
|
||||
@ -99,12 +102,13 @@ func TestSetDefaultJob(t *testing.T) {
|
||||
},
|
||||
expected: &batchv1.Job{
|
||||
Spec: batchv1.JobSpec{
|
||||
Parallelism: newInt32(2),
|
||||
Parallelism: newInt32(2),
|
||||
BackoffLimit: newInt32(6),
|
||||
},
|
||||
},
|
||||
expectLabels: true,
|
||||
},
|
||||
"Completions explicitly 2 and parallelism unset -> parallelism is defaulted": {
|
||||
"Completions explicitly 2 and others unset -> parallelism and BackoffLimit are defaulted": {
|
||||
original: &batchv1.Job{
|
||||
Spec: batchv1.JobSpec{
|
||||
Completions: newInt32(2),
|
||||
@ -115,17 +119,17 @@ func TestSetDefaultJob(t *testing.T) {
|
||||
},
|
||||
expected: &batchv1.Job{
|
||||
Spec: batchv1.JobSpec{
|
||||
Completions: newInt32(2),
|
||||
Parallelism: newInt32(1),
|
||||
Completions: newInt32(2),
|
||||
Parallelism: newInt32(1),
|
||||
BackoffLimit: newInt32(6),
|
||||
},
|
||||
},
|
||||
expectLabels: true,
|
||||
},
|
||||
"Both set -> no change": {
|
||||
"BackoffLimit explicitly 5 and others unset -> parallelism and completions are defaulted": {
|
||||
original: &batchv1.Job{
|
||||
Spec: batchv1.JobSpec{
|
||||
Completions: newInt32(10),
|
||||
Parallelism: newInt32(11),
|
||||
BackoffLimit: newInt32(5),
|
||||
Template: v1.PodTemplateSpec{
|
||||
ObjectMeta: metav1.ObjectMeta{Labels: defaultLabels},
|
||||
},
|
||||
@ -133,20 +137,19 @@ func TestSetDefaultJob(t *testing.T) {
|
||||
},
|
||||
expected: &batchv1.Job{
|
||||
Spec: batchv1.JobSpec{
|
||||
Completions: newInt32(10),
|
||||
Parallelism: newInt32(11),
|
||||
Template: v1.PodTemplateSpec{
|
||||
ObjectMeta: metav1.ObjectMeta{Labels: defaultLabels},
|
||||
},
|
||||
Completions: newInt32(1),
|
||||
Parallelism: newInt32(1),
|
||||
BackoffLimit: newInt32(5),
|
||||
},
|
||||
},
|
||||
expectLabels: true,
|
||||
},
|
||||
"Both set, flipped -> no change": {
|
||||
"All set -> no change": {
|
||||
original: &batchv1.Job{
|
||||
Spec: batchv1.JobSpec{
|
||||
Completions: newInt32(11),
|
||||
Parallelism: newInt32(10),
|
||||
Completions: newInt32(8),
|
||||
Parallelism: newInt32(9),
|
||||
BackoffLimit: newInt32(10),
|
||||
Template: v1.PodTemplateSpec{
|
||||
ObjectMeta: metav1.ObjectMeta{Labels: defaultLabels},
|
||||
},
|
||||
@ -154,8 +157,32 @@ func TestSetDefaultJob(t *testing.T) {
|
||||
},
|
||||
expected: &batchv1.Job{
|
||||
Spec: batchv1.JobSpec{
|
||||
Completions: newInt32(11),
|
||||
Parallelism: newInt32(10),
|
||||
Completions: newInt32(8),
|
||||
Parallelism: newInt32(9),
|
||||
BackoffLimit: newInt32(10),
|
||||
Template: v1.PodTemplateSpec{
|
||||
ObjectMeta: metav1.ObjectMeta{Labels: defaultLabels},
|
||||
},
|
||||
},
|
||||
},
|
||||
expectLabels: true,
|
||||
},
|
||||
"All set, flipped -> no change": {
|
||||
original: &batchv1.Job{
|
||||
Spec: batchv1.JobSpec{
|
||||
Completions: newInt32(11),
|
||||
Parallelism: newInt32(10),
|
||||
BackoffLimit: newInt32(9),
|
||||
Template: v1.PodTemplateSpec{
|
||||
ObjectMeta: metav1.ObjectMeta{Labels: defaultLabels},
|
||||
},
|
||||
},
|
||||
},
|
||||
expected: &batchv1.Job{
|
||||
Spec: batchv1.JobSpec{
|
||||
Completions: newInt32(11),
|
||||
Parallelism: newInt32(10),
|
||||
BackoffLimit: newInt32(9),
|
||||
},
|
||||
},
|
||||
expectLabels: true,
|
||||
@ -171,22 +198,11 @@ func TestSetDefaultJob(t *testing.T) {
|
||||
t.Errorf("%s: unexpected object: %v", name, actual)
|
||||
t.FailNow()
|
||||
}
|
||||
if (actual.Spec.Completions == nil) != (expected.Spec.Completions == nil) {
|
||||
t.Errorf("%s: got different *completions than expected: %v %v", name, actual.Spec.Completions, expected.Spec.Completions)
|
||||
}
|
||||
if actual.Spec.Completions != nil && expected.Spec.Completions != nil {
|
||||
if *actual.Spec.Completions != *expected.Spec.Completions {
|
||||
t.Errorf("%s: got different completions than expected: %d %d", name, *actual.Spec.Completions, *expected.Spec.Completions)
|
||||
}
|
||||
}
|
||||
if (actual.Spec.Parallelism == nil) != (expected.Spec.Parallelism == nil) {
|
||||
t.Errorf("%s: got different *Parallelism than expected: %v %v", name, actual.Spec.Parallelism, expected.Spec.Parallelism)
|
||||
}
|
||||
if actual.Spec.Parallelism != nil && expected.Spec.Parallelism != nil {
|
||||
if *actual.Spec.Parallelism != *expected.Spec.Parallelism {
|
||||
t.Errorf("%s: got different parallelism than expected: %d %d", name, *actual.Spec.Parallelism, *expected.Spec.Parallelism)
|
||||
}
|
||||
}
|
||||
|
||||
validateDefaultInt32(t, name, "Completions", actual.Spec.Completions, expected.Spec.Completions)
|
||||
validateDefaultInt32(t, name, "Parallelism", actual.Spec.Parallelism, expected.Spec.Parallelism)
|
||||
validateDefaultInt32(t, name, "BackoffLimit", actual.Spec.BackoffLimit, expected.Spec.BackoffLimit)
|
||||
|
||||
if test.expectLabels != reflect.DeepEqual(actual.Labels, actual.Spec.Template.Labels) {
|
||||
if test.expectLabels {
|
||||
t.Errorf("%s: expected: %v, got: %v", name, actual.Spec.Template.Labels, actual.Labels)
|
||||
@ -198,6 +214,17 @@ func TestSetDefaultJob(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func validateDefaultInt32(t *testing.T, name string, field string, actual *int32, expected *int32) {
|
||||
if (actual == nil) != (expected == nil) {
|
||||
t.Errorf("%s: got different *%s than expected: %v %v", name, field, actual, expected)
|
||||
}
|
||||
if actual != nil && expected != nil {
|
||||
if *actual != *expected {
|
||||
t.Errorf("%s: got different %s than expected: %d %d", name, field, *actual, *expected)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func roundTrip(t *testing.T, obj runtime.Object) runtime.Object {
|
||||
data, err := runtime.Encode(api.Codecs.LegacyCodec(SchemeGroupVersion), obj)
|
||||
if err != nil {
|
||||
|
@ -161,6 +161,7 @@ func autoConvert_v1_JobSpec_To_batch_JobSpec(in *v1.JobSpec, out *batch.JobSpec,
|
||||
out.Parallelism = (*int32)(unsafe.Pointer(in.Parallelism))
|
||||
out.Completions = (*int32)(unsafe.Pointer(in.Completions))
|
||||
out.ActiveDeadlineSeconds = (*int64)(unsafe.Pointer(in.ActiveDeadlineSeconds))
|
||||
out.BackoffLimit = (*int32)(unsafe.Pointer(in.BackoffLimit))
|
||||
out.Selector = (*meta_v1.LabelSelector)(unsafe.Pointer(in.Selector))
|
||||
out.ManualSelector = (*bool)(unsafe.Pointer(in.ManualSelector))
|
||||
if err := api_v1.Convert_v1_PodTemplateSpec_To_api_PodTemplateSpec(&in.Template, &out.Template, s); err != nil {
|
||||
@ -173,6 +174,7 @@ func autoConvert_batch_JobSpec_To_v1_JobSpec(in *batch.JobSpec, out *v1.JobSpec,
|
||||
out.Parallelism = (*int32)(unsafe.Pointer(in.Parallelism))
|
||||
out.Completions = (*int32)(unsafe.Pointer(in.Completions))
|
||||
out.ActiveDeadlineSeconds = (*int64)(unsafe.Pointer(in.ActiveDeadlineSeconds))
|
||||
out.BackoffLimit = (*int32)(unsafe.Pointer(in.BackoffLimit))
|
||||
out.Selector = (*meta_v1.LabelSelector)(unsafe.Pointer(in.Selector))
|
||||
out.ManualSelector = (*bool)(unsafe.Pointer(in.ManualSelector))
|
||||
if err := api_v1.Convert_api_PodTemplateSpec_To_v1_PodTemplateSpec(&in.Template, &out.Template, s); err != nil {
|
||||
|
@ -113,6 +113,9 @@ func validateJobSpec(spec *batch.JobSpec, fldPath *field.Path) field.ErrorList {
|
||||
if spec.ActiveDeadlineSeconds != nil {
|
||||
allErrs = append(allErrs, apivalidation.ValidateNonnegativeField(int64(*spec.ActiveDeadlineSeconds), fldPath.Child("activeDeadlineSeconds"))...)
|
||||
}
|
||||
if spec.BackoffLimit != nil {
|
||||
allErrs = append(allErrs, apivalidation.ValidateNonnegativeField(int64(*spec.BackoffLimit), fldPath.Child("backoffLimit"))...)
|
||||
}
|
||||
|
||||
allErrs = append(allErrs, apivalidation.ValidatePodTemplateSpec(&spec.Template, fldPath.Child("template"))...)
|
||||
if spec.Template.Spec.RestartPolicy != api.RestartPolicyOnFailure &&
|
||||
|
@ -342,6 +342,15 @@ func (in *JobSpec) DeepCopyInto(out *JobSpec) {
|
||||
**out = **in
|
||||
}
|
||||
}
|
||||
if in.BackoffLimit != nil {
|
||||
in, out := &in.BackoffLimit, &out.BackoffLimit
|
||||
if *in == nil {
|
||||
*out = nil
|
||||
} else {
|
||||
*out = new(int32)
|
||||
**out = **in
|
||||
}
|
||||
}
|
||||
if in.Selector != nil {
|
||||
in, out := &in.Selector, &out.Selector
|
||||
if *in == nil {
|
||||
|
@ -271,6 +271,11 @@ func (m *JobSpec) MarshalTo(dAtA []byte) (int, error) {
|
||||
return 0, err
|
||||
}
|
||||
i += n8
|
||||
if m.BackoffLimit != nil {
|
||||
dAtA[i] = 0x38
|
||||
i++
|
||||
i = encodeVarintGenerated(dAtA, i, uint64(*m.BackoffLimit))
|
||||
}
|
||||
return i, nil
|
||||
}
|
||||
|
||||
@ -425,6 +430,9 @@ func (m *JobSpec) Size() (n int) {
|
||||
}
|
||||
l = m.Template.Size()
|
||||
n += 1 + l + sovGenerated(uint64(l))
|
||||
if m.BackoffLimit != nil {
|
||||
n += 1 + sovGenerated(uint64(*m.BackoffLimit))
|
||||
}
|
||||
return n
|
||||
}
|
||||
|
||||
@ -513,6 +521,7 @@ func (this *JobSpec) String() string {
|
||||
`Selector:` + strings.Replace(fmt.Sprintf("%v", this.Selector), "LabelSelector", "k8s_io_apimachinery_pkg_apis_meta_v1.LabelSelector", 1) + `,`,
|
||||
`ManualSelector:` + valueToStringGenerated(this.ManualSelector) + `,`,
|
||||
`Template:` + strings.Replace(strings.Replace(this.Template.String(), "PodTemplateSpec", "k8s_io_api_core_v1.PodTemplateSpec", 1), `&`, ``, 1) + `,`,
|
||||
`BackoffLimit:` + valueToStringGenerated(this.BackoffLimit) + `,`,
|
||||
`}`,
|
||||
}, "")
|
||||
return s
|
||||
@ -1190,6 +1199,26 @@ func (m *JobSpec) Unmarshal(dAtA []byte) error {
|
||||
return err
|
||||
}
|
||||
iNdEx = postIndex
|
||||
case 7:
|
||||
if wireType != 0 {
|
||||
return fmt.Errorf("proto: wrong wireType = %d for field BackoffLimit", wireType)
|
||||
}
|
||||
var v int32
|
||||
for shift := uint(0); ; shift += 7 {
|
||||
if shift >= 64 {
|
||||
return ErrIntOverflowGenerated
|
||||
}
|
||||
if iNdEx >= l {
|
||||
return io.ErrUnexpectedEOF
|
||||
}
|
||||
b := dAtA[iNdEx]
|
||||
iNdEx++
|
||||
v |= (int32(b) & 0x7F) << shift
|
||||
if b < 0x80 {
|
||||
break
|
||||
}
|
||||
}
|
||||
m.BackoffLimit = &v
|
||||
default:
|
||||
iNdEx = preIndex
|
||||
skippy, err := skipGenerated(dAtA[iNdEx:])
|
||||
@ -1525,61 +1554,62 @@ func init() {
|
||||
}
|
||||
|
||||
var fileDescriptorGenerated = []byte{
|
||||
// 882 bytes of a gzipped FileDescriptorProto
|
||||
// 907 bytes of a gzipped FileDescriptorProto
|
||||
0x1f, 0x8b, 0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0xff, 0x9c, 0x54, 0x41, 0x6f, 0xe3, 0x44,
|
||||
0x18, 0x8d, 0x9b, 0xa6, 0x4d, 0x26, 0x6d, 0x77, 0x19, 0x54, 0x29, 0x54, 0xc8, 0x59, 0x82, 0x84,
|
||||
0x0a, 0x12, 0x36, 0xe9, 0x56, 0x08, 0x21, 0x40, 0xc2, 0x45, 0x2b, 0x51, 0xb5, 0xda, 0x32, 0x29,
|
||||
0x42, 0x42, 0x20, 0x31, 0xb6, 0xbf, 0xa6, 0x43, 0x6d, 0x8f, 0xe5, 0x99, 0x44, 0xea, 0x8d, 0x9f,
|
||||
0xc0, 0x8f, 0x40, 0x1c, 0xf9, 0x19, 0xa8, 0xc7, 0x3d, 0xee, 0x29, 0xa2, 0xe6, 0x07, 0x70, 0xdf,
|
||||
0x13, 0x9a, 0xf1, 0xc4, 0x76, 0xda, 0x44, 0x74, 0xb9, 0x79, 0xde, 0xbc, 0xf7, 0xbe, 0x99, 0xf9,
|
||||
0xde, 0x67, 0xf4, 0xd9, 0xd5, 0x27, 0xc2, 0x61, 0xdc, 0xbd, 0x9a, 0xf8, 0x90, 0x25, 0x20, 0x41,
|
||||
0xb8, 0x53, 0x48, 0x42, 0x9e, 0xb9, 0x66, 0x83, 0xa6, 0xcc, 0xf5, 0xa9, 0x0c, 0x2e, 0xdd, 0xe9,
|
||||
0xd0, 0x1d, 0x43, 0x02, 0x19, 0x95, 0x10, 0x3a, 0x69, 0xc6, 0x25, 0xc7, 0x6f, 0x16, 0x24, 0x87,
|
||||
0xa6, 0xcc, 0xd1, 0x24, 0x67, 0x3a, 0xdc, 0xfb, 0x70, 0xcc, 0xe4, 0xe5, 0xc4, 0x77, 0x02, 0x1e,
|
||||
0xbb, 0x63, 0x3e, 0xe6, 0xae, 0xe6, 0xfa, 0x93, 0x0b, 0xbd, 0xd2, 0x0b, 0xfd, 0x55, 0x78, 0xec,
|
||||
0x0d, 0x6a, 0x85, 0x02, 0x9e, 0xc1, 0x92, 0x3a, 0x7b, 0x87, 0x15, 0x27, 0xa6, 0xc1, 0x25, 0x4b,
|
||||
0x20, 0xbb, 0x76, 0xd3, 0xab, 0xb1, 0x02, 0x84, 0x1b, 0x83, 0xa4, 0xcb, 0x54, 0xee, 0x2a, 0x55,
|
||||
0x36, 0x49, 0x24, 0x8b, 0xe1, 0x9e, 0xe0, 0xe3, 0xff, 0x12, 0x88, 0xe0, 0x12, 0x62, 0x7a, 0x4f,
|
||||
0xf7, 0x74, 0x95, 0x6e, 0x22, 0x59, 0xe4, 0xb2, 0x44, 0x0a, 0x99, 0xdd, 0x15, 0x0d, 0xfe, 0xb1,
|
||||
0x50, 0xf3, 0x98, 0xfb, 0xf8, 0x27, 0xd4, 0x56, 0x17, 0x08, 0xa9, 0xa4, 0x3d, 0xeb, 0x89, 0xb5,
|
||||
0xdf, 0x3d, 0xf8, 0xc8, 0xa9, 0x9e, 0xb5, 0xf4, 0x73, 0xd2, 0xab, 0xb1, 0x02, 0x84, 0xa3, 0xd8,
|
||||
0xce, 0x74, 0xe8, 0x3c, 0xf7, 0x7f, 0x86, 0x40, 0x9e, 0x82, 0xa4, 0x1e, 0xbe, 0x99, 0xf5, 0x1b,
|
||||
0xf9, 0xac, 0x8f, 0x2a, 0x8c, 0x94, 0xae, 0xf8, 0x0b, 0xb4, 0x2e, 0x52, 0x08, 0x7a, 0x6b, 0xda,
|
||||
0xfd, 0x6d, 0x67, 0x49, 0xd3, 0x9c, 0x63, 0xee, 0x8f, 0x52, 0x08, 0xbc, 0x2d, 0xe3, 0xb4, 0xae,
|
||||
0x56, 0x44, 0xeb, 0xf0, 0x33, 0xb4, 0x21, 0x24, 0x95, 0x13, 0xd1, 0x6b, 0x6a, 0x07, 0x7b, 0xa5,
|
||||
0x83, 0x66, 0x79, 0x3b, 0xc6, 0x63, 0xa3, 0x58, 0x13, 0xa3, 0x1e, 0xfc, 0xd9, 0x44, 0x5b, 0xc7,
|
||||
0xdc, 0x3f, 0xe2, 0x49, 0xc8, 0x24, 0xe3, 0x09, 0x3e, 0x44, 0xeb, 0xf2, 0x3a, 0x05, 0x7d, 0xed,
|
||||
0x8e, 0xf7, 0x64, 0x5e, 0xfa, 0xfc, 0x3a, 0x85, 0x57, 0xb3, 0xfe, 0xe3, 0x3a, 0x57, 0x61, 0x44,
|
||||
0xb3, 0xf1, 0x49, 0x79, 0x9c, 0x35, 0xad, 0x3b, 0x5c, 0x2c, 0xf7, 0x6a, 0xd6, 0x5f, 0x12, 0x29,
|
||||
0xa7, 0x74, 0x5a, 0x3c, 0x14, 0x1e, 0xa3, 0xed, 0x88, 0x0a, 0x79, 0x96, 0x71, 0x1f, 0xce, 0x59,
|
||||
0x0c, 0xe6, 0x8e, 0x1f, 0x3c, 0xac, 0x07, 0x4a, 0xe1, 0xed, 0x9a, 0x03, 0x6c, 0x9f, 0xd4, 0x8d,
|
||||
0xc8, 0xa2, 0x2f, 0x9e, 0x22, 0xac, 0x80, 0xf3, 0x8c, 0x26, 0xa2, 0xb8, 0x92, 0xaa, 0xb6, 0xfe,
|
||||
0xda, 0xd5, 0xf6, 0x4c, 0x35, 0x7c, 0x72, 0xcf, 0x8d, 0x2c, 0xa9, 0x80, 0xdf, 0x43, 0x1b, 0x19,
|
||||
0x50, 0xc1, 0x93, 0x5e, 0x4b, 0x3f, 0x57, 0xd9, 0x1d, 0xa2, 0x51, 0x62, 0x76, 0xf1, 0xfb, 0x68,
|
||||
0x33, 0x06, 0x21, 0xe8, 0x18, 0x7a, 0x1b, 0x9a, 0xf8, 0xc8, 0x10, 0x37, 0x4f, 0x0b, 0x98, 0xcc,
|
||||
0xf7, 0x07, 0xbf, 0x5b, 0x68, 0xf3, 0x98, 0xfb, 0x27, 0x4c, 0x48, 0xfc, 0xc3, 0xbd, 0xf8, 0x3a,
|
||||
0x0f, 0xbb, 0x8c, 0x52, 0xeb, 0xf0, 0x3e, 0x36, 0x75, 0xda, 0x73, 0xa4, 0x16, 0xdd, 0xcf, 0x51,
|
||||
0x8b, 0x49, 0x88, 0x55, 0xab, 0x9b, 0xfb, 0xdd, 0x83, 0xde, 0xaa, 0xe4, 0x79, 0xdb, 0xc6, 0xa4,
|
||||
0xf5, 0xb5, 0xa2, 0x93, 0x42, 0x35, 0xf8, 0xa3, 0xa9, 0x0f, 0xaa, 0xb2, 0x8c, 0x87, 0xa8, 0x9b,
|
||||
0xd2, 0x8c, 0x46, 0x11, 0x44, 0x4c, 0xc4, 0xfa, 0xac, 0x2d, 0xef, 0x51, 0x3e, 0xeb, 0x77, 0xcf,
|
||||
0x2a, 0x98, 0xd4, 0x39, 0x4a, 0x12, 0xf0, 0x38, 0x8d, 0x40, 0x3d, 0x66, 0x11, 0x37, 0x23, 0x39,
|
||||
0xaa, 0x60, 0x52, 0xe7, 0xe0, 0xe7, 0x68, 0x97, 0x06, 0x92, 0x4d, 0xe1, 0x2b, 0xa0, 0x61, 0xc4,
|
||||
0x12, 0x18, 0x41, 0xc0, 0x93, 0xb0, 0x18, 0x9d, 0xa6, 0xf7, 0x56, 0x3e, 0xeb, 0xef, 0x7e, 0xb9,
|
||||
0x8c, 0x40, 0x96, 0xeb, 0xf0, 0x8f, 0xa8, 0x2d, 0x20, 0x82, 0x40, 0xf2, 0xcc, 0x84, 0xe5, 0xe9,
|
||||
0x03, 0xdf, 0x97, 0xfa, 0x10, 0x8d, 0x8c, 0xd4, 0xdb, 0x52, 0x0f, 0x3c, 0x5f, 0x91, 0xd2, 0x12,
|
||||
0x7f, 0x8a, 0x76, 0x62, 0x9a, 0x4c, 0x68, 0xc9, 0xd4, 0x29, 0x69, 0x7b, 0x38, 0x9f, 0xf5, 0x77,
|
||||
0x4e, 0x17, 0x76, 0xc8, 0x1d, 0x26, 0xfe, 0x06, 0xb5, 0x25, 0xc4, 0x69, 0x44, 0x65, 0x11, 0x99,
|
||||
0xee, 0xc1, 0xbb, 0xf5, 0xfe, 0xa8, 0xc9, 0x53, 0x07, 0x39, 0xe3, 0xe1, 0xb9, 0xa1, 0xe9, 0x5f,
|
||||
0x4c, 0xd9, 0xef, 0x39, 0x4a, 0x4a, 0x9b, 0xc1, 0x6f, 0x4d, 0xd4, 0x29, 0x7f, 0x24, 0xf8, 0x5b,
|
||||
0x84, 0x82, 0xf9, 0xd8, 0x8a, 0x9e, 0xa5, 0x23, 0xf0, 0xce, 0xaa, 0x08, 0x94, 0x03, 0x5e, 0xfd,
|
||||
0x0d, 0x4b, 0x48, 0x90, 0x9a, 0x11, 0xfe, 0x0e, 0x75, 0x84, 0xa4, 0x99, 0xd4, 0x03, 0xb8, 0xf6,
|
||||
0xda, 0x03, 0xb8, 0x9d, 0xcf, 0xfa, 0x9d, 0xd1, 0xdc, 0x80, 0x54, 0x5e, 0xf8, 0x02, 0xed, 0x54,
|
||||
0x59, 0xf8, 0x9f, 0x3f, 0x13, 0xfd, 0xf0, 0x47, 0x0b, 0x2e, 0xe4, 0x8e, 0xab, 0x1a, 0xe9, 0x22,
|
||||
0x2c, 0x3a, 0x11, 0xad, 0x6a, 0xa4, 0x8b, 0x64, 0x11, 0xb3, 0x8b, 0x5d, 0xd4, 0x11, 0x93, 0x20,
|
||||
0x00, 0x08, 0x21, 0xd4, 0x7d, 0x6d, 0x79, 0x6f, 0x18, 0x6a, 0x67, 0x34, 0xdf, 0x20, 0x15, 0x47,
|
||||
0x19, 0x5f, 0x50, 0x16, 0x41, 0xa8, 0xfb, 0x59, 0x33, 0x7e, 0xa6, 0x51, 0x62, 0x76, 0xbd, 0xfd,
|
||||
0x9b, 0x5b, 0xbb, 0xf1, 0xe2, 0xd6, 0x6e, 0xbc, 0xbc, 0xb5, 0x1b, 0xbf, 0xe4, 0xb6, 0x75, 0x93,
|
||||
0xdb, 0xd6, 0x8b, 0xdc, 0xb6, 0x5e, 0xe6, 0xb6, 0xf5, 0x57, 0x6e, 0x5b, 0xbf, 0xfe, 0x6d, 0x37,
|
||||
0xbe, 0x5f, 0x9b, 0x0e, 0xff, 0x0d, 0x00, 0x00, 0xff, 0xff, 0xb5, 0xea, 0xfc, 0x71, 0x60, 0x08,
|
||||
0x00, 0x00,
|
||||
0x18, 0x8d, 0x9b, 0xa6, 0x4d, 0x26, 0x69, 0x77, 0x19, 0x54, 0x29, 0x54, 0xc8, 0x59, 0x82, 0x84,
|
||||
0x0a, 0x12, 0x36, 0xe9, 0x56, 0x08, 0x21, 0x40, 0xc2, 0x45, 0x2b, 0x51, 0xa5, 0xda, 0x32, 0x29,
|
||||
0x42, 0x42, 0x20, 0x31, 0xb6, 0xbf, 0xa4, 0x43, 0x6c, 0x8f, 0xe5, 0x99, 0x44, 0xea, 0x8d, 0x9f,
|
||||
0xc0, 0x8f, 0x40, 0xfc, 0x14, 0xd4, 0xe3, 0x1e, 0xf7, 0x14, 0x51, 0xc3, 0x9d, 0xfb, 0x9e, 0xd0,
|
||||
0x8c, 0x1d, 0xdb, 0x69, 0x13, 0xd1, 0xe5, 0x66, 0xbf, 0x79, 0xef, 0x7d, 0x33, 0xf3, 0xbd, 0xf9,
|
||||
0xd0, 0x67, 0xd3, 0x4f, 0x84, 0xc5, 0xb8, 0x3d, 0x9d, 0xb9, 0x90, 0x44, 0x20, 0x41, 0xd8, 0x73,
|
||||
0x88, 0x7c, 0x9e, 0xd8, 0xf9, 0x02, 0x8d, 0x99, 0xed, 0x52, 0xe9, 0x5d, 0xd9, 0xf3, 0x81, 0x3d,
|
||||
0x81, 0x08, 0x12, 0x2a, 0xc1, 0xb7, 0xe2, 0x84, 0x4b, 0x8e, 0xdf, 0xcc, 0x48, 0x16, 0x8d, 0x99,
|
||||
0xa5, 0x49, 0xd6, 0x7c, 0x70, 0xf8, 0xe1, 0x84, 0xc9, 0xab, 0x99, 0x6b, 0x79, 0x3c, 0xb4, 0x27,
|
||||
0x7c, 0xc2, 0x6d, 0xcd, 0x75, 0x67, 0x63, 0xfd, 0xa7, 0x7f, 0xf4, 0x57, 0xe6, 0x71, 0xd8, 0xaf,
|
||||
0x14, 0xf2, 0x78, 0x02, 0x6b, 0xea, 0x1c, 0x9e, 0x94, 0x9c, 0x90, 0x7a, 0x57, 0x2c, 0x82, 0xe4,
|
||||
0xda, 0x8e, 0xa7, 0x13, 0x05, 0x08, 0x3b, 0x04, 0x49, 0xd7, 0xa9, 0xec, 0x4d, 0xaa, 0x64, 0x16,
|
||||
0x49, 0x16, 0xc2, 0x3d, 0xc1, 0xc7, 0xff, 0x25, 0x10, 0xde, 0x15, 0x84, 0xf4, 0x9e, 0xee, 0xe9,
|
||||
0x26, 0xdd, 0x4c, 0xb2, 0xc0, 0x66, 0x91, 0x14, 0x32, 0xb9, 0x2b, 0xea, 0xff, 0x63, 0xa0, 0xfa,
|
||||
0x19, 0x77, 0xf1, 0x4f, 0xa8, 0xa9, 0x0e, 0xe0, 0x53, 0x49, 0xbb, 0xc6, 0x13, 0xe3, 0xa8, 0x7d,
|
||||
0xfc, 0x91, 0x55, 0x5e, 0x6b, 0xe1, 0x67, 0xc5, 0xd3, 0x89, 0x02, 0x84, 0xa5, 0xd8, 0xd6, 0x7c,
|
||||
0x60, 0x3d, 0x77, 0x7f, 0x06, 0x4f, 0x9e, 0x83, 0xa4, 0x0e, 0xbe, 0x59, 0xf4, 0x6a, 0xe9, 0xa2,
|
||||
0x87, 0x4a, 0x8c, 0x14, 0xae, 0xf8, 0x0b, 0xb4, 0x2d, 0x62, 0xf0, 0xba, 0x5b, 0xda, 0xfd, 0x6d,
|
||||
0x6b, 0x4d, 0xd3, 0xac, 0x33, 0xee, 0x8e, 0x62, 0xf0, 0x9c, 0x4e, 0xee, 0xb4, 0xad, 0xfe, 0x88,
|
||||
0xd6, 0xe1, 0x67, 0x68, 0x47, 0x48, 0x2a, 0x67, 0xa2, 0x5b, 0xd7, 0x0e, 0xe6, 0x46, 0x07, 0xcd,
|
||||
0x72, 0xf6, 0x73, 0x8f, 0x9d, 0xec, 0x9f, 0xe4, 0xea, 0xfe, 0x1f, 0x75, 0xd4, 0x39, 0xe3, 0xee,
|
||||
0x29, 0x8f, 0x7c, 0x26, 0x19, 0x8f, 0xf0, 0x09, 0xda, 0x96, 0xd7, 0x31, 0xe8, 0x63, 0xb7, 0x9c,
|
||||
0x27, 0xcb, 0xd2, 0x97, 0xd7, 0x31, 0xbc, 0x5a, 0xf4, 0x1e, 0x57, 0xb9, 0x0a, 0x23, 0x9a, 0x8d,
|
||||
0x87, 0xc5, 0x76, 0xb6, 0xb4, 0xee, 0x64, 0xb5, 0xdc, 0xab, 0x45, 0x6f, 0x4d, 0xa4, 0xac, 0xc2,
|
||||
0x69, 0x75, 0x53, 0x78, 0x82, 0xf6, 0x02, 0x2a, 0xe4, 0x45, 0xc2, 0x5d, 0xb8, 0x64, 0x21, 0xe4,
|
||||
0x67, 0xfc, 0xe0, 0x61, 0x3d, 0x50, 0x0a, 0xe7, 0x20, 0xdf, 0xc0, 0xde, 0xb0, 0x6a, 0x44, 0x56,
|
||||
0x7d, 0xf1, 0x1c, 0x61, 0x05, 0x5c, 0x26, 0x34, 0x12, 0xd9, 0x91, 0x54, 0xb5, 0xed, 0xd7, 0xae,
|
||||
0x76, 0x98, 0x57, 0xc3, 0xc3, 0x7b, 0x6e, 0x64, 0x4d, 0x05, 0xfc, 0x1e, 0xda, 0x49, 0x80, 0x0a,
|
||||
0x1e, 0x75, 0x1b, 0xfa, 0xba, 0x8a, 0xee, 0x10, 0x8d, 0x92, 0x7c, 0x15, 0xbf, 0x8f, 0x76, 0x43,
|
||||
0x10, 0x82, 0x4e, 0xa0, 0xbb, 0xa3, 0x89, 0x8f, 0x72, 0xe2, 0xee, 0x79, 0x06, 0x93, 0xe5, 0x7a,
|
||||
0xff, 0x77, 0x03, 0xed, 0x9e, 0x71, 0x77, 0xc8, 0x84, 0xc4, 0x3f, 0xdc, 0x8b, 0xaf, 0xf5, 0xb0,
|
||||
0xc3, 0x28, 0xb5, 0x0e, 0xef, 0xe3, 0xbc, 0x4e, 0x73, 0x89, 0x54, 0xa2, 0xfb, 0x39, 0x6a, 0x30,
|
||||
0x09, 0xa1, 0x6a, 0x75, 0xfd, 0xa8, 0x7d, 0xdc, 0xdd, 0x94, 0x3c, 0x67, 0x2f, 0x37, 0x69, 0x7c,
|
||||
0xad, 0xe8, 0x24, 0x53, 0xf5, 0xff, 0xae, 0xeb, 0x8d, 0xaa, 0x2c, 0xe3, 0x01, 0x6a, 0xc7, 0x34,
|
||||
0xa1, 0x41, 0x00, 0x01, 0x13, 0xa1, 0xde, 0x6b, 0xc3, 0x79, 0x94, 0x2e, 0x7a, 0xed, 0x8b, 0x12,
|
||||
0x26, 0x55, 0x8e, 0x92, 0x78, 0x3c, 0x8c, 0x03, 0x50, 0x97, 0x99, 0xc5, 0x2d, 0x97, 0x9c, 0x96,
|
||||
0x30, 0xa9, 0x72, 0xf0, 0x73, 0x74, 0x40, 0x3d, 0xc9, 0xe6, 0xf0, 0x15, 0x50, 0x3f, 0x60, 0x11,
|
||||
0x8c, 0xc0, 0xe3, 0x91, 0x9f, 0x3d, 0x9d, 0xba, 0xf3, 0x56, 0xba, 0xe8, 0x1d, 0x7c, 0xb9, 0x8e,
|
||||
0x40, 0xd6, 0xeb, 0xf0, 0x8f, 0xa8, 0x29, 0x20, 0x00, 0x4f, 0xf2, 0x24, 0x0f, 0xcb, 0xd3, 0x07,
|
||||
0xde, 0x2f, 0x75, 0x21, 0x18, 0xe5, 0x52, 0xa7, 0xa3, 0x2e, 0x78, 0xf9, 0x47, 0x0a, 0x4b, 0xfc,
|
||||
0x29, 0xda, 0x0f, 0x69, 0x34, 0xa3, 0x05, 0x53, 0xa7, 0xa4, 0xe9, 0xe0, 0x74, 0xd1, 0xdb, 0x3f,
|
||||
0x5f, 0x59, 0x21, 0x77, 0x98, 0xf8, 0x1b, 0xd4, 0x94, 0x10, 0xc6, 0x01, 0x95, 0x59, 0x64, 0xda,
|
||||
0xc7, 0xef, 0x56, 0xfb, 0xa3, 0x5e, 0x9e, 0xda, 0xc8, 0x05, 0xf7, 0x2f, 0x73, 0x9a, 0x1e, 0x31,
|
||||
0x45, 0xbf, 0x97, 0x28, 0x29, 0x6c, 0xf0, 0x09, 0xea, 0xb8, 0xd4, 0x9b, 0xf2, 0xf1, 0x78, 0xc8,
|
||||
0x42, 0x26, 0xbb, 0xbb, 0xfa, 0xca, 0x1f, 0xa7, 0x8b, 0x5e, 0xc7, 0xa9, 0xe0, 0x64, 0x85, 0xd5,
|
||||
0xff, 0xad, 0x8e, 0x5a, 0xc5, 0xf8, 0xc1, 0xdf, 0x22, 0xe4, 0x2d, 0x1f, 0xbb, 0xe8, 0x1a, 0x3a,
|
||||
0x38, 0xef, 0x6c, 0x0a, 0x4e, 0x31, 0x16, 0xca, 0x19, 0x5a, 0x40, 0x82, 0x54, 0x8c, 0xf0, 0x77,
|
||||
0xa8, 0x25, 0x24, 0x4d, 0xa4, 0x7e, 0xb6, 0x5b, 0xaf, 0xfd, 0x6c, 0xf7, 0xd2, 0x45, 0xaf, 0x35,
|
||||
0x5a, 0x1a, 0x90, 0xd2, 0x0b, 0x8f, 0xd1, 0x7e, 0x99, 0xa0, 0xff, 0x39, 0x82, 0x74, 0xbb, 0x4e,
|
||||
0x57, 0x5c, 0xc8, 0x1d, 0x57, 0x35, 0x08, 0xb2, 0x88, 0xe9, 0x1c, 0x35, 0xca, 0x41, 0x90, 0xe5,
|
||||
0x91, 0xe4, 0xab, 0xd8, 0x46, 0x2d, 0x31, 0xf3, 0x3c, 0x00, 0x1f, 0x7c, 0x9d, 0x86, 0x86, 0xf3,
|
||||
0x46, 0x4e, 0x6d, 0x8d, 0x96, 0x0b, 0xa4, 0xe4, 0x28, 0xe3, 0x31, 0x65, 0x01, 0xf8, 0x3a, 0x05,
|
||||
0x15, 0xe3, 0x67, 0x1a, 0x25, 0xf9, 0xaa, 0x73, 0x74, 0x73, 0x6b, 0xd6, 0x5e, 0xdc, 0x9a, 0xb5,
|
||||
0x97, 0xb7, 0x66, 0xed, 0x97, 0xd4, 0x34, 0x6e, 0x52, 0xd3, 0x78, 0x91, 0x9a, 0xc6, 0xcb, 0xd4,
|
||||
0x34, 0xfe, 0x4c, 0x4d, 0xe3, 0xd7, 0xbf, 0xcc, 0xda, 0xf7, 0x5b, 0xf3, 0xc1, 0xbf, 0x01, 0x00,
|
||||
0x00, 0xff, 0xff, 0xce, 0x80, 0xf2, 0xbe, 0x96, 0x08, 0x00, 0x00,
|
||||
}
|
||||
|
@ -103,11 +103,16 @@ message JobSpec {
|
||||
// +optional
|
||||
optional int32 completions = 2;
|
||||
|
||||
// Optional duration in seconds relative to the startTime that the job may be active
|
||||
// Specifies the duration in seconds relative to the startTime that the job may be active
|
||||
// before the system tries to terminate it; value must be positive integer
|
||||
// +optional
|
||||
optional int64 activeDeadlineSeconds = 3;
|
||||
|
||||
// Specifies the number of retries before marking this job failed.
|
||||
// Defaults to 6
|
||||
// +optional
|
||||
optional int32 backoffLimit = 7;
|
||||
|
||||
// A label query over pods that should match the pod count.
|
||||
// Normally, the system sets this field for you.
|
||||
// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors
|
||||
|
@ -77,11 +77,21 @@ type JobSpec struct {
|
||||
// +optional
|
||||
Completions *int32 `json:"completions,omitempty" protobuf:"varint,2,opt,name=completions"`
|
||||
|
||||
// Optional duration in seconds relative to the startTime that the job may be active
|
||||
// Specifies the duration in seconds relative to the startTime that the job may be active
|
||||
// before the system tries to terminate it; value must be positive integer
|
||||
// +optional
|
||||
ActiveDeadlineSeconds *int64 `json:"activeDeadlineSeconds,omitempty" protobuf:"varint,3,opt,name=activeDeadlineSeconds"`
|
||||
|
||||
// Specifies the number of retries before marking this job failed.
|
||||
// Defaults to 6
|
||||
// +optional
|
||||
BackoffLimit *int32 `json:"backoffLimit,omitempty" protobuf:"varint,7,opt,name=backoffLimit"`
|
||||
|
||||
// TODO enabled it when https://github.com/kubernetes/kubernetes/issues/28486 has been fixed
|
||||
// Optional number of failed pods to retain.
|
||||
// +optional
|
||||
// FailedPodsLimit *int32 `json:"failedPodsLimit,omitempty" protobuf:"varint,9,opt,name=failedPodsLimit"`
|
||||
|
||||
// A label query over pods that should match the pod count.
|
||||
// Normally, the system sets this field for you.
|
||||
// More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors
|
||||
|
@ -66,7 +66,8 @@ var map_JobSpec = map[string]string{
|
||||
"": "JobSpec describes how the job execution will look like.",
|
||||
"parallelism": "Specifies the maximum desired number of pods the job should run at any given time. The actual number of pods running in steady state will be less than this number when ((.spec.completions - .status.successful) < .spec.parallelism), i.e. when the work left to do is less than max parallelism. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/",
|
||||
"completions": "Specifies the desired number of successfully finished pods the job should be run with. Setting to nil means that the success of any pod signals the success of all pods, and allows parallelism to have any positive value. Setting to 1 means that parallelism is limited to 1 and the success of that pod signals the success of the job. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/",
|
||||
"activeDeadlineSeconds": "Optional duration in seconds relative to the startTime that the job may be active before the system tries to terminate it; value must be positive integer",
|
||||
"activeDeadlineSeconds": "Specifies the duration in seconds relative to the startTime that the job may be active before the system tries to terminate it; value must be positive integer",
|
||||
"backoffLimit": "Specifies the number of retries before marking this job failed. Defaults to 6",
|
||||
"selector": "A label query over pods that should match the pod count. Normally, the system sets this field for you. More info: https://kubernetes.io/docs/concepts/overview/working-with-objects/labels/#label-selectors",
|
||||
"manualSelector": "manualSelector controls generation of pod labels and pod selectors. Leave `manualSelector` unset unless you are certain what you are doing. When false or unset, the system pick labels unique to this job and appends those labels to the pod template. When true, the user is responsible for picking unique labels and specifying the selector. Failure to pick a unique label may cause this and other jobs to not function correctly. However, You may see `manualSelector=true` in jobs that were created with the old `extensions/v1beta1` API. More info: https://git.k8s.io/community/contributors/design-proposals/selector-generation.md",
|
||||
"template": "Describes the pod that will be created when executing a job. More info: https://kubernetes.io/docs/concepts/workloads/controllers/jobs-run-to-completion/",
|
||||
|
@ -171,6 +171,15 @@ func (in *JobSpec) DeepCopyInto(out *JobSpec) {
|
||||
**out = **in
|
||||
}
|
||||
}
|
||||
if in.BackoffLimit != nil {
|
||||
in, out := &in.BackoffLimit, &out.BackoffLimit
|
||||
if *in == nil {
|
||||
*out = nil
|
||||
} else {
|
||||
*out = new(int32)
|
||||
**out = **in
|
||||
}
|
||||
}
|
||||
if in.Selector != nil {
|
||||
in, out := &in.Selector, &out.Selector
|
||||
if *in == nil {
|
||||
|
@ -226,6 +226,7 @@ func verifyJob(fedJob, localJob *batchv1.Job) bool {
|
||||
localJob.Spec.ManualSelector = fedJob.Spec.ManualSelector
|
||||
localJob.Spec.Completions = fedJob.Spec.Completions
|
||||
localJob.Spec.Parallelism = fedJob.Spec.Parallelism
|
||||
localJob.Spec.BackoffLimit = fedJob.Spec.BackoffLimit
|
||||
return fedutil.ObjectMetaAndSpecEquivalent(fedJob, localJob)
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user