From 0528e96928a976bce6aa60192339eee1d447e7e3 Mon Sep 17 00:00:00 2001 From: Nikhita Raghunath Date: Tue, 5 Jun 2018 19:05:07 +0530 Subject: [PATCH] apiextensions: allow Description in the root schema for subresources --- .../pkg/apis/apiextensions/validation/validation.go | 6 +++--- .../pkg/apis/apiextensions/validation/validation_test.go | 5 +++-- .../test/integration/subresources_test.go | 3 ++- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/validation/validation.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/validation/validation.go index 40baf42351a..1179226dd75 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/validation/validation.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/validation/validation.go @@ -291,7 +291,7 @@ func ValidateCustomResourceDefinitionValidation(customResourceValidation *apiext } if schema := customResourceValidation.OpenAPIV3Schema; schema != nil { - // if subresources are enabled, only "properties" and "required" is allowed inside the root schema + // if subresources are enabled, only "properties", "required" and "description" are allowed inside the root schema if utilfeature.DefaultFeatureGate.Enabled(apiextensionsfeatures.CustomResourceSubresources) && statusSubresourceEnabled { v := reflect.ValueOf(schema).Elem() for i := 0; i < v.NumField(); i++ { @@ -300,8 +300,8 @@ func ValidateCustomResourceDefinitionValidation(customResourceValidation *apiext continue } - if name := v.Type().Field(i).Name; name != "Properties" && name != "Required" { - allErrs = append(allErrs, field.Invalid(fldPath.Child("openAPIV3Schema"), *schema, fmt.Sprintf(`must only have "properties" or "required" at the root if the status subresource is enabled`))) + if name := v.Type().Field(i).Name; name != "Properties" && name != "Required" && name != "Description" { + allErrs = append(allErrs, field.Invalid(fldPath.Child("openAPIV3Schema"), *schema, fmt.Sprintf(`must only have "properties", "required" or "description" at the root if the status subresource is enabled`))) break } } diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/validation/validation_test.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/validation/validation_test.go index 6bc545c0fd8..68dc8aaede5 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/validation/validation_test.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/validation/validation_test.go @@ -849,14 +849,15 @@ func TestValidateCustomResourceDefinitionValidation(t *testing.T) { wantError: true, }, { - name: "properties and required with status", + name: "properties, required and description with status", input: apiextensions.CustomResourceValidation{ OpenAPIV3Schema: &apiextensions.JSONSchemaProps{ Properties: map[string]apiextensions.JSONSchemaProps{ "spec": {}, "status": {}, }, - Required: []string{"spec", "status"}, + Required: []string{"spec", "status"}, + Description: "This is a description", }, }, statusEnabled: true, diff --git a/staging/src/k8s.io/apiextensions-apiserver/test/integration/subresources_test.go b/staging/src/k8s.io/apiextensions-apiserver/test/integration/subresources_test.go index da40416a338..987fbc5eab2 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/test/integration/subresources_test.go +++ b/staging/src/k8s.io/apiextensions-apiserver/test/integration/subresources_test.go @@ -359,7 +359,8 @@ func TestValidationSchema(t *testing.T) { }, }, }, - Required: []string{"spec"}, + Required: []string{"spec"}, + Description: "This is a description at the root of the schema", } noxuDefinition, err = testserver.CreateNewCustomResourceDefinition(noxuDefinition, apiExtensionClient, dynamicClient) if err != nil {