diff --git a/api/core/v1alpha1/clustercatalog_types.go b/api/core/v1alpha1/clustercatalog_types.go index 56b999a2..b47d15bc 100644 --- a/api/core/v1alpha1/clustercatalog_types.go +++ b/api/core/v1alpha1/clustercatalog_types.go @@ -145,8 +145,7 @@ type ClusterCatalogStatus struct { // CatalogSource is a discriminated union of possible sources for a Catalog. // CatalogSource contains the sourcing information for a Catalog // +union -// +kubebuilder:validation:XValidation:rule="self.type != 'Image' || has(self.image)",message="source type 'Image' requires image field" -// +kubebuilder:validation:XValidation:rule="self.type == 'Image' || !has(self.image)",message="image field must only be set for source type 'Image'" +// +kubebuilder:validation:XValidation:rule="self.type == 'Image' && has(self.image)",message="source type 'Image' requires image field" type CatalogSource struct { // type is a required reference to the type of source the catalog is sourced from. // @@ -167,8 +166,7 @@ type CatalogSource struct { // ResolvedCatalogSource is a discriminated union of resolution information for a Catalog. // ResolvedCatalogSource contains the information about a sourced Catalog // +union -// +kubebuilder:validation:XValidation:rule="self.type != 'Image' || has(self.image)",message="source type 'Image' requires image field" -// +kubebuilder:validation:XValidation:rule="self.type == 'Image' || !has(self.image)",message="image field must only be set for source type 'Image'" +// +kubebuilder:validation:XValidation:rule="self.type == 'Image' && has(self.image)",message="source type 'Image' requires image field" type ResolvedCatalogSource struct { // type is a reference to the type of source the catalog is sourced from. // diff --git a/api/core/v1alpha1/clustercatalog_types_test.go b/api/core/v1alpha1/clustercatalog_types_test.go index 588041b8..3e7b060a 100644 --- a/api/core/v1alpha1/clustercatalog_types_test.go +++ b/api/core/v1alpha1/clustercatalog_types_test.go @@ -78,21 +78,6 @@ func TestSourceCELValidation(t *testing.T) { source CatalogSource wantErrs []string }{ - "unsupported source": { - source: CatalogSource{ - Type: "unsupportedType", - }, - wantErrs: []string{}, - }, - "non-image source with disallowed image field": { - source: CatalogSource{ - Type: "notImageSourceType", - Image: &ImageSource{}, - }, - wantErrs: []string{ - fmt.Sprintf("%s: Invalid value: \"object\": image field must only be set for source type '%s'", pth, SourceTypeImage), - }, - }, "image source missing required image field": { source: CatalogSource{ Type: SourceTypeImage, @@ -133,21 +118,6 @@ func TestResolvedSourceCELValidation(t *testing.T) { source ResolvedCatalogSource wantErrs []string }{ - "unsupported source": { - source: ResolvedCatalogSource{ - Type: "unsupportedType", - }, - wantErrs: []string{}, - }, - "non-image source with disallowed image field": { - source: ResolvedCatalogSource{ - Type: "notImageSourceType", - Image: &ResolvedImageSource{}, - }, - wantErrs: []string{ - fmt.Sprintf("%s: Invalid value: \"object\": image field must only be set for source type '%s'", pth, SourceTypeImage), - }, - }, "image source missing required image field": { source: ResolvedCatalogSource{ Type: SourceTypeImage, diff --git a/config/base/crd/bases/olm.operatorframework.io_clustercatalogs.yaml b/config/base/crd/bases/olm.operatorframework.io_clustercatalogs.yaml index 0f56614c..be4ff3b1 100644 --- a/config/base/crd/bases/olm.operatorframework.io_clustercatalogs.yaml +++ b/config/base/crd/bases/olm.operatorframework.io_clustercatalogs.yaml @@ -119,9 +119,7 @@ spec: type: object x-kubernetes-validations: - message: source type 'Image' requires image field - rule: self.type != 'Image' || has(self.image) - - message: image field must only be set for source type 'Image' - rule: self.type == 'Image' || !has(self.image) + rule: self.type == 'Image' && has(self.image) required: - source type: object @@ -266,9 +264,7 @@ spec: type: object x-kubernetes-validations: - message: source type 'Image' requires image field - rule: self.type != 'Image' || has(self.image) - - message: image field must only be set for source type 'Image' - rule: self.type == 'Image' || !has(self.image) + rule: self.type == 'Image' && has(self.image) type: object required: - metadata