Skip to content

Commit 118ffa7

Browse files
authored
chore: remove unused code from apischema package (#87)
1 parent e8a0965 commit 118ffa7

File tree

5 files changed

+5
-468
lines changed

5 files changed

+5
-468
lines changed

listener/pkg/apischema/builder.go

Lines changed: 0 additions & 42 deletions
Original file line numberDiff line numberDiff line change
@@ -133,35 +133,6 @@ func (b *SchemaBuilder) WithScope(rm meta.RESTMapper) *SchemaBuilder {
133133
return b
134134
}
135135

136-
func (b *SchemaBuilder) WithCRDCategories(crd *apiextensionsv1.CustomResourceDefinition) *SchemaBuilder {
137-
if crd == nil {
138-
return b
139-
}
140-
141-
categories := crd.Spec.Names.Categories
142-
if len(categories) == 0 {
143-
return b
144-
}
145-
146-
gvk, err := getCRDGroupVersionKind(crd.Spec)
147-
if err != nil {
148-
b.err = multierror.Append(b.err, errors.Join(ErrGetCRDGVK, err))
149-
return b
150-
}
151-
152-
for _, v := range crd.Spec.Versions {
153-
resourceKey := getOpenAPISchemaKey(metav1.GroupVersionKind{Group: gvk.Group, Version: v.Name, Kind: gvk.Kind})
154-
resourceSchema, ok := b.schemas[resourceKey]
155-
if !ok {
156-
continue
157-
}
158-
159-
resourceSchema.VendorExtensible.AddExtension(common.CategoriesExtensionKey, categories)
160-
b.schemas[resourceKey] = resourceSchema
161-
}
162-
return b
163-
}
164-
165136
func (b *SchemaBuilder) WithApiResourceCategories(list []*metav1.APIResourceList) *SchemaBuilder {
166137
if len(list) == 0 {
167138
return b
@@ -561,16 +532,3 @@ func getOpenAPISchemaKey(gvk metav1.GroupVersionKind) string {
561532

562533
return fmt.Sprintf("%s.%s.%s", reversedGroup, gvk.Version, gvk.Kind)
563534
}
564-
565-
func getCRDGroupVersionKind(spec apiextensionsv1.CustomResourceDefinitionSpec) (*metav1.GroupVersionKind, error) {
566-
if len(spec.Versions) == 0 {
567-
return nil, ErrCRDNoVersions
568-
}
569-
570-
// Use the first stored version as the preferred one
571-
return &metav1.GroupVersionKind{
572-
Group: spec.Group,
573-
Version: spec.Versions[0].Name,
574-
Kind: spec.Names.Kind,
575-
}, nil
576-
}

listener/pkg/apischema/builder_test.go

Lines changed: 0 additions & 109 deletions
Original file line numberDiff line numberDiff line change
@@ -40,52 +40,6 @@ func TestGetOpenAPISchemaKey(t *testing.T) {
4040
}
4141
}
4242

43-
// TestGetCRDGroupVersionKind tests the getCRDGroupVersionKind function. It checks if the
44-
// function correctly extracts the GroupVersionKind from the CRD spec and handles errors.
45-
func TestGetCRDGroupVersionKind(t *testing.T) {
46-
tests := []struct {
47-
name string
48-
spec apiextensionsv1.CustomResourceDefinitionSpec
49-
want *metav1.GroupVersionKind
50-
wantErr error
51-
}{
52-
{
53-
name: "has_versions",
54-
spec: apiextensionsv1.CustomResourceDefinitionSpec{
55-
Group: "test.group",
56-
Versions: []apiextensionsv1.CustomResourceDefinitionVersion{
57-
{Name: "v1beta1"},
58-
{Name: "v1"},
59-
},
60-
Names: apiextensionsv1.CustomResourceDefinitionNames{Kind: "Foo"},
61-
},
62-
want: &metav1.GroupVersionKind{Group: "test.group", Version: "v1beta1", Kind: "Foo"},
63-
wantErr: nil,
64-
},
65-
{
66-
name: "no_versions",
67-
spec: apiextensionsv1.CustomResourceDefinitionSpec{
68-
Group: "empty.group",
69-
Versions: []apiextensionsv1.CustomResourceDefinitionVersion{},
70-
Names: apiextensionsv1.CustomResourceDefinitionNames{Kind: "Bar"},
71-
},
72-
want: nil,
73-
wantErr: apischema.ErrCRDNoVersions,
74-
},
75-
}
76-
77-
for _, tc := range tests {
78-
t.Run(tc.name, func(t *testing.T) {
79-
got, err := apischema.GetCRDGroupVersionKind(tc.spec)
80-
assert.Equal(t, tc.wantErr, err, "error value mismatch")
81-
if tc.wantErr != nil {
82-
return
83-
}
84-
assert.Equal(t, tc.want, got, "result value mismatch")
85-
})
86-
}
87-
}
88-
8943
// TestNewSchemaBuilder tests the NewSchemaBuilder function. It checks if the
9044
// SchemaBuilder is correctly initialized with the expected number of schemas
9145
// and the expected schema key.
@@ -150,69 +104,6 @@ func TestNewSchemaBuilder(t *testing.T) {
150104
}
151105
}
152106

153-
// TestWithCRDCategories tests the WithCRDCategories method
154-
// for the SchemaBuilder struct. It checks if the categories are correctly added
155-
// to the schema's extensions.
156-
func TestWithCRDCategories(t *testing.T) {
157-
tests := []struct {
158-
name string
159-
key string
160-
crd *apiextensionsv1.CustomResourceDefinition
161-
wantCats []string
162-
}{
163-
{
164-
name: "adds_categories",
165-
key: "g.v1.K",
166-
crd: &apiextensionsv1.CustomResourceDefinition{
167-
Spec: apiextensionsv1.CustomResourceDefinitionSpec{
168-
Group: "g",
169-
Versions: []apiextensionsv1.CustomResourceDefinitionVersion{{Name: "v1"}},
170-
Names: apiextensionsv1.CustomResourceDefinitionNames{
171-
Kind: "K",
172-
Categories: []string{"cat1", "cat2"},
173-
},
174-
},
175-
},
176-
wantCats: []string{"cat1", "cat2"},
177-
},
178-
{
179-
name: "no_categories",
180-
key: "g.v1.K",
181-
crd: &apiextensionsv1.CustomResourceDefinition{
182-
Spec: apiextensionsv1.CustomResourceDefinitionSpec{
183-
Group: "g",
184-
Versions: []apiextensionsv1.CustomResourceDefinitionVersion{{Name: "v1"}},
185-
Names: apiextensionsv1.CustomResourceDefinitionNames{
186-
Kind: "K",
187-
},
188-
},
189-
},
190-
wantCats: nil,
191-
},
192-
}
193-
for _, tc := range tests {
194-
t.Run(tc.name, func(t *testing.T) {
195-
mock := apischemaMocks.NewMockClient(t)
196-
mock.EXPECT().Paths().Return(map[string]openapi.GroupVersion{}, nil)
197-
b := apischema.NewSchemaBuilder(mock, nil, testlogger.New().Logger)
198-
b.SetSchemas(map[string]*spec.Schema{
199-
tc.key: {VendorExtensible: spec.VendorExtensible{Extensions: map[string]interface{}{}}},
200-
})
201-
b.WithCRDCategories(tc.crd)
202-
ext, found := b.GetSchemas()[tc.key].VendorExtensible.Extensions[common.CategoriesExtensionKey]
203-
if tc.wantCats == nil {
204-
assert.False(t, found, "expected no categories")
205-
return
206-
}
207-
assert.True(t, found, "expected CategoriesExtensionKey to be set")
208-
cats, ok := ext.([]string)
209-
assert.True(t, ok, "categories should be []string")
210-
assert.Equal(t, len(tc.wantCats), len(cats))
211-
assert.Equal(t, tc.wantCats, cats, "categories mismatch")
212-
})
213-
}
214-
}
215-
216107
// TestWithApiResourceCategories tests the WithApiResourceCategories method
217108
// for the SchemaBuilder struct. It checks if the categories are correctly added
218109
// to the schema's extensions.

listener/pkg/apischema/crd_resolver.go

Lines changed: 5 additions & 135 deletions
Original file line numberDiff line numberDiff line change
@@ -7,31 +7,21 @@ import (
77
"strings"
88

99
"github.com/platform-mesh/golang-commons/logger"
10-
apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
11-
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
1210

1311
"k8s.io/apimachinery/pkg/api/meta"
14-
"k8s.io/apimachinery/pkg/runtime/schema"
1512
"k8s.io/client-go/discovery"
1613
"k8s.io/client-go/openapi"
1714
"k8s.io/kube-openapi/pkg/validation/spec"
1815
)
1916

2017
var (
21-
ErrInvalidPath = errors.New("path doesn't contain the / separator")
22-
ErrNotPreferred = errors.New("path ApiGroup does not belong to the server preferred APIs")
23-
ErrGVKNotPreferred = errors.New("failed to find CRD GVK in API preferred resources")
24-
ErrGetServerPreferred = errors.New("failed to get server preferred resources")
25-
ErrFilterPreferredResources = errors.New("failed to filter server preferred resources")
26-
ErrGetSchemaForPath = errors.New("failed to get schema for path")
27-
ErrUnmarshalSchemaForPath = errors.New("failed to unmarshal schema for path")
18+
ErrInvalidPath = errors.New("path doesn't contain the / separator")
19+
ErrNotPreferred = errors.New("path ApiGroup does not belong to the server preferred APIs")
20+
ErrGetServerPreferred = errors.New("failed to get server preferred resources")
21+
ErrGetSchemaForPath = errors.New("failed to get schema for path")
22+
ErrUnmarshalSchemaForPath = errors.New("failed to unmarshal schema for path")
2823
)
2924

30-
type GroupKindVersions struct {
31-
*metav1.GroupKind
32-
Versions []string
33-
}
34-
3525
type CRDResolver struct {
3626
discovery.DiscoveryInterface
3727
meta.RESTMapper
@@ -51,126 +41,6 @@ func (cr *CRDResolver) Resolve(dc discovery.DiscoveryInterface, rm meta.RESTMapp
5141
return cr.resolveSchema(dc, rm)
5242
}
5343

54-
func (cr *CRDResolver) ResolveApiSchema(crd *apiextensionsv1.CustomResourceDefinition) ([]byte, error) {
55-
gkv := getCRDGroupKindVersions(crd.Spec)
56-
57-
apiResLists, err := cr.ServerPreferredResources()
58-
if err != nil {
59-
cr.log.Error().Err(err).
60-
Str("crdName", crd.Name).
61-
Str("group", gkv.Group).
62-
Str("kind", gkv.Kind).
63-
Msg("failed to get server preferred resources")
64-
return nil, errors.Join(ErrGetServerPreferred, err)
65-
}
66-
67-
preferredApiGroups, err := cr.errorIfCRDNotInPreferredApiGroups(gkv, apiResLists)
68-
if err != nil {
69-
cr.log.Error().Err(err).
70-
Str("crdName", crd.Name).
71-
Str("group", gkv.Group).
72-
Str("kind", gkv.Kind).
73-
Msg("failed to filter preferred resources")
74-
return nil, errors.Join(ErrFilterPreferredResources, err)
75-
}
76-
77-
result, err := NewSchemaBuilder(cr.OpenAPIV3(), preferredApiGroups, cr.log).
78-
WithScope(cr.RESTMapper).
79-
WithPreferredVersions(apiResLists).
80-
WithCRDCategories(crd).
81-
WithRelationships().
82-
Complete()
83-
84-
if err != nil {
85-
cr.log.Error().Err(err).
86-
Str("crdName", crd.Name).
87-
Int("preferredApiGroupsCount", len(preferredApiGroups)).
88-
Msg("failed to complete schema building")
89-
return nil, err
90-
}
91-
92-
cr.log.Debug().
93-
Str("crdName", crd.Name).
94-
Str("group", gkv.Group).
95-
Str("kind", gkv.Kind).
96-
Msg("successfully resolved API schema")
97-
98-
return result, nil
99-
}
100-
101-
func (cr *CRDResolver) errorIfCRDNotInPreferredApiGroups(gkv *GroupKindVersions, apiResLists []*metav1.APIResourceList) ([]string, error) {
102-
isKindFound := false
103-
preferredApiGroups := make([]string, 0, len(apiResLists))
104-
105-
for _, apiResources := range apiResLists {
106-
gv, err := schema.ParseGroupVersion(apiResources.GroupVersion)
107-
if err != nil {
108-
cr.log.Error().Err(err).
109-
Str("groupVersion", apiResources.GroupVersion).
110-
Str("targetGroup", gkv.Group).
111-
Str("targetKind", gkv.Kind).
112-
Msg("failed to parse group version")
113-
continue
114-
}
115-
116-
isGroupFound := gkv.Group == gv.Group
117-
isVersionFound := slices.Contains(gkv.Versions, gv.Version)
118-
119-
if isGroupFound && isVersionFound && !isKindFound {
120-
isKindFound = isCRDKindIncluded(gkv, apiResources)
121-
cr.log.Debug().
122-
Str("groupVersion", apiResources.GroupVersion).
123-
Str("targetGroup", gkv.Group).
124-
Str("targetKind", gkv.Kind).
125-
Bool("kindFound", isKindFound).
126-
Msg("checking if CRD kind is included in preferred APIs")
127-
}
128-
129-
preferredApiGroups = append(preferredApiGroups, apiResources.GroupVersion)
130-
}
131-
132-
if !isKindFound {
133-
cr.log.Warn().
134-
Str("group", gkv.Group).
135-
Str("kind", gkv.Kind).
136-
Strs("versions", gkv.Versions).
137-
Int("checkedApiGroups", len(preferredApiGroups)).
138-
Msg("CRD kind not found in preferred API resources")
139-
return nil, ErrGVKNotPreferred
140-
}
141-
142-
cr.log.Debug().
143-
Str("group", gkv.Group).
144-
Str("kind", gkv.Kind).
145-
Int("preferredApiGroupsCount", len(preferredApiGroups)).
146-
Msg("successfully found CRD in preferred API groups")
147-
148-
return preferredApiGroups, nil
149-
}
150-
151-
func isCRDKindIncluded(gvk *GroupKindVersions, apiResources *metav1.APIResourceList) bool {
152-
for _, res := range apiResources.APIResources {
153-
if res.Kind == gvk.Kind {
154-
return true
155-
}
156-
}
157-
return false
158-
}
159-
160-
func getCRDGroupKindVersions(spec apiextensionsv1.CustomResourceDefinitionSpec) *GroupKindVersions {
161-
versions := make([]string, 0, len(spec.Versions))
162-
for _, v := range spec.Versions {
163-
versions = append(versions, v.Name)
164-
}
165-
return &GroupKindVersions{
166-
GroupKind: &metav1.GroupKind{
167-
Group: spec.Group,
168-
Kind: spec.Names.Kind,
169-
},
170-
Versions: versions,
171-
}
172-
}
173-
17444
func getSchemaForPath(preferredApiGroups []string, path string, gv openapi.GroupVersion) (map[string]*spec.Schema, error) {
17545
if !strings.Contains(path, separator) {
17646
return nil, ErrInvalidPath

0 commit comments

Comments
 (0)