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 855bb249311..c5abb19f0bc 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 @@ -1605,7 +1605,7 @@ func validatePreserveUnknownFields(crd, oldCRD *apiextensions.CustomResourceDefi var errs field.ErrorList if crd != nil && crd.Spec.PreserveUnknownFields != nil && *crd.Spec.PreserveUnknownFields { // disallow changing spec.preserveUnknownFields=false to spec.preserveUnknownFields=true - errs = append(errs, field.Invalid(field.NewPath("spec").Child("preserveUnknownFields"), crd.Spec.PreserveUnknownFields, "cannot set to true, set x-preserve-unknown-fields to true in spec.versions[*].schema instead")) + errs = append(errs, field.Invalid(field.NewPath("spec").Child("preserveUnknownFields"), crd.Spec.PreserveUnknownFields, "cannot set to true, set x-kubernetes-preserve-unknown-fields to true in spec.versions[*].schema instead")) } return errs } diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/schema/cel/celcoststability_test.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/schema/cel/celcoststability_test.go index b0c59b25f5b..e96d1891c7a 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/schema/cel/celcoststability_test.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/schema/cel/celcoststability_test.go @@ -608,7 +608,7 @@ func TestCelCostStability(t *testing.T) { }), expectCost: map[string]int64{ // 'kind', 'apiVersion', 'metadata.name' and 'metadata.generateName' are always accessible - // even if not specified in the schema, regardless of if x-preserve-unknown-fields is set. + // even if not specified in the schema, regardless of if x-kubernetes-preserve-unknown-fields is set. "self.embedded.kind == 'Pod'": 4, "self.embedded.apiVersion == 'v1'": 4, "self.embedded.metadata.name == 'foo'": 5, diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/schema/cel/validation_test.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/schema/cel/validation_test.go index 09810a947de..8e0b26a1cdc 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/schema/cel/validation_test.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/schema/cel/validation_test.go @@ -775,7 +775,7 @@ func TestValidationExpressions(t *testing.T) { }), valid: []string{ // 'kind', 'apiVersion', 'metadata.name' and 'metadata.generateName' are always accessible - // even if not specified in the schema, regardless of if x-preserve-unknown-fields is set. + // even if not specified in the schema, regardless of if x-kubernetes-preserve-unknown-fields is set. "self.embedded.kind == 'Pod'", "self.embedded.apiVersion == 'v1'", "self.embedded.metadata.name == 'foo'", @@ -785,7 +785,7 @@ func TestValidationExpressions(t *testing.T) { "has(self.embedded)", }, // only field declared in the schema can be field selected in CEL expressions, regardless of if - // x-preserve-unknown-fields is set. + // x-kubernetes-preserve-unknown-fields is set. errors: map[string]string{ "has(self.embedded.spec)": "undefined field 'spec'", }, diff --git a/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/schema/cel/values.go b/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/schema/cel/values.go index 4fa90ab106f..f012ffdc45a 100644 --- a/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/schema/cel/values.go +++ b/staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/schema/cel/values.go @@ -84,7 +84,7 @@ func UnstructuredToVal(unstructured interface{}, schema *structuralschema.Struct }, } } - // A object with x-preserve-unknown-fields but no properties or additionalProperties is treated + // A object with x-kubernetes-preserve-unknown-fields but no properties or additionalProperties is treated // as an empty object. if schema.XPreserveUnknownFields { return &unstructuredMap{ diff --git a/test/conformance/testdata/conformance.yaml b/test/conformance/testdata/conformance.yaml index 6981884b373..53d6f30a7ea 100755 --- a/test/conformance/testdata/conformance.yaml +++ b/test/conformance/testdata/conformance.yaml @@ -246,20 +246,21 @@ update to reflect the rename. release: v1.16 file: test/e2e/apimachinery/crd_publish_openapi.go -- testname: Custom Resource OpenAPI Publish, with x-preserve-unknown-fields at root +- testname: Custom Resource OpenAPI Publish, with x-kubernetes-preserve-unknown-fields + at root codename: '[sig-api-machinery] CustomResourcePublishOpenAPI [Privileged:ClusterAdmin] works for CRD preserving unknown fields at the schema root [Conformance]' - description: Register a custom resource definition with x-preserve-unknown-fields + description: Register a custom resource definition with x-kubernetes-preserve-unknown-fields in the schema root. Attempt to create and apply a change a custom resource, via kubectl; kubectl validation MUST accept unknown properties. Attempt kubectl explain; the output MUST show the custom resource KIND. release: v1.16 file: test/e2e/apimachinery/crd_publish_openapi.go -- testname: Custom Resource OpenAPI Publish, with x-preserve-unknown-fields in embedded - object +- testname: Custom Resource OpenAPI Publish, with x-kubernetes-preserve-unknown-fields + in embedded object codename: '[sig-api-machinery] CustomResourcePublishOpenAPI [Privileged:ClusterAdmin] works for CRD preserving unknown fields in an embedded object [Conformance]' - description: Register a custom resource definition with x-preserve-unknown-fields + description: Register a custom resource definition with x-kubernetes-preserve-unknown-fields in an embedded object. Attempt to create and apply a change a custom resource, via kubectl; kubectl validation MUST accept unknown properties. Attempt kubectl explain; the output MUST show that x-preserve-unknown-properties is used on the @@ -279,10 +280,11 @@ validation should be the same. release: v1.16 file: test/e2e/apimachinery/crd_publish_openapi.go -- testname: Custom Resource OpenAPI Publish, with x-preserve-unknown-fields in object +- testname: Custom Resource OpenAPI Publish, with x-kubernetes-preserve-unknown-fields + in object codename: '[sig-api-machinery] CustomResourcePublishOpenAPI [Privileged:ClusterAdmin] works for CRD without validation schema [Conformance]' - description: Register a custom resource definition with x-preserve-unknown-fields + description: Register a custom resource definition with x-kubernetes-preserve-unknown-fields in the top level object. Attempt to create and apply a change a custom resource, via kubectl; kubectl validation MUST accept unknown properties. Attempt kubectl explain; the output MUST contain a valid DESCRIPTION stanza. diff --git a/test/e2e/apimachinery/crd_publish_openapi.go b/test/e2e/apimachinery/crd_publish_openapi.go index 58a10effbc0..f8ca3d64a32 100644 --- a/test/e2e/apimachinery/crd_publish_openapi.go +++ b/test/e2e/apimachinery/crd_publish_openapi.go @@ -144,8 +144,8 @@ var _ = SIGDescribe("CustomResourcePublishOpenAPI [Privileged:ClusterAdmin]", fu /* Release: v1.16 - Testname: Custom Resource OpenAPI Publish, with x-preserve-unknown-fields in object - Description: Register a custom resource definition with x-preserve-unknown-fields in the top level object. + Testname: Custom Resource OpenAPI Publish, with x-kubernetes-preserve-unknown-fields in object + Description: Register a custom resource definition with x-kubernetes-preserve-unknown-fields in the top level object. Attempt to create and apply a change a custom resource, via kubectl; kubectl validation MUST accept unknown properties. Attempt kubectl explain; the output MUST contain a valid DESCRIPTION stanza. */ @@ -185,8 +185,8 @@ var _ = SIGDescribe("CustomResourcePublishOpenAPI [Privileged:ClusterAdmin]", fu /* Release: v1.16 - Testname: Custom Resource OpenAPI Publish, with x-preserve-unknown-fields at root - Description: Register a custom resource definition with x-preserve-unknown-fields in the schema root. + Testname: Custom Resource OpenAPI Publish, with x-kubernetes-preserve-unknown-fields at root + Description: Register a custom resource definition with x-kubernetes-preserve-unknown-fields in the schema root. Attempt to create and apply a change a custom resource, via kubectl; kubectl validation MUST accept unknown properties. Attempt kubectl explain; the output MUST show the custom resource KIND. */ @@ -226,8 +226,8 @@ var _ = SIGDescribe("CustomResourcePublishOpenAPI [Privileged:ClusterAdmin]", fu /* Release: v1.16 - Testname: Custom Resource OpenAPI Publish, with x-preserve-unknown-fields in embedded object - Description: Register a custom resource definition with x-preserve-unknown-fields in an embedded object. + Testname: Custom Resource OpenAPI Publish, with x-kubernetes-preserve-unknown-fields in embedded object + Description: Register a custom resource definition with x-kubernetes-preserve-unknown-fields in an embedded object. Attempt to create and apply a change a custom resource, via kubectl; kubectl validation MUST accept unknown properties. Attempt kubectl explain; the output MUST show that x-preserve-unknown-properties is used on the nested field.