github.com/1aal/kubeblocks@v0.0.0-20231107070852-e1c03e598921/pkg/controller/builder/builder_pdb.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 policyv1 "k8s.io/api/policy/v1" 24 metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" 25 "k8s.io/apimachinery/pkg/util/intstr" 26 ) 27 28 type PDBBuilder struct { 29 BaseBuilder[policyv1.PodDisruptionBudget, *policyv1.PodDisruptionBudget, PDBBuilder] 30 } 31 32 func NewPDBBuilder(namespace, name string) *PDBBuilder { 33 builder := &PDBBuilder{} 34 builder.init(namespace, name, &policyv1.PodDisruptionBudget{}, builder) 35 return builder 36 } 37 38 func (builder *PDBBuilder) SetMinAvailable(minAvailable intstr.IntOrString) *PDBBuilder { 39 builder.get().Spec.MinAvailable = &minAvailable 40 return builder 41 } 42 43 func (builder *PDBBuilder) AddSelector(key, value string) *PDBBuilder { 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 *PDBBuilder) AddSelectors(keyValues ...string) *PDBBuilder { 56 return builder.AddSelectorsInMap(WithMap(keyValues...)) 57 } 58 59 func (builder *PDBBuilder) AddSelectorsInMap(keyValues map[string]string) *PDBBuilder { 60 selector := builder.get().Spec.Selector 61 if selector == nil { 62 selector = &metav1.LabelSelector{ 63 MatchLabels: map[string]string{}, 64 } 65 } 66 for k, v := range keyValues { 67 selector.MatchLabels[k] = v 68 } 69 builder.get().Spec.Selector = selector 70 return builder 71 }