Skip to content

Commit 115f8c1

Browse files
mantissahzderekbit
authored andcommitted
fix(backup): add backup volume validator
ref: longhorn/longhorn 11154 Signed-off-by: James Lu <james.lu@suse.com>
1 parent ec2a5a2 commit 115f8c1

2 files changed

Lines changed: 49 additions & 7 deletions

File tree

Lines changed: 47 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,17 @@
11
package backupvolume
22

33
import (
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

1217
type 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
}

webhook/server/validation.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@ import (
1313
"github.com/longhorn/longhorn-manager/webhook/resources/backup"
1414
"github.com/longhorn/longhorn-manager/webhook/resources/backupbackingimage"
1515
"github.com/longhorn/longhorn-manager/webhook/resources/backuptarget"
16+
"github.com/longhorn/longhorn-manager/webhook/resources/backupvolume"
1617
"github.com/longhorn/longhorn-manager/webhook/resources/engine"
1718
"github.com/longhorn/longhorn-manager/webhook/resources/engineimage"
1819
"github.com/longhorn/longhorn-manager/webhook/resources/instancemanager"
@@ -44,6 +45,7 @@ func Validation(ds *datastore.DataStore) (http.Handler, []admission.Resource, er
4445
backingimage.NewValidator(ds),
4546
backupbackingimage.NewValidator(ds),
4647
backup.NewValidator(ds),
48+
backupvolume.NewValidator(ds),
4749
backuptarget.NewValidator(ds),
4850
volume.NewValidator(ds, currentNodeID),
4951
orphan.NewValidator(ds),

0 commit comments

Comments
 (0)