github.com/1aal/kubeblocks@v0.0.0-20231107070852-e1c03e598921/pkg/controller/builder/builder_replicated_state_machine.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 workloads "github.com/1aal/kubeblocks/apis/workloads/v1alpha1" 28 ) 29 30 type ReplicatedStateMachineBuilder struct { 31 BaseBuilder[workloads.ReplicatedStateMachine, *workloads.ReplicatedStateMachine, ReplicatedStateMachineBuilder] 32 } 33 34 func NewReplicatedStateMachineBuilder(namespace, name string) *ReplicatedStateMachineBuilder { 35 builder := &ReplicatedStateMachineBuilder{} 36 replicas := int32(1) 37 builder.init(namespace, name, 38 &workloads.ReplicatedStateMachine{ 39 Spec: workloads.ReplicatedStateMachineSpec{ 40 Replicas: &replicas, 41 }, 42 }, builder) 43 return builder 44 } 45 46 func (builder *ReplicatedStateMachineBuilder) SetReplicas(replicas int32) *ReplicatedStateMachineBuilder { 47 builder.get().Spec.Replicas = &replicas 48 return builder 49 } 50 51 func (builder *ReplicatedStateMachineBuilder) AddMatchLabel(key, value string) *ReplicatedStateMachineBuilder { 52 labels := make(map[string]string, 1) 53 labels[key] = value 54 return builder.AddMatchLabelsInMap(labels) 55 } 56 57 func (builder *ReplicatedStateMachineBuilder) AddMatchLabels(keyValues ...string) *ReplicatedStateMachineBuilder { 58 return builder.AddMatchLabelsInMap(WithMap(keyValues...)) 59 } 60 61 func (builder *ReplicatedStateMachineBuilder) AddMatchLabelsInMap(labels map[string]string) *ReplicatedStateMachineBuilder { 62 selector := builder.get().Spec.Selector 63 if selector == nil { 64 selector = &metav1.LabelSelector{} 65 builder.get().Spec.Selector = selector 66 } 67 matchLabels := builder.get().Spec.Selector.MatchLabels 68 if matchLabels == nil { 69 matchLabels = make(map[string]string, len(labels)) 70 } 71 for k, v := range labels { 72 matchLabels[k] = v 73 } 74 builder.get().Spec.Selector.MatchLabels = matchLabels 75 return builder 76 } 77 78 func (builder *ReplicatedStateMachineBuilder) SetServiceName(serviceName string) *ReplicatedStateMachineBuilder { 79 builder.get().Spec.ServiceName = serviceName 80 return builder 81 } 82 83 func (builder *ReplicatedStateMachineBuilder) SetRoles(roles []workloads.ReplicaRole) *ReplicatedStateMachineBuilder { 84 builder.get().Spec.Roles = roles 85 return builder 86 } 87 88 func (builder *ReplicatedStateMachineBuilder) SetTemplate(template corev1.PodTemplateSpec) *ReplicatedStateMachineBuilder { 89 builder.get().Spec.Template = template 90 return builder 91 } 92 93 func (builder *ReplicatedStateMachineBuilder) AddVolumeClaimTemplates(templates ...corev1.PersistentVolumeClaim) *ReplicatedStateMachineBuilder { 94 templateList := builder.get().Spec.VolumeClaimTemplates 95 templateList = append(templateList, templates...) 96 builder.get().Spec.VolumeClaimTemplates = templateList 97 return builder 98 } 99 100 func (builder *ReplicatedStateMachineBuilder) SetVolumeClaimTemplates(templates ...corev1.PersistentVolumeClaim) *ReplicatedStateMachineBuilder { 101 builder.get().Spec.VolumeClaimTemplates = templates 102 return builder 103 } 104 105 func (builder *ReplicatedStateMachineBuilder) SetPodManagementPolicy(policy apps.PodManagementPolicyType) *ReplicatedStateMachineBuilder { 106 builder.get().Spec.PodManagementPolicy = policy 107 return builder 108 } 109 110 func (builder *ReplicatedStateMachineBuilder) SetUpdateStrategy(strategy apps.StatefulSetUpdateStrategy) *ReplicatedStateMachineBuilder { 111 builder.get().Spec.UpdateStrategy = strategy 112 return builder 113 } 114 115 func (builder *ReplicatedStateMachineBuilder) SetUpdateStrategyType(strategyType apps.StatefulSetUpdateStrategyType) *ReplicatedStateMachineBuilder { 116 builder.get().Spec.UpdateStrategy.Type = strategyType 117 return builder 118 } 119 120 func (builder *ReplicatedStateMachineBuilder) SetCustomHandler(handler []workloads.Action) *ReplicatedStateMachineBuilder { 121 roleProbe := builder.get().Spec.RoleProbe 122 if roleProbe == nil { 123 roleProbe = &workloads.RoleProbe{} 124 } 125 roleProbe.CustomHandler = handler 126 builder.get().Spec.RoleProbe = roleProbe 127 return builder 128 } 129 130 func (builder *ReplicatedStateMachineBuilder) AddCustomHandler(handler workloads.Action) *ReplicatedStateMachineBuilder { 131 roleProbe := builder.get().Spec.RoleProbe 132 if roleProbe == nil { 133 roleProbe = &workloads.RoleProbe{} 134 } 135 handlers := roleProbe.CustomHandler 136 handlers = append(handlers, handler) 137 roleProbe.CustomHandler = handlers 138 builder.get().Spec.RoleProbe = roleProbe 139 return builder 140 } 141 142 func (builder *ReplicatedStateMachineBuilder) SetRoleProbe(roleProbe *workloads.RoleProbe) *ReplicatedStateMachineBuilder { 143 builder.get().Spec.RoleProbe = roleProbe 144 return builder 145 } 146 147 func (builder *ReplicatedStateMachineBuilder) SetService(service *corev1.Service) *ReplicatedStateMachineBuilder { 148 builder.get().Spec.Service = service 149 return builder 150 } 151 152 func (builder *ReplicatedStateMachineBuilder) SetAlternativeServices(services []corev1.Service) *ReplicatedStateMachineBuilder { 153 builder.get().Spec.AlternativeServices = services 154 return builder 155 } 156 157 func (builder *ReplicatedStateMachineBuilder) SetMembershipReconfiguration(reconfiguration *workloads.MembershipReconfiguration) *ReplicatedStateMachineBuilder { 158 builder.get().Spec.MembershipReconfiguration = reconfiguration 159 return builder 160 } 161 162 func (builder *ReplicatedStateMachineBuilder) SetMemberUpdateStrategy(strategy *workloads.MemberUpdateStrategy) *ReplicatedStateMachineBuilder { 163 builder.get().Spec.MemberUpdateStrategy = strategy 164 if strategy != nil { 165 builder.SetUpdateStrategyType(apps.OnDeleteStatefulSetStrategyType) 166 } 167 return builder 168 } 169 170 func (builder *ReplicatedStateMachineBuilder) SetPaused(paused bool) *ReplicatedStateMachineBuilder { 171 builder.get().Spec.Paused = paused 172 return builder 173 } 174 175 func (builder *ReplicatedStateMachineBuilder) SetCredential(credential workloads.Credential) *ReplicatedStateMachineBuilder { 176 builder.get().Spec.Credential = &credential 177 return builder 178 }