From 45e1ee0c3e1b038ccbfe6aafd36a9f90d918e629 Mon Sep 17 00:00:00 2001 From: dzeromski-hazelcast <102033346+dzeromski-hazelcast@users.noreply.github.com> Date: Mon, 18 Sep 2023 12:11:46 +0200 Subject: [PATCH] [CN-960] Refactor hotbackup validation (#875) --- api/v1alpha1/hotbackup_validation.go | 40 +++++++++++++++++++++++----- 1 file changed, 33 insertions(+), 7 deletions(-) diff --git a/api/v1alpha1/hotbackup_validation.go b/api/v1alpha1/hotbackup_validation.go index f7a09d60e9..bd279d3d56 100644 --- a/api/v1alpha1/hotbackup_validation.go +++ b/api/v1alpha1/hotbackup_validation.go @@ -5,25 +5,51 @@ import ( "fmt" n "github.com/hazelcast/hazelcast-platform-operator/internal/naming" + kerrors "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/runtime/schema" "k8s.io/apimachinery/pkg/util/validation/field" ) -func ValidateHotBackupPersistence(h *Hazelcast) *field.Error { +type hotbackupValidator struct { + fieldValidator + name string +} + +func (v *hotbackupValidator) Err() error { + if len(v.fieldValidator) != 0 { + return kerrors.NewInvalid( + schema.GroupKind{Group: "hazelcast.com", Kind: "Hazelcast"}, + v.name, + field.ErrorList(v.fieldValidator), + ) + } + return nil +} + +func ValidateHotBackupPersistence(h *Hazelcast) error { + v := hotbackupValidator{ + name: h.Name, + } + v.validateHotBackupPersistence(h) + return v.Err() +} + +func (v *hotbackupValidator) validateHotBackupPersistence(h *Hazelcast) { s, ok := h.ObjectMeta.Annotations[n.LastSuccessfulSpecAnnotation] if !ok { - return field.InternalError(field.NewPath("spec"), fmt.Errorf("hazelcast resource %s is not successfully started yet", h.Name)) + v.InternalError(Path("spec"), fmt.Errorf("hazelcast resource %s is not successfully started yet", h.Name)) + return } lastSpec := &HazelcastSpec{} err := json.Unmarshal([]byte(s), lastSpec) if err != nil { - return field.InternalError(field.NewPath("spec"), fmt.Errorf("error parsing last Hazelcast spec for update errors: %w", err)) + v.InternalError(Path("spec"), fmt.Errorf("error parsing last Hazelcast spec for update errors: %w", err)) + return } if !lastSpec.Persistence.IsEnabled() { - return field.Invalid(field.NewPath("spec").Child("persistenceEnabled"), lastSpec.Persistence.IsEnabled(), - "Persistence must be enabled at Hazelcast") + v.Invalid(Path("spec", "persistenceEnabled"), lastSpec.Persistence.IsEnabled(), "Persistence must be enabled at Hazelcast") + return } - - return nil }