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  }