github.com/1aal/kubeblocks@v0.0.0-20231107070852-e1c03e598921/pkg/controller/builder/builder_container.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 corev1 "k8s.io/api/core/v1" 24 ) 25 26 type ContainerBuilder struct { 27 object *corev1.Container 28 } 29 30 func NewContainerBuilder(name string) *ContainerBuilder { 31 builder := &ContainerBuilder{} 32 builder.init(name, &corev1.Container{}) 33 return builder 34 } 35 36 func (builder *ContainerBuilder) init(name string, obj *corev1.Container) { 37 obj.Name = name 38 builder.object = obj 39 } 40 41 func (builder *ContainerBuilder) get() *corev1.Container { 42 return builder.object 43 } 44 45 func (builder *ContainerBuilder) GetObject() *corev1.Container { 46 return builder.object 47 } 48 49 func (builder *ContainerBuilder) AddCommands(commands ...string) *ContainerBuilder { 50 builder.get().Command = append(builder.get().Command, commands...) 51 return builder 52 } 53 54 func (builder *ContainerBuilder) AddArgs(args ...string) *ContainerBuilder { 55 builder.get().Args = append(builder.get().Args, args...) 56 return builder 57 } 58 59 func (builder *ContainerBuilder) AddEnv(env ...corev1.EnvVar) *ContainerBuilder { 60 builder.get().Env = append(builder.get().Env, env...) 61 return builder 62 } 63 64 func (builder *ContainerBuilder) SetImage(image string) *ContainerBuilder { 65 builder.get().Image = image 66 return builder 67 } 68 69 func (builder *ContainerBuilder) SetImagePullPolicy(policy corev1.PullPolicy) *ContainerBuilder { 70 builder.get().ImagePullPolicy = policy 71 return builder 72 } 73 74 func (builder *ContainerBuilder) AddVolumeMounts(mounts ...corev1.VolumeMount) *ContainerBuilder { 75 builder.get().VolumeMounts = append(builder.get().VolumeMounts, mounts...) 76 return builder 77 } 78 79 func (builder *ContainerBuilder) SetSecurityContext(ctx corev1.SecurityContext) *ContainerBuilder { 80 builder.get().SecurityContext = &ctx 81 return builder 82 } 83 84 func (builder *ContainerBuilder) SetResources(resources corev1.ResourceRequirements) *ContainerBuilder { 85 builder.get().Resources = resources 86 return builder 87 } 88 89 func (builder *ContainerBuilder) AddPorts(ports ...corev1.ContainerPort) *ContainerBuilder { 90 builder.get().Ports = append(builder.get().Ports, ports...) 91 return builder 92 } 93 94 func (builder *ContainerBuilder) SetReadinessProbe(probe corev1.Probe) *ContainerBuilder { 95 builder.get().ReadinessProbe = &probe 96 return builder 97 } 98 99 func (builder *ContainerBuilder) SetStartupProbe(probe corev1.Probe) *ContainerBuilder { 100 builder.get().StartupProbe = &probe 101 return builder 102 }