github.com/1aal/kubeblocks@v0.0.0-20231107070852-e1c03e598921/pkg/controller/builder/builder_job.go (about) 1 /* 2 Copyright (C) 2022-2023 ApeCloud Co., Ltd 3 4 This file is part of KubeBlocks project 5 6 This program is free software: you can redistribute it and/or modify 7 it under the terms of the GNU Affero General Public License as published by 8 the Free Software Foundation, either version 3 of the License, or 9 (at your option) any later version. 10 11 This program is distributed in the hope that it will be useful 12 but WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 14 GNU Affero General Public License for more details. 15 16 You should have received a copy of the GNU Affero General Public License 17 along with this program. If not, see <http://www.gnu.org/licenses/>. 18 */ 19 20 package builder 21 22 import ( 23 batchv1 "k8s.io/api/batch/v1" 24 corev1 "k8s.io/api/core/v1" 25 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 26 ) 27 28 type JobBuilder struct { 29 BaseBuilder[batchv1.Job, *batchv1.Job, JobBuilder] 30 } 31 32 func NewJobBuilder(namespace, name string) *JobBuilder { 33 builder := &JobBuilder{} 34 builder.init(namespace, name, &batchv1.Job{}, builder) 35 return builder 36 } 37 38 func (builder *JobBuilder) SetPodTemplateSpec(template corev1.PodTemplateSpec) *JobBuilder { 39 builder.get().Spec.Template = template 40 return builder 41 } 42 43 func (builder *JobBuilder) AddSelector(key, value string) *JobBuilder { 44 selector := builder.get().Spec.Selector 45 if selector == nil { 46 selector = &metav1.LabelSelector{ 47 MatchLabels: map[string]string{}, 48 } 49 } 50 selector.MatchLabels[key] = value 51 builder.get().Spec.Selector = selector 52 return builder 53 } 54 55 func (builder *JobBuilder) SetSuspend(suspend bool) *JobBuilder { 56 builder.get().Spec.Suspend = &suspend 57 return builder 58 } 59 60 func (builder *JobBuilder) SetBackoffLimit(limit int32) *JobBuilder { 61 builder.get().Spec.BackoffLimit = &limit 62 return builder 63 } 64 65 func (builder *JobBuilder) SetTTLSecondsAfterFinished(ttl int32) *JobBuilder { 66 builder.get().Spec.TTLSecondsAfterFinished = &ttl 67 return builder 68 }