Skip to content

Commit

Permalink
[CN-960] Refactor hotbackup validation (#875)
Browse files Browse the repository at this point in the history
  • Loading branch information
dzeromski-hazelcast committed Sep 18, 2023
1 parent d5ccf97 commit 45e1ee0
Showing 1 changed file with 33 additions and 7 deletions.
40 changes: 33 additions & 7 deletions api/v1alpha1/hotbackup_validation.go
Expand Up @@ -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
}

0 comments on commit 45e1ee0

Please sign in to comment.