diff --git a/kyaml/fn/framework/processors.go b/kyaml/fn/framework/processors.go index 6dfc9a98e..ed4367b37 100644 --- a/kyaml/fn/framework/processors.go +++ b/kyaml/fn/framework/processors.go @@ -173,7 +173,7 @@ func LoadFunctionConfig(src *yaml.RNode, api interface{}) error { if v, ok := api.(Validator); ok { return combineErrors(schemaValidationError, v.Validate()) } - return nil + return schemaValidationError } func combineErrors(schemaErr, customErr error) error { diff --git a/kyaml/fn/framework/processors_test.go b/kyaml/fn/framework/processors_test.go index da2964380..cbf83837d 100644 --- a/kyaml/fn/framework/processors_test.go +++ b/kyaml/fn/framework/processors_test.go @@ -17,6 +17,7 @@ import ( "sigs.k8s.io/kustomize/kyaml/fn/framework/frameworktestutil" "sigs.k8s.io/kustomize/kyaml/fn/framework/parser" "sigs.k8s.io/kustomize/kyaml/openapi" + "sigs.k8s.io/kustomize/kyaml/resid" "sigs.k8s.io/kustomize/kyaml/yaml" "sigs.k8s.io/kustomize/kyaml/fn/framework" @@ -700,6 +701,16 @@ func (e errorMergeTest) Validate() error { return nil } +func (a schemaProviderOnlyTest) Schema() (*spec.Schema, error) { + schema, err := framework.SchemaFromFunctionDefinition(resid.NewGvk("example.com", "v1alpha1", "JavaSpringBoot"), javaSpringBootDefinition) + return schema, errors.WrapPrefixf(err, "parsing JavaSpringBoot schema") +} + +type schemaProviderOnlyTest struct { + Metadata Metadata `yaml:"metadata" json:"metadata"` + Spec v1alpha1JavaSpringBootSpec `yaml:"spec" json:"spec"` +} + func TestLoadFunctionConfig(t *testing.T) { tests := []struct { name string @@ -755,6 +766,19 @@ spec: api: &errorMergeTest{}, wantErrMsgs: []string{ `validation failure list: +spec.replicas in body should be less than or equal to 9`, + }, + }, { + name: "schema provider only", + src: yaml.MustParse(` +apiVersion: example.com/v1alpha1 +kind: JavaSpringBoot +spec: + replicas: 11 +`), + api: &schemaProviderOnlyTest{}, + wantErrMsgs: []string{ + `validation failure list: spec.replicas in body should be less than or equal to 9`, }, }, @@ -813,6 +837,7 @@ test: true require.NoError(t, err) require.Equal(t, tt.want, tt.api) } else { + require.Error(t, err) for _, msg := range tt.wantErrMsgs { require.Contains(t, err.Error(), msg) }