Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
K
k3s
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
Jacklull
k3s
Commits
d014591a
Commit
d014591a
authored
May 10, 2019
by
Dr. Stefan Schimanski
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
apiextensions: forbid false x-kubernetes-preserve-unknown-fields
parent
6897c68d
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
83 additions
and
9 deletions
+83
-9
deepcopy.go
...piextensions-apiserver/pkg/apis/apiextensions/deepcopy.go
+10
-0
types_jsonschema.go
...ions-apiserver/pkg/apis/apiextensions/types_jsonschema.go
+2
-1
deepcopy.go
...ions-apiserver/pkg/apis/apiextensions/v1beta1/deepcopy.go
+10
-0
generated.proto
...-apiserver/pkg/apis/apiextensions/v1beta1/generated.proto
+1
-0
types_jsonschema.go
...server/pkg/apis/apiextensions/v1beta1/types_jsonschema.go
+2
-1
BUILD
...ensions-apiserver/pkg/apis/apiextensions/validation/BUILD
+1
-0
validation.go
...apiserver/pkg/apis/apiextensions/validation/validation.go
+4
-0
validation_test.go
...rver/pkg/apis/apiextensions/validation/validation_test.go
+36
-0
convert.go
...o/apiextensions-apiserver/pkg/apiserver/schema/convert.go
+13
-5
structural.go
...piextensions-apiserver/pkg/apiserver/schema/structural.go
+2
-0
validation.go
...tensions-apiserver/pkg/apiserver/validation/validation.go
+2
-2
No files found.
staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/deepcopy.go
View file @
d014591a
...
...
@@ -258,5 +258,15 @@ func (in *JSONSchemaProps) DeepCopy() *JSONSchemaProps {
}
}
if
in
.
XPreserveUnknownFields
!=
nil
{
in
,
out
:=
&
in
.
XPreserveUnknownFields
,
&
out
.
XPreserveUnknownFields
if
*
in
==
nil
{
*
out
=
nil
}
else
{
*
out
=
new
(
bool
)
**
out
=
**
in
}
}
return
out
}
staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/types_jsonschema.go
View file @
d014591a
...
...
@@ -61,7 +61,8 @@ type JSONSchemaProps struct {
// in the validation schema. This affects fields recursively,
// but switches back to normal pruning behaviour if nested
// properties or additionalProperties are specified in the schema.
XPreserveUnknownFields
bool
// This can either be true or undefined. False is forbidden.
XPreserveUnknownFields
*
bool
// x-kubernetes-embedded-resource defines that the value is an
// embedded Kubernetes runtime.Object, with TypeMeta and
...
...
staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1/deepcopy.go
View file @
d014591a
...
...
@@ -234,5 +234,15 @@ func (in *JSONSchemaProps) DeepCopy() *JSONSchemaProps {
}
}
if
in
.
XPreserveUnknownFields
!=
nil
{
in
,
out
:=
&
in
.
XPreserveUnknownFields
,
&
out
.
XPreserveUnknownFields
if
*
in
==
nil
{
*
out
=
nil
}
else
{
*
out
=
new
(
bool
)
**
out
=
**
in
}
}
return
out
}
staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1/generated.proto
View file @
d014591a
...
...
@@ -449,6 +449,7 @@ message JSONSchemaProps {
// in the validation schema. This affects fields recursively,
// but switches back to normal pruning behaviour if nested
// properties or additionalProperties are specified in the schema.
// This can either be true or undefined. False is forbidden.
optional
bool
xKubernetesPreserveUnknownFields
=
38
;
// x-kubernetes-embedded-resource defines that the value is an
...
...
staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1beta1/types_jsonschema.go
View file @
d014591a
...
...
@@ -61,7 +61,8 @@ type JSONSchemaProps struct {
// in the validation schema. This affects fields recursively,
// but switches back to normal pruning behaviour if nested
// properties or additionalProperties are specified in the schema.
XPreserveUnknownFields
bool
`json:"x-kubernetes-preserve-unknown-fields,omitempty" protobuf:"bytes,38,opt,name=xKubernetesPreserveUnknownFields"`
// This can either be true or undefined. False is forbidden.
XPreserveUnknownFields
*
bool
`json:"x-kubernetes-preserve-unknown-fields,omitempty" protobuf:"bytes,38,opt,name=xKubernetesPreserveUnknownFields"`
// x-kubernetes-embedded-resource defines that the value is an
// embedded Kubernetes runtime.Object, with TypeMeta and
...
...
staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/validation/BUILD
View file @
d014591a
...
...
@@ -34,6 +34,7 @@ go_test(
"//staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/apis/meta/v1:go_default_library",
"//staging/src/k8s.io/apimachinery/pkg/util/validation/field:go_default_library",
"//vendor/k8s.io/utils/pointer:go_default_library",
],
)
...
...
staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/validation/validation.go
View file @
d014591a
...
...
@@ -673,6 +673,10 @@ func ValidateCustomResourceDefinitionOpenAPISchema(schema *apiextensions.JSONSch
}
}
if
schema
.
XPreserveUnknownFields
!=
nil
&&
*
schema
.
XPreserveUnknownFields
==
false
{
allErrs
=
append
(
allErrs
,
field
.
Invalid
(
fldPath
.
Child
(
"x-kubernetes-preserve-unknown-fields"
),
*
schema
.
XPreserveUnknownFields
,
"must be true or undefined"
))
}
return
allErrs
}
...
...
staging/src/k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/validation/validation_test.go
View file @
d014591a
...
...
@@ -22,6 +22,7 @@ import (
"k8s.io/apiextensions-apiserver/pkg/apis/apiextensions"
metav1
"k8s.io/apimachinery/pkg/apis/meta/v1"
"k8s.io/apimachinery/pkg/util/validation/field"
"k8s.io/utils/pointer"
)
type
validationMatch
struct
{
...
...
@@ -935,6 +936,41 @@ func TestValidateCustomResourceDefinition(t *testing.T) {
invalid
(
"spec"
,
"versions"
),
},
},
{
name
:
"x-kubernetes-preserve-unknown-field: false"
,
resource
:
&
apiextensions
.
CustomResourceDefinition
{
ObjectMeta
:
metav1
.
ObjectMeta
{
Name
:
"plural.group.com"
},
Spec
:
apiextensions
.
CustomResourceDefinitionSpec
{
Group
:
"group.com"
,
Version
:
"version"
,
Validation
:
&
apiextensions
.
CustomResourceValidation
{
OpenAPIV3Schema
:
&
apiextensions
.
JSONSchemaProps
{
XPreserveUnknownFields
:
pointer
.
BoolPtr
(
false
),
},
},
Versions
:
[]
apiextensions
.
CustomResourceDefinitionVersion
{
{
Name
:
"version"
,
Served
:
true
,
Storage
:
true
,
},
},
Scope
:
apiextensions
.
NamespaceScoped
,
Names
:
apiextensions
.
CustomResourceDefinitionNames
{
Plural
:
"plural"
,
Singular
:
"singular"
,
Kind
:
"Plural"
,
ListKind
:
"PluralList"
,
},
},
Status
:
apiextensions
.
CustomResourceDefinitionStatus
{
StoredVersions
:
[]
string
{
"version"
},
},
},
errors
:
[]
validationMatch
{
invalid
(
"spec"
,
"validation"
,
"openAPIV3Schema"
,
"x-kubernetes-preserve-unknown-fields"
),
},
},
}
for
_
,
tc
:=
range
tests
{
...
...
staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/schema/convert.go
View file @
d014591a
...
...
@@ -241,11 +241,19 @@ func newExtensions(s *apiextensions.JSONSchemaProps) (*Extensions, error) {
return
nil
,
nil
}
return
&
Extensions
{
XPreserveUnknownFields
:
s
.
XPreserveUnknownFields
,
XEmbeddedResource
:
s
.
XEmbeddedResource
,
XIntOrString
:
s
.
XIntOrString
,
},
nil
ret
:=
&
Extensions
{
XEmbeddedResource
:
s
.
XEmbeddedResource
,
XIntOrString
:
s
.
XIntOrString
,
}
if
s
.
XPreserveUnknownFields
!=
nil
{
if
!*
s
.
XPreserveUnknownFields
{
return
nil
,
fmt
.
Errorf
(
"'x-kubernetes-preserve-unknown-fields' must be true or undefined"
)
}
ret
.
XPreserveUnknownFields
=
true
}
return
ret
,
nil
}
// validateUnsupportedFields checks that those fields rejected by validation are actually unset.
...
...
staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/schema/structural.go
View file @
d014591a
...
...
@@ -66,6 +66,8 @@ type Extensions struct {
// in the validation schema. This affects fields recursively,
// but switches back to normal pruning behaviour if nested
// properties or additionalProperties are specified in the schema.
// False means that the pruning behaviour is inherited from the parent.
// False does not mean to activate pruning.
XPreserveUnknownFields
bool
// x-kubernetes-embedded-resource defines that the value is an
...
...
staging/src/k8s.io/apiextensions-apiserver/pkg/apiserver/validation/validation.go
View file @
d014591a
...
...
@@ -195,8 +195,8 @@ func ConvertJSONSchemaPropsWithPostProcess(in *apiextensions.JSONSchemaProps, ou
}
}
if
in
.
XPreserveUnknownFields
{
out
.
VendorExtensible
.
AddExtension
(
"x-kubernetes-preserve-unknown-fields"
,
true
)
if
in
.
XPreserveUnknownFields
!=
nil
{
out
.
VendorExtensible
.
AddExtension
(
"x-kubernetes-preserve-unknown-fields"
,
*
in
.
XPreserveUnknownFields
)
}
if
in
.
XEmbeddedResource
{
out
.
VendorExtensible
.
AddExtension
(
"x-kubernetes-embedded-resource"
,
true
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment