Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
80 changes: 54 additions & 26 deletions api/v3/atom_validation.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,7 @@ func (atom *Atom) ValidateCreate(c client.Client) ([]string, error) {
var warnings []string
var allErrs field.ErrorList

err := smoothoperatorvalidation.ValidateLabelsOnCreate(atom.Labels)
if err != nil {
allErrs = append(allErrs, err)
}

ValidateAtom(atom, &warnings, &allErrs)
ValidateOwnerInfo(c, atom, &allErrs)
validateCreate(&c, atom, &warnings, &allErrs)

if len(allErrs) == 0 {
return warnings, nil
Expand All @@ -40,26 +34,8 @@ func (atom *Atom) ValidateCreate(c client.Client) ([]string, error) {
func (atom *Atom) ValidateUpdate(c client.Client, atomOld *Atom) ([]string, error) {
var warnings []string
var allErrs field.ErrorList
smoothoperatorvalidation.ValidateLabelsOnUpdate(atomOld.Labels, atom.Labels, &allErrs)

if atom.Spec.IngressRouteURLs == nil {
smoothoperatorvalidation.CheckURLImmutability(
atomOld.Spec.Service.BaseURL,
atom.Spec.Service.BaseURL,
&allErrs,
field.NewPath("spec").Child("service").Child("baseUrl"),
)
} else if atom.Spec.Service.BaseURL.String() != atomOld.Spec.Service.BaseURL.String() {
err := smoothoperatorvalidation.ValidateIngressRouteURLsContainsBaseURL(atom.Spec.IngressRouteURLs, atomOld.Spec.Service.BaseURL, nil)
if err != nil {
allErrs = append(allErrs, err)
}
}

smoothoperatorvalidation.ValidateIngressRouteURLsNotRemoved(atomOld.Spec.IngressRouteURLs, atom.Spec.IngressRouteURLs, &allErrs, nil)

ValidateAtom(atom, &warnings, &allErrs)
ValidateOwnerInfo(c, atom, &allErrs)
validateUpdate(&c, atom, atomOld, &warnings, &allErrs)

if len(allErrs) == 0 {
return warnings, nil
Expand All @@ -70,6 +46,16 @@ func (atom *Atom) ValidateUpdate(c client.Client, atomOld *Atom) ([]string, erro
atom.Name, allErrs)
}

// ValidateCreateAtom validates Atom creation without k8s client
func ValidateCreateAtom(atom *Atom, warnings *[]string, allErrs *field.ErrorList) {
validateCreate(nil, atom, warnings, allErrs)
}

// ValidateUpdateAtom validates Atom update without k8s client
func ValidateUpdateAtom(atom *Atom, atomOld *Atom, warnings *[]string, allErrs *field.ErrorList) {
validateUpdate(nil, atom, atomOld, warnings, allErrs)
}

func ValidateOwnerInfo(c client.Client, atom *Atom, allErrs *field.ErrorList) {
ownerInfoRef := atom.Spec.Service.OwnerInfoRef
ownerInfo := &smoothoperatorv1.OwnerInfo{}
Expand Down Expand Up @@ -117,6 +103,48 @@ func validateMetadataTemplates(atom *Atom, ownerInfo *smoothoperatorv1.OwnerInfo
}
}

func validateCreate(c *client.Client, atom *Atom, warnings *[]string, allErrs *field.ErrorList) {
err := smoothoperatorvalidation.ValidateLabelsOnCreate(atom.Labels)
if err != nil {
*allErrs = append(*allErrs, err)
}

ValidateAtom(atom, warnings, allErrs)

// Only validate owner info if k8s client is available
if c != nil {
ValidateOwnerInfo(*c, atom, allErrs)
}

}

func validateUpdate(c *client.Client, atom *Atom, atomOld *Atom, warnings *[]string, allErrs *field.ErrorList) {
smoothoperatorvalidation.ValidateLabelsOnUpdate(atomOld.Labels, atom.Labels, allErrs)

if atom.Spec.IngressRouteURLs == nil {
smoothoperatorvalidation.CheckURLImmutability(
atomOld.Spec.Service.BaseURL,
atom.Spec.Service.BaseURL,
allErrs,
field.NewPath("spec").Child("service").Child("baseUrl"),
)
} else if atom.Spec.Service.BaseURL.String() != atomOld.Spec.Service.BaseURL.String() {
err := smoothoperatorvalidation.ValidateIngressRouteURLsContainsBaseURL(atom.Spec.IngressRouteURLs, atomOld.Spec.Service.BaseURL, nil)
if err != nil {
*allErrs = append(*allErrs, err)
}
}

smoothoperatorvalidation.ValidateIngressRouteURLsNotRemoved(atomOld.Spec.IngressRouteURLs, atom.Spec.IngressRouteURLs, allErrs, nil)

ValidateAtom(atom, warnings, allErrs)

// Only validate owner info if k8s client is available
if c != nil {
ValidateOwnerInfo(*c, atom, allErrs)
}
}

func ValidateAtom(atom *Atom, warnings *[]string, allErrs *field.ErrorList) {
var fieldPath *field.Path
if strings.Contains(atom.GetName(), "atom") {
Expand Down