diff --git a/pkg/schema/definitions/fixtures_test.go b/pkg/schema/definitions/fixtures_test.go index afc4f811..6874845f 100644 --- a/pkg/schema/definitions/fixtures_test.go +++ b/pkg/schema/definitions/fixtures_test.go @@ -63,6 +63,26 @@ spec: nullable: true served: true storage: true +--- +apiVersion: apiextensions.k8s.io/v1 +kind: CustomResourceDefinition +metadata: + name: schemaless.management.cattle.io +spec: + conversion: + strategy: None + group: management.cattle.io + names: + kind: Schemaless + listKind: SchemalessList + plural: schemalese + singular: schemaless + scope: Cluster + preserveUnkownFields: true + versions: + - name: v2 + served: true + storage: true ` ) @@ -346,6 +366,35 @@ definitions: - group: "management.cattle.io" version: "v2" kind: "Nullable" + io.cattle.management.v2.Schemaless: + description: "this kind has no schema" + type: "object" + properties: + apiVersion: + description: "The APIVersion of this resource" + type: "string" + kind: + description: "The kind" + type: "string" + metadata: + description: "The metadata" + $ref: "#/definitions/io.k8s.apimachinery.pkg.apis.meta.v1.ObjectMeta" + spec: + description: "The spec for the resource" + type: "object" + required: + - "name" + properties: + name: + description: "The name of the resource" + type: "string" + notRequired: + description: "Some field that isn't required" + type: "boolean" + x-kubernetes-group-version-kind: + - group: "management.cattle.io" + version: "v2" + kind: "Schemaless" io.cattle.management.NotAKind: type: "string" description: "Some string which isn't a kind" diff --git a/pkg/schema/definitions/handler.go b/pkg/schema/definitions/handler.go index d45eeedf..ad87f8c4 100644 --- a/pkg/schema/definitions/handler.go +++ b/pkg/schema/definitions/handler.go @@ -223,7 +223,9 @@ func listGVKModels(models proto.Models, groups *metav1.APIGroupList, crdCache wa Version: version.Name, Kind: crd.Spec.Names.Kind, } - gvkToCRD[gvk] = version.Schema.OpenAPIV3Schema + if version.Schema != nil { + gvkToCRD[gvk] = version.Schema.OpenAPIV3Schema + } } } diff --git a/pkg/schema/definitions/handler_test.go b/pkg/schema/definitions/handler_test.go index 2010f0ce..8e06a41c 100644 --- a/pkg/schema/definitions/handler_test.go +++ b/pkg/schema/definitions/handler_test.go @@ -34,7 +34,7 @@ func TestRefresh(t *testing.T) { require.NotNil(t, userAttributesV2) nullableV2 := getJSONSchema(crds, "nullable.management.cattle.io", "v2") - require.NotNil(t, userAttributesV2) + require.NotNil(t, nullableV2) tests := []struct { name string @@ -85,6 +85,11 @@ func TestRefresh(t *testing.T) { Schema: defaultModels.LookupModel("io.cattle.management.v2.Nullable"), CRD: nullableV2, }, + "management.cattle.io.schemaless": { + ModelName: "io.cattle.management.v2.Schemaless", + Schema: defaultModels.LookupModel("io.cattle.management.v2.Schemaless"), + CRD: nil, + }, }, }, { @@ -147,6 +152,11 @@ func TestRefresh(t *testing.T) { Schema: defaultModels.LookupModel("io.cattle.management.v2.Nullable"), CRD: nullableV2, }, + "management.cattle.io.schemaless": { + ModelName: "io.cattle.management.v2.Schemaless", + Schema: defaultModels.LookupModel("io.cattle.management.v2.Schemaless"), + CRD: nil, + }, }, }, }