11package backupvolume
22
33import (
4+ "fmt"
5+
6+ "k8s.io/apimachinery/pkg/runtime"
7+
48 admissionregv1 "k8s.io/api/admissionregistration/v1"
59
610 "github.com/longhorn/longhorn-manager/datastore"
711 "github.com/longhorn/longhorn-manager/webhook/admission"
812
913 longhorn "github.com/longhorn/longhorn-manager/k8s/pkg/apis/longhorn/v1beta2"
14+ werror "github.com/longhorn/longhorn-manager/webhook/error"
1015)
1116
1217type backupVolumeValidator struct {
@@ -18,13 +23,48 @@ func NewValidator(ds *datastore.DataStore) admission.Validator {
1823 return & backupVolumeValidator {ds : ds }
1924}
2025
21- func (b * backupVolumeValidator ) Resource () admission.Resource {
26+ func (bv * backupVolumeValidator ) Resource () admission.Resource {
2227 return admission.Resource {
23- Name : "backupvolumes" ,
24- Scope : admissionregv1 .NamespacedScope ,
25- APIGroup : longhorn .SchemeGroupVersion .Group ,
26- APIVersion : longhorn .SchemeGroupVersion .Version ,
27- ObjectType : & longhorn.BackupVolume {},
28- OperationTypes : []admissionregv1.OperationType {},
28+ Name : "backupvolumes" ,
29+ Scope : admissionregv1 .NamespacedScope ,
30+ APIGroup : longhorn .SchemeGroupVersion .Group ,
31+ APIVersion : longhorn .SchemeGroupVersion .Version ,
32+ ObjectType : & longhorn.BackupVolume {},
33+ OperationTypes : []admissionregv1.OperationType {
34+ admissionregv1 .Create ,
35+ admissionregv1 .Update ,
36+ },
37+ }
38+ }
39+
40+ func (bv * backupVolumeValidator ) Create (request * admission.Request , obj runtime.Object ) error {
41+ backupVolume := obj .(* longhorn.BackupVolume )
42+
43+ if err := validateRequiredFields (backupVolume ); err != nil {
44+ return werror .NewInvalidError (err .Error (), "" )
45+ }
46+
47+ return nil
48+ }
49+
50+ func validateRequiredFields (backupVolume * longhorn.BackupVolume ) error {
51+ if backupVolume .Spec .BackupTargetName == "" {
52+ return fmt .Errorf ("backup target name cannot be empty" )
53+ }
54+
55+ if backupVolume .Spec .VolumeName == "" {
56+ return fmt .Errorf ("volume name cannot be empty" )
2957 }
58+
59+ return nil
60+ }
61+
62+ func (bv * backupVolumeValidator ) Update (request * admission.Request , oldObj runtime.Object , newObj runtime.Object ) error {
63+ newBackupVolume := newObj .(* longhorn.BackupVolume )
64+
65+ if err := validateRequiredFields (newBackupVolume ); err != nil {
66+ return werror .NewInvalidError (err .Error (), "" )
67+ }
68+
69+ return nil
3070}
0 commit comments