Skip to content

Commit a080ed4

Browse files
authored
CLOUDP-358677: Remove crapi internal schema validation (#2948)
1 parent 87b385e commit a080ed4

File tree

6 files changed

+4
-78
lines changed

6 files changed

+4
-78
lines changed

go.mod

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ require (
3131
github.com/nsf/jsondiff v0.0.0-20230430225905-43f6cf3098c1
3232
github.com/onsi/ginkgo/v2 v2.27.2
3333
github.com/onsi/gomega v1.38.2
34-
github.com/santhosh-tekuri/jsonschema/v5 v5.3.1
3534
github.com/sethvargo/go-password v0.3.1
3635
github.com/stretchr/testify v1.11.1
3736
github.com/yudai/gojsondiff v1.0.0

go.sum

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -318,8 +318,6 @@ github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoG
318318
github.com/rogpeppe/go-internal v1.14.1 h1:UQB4HGPB6osV0SQTLymcB4TgvyWu6ZyliaW0tI/otEQ=
319319
github.com/rogpeppe/go-internal v1.14.1/go.mod h1:MaRKkUm5W0goXpeCfT7UZI6fk/L7L7so1lCWt35ZSgc=
320320
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
321-
github.com/santhosh-tekuri/jsonschema/v5 v5.3.1 h1:lZUw3E0/J3roVtGQ+SCrUrg3ON6NgVqpn3+iol9aGu4=
322-
github.com/santhosh-tekuri/jsonschema/v5 v5.3.1/go.mod h1:uToXkOrWAZ6/Oc07xWQrPOhJotwFIyu2bBVN41fcDUY=
323321
github.com/sergi/go-diff v1.4.0 h1:n/SP9D5ad1fORl+llWyN+D6qoUETXNZARKjyY2/KVCw=
324322
github.com/sergi/go-diff v1.4.0/go.mod h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4=
325323
github.com/sethvargo/go-password v0.3.1 h1:WqrLTjo7X6AcVYfC6R7GtSyuUQR9hGyAj/f1PYQZCJU=

internal/crapi/crapi.go

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,6 @@ type Translator interface {
3737

3838
// Mappings returns all the OpenAPi custom reference extensions, or an error
3939
Mappings() ([]*refs.Mapping, error)
40-
41-
// Validate checks the given unsttructured object complies with the translated schema
42-
Validate(unstructuredObj map[string]any) error
4340
}
4441

4542
// Request holds common parameters for all translation request
@@ -72,9 +69,6 @@ func ToAPI[T any](r *Request, target *T, source client.Object) error {
7269
if err != nil {
7370
return fmt.Errorf("failed to convert k8s source value to unstructured: %w", err)
7471
}
75-
if err := r.Translator.Validate(unstructuredSrc); err != nil {
76-
return fmt.Errorf("failed to validate unstructured object input: %w", err)
77-
}
7872
targetUnstructured := map[string]any{}
7973

8074
if err := collapseReferences(r, unstructuredSrc, source); err != nil {
@@ -140,9 +134,6 @@ func FromAPI[S any, T any, P refs.PtrClientObj[T]](r *Request, target P, source
140134
if err != nil {
141135
return nil, fmt.Errorf("failed to process API mappings: %w", err)
142136
}
143-
if err := r.Translator.Validate(targetUnstructured); err != nil {
144-
return nil, fmt.Errorf("failed to validate unstructured object output: %w", err)
145-
}
146137
if err := unstructured.FromUnstructured(target, targetUnstructured); err != nil {
147138
return nil, fmt.Errorf("failed set structured kubernetes object from unstructured: %w", err)
148139
}

internal/crapi/crds/crds.go

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -15,11 +15,8 @@
1515
package crds
1616

1717
import (
18-
"bytes"
19-
"encoding/json"
2018
"fmt"
2119

22-
"github.com/santhosh-tekuri/jsonschema/v5"
2320
apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
2421
)
2522

@@ -41,25 +38,6 @@ func AssertMajorVersion(specVersion *apiextensionsv1.CustomResourceDefinitionVer
4138
return nil
4239
}
4340

44-
// CompileCRDSchema compiles the given JSON properties as a type schema.
45-
// Enables validating whether or not some JSON or unstructured data comforms
46-
// with such type schema.
47-
func CompileCRDSchema(openAPISchema *apiextensionsv1.JSONSchemaProps) (*jsonschema.Schema, error) {
48-
schemaBytes, err := json.Marshal(openAPISchema)
49-
if err != nil {
50-
return nil, fmt.Errorf("failed to marshal CRD schema to JSON: %w", err)
51-
}
52-
compiler := jsonschema.NewCompiler()
53-
if err := compiler.AddResource("schema.json", bytes.NewReader(schemaBytes)); err != nil {
54-
return nil, fmt.Errorf("failed to add schema resource: %w", err)
55-
}
56-
schema, err := compiler.Compile("schema.json")
57-
if err != nil {
58-
return nil, fmt.Errorf("failed to compile schema: %w", err)
59-
}
60-
return schema, nil
61-
}
62-
6341
// SelectVersion extracts the CRD version definition matching the given version.
6442
func SelectVersion(spec *apiextensionsv1.CustomResourceDefinitionSpec, version string) *apiextensionsv1.CustomResourceDefinitionVersion {
6543
if len(spec.Versions) == 0 {

internal/crapi/crds/crds_test.go

Lines changed: 0 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -15,37 +15,14 @@
1515
package crds_test
1616

1717
import (
18-
"bufio"
19-
"bytes"
2018
"testing"
2119

22-
"github.com/stretchr/testify/assert"
2320
"github.com/stretchr/testify/require"
2421
apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
2522

2623
"github.com/mongodb/mongodb-atlas-kubernetes/v2/internal/crapi/crds"
27-
"github.com/mongodb/mongodb-atlas-kubernetes/v2/internal/crapi/testdata"
2824
)
2925

30-
const (
31-
expectedVersion = "v1"
32-
)
33-
34-
func TestParseAssertAndCompile(t *testing.T) {
35-
scanner := bufio.NewScanner(bytes.NewBuffer(testdata.SampleCRDs))
36-
for range 2 { // CRDs sample file has at least 2 CRDs
37-
def, err := crds.Parse(scanner)
38-
require.NoError(t, err)
39-
assert.NotNil(t, def)
40-
kind := def.Spec.Names.Kind
41-
specVersion := crds.SelectVersion(&def.Spec, expectedVersion)
42-
crds.AssertMajorVersion(specVersion, kind, expectedVersion)
43-
schema, err := crds.CompileCRDSchema(specVersion.Schema.OpenAPIV3Schema)
44-
require.NoError(t, err)
45-
assert.NotNil(t, schema)
46-
}
47-
}
48-
4926
func TestSelectVersion(t *testing.T) {
5027
// Define some sample versions to be reused in the tests
5128
v1 := apiextensionsv1.CustomResourceDefinitionVersion{Name: "v1", Served: true}

internal/crapi/translator.go

Lines changed: 4 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ import (
2020
"fmt"
2121

2222
"github.com/getkin/kin-openapi/openapi3"
23-
"github.com/santhosh-tekuri/jsonschema/v5"
2423
apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
2524
"sigs.k8s.io/yaml"
2625

@@ -31,9 +30,8 @@ import (
3130
// translator implements Translator to translate from a given CRD to and from
3231
// a given SDK version using the same upstream OpenAPI schema
3332
type translator struct {
34-
majorVersion string
35-
validationSchema *jsonschema.Schema
36-
mappingSchema *openapi3.SchemaRef
33+
majorVersion string
34+
mappingSchema *openapi3.SchemaRef
3735
}
3836

3937
// Annotation returns the annotation value from the pinned translated schema
@@ -60,16 +58,6 @@ func (tr *translator) MajorVersion() string {
6058
return tr.majorVersion
6159
}
6260

63-
// Validate would return any errors of the given unstructured object against the
64-
// pinned schema version being translated, or nil if the object is compliant
65-
func (tr *translator) Validate(unstructuredObj map[string]any) error {
66-
// This correctly uses the validator from crds.CompileCRDSchema
67-
if err := tr.validationSchema.Validate(unstructuredObj); err != nil {
68-
return fmt.Errorf("object validation failed against CRD schema: %w", err)
69-
}
70-
return nil
71-
}
72-
7361
// NewTranslator creates a translator for a particular CRD version. It is also
7462
// locked into a particular API majorVersion.
7563
//
@@ -88,10 +76,6 @@ func NewTranslator(crd *apiextensionsv1.CustomResourceDefinition, crdVersion str
8876
if err := crds.AssertMajorVersion(specVersion, crd.Spec.Names.Kind, majorVersion); err != nil {
8977
return nil, fmt.Errorf("failed to assert major version %s in CRD: %w", majorVersion, err)
9078
}
91-
validationSchema, err := crds.CompileCRDSchema(specVersion.Schema.OpenAPIV3Schema)
92-
if err != nil {
93-
return nil, fmt.Errorf("failed to compile schema for validation: %w", err)
94-
}
9579
var mappingSchema openapi3.Schema
9680
mappingString, ok := crd.Annotations["api-mappings"]
9781
if ok && mappingString != "" {
@@ -105,8 +89,7 @@ func NewTranslator(crd *apiextensionsv1.CustomResourceDefinition, crdVersion str
10589
}
10690

10791
return &translator{
108-
majorVersion: majorVersion,
109-
validationSchema: validationSchema,
110-
mappingSchema: &openapi3.SchemaRef{Value: &mappingSchema},
92+
majorVersion: majorVersion,
93+
mappingSchema: &openapi3.SchemaRef{Value: &mappingSchema},
11194
}, nil
11295
}

0 commit comments

Comments
 (0)