github.com/1aal/kubeblocks@v0.0.0-20231107070852-e1c03e598921/pkg/testutil/apps/backuppolicytemplate_factory.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 apps 21 22 import ( 23 corev1 "k8s.io/api/core/v1" 24 25 appsv1alpha1 "github.com/1aal/kubeblocks/apis/apps/v1alpha1" 26 dpv1alpha1 "github.com/1aal/kubeblocks/apis/dataprotection/v1alpha1" 27 ) 28 29 type MockBackupPolicyTemplateFactory struct { 30 BaseFactory[appsv1alpha1.BackupPolicyTemplate, *appsv1alpha1.BackupPolicyTemplate, MockBackupPolicyTemplateFactory] 31 } 32 33 func NewBackupPolicyTemplateFactory(name string) *MockBackupPolicyTemplateFactory { 34 f := &MockBackupPolicyTemplateFactory{} 35 f.Init("", name, 36 &appsv1alpha1.BackupPolicyTemplate{}, 37 f) 38 return f 39 } 40 41 func (f *MockBackupPolicyTemplateFactory) SetClusterDefRef(clusterDefRef string) *MockBackupPolicyTemplateFactory { 42 f.Get().Spec.ClusterDefRef = clusterDefRef 43 return f 44 } 45 46 func (f *MockBackupPolicyTemplateFactory) getLastBackupPolicy() *appsv1alpha1.BackupPolicy { 47 l := len(f.Get().Spec.BackupPolicies) 48 if l == 0 { 49 return nil 50 } 51 backupPolicies := f.Get().Spec.BackupPolicies 52 return &backupPolicies[l-1] 53 } 54 55 func (f *MockBackupPolicyTemplateFactory) getLastBackupMethod() *dpv1alpha1.BackupMethod { 56 backupPolicy := f.getLastBackupPolicy() 57 l := len(backupPolicy.BackupMethods) 58 if l == 0 { 59 return nil 60 } 61 backupMethods := backupPolicy.BackupMethods 62 return &backupMethods[l-1].BackupMethod 63 } 64 65 func (f *MockBackupPolicyTemplateFactory) AddBackupPolicy(componentDef string) *MockBackupPolicyTemplateFactory { 66 f.Get().Spec.BackupPolicies = append(f.Get().Spec.BackupPolicies, appsv1alpha1.BackupPolicy{ 67 ComponentDefRef: componentDef, 68 }) 69 return f 70 } 71 72 func (f *MockBackupPolicyTemplateFactory) SetRetentionPeriod(duration string) *MockBackupPolicyTemplateFactory { 73 f.getLastBackupPolicy().RetentionPeriod = dpv1alpha1.RetentionPeriod(duration) 74 return f 75 } 76 77 func (f *MockBackupPolicyTemplateFactory) setBackupPolicyField(setField func(backupPolicy *appsv1alpha1.BackupPolicy)) { 78 backupPolicy := f.getLastBackupPolicy() 79 if backupPolicy == nil { 80 // ignore 81 return 82 } 83 setField(backupPolicy) 84 } 85 86 func (f *MockBackupPolicyTemplateFactory) AddSchedule(method, schedule string, enable bool) *MockBackupPolicyTemplateFactory { 87 schedulePolicy := appsv1alpha1.SchedulePolicy{ 88 Enabled: &enable, 89 CronExpression: schedule, 90 BackupMethod: method, 91 } 92 backupPolicy := f.getLastBackupPolicy() 93 backupPolicy.Schedules = append(backupPolicy.Schedules, schedulePolicy) 94 return f 95 } 96 97 func (f *MockBackupPolicyTemplateFactory) AddBackupMethod(name string, 98 snapshotVolumes bool, actionSetName string, mappingEnvWithClusterVersion ...string) *MockBackupPolicyTemplateFactory { 99 backupPolicy := f.getLastBackupPolicy() 100 backupMethod := appsv1alpha1.BackupMethod{ 101 BackupMethod: dpv1alpha1.BackupMethod{ 102 Name: name, 103 SnapshotVolumes: &snapshotVolumes, 104 ActionSetName: actionSetName, 105 TargetVolumes: &dpv1alpha1.TargetVolumeInfo{}, 106 }} 107 if len(mappingEnvWithClusterVersion) > 0 { 108 backupMethod.EnvMapping = []appsv1alpha1.EnvMappingVar{ 109 { 110 Key: EnvKeyImageTag, 111 ValueFrom: appsv1alpha1.ValueFrom{ 112 ClusterVersionRef: []appsv1alpha1.ClusterVersionMapping{ 113 { 114 Names: mappingEnvWithClusterVersion, 115 MappingValue: DefaultImageTag, 116 }, 117 }, 118 }, 119 }, 120 } 121 } 122 backupPolicy.BackupMethods = append(backupPolicy.BackupMethods, backupMethod) 123 return f 124 } 125 126 func (f *MockBackupPolicyTemplateFactory) SetBackupMethodVolumes(names []string) *MockBackupPolicyTemplateFactory { 127 backupMethod := f.getLastBackupMethod() 128 backupMethod.TargetVolumes.Volumes = names 129 return f 130 } 131 132 func (f *MockBackupPolicyTemplateFactory) SetBackupMethodVolumeMounts(keyAndValues ...string) *MockBackupPolicyTemplateFactory { 133 var volumeMounts []corev1.VolumeMount 134 for k, v := range WithMap(keyAndValues...) { 135 volumeMounts = append(volumeMounts, corev1.VolumeMount{ 136 Name: k, 137 MountPath: v, 138 }) 139 } 140 backupMethod := f.getLastBackupMethod() 141 backupMethod.TargetVolumes.VolumeMounts = volumeMounts 142 return f 143 } 144 145 func (f *MockBackupPolicyTemplateFactory) SetTargetRole(role string) *MockBackupPolicyTemplateFactory { 146 f.setBackupPolicyField(func(backupPolicy *appsv1alpha1.BackupPolicy) { 147 backupPolicy.Target.Role = role 148 }) 149 return f 150 } 151 152 func (f *MockBackupPolicyTemplateFactory) SetLabels(labels map[string]string) *MockBackupPolicyTemplateFactory { 153 f.Get().SetLabels(labels) 154 return f 155 }