diff --git a/Makefile b/Makefile index bc06c927..71afa0ea 100644 --- a/Makefile +++ b/Makefile @@ -103,7 +103,13 @@ clean-schema: # tests for go packages test-gopkgs: - $(Q)$(GO_TEST) ./... + $(Q)failures_in=""; \ + for mod in $$(find . -name go.mod); do \ + echo "Testing $$(dirname $$mod)..."; ( \ + cd $$(dirname $$mod) && $(GO_TEST) ./... \ + ) || failures_in="$$failures_in\ntags.cncf.io/container-device-interface/$$(dirname $$mod)"; \ + done; \ + if [ "$$failures_in" != "" ]; then echo "\nTests failed in:$$failures_in\n"; exit 1; fi # tests for CDI Spec JSON schema test-schema: bin/validate diff --git a/cmd/cdi/cmd/root.go b/cmd/cdi/cmd/root.go index ec067549..a2db5c20 100644 --- a/cmd/cdi/cmd/root.go +++ b/cmd/cdi/cmd/root.go @@ -23,7 +23,6 @@ import ( "github.com/spf13/cobra" "tags.cncf.io/container-device-interface/pkg/cdi" - "tags.cncf.io/container-device-interface/pkg/cdi/validate" "tags.cncf.io/container-device-interface/schema" ) @@ -65,7 +64,7 @@ func initSpecDirs() { fmt.Printf("failed to load JSON schema %s: %v\n", schemaName, err) os.Exit(1) } - cdi.SetSpecValidator(validate.WithSchema(s)) + cdi.SetSpecValidator(schema.WithSchema(s)) if len(specDirs) > 0 { cache, err := cdi.NewCache( diff --git a/cmd/cdi/go.mod b/cmd/cdi/go.mod index c9356145..cf29afe5 100644 --- a/cmd/cdi/go.mod +++ b/cmd/cdi/go.mod @@ -9,6 +9,7 @@ require ( github.com/spf13/cobra v1.6.0 sigs.k8s.io/yaml v1.3.0 tags.cncf.io/container-device-interface v0.0.0 + tags.cncf.io/container-device-interface/schema v0.0.0 ) require ( @@ -25,6 +26,8 @@ require ( tags.cncf.io/container-device-interface/specs-go v0.8.0 // indirect ) -replace tags.cncf.io/container-device-interface => ../.. - -replace tags.cncf.io/container-device-interface/specs-go => ../../specs-go +replace ( + tags.cncf.io/container-device-interface => ../.. + tags.cncf.io/container-device-interface/schema => ../../schema + tags.cncf.io/container-device-interface/specs-go => ../../specs-go +) diff --git a/cmd/validate/go.mod b/cmd/validate/go.mod index 1d5c8701..14ce556d 100644 --- a/cmd/validate/go.mod +++ b/cmd/validate/go.mod @@ -2,16 +2,21 @@ module tags.cncf.io/container-device-interface/cmd/validate go 1.20 -require tags.cncf.io/container-device-interface v0.0.0 +require tags.cncf.io/container-device-interface/schema v0.0.0 require ( github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f // indirect github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect github.com/xeipuuv/gojsonschema v1.2.0 // indirect + golang.org/x/mod v0.19.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect sigs.k8s.io/yaml v1.3.0 // indirect + tags.cncf.io/container-device-interface v0.0.0 // indirect + tags.cncf.io/container-device-interface/specs-go v0.8.0 // indirect ) -replace tags.cncf.io/container-device-interface => ../.. - -replace tags.cncf.io/container-device-interface/specs-go => ../../specs-go +replace ( + tags.cncf.io/container-device-interface => ../.. + tags.cncf.io/container-device-interface/schema => ../../schema + tags.cncf.io/container-device-interface/specs-go => ../../specs-go +) diff --git a/cmd/validate/go.sum b/cmd/validate/go.sum index dabe4784..9f83b553 100644 --- a/cmd/validate/go.sum +++ b/cmd/validate/go.sum @@ -17,6 +17,7 @@ github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1: github.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17UxZ74= github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= golang.org/x/mod v0.19.0 h1:fEdghXQSo20giMthA7cd28ZC+jts4amQ3YMXiP5oMQ8= +golang.org/x/mod v0.19.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= diff --git a/go.mod b/go.mod index 6251be87..1b147528 100644 --- a/go.mod +++ b/go.mod @@ -7,7 +7,6 @@ require ( github.com/opencontainers/runtime-spec v1.1.0 github.com/opencontainers/runtime-tools v0.9.1-0.20221107090550-2e043c6bd626 github.com/stretchr/testify v1.7.0 - github.com/xeipuuv/gojsonschema v1.2.0 golang.org/x/sys v0.19.0 sigs.k8s.io/yaml v1.3.0 tags.cncf.io/container-device-interface/specs-go v0.8.0 @@ -17,8 +16,6 @@ require ( github.com/davecgh/go-spew v1.1.1 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635 // indirect - github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f // indirect - github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect golang.org/x/mod v0.19.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/pkg/cdi/cache_test.go b/pkg/cdi/cache_test.go index 3c655116..594785d9 100644 --- a/pkg/cdi/cache_test.go +++ b/pkg/cdi/cache_test.go @@ -30,7 +30,6 @@ import ( oci "github.com/opencontainers/runtime-spec/specs-go" "github.com/stretchr/testify/require" "sigs.k8s.io/yaml" - "tags.cncf.io/container-device-interface/pkg/cdi/validate" cdi "tags.cncf.io/container-device-interface/specs-go" ) @@ -1559,8 +1558,6 @@ containerEdits: other *Cache ) - SetSpecValidator(validate.WithNamedSchema("builtin")) - if len(tc.invalid) != 0 { dir, err = createSpecDirs(t, nil, nil) require.NoError(t, err) diff --git a/pkg/cdi/spec.go b/pkg/cdi/spec.go index f0231d81..53aa24a7 100644 --- a/pkg/cdi/spec.go +++ b/pkg/cdi/spec.go @@ -37,9 +37,13 @@ const ( defaultSpecExt = ".yaml" ) +type validator interface { + Validate(*cdi.Spec) error +} + var ( // Externally set CDI Spec validation function. - specValidator func(*cdi.Spec) error + specValidator validator validatorLock sync.RWMutex ) @@ -236,6 +240,9 @@ func (s *Spec) validate() (map[string]*Device, error) { } devices[d.Name] = dev } + if len(devices) == 0 { + return nil, fmt.Errorf("invalid spec, no devices") + } return devices, nil } @@ -253,10 +260,10 @@ func ParseSpec(data []byte) (*cdi.Spec, error) { // SetSpecValidator sets a CDI Spec validator function. This function // is used for extra CDI Spec content validation whenever a Spec file // loaded (using ReadSpec() or written (using WriteSpec()). -func SetSpecValidator(fn func(*cdi.Spec) error) { +func SetSpecValidator(v validator) { validatorLock.Lock() defer validatorLock.Unlock() - specValidator = fn + specValidator = v } // validateSpec validates the Spec using the extneral validator. @@ -267,7 +274,7 @@ func validateSpec(raw *cdi.Spec) error { if specValidator == nil { return nil } - err := specValidator(raw) + err := specValidator.Validate(raw) if err != nil { return fmt.Errorf("Spec validation failed: %w", err) } diff --git a/pkg/cdi/spec_test.go b/pkg/cdi/spec_test.go index 649d2237..89028ac2 100644 --- a/pkg/cdi/spec_test.go +++ b/pkg/cdi/spec_test.go @@ -26,9 +26,7 @@ import ( "sigs.k8s.io/yaml" "github.com/stretchr/testify/require" - "tags.cncf.io/container-device-interface/pkg/cdi/validate" "tags.cncf.io/container-device-interface/pkg/parser" - "tags.cncf.io/container-device-interface/schema" cdi "tags.cncf.io/container-device-interface/specs-go" ) @@ -353,9 +351,6 @@ devices: dir, err := mkTestDir(t, nil) require.NoError(t, err) - SetSpecValidator(validate.WithDefaultSchema()) - defer SetSpecValidator(validate.WithSchema(schema.NopSchema())) - t.Run(tc.name, func(t *testing.T) { var ( raw = &cdi.Spec{} diff --git a/schema/go.mod b/schema/go.mod new file mode 100644 index 00000000..379f1ec4 --- /dev/null +++ b/schema/go.mod @@ -0,0 +1,31 @@ +module tags.cncf.io/container-device-interface/schema + +go 1.20 + +require ( + github.com/stretchr/testify v1.7.0 + github.com/xeipuuv/gojsonschema v1.2.0 + sigs.k8s.io/yaml v1.3.0 + tags.cncf.io/container-device-interface v0.0.0 + tags.cncf.io/container-device-interface/specs-go v0.8.0 +) + +require ( + github.com/davecgh/go-spew v1.1.1 // indirect + github.com/fsnotify/fsnotify v1.5.1 // indirect + github.com/opencontainers/runtime-spec v1.1.0 // indirect + github.com/opencontainers/runtime-tools v0.9.1-0.20221107090550-2e043c6bd626 // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect + github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635 // indirect + github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f // indirect + github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect + golang.org/x/mod v0.19.0 // indirect + golang.org/x/sys v0.19.0 // indirect + gopkg.in/yaml.v2 v2.4.0 // indirect + gopkg.in/yaml.v3 v3.0.1 // indirect +) + +replace ( + tags.cncf.io/container-device-interface => ../ + tags.cncf.io/container-device-interface/specs-go => ../specs-go +) diff --git a/schema/go.sum b/schema/go.sum new file mode 100644 index 00000000..cd6e3810 --- /dev/null +++ b/schema/go.sum @@ -0,0 +1,55 @@ +github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM= +github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/fsnotify/fsnotify v1.5.1 h1:mZcQUHVQUQWoPXXtuf9yuEXKudkV2sx1E06UadKWpgI= +github.com/fsnotify/fsnotify v1.5.1/go.mod h1:T3375wBYaZdLLcVNkcVbzGHY7f1l/uK5T5Ai1i3InKU= +github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA= +github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= +github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= +github.com/mndrix/tap-go v0.0.0-20171203230836-629fa407e90b/go.mod h1:pzzDgJWZ34fGzaAZGFW22KVZDfyrYW+QABMrWnJBnSs= +github.com/mrunalp/fileutils v0.5.0/go.mod h1:M1WthSahJixYnrXQl/DFQuteStB1weuxD2QJNHXfbSQ= +github.com/opencontainers/runtime-spec v1.0.3-0.20220825212826-86290f6a00fb/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/runtime-spec v1.1.0 h1:HHUyrt9mwHUjtasSbXSMvs4cyFxh+Bll4AjJ9odEGpg= +github.com/opencontainers/runtime-spec v1.1.0/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= +github.com/opencontainers/runtime-tools v0.9.1-0.20221107090550-2e043c6bd626 h1:DmNGcqH3WDbV5k8OJ+esPWbqUOX5rMLR2PMvziDMJi0= +github.com/opencontainers/runtime-tools v0.9.1-0.20221107090550-2e043c6bd626/go.mod h1:BRHJJd0E+cx42OybVYSgUvZmU0B8P9gZuRXlZUP7TKI= +github.com/opencontainers/selinux v1.9.1 h1:b4VPEF3O5JLZgdTDBmGepaaIbAo0GqoF6EBRq5f/g3Y= +github.com/opencontainers/selinux v1.9.1/go.mod h1:2i0OySw99QjzBBQByd1Gr9gSjvuho1lHsJxIJ3gGbJI= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE= +github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635 h1:kdXcSzyDtseVEc4yCz2qF8ZrQvIDBJLl4S1c3GCXmoI= +github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= +github.com/urfave/cli v1.19.1/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= +github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f h1:J9EGpcZtP0E/raorCMxlFGSTBrsSlaDGf3jU/qvAE2c= +github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU= +github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0= +github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= +github.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17UxZ74= +github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= +golang.org/x/mod v0.19.0 h1:fEdghXQSo20giMthA7cd28ZC+jts4amQ3YMXiP5oMQ8= +golang.org/x/mod v0.19.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20191115151921-52ab43148777/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.19.0 h1:q5f1RH2jigJ1MoAWp2KTp3gm5zAGFUTarQZ5U386+4o= +golang.org/x/sys v0.19.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= +gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= +sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= diff --git a/schema/schema.go b/schema/schema.go index 6a582ca1..a6b00305 100644 --- a/schema/schema.go +++ b/schema/schema.go @@ -32,6 +32,7 @@ import ( schema "github.com/xeipuuv/gojsonschema" "tags.cncf.io/container-device-interface/internal/validation" + cdi "tags.cncf.io/container-device-interface/specs-go" ) const ( @@ -48,6 +49,15 @@ type Schema struct { schema *schema.Schema } +// Validate applies a schema validation on the supplied CDI specification. +// If the Schema is nil, no validation is performed. +func (s *Schema) Validate(spec *cdi.Spec) error { + if s == nil { + return nil + } + return s.ValidateType(spec) +} + // Error wraps a JSON validation result. type Error struct { Result *schema.Result @@ -96,9 +106,9 @@ func ReadAndValidate(r io.Reader) ([]byte, error) { return current.ReadAndValidate(r) } -// Validate validates the data read from an io.Reader against the active schema. -func Validate(r io.Reader) error { - return current.Validate(r) +// ValidateReader validates the data read from an io.Reader against the active schema. +func ValidateReader(r io.Reader) error { + return current.ValidateReader(r) } // ValidateData validates the given JSON document against the active schema. @@ -165,8 +175,8 @@ func (s *Schema) ReadAndValidate(r io.Reader) ([]byte, error) { return data, s.validate(loader) } -// Validate validates the data read from an io.Reader against the schema. -func (s *Schema) Validate(r io.Reader) error { +// ValidateReader validates the data read from an io.Reader against the schema. +func (s *Schema) ValidateReader(r io.Reader) error { _, err := s.ReadAndValidate(r) return err } diff --git a/schema/schema_test.go b/schema/schema_test.go index e382edc4..6198a79d 100644 --- a/schema/schema_test.go +++ b/schema/schema_test.go @@ -298,9 +298,9 @@ func readAndValidate(t *testing.T, scm *schema.Schema, path string, shouldLoad, verifyResult(t, scm, err, shouldLoad, isValid) if scm != nil { - err = scm.Validate(bytes.NewReader(data)) + err = scm.ValidateReader(bytes.NewReader(data)) } else { - err = schema.Validate(bytes.NewReader(data)) + err = schema.ValidateReader(bytes.NewReader(data)) } verifyResult(t, scm, err, shouldLoad, isValid) @@ -315,17 +315,17 @@ func validateRead(t *testing.T, scm *schema.Schema, path string, shouldLoad, isV r := io.TeeReader(f, buf) if scm != nil { - err = scm.Validate(r) + err = scm.ValidateReader(r) } else { - err = schema.Validate(r) + err = schema.ValidateReader(r) } verifyResult(t, scm, err, shouldLoad, isValid) if scm != nil { - err = scm.Validate(bytes.NewReader(buf.Bytes())) + err = scm.ValidateReader(bytes.NewReader(buf.Bytes())) } else { - err = schema.Validate(bytes.NewReader(buf.Bytes())) + err = schema.ValidateReader(bytes.NewReader(buf.Bytes())) } verifyResult(t, scm, err, shouldLoad, isValid) diff --git a/pkg/cdi/validate/schema.go b/schema/validate.go similarity index 68% rename from pkg/cdi/validate/schema.go rename to schema/validate.go index 8244ada3..b8dd8912 100644 --- a/pkg/cdi/validate/schema.go +++ b/schema/validate.go @@ -14,12 +14,7 @@ limitations under the License. */ -package validate - -import ( - "tags.cncf.io/container-device-interface/schema" - cdi "tags.cncf.io/container-device-interface/specs-go" -) +package schema const ( // DefaultExternalSchema is the default JSON schema to load for validation. @@ -27,32 +22,25 @@ const ( ) // WithSchema returns a CDI Spec validator that uses the given Schema. -func WithSchema(s *schema.Schema) func(*cdi.Spec) error { - if s == nil { - return func(*cdi.Spec) error { - return nil - } - } - return func(spec *cdi.Spec) error { - return s.ValidateType(spec) - } +func WithSchema(s *Schema) *Schema { + return s } // WithNamedSchema loads the named JSON schema and returns a CDI Spec // validator for it. If loading the schema fails a dummy validator is // returned. -func WithNamedSchema(name string) func(*cdi.Spec) error { - s, _ := schema.Load(name) +func WithNamedSchema(name string) *Schema { + s, _ := Load(name) return WithSchema(s) } // WithDefaultSchema returns a CDI Spec validator that uses the default // external JSON schema, or the default builtin one if the external one // fails to load. -func WithDefaultSchema() func(*cdi.Spec) error { - s, err := schema.Load(DefaultExternalSchema) +func WithDefaultSchema() *Schema { + s, err := Load(DefaultExternalSchema) if err == nil { return WithSchema(s) } - return WithSchema(schema.BuiltinSchema()) + return BuiltinSchema() }