github.com/1aal/kubeblocks@v0.0.0-20231107070852-e1c03e598921/pkg/controller/builder/builder_stateful_set.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 apps "k8s.io/api/apps/v1" 24 corev1 "k8s.io/api/core/v1" 25 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 26 ) 27 28 type StatefulSetBuilder struct { 29 BaseBuilder[apps.StatefulSet, *apps.StatefulSet, StatefulSetBuilder] 30 } 31 32 func NewStatefulSetBuilder(namespace, name string) *StatefulSetBuilder { 33 builder := &StatefulSetBuilder{} 34 builder.init(namespace, name, &apps.StatefulSet{}, builder) 35 return builder 36 } 37 38 func (builder *StatefulSetBuilder) AddMatchLabel(key, value string) *StatefulSetBuilder { 39 labels := make(map[string]string, 1) 40 labels[key] = value 41 return builder.AddMatchLabelsInMap(labels) 42 } 43 44 func (builder *StatefulSetBuilder) AddMatchLabels(keyValues ...string) *StatefulSetBuilder { 45 return builder.AddMatchLabelsInMap(WithMap(keyValues...)) 46 } 47 48 func (builder *StatefulSetBuilder) AddMatchLabelsInMap(labels map[string]string) *StatefulSetBuilder { 49 selector := builder.get().Spec.Selector 50 if selector == nil { 51 selector = &metav1.LabelSelector{} 52 builder.get().Spec.Selector = selector 53 } 54 matchLabels := builder.get().Spec.Selector.MatchLabels 55 if matchLabels == nil { 56 matchLabels = make(map[string]string, len(labels)) 57 } 58 for k, v := range labels { 59 matchLabels[k] = v 60 } 61 builder.get().Spec.Selector.MatchLabels = matchLabels 62 return builder 63 } 64 65 func (builder *StatefulSetBuilder) SetSelector(selector *metav1.LabelSelector) *StatefulSetBuilder { 66 builder.get().Spec.Selector = selector 67 return builder 68 } 69 70 func (builder *StatefulSetBuilder) SetServiceName(serviceName string) *StatefulSetBuilder { 71 builder.get().Spec.ServiceName = serviceName 72 return builder 73 } 74 75 func (builder *StatefulSetBuilder) SetReplicas(replicas int32) *StatefulSetBuilder { 76 builder.get().Spec.Replicas = &replicas 77 return builder 78 } 79 80 func (builder *StatefulSetBuilder) SetMinReadySeconds(minReadySeconds int32) *StatefulSetBuilder { 81 builder.get().Spec.MinReadySeconds = minReadySeconds 82 return builder 83 } 84 85 func (builder *StatefulSetBuilder) SetPodManagementPolicy(policy apps.PodManagementPolicyType) *StatefulSetBuilder { 86 builder.get().Spec.PodManagementPolicy = policy 87 return builder 88 } 89 90 func (builder *StatefulSetBuilder) SetTemplate(template corev1.PodTemplateSpec) *StatefulSetBuilder { 91 builder.get().Spec.Template = template 92 return builder 93 } 94 95 func (builder *StatefulSetBuilder) AddVolumeClaimTemplates(templates ...corev1.PersistentVolumeClaim) *StatefulSetBuilder { 96 templateList := builder.get().Spec.VolumeClaimTemplates 97 templateList = append(templateList, templates...) 98 builder.get().Spec.VolumeClaimTemplates = templateList 99 return builder 100 } 101 102 func (builder *StatefulSetBuilder) SetVolumeClaimTemplates(templates ...corev1.PersistentVolumeClaim) *StatefulSetBuilder { 103 builder.get().Spec.VolumeClaimTemplates = templates 104 return builder 105 } 106 107 func (builder *StatefulSetBuilder) SetUpdateStrategy(strategy apps.StatefulSetUpdateStrategy) *StatefulSetBuilder { 108 builder.get().Spec.UpdateStrategy = strategy 109 return builder 110 } 111 112 func (builder *StatefulSetBuilder) SetUpdateStrategyType(strategyType apps.StatefulSetUpdateStrategyType) *StatefulSetBuilder { 113 builder.get().Spec.UpdateStrategy.Type = strategyType 114 return builder 115 }