Merge pull request #116550 from alculquicondor/fix-bind-uid

Preserve UID and ResourceVersion in BindingREST

Kubernetes-commit: 15894cfc85cab64df081bb753b8ccf32a243da68
This commit is contained in:
Kubernetes Publisher 2023-03-20 08:49:20 -07:00
commit 0ad7c4e505
4 changed files with 22 additions and 10 deletions

8
go.mod
View File

@ -42,9 +42,9 @@ require (
google.golang.org/protobuf v1.28.1
gopkg.in/natefinch/lumberjack.v2 v2.0.0
gopkg.in/square/go-jose.v2 v2.6.0
k8s.io/api v0.0.0-20230316002315-c80582ebe125
k8s.io/api v0.0.0-20230316181320-bad7d34a01c9
k8s.io/apimachinery v0.0.0-20230315054728-8d1258da8f38
k8s.io/client-go v0.0.0-20230316040718-4666344cbcd7
k8s.io/client-go v0.0.0-20230317001143-1517ffb8d37c
k8s.io/component-base v0.0.0-20230315065615-6b9bb8ecc3d0
k8s.io/klog/v2 v2.90.1
k8s.io/kms v0.0.0-20230315071547-f5c193c64781
@ -124,9 +124,9 @@ require (
)
replace (
k8s.io/api => k8s.io/api v0.0.0-20230316002315-c80582ebe125
k8s.io/api => k8s.io/api v0.0.0-20230316181320-bad7d34a01c9
k8s.io/apimachinery => k8s.io/apimachinery v0.0.0-20230315054728-8d1258da8f38
k8s.io/client-go => k8s.io/client-go v0.0.0-20230316040718-4666344cbcd7
k8s.io/client-go => k8s.io/client-go v0.0.0-20230317001143-1517ffb8d37c
k8s.io/component-base => k8s.io/component-base v0.0.0-20230315065615-6b9bb8ecc3d0
k8s.io/kms => k8s.io/kms v0.0.0-20230315071547-f5c193c64781
)

8
go.sum
View File

@ -878,12 +878,12 @@ honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWh
honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg=
honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k=
k8s.io/api v0.0.0-20230316002315-c80582ebe125 h1:sNLUUpJNxIYmttU1YQIm4nhSD2jK3wOkSQVsqhlFh2A=
k8s.io/api v0.0.0-20230316002315-c80582ebe125/go.mod h1:aZ6MBt4NMLXSxkSKFkoDaP4hTutnZIvH5dCSpOis9g4=
k8s.io/api v0.0.0-20230316181320-bad7d34a01c9 h1:RX71Fts5hM4MOPrwU2mAILmdHSQipOntTKs8SVRvZNA=
k8s.io/api v0.0.0-20230316181320-bad7d34a01c9/go.mod h1:aZ6MBt4NMLXSxkSKFkoDaP4hTutnZIvH5dCSpOis9g4=
k8s.io/apimachinery v0.0.0-20230315054728-8d1258da8f38 h1:n1qDRCTPAXwyXYg7eSpWDO9FdW79lwAQ9dAr1vETpn4=
k8s.io/apimachinery v0.0.0-20230315054728-8d1258da8f38/go.mod h1:5ikh59fK3AJ287GUvpUsryoMFtH9zj/ARfWCo3AyXTM=
k8s.io/client-go v0.0.0-20230316040718-4666344cbcd7 h1:94RqmF9IE9dqxNjr6CRIlO+lVabE46SzrOptrmHAiCc=
k8s.io/client-go v0.0.0-20230316040718-4666344cbcd7/go.mod h1:L61adAiamj+NzecNEOyWV9fYq4VVrOCcn2enXFUiJL8=
k8s.io/client-go v0.0.0-20230317001143-1517ffb8d37c h1:29TaJLdOV+6YadAIsdLLH5ImjgMWTuEm3a/COrgIGoI=
k8s.io/client-go v0.0.0-20230317001143-1517ffb8d37c/go.mod h1:+yf0C0ynOsv3GhBRexl/5CJzyS/uxZJ1Gtn6N5GuVmc=
k8s.io/component-base v0.0.0-20230315065615-6b9bb8ecc3d0 h1:IjneP02MOB07PIP9+PQjKrOIZEZ5T7umR+GIZkU4h0U=
k8s.io/component-base v0.0.0-20230315065615-6b9bb8ecc3d0/go.mod h1:kTuptveA6tUMLMKnaq4AbIAAk7IcdhwkbljAV3JZRpM=
k8s.io/klog/v2 v2.90.1 h1:m4bYOKall2MmOiRaR1J+We67Do7vm9KiQVlT96lnHUw=

View File

@ -162,8 +162,13 @@ func createHandler(r rest.NamedCreater, scope *RequestScope, admit admission.Int
userInfo, _ := request.UserFrom(ctx)
if objectMeta, err := meta.Accessor(obj); err == nil {
// Wipe fields which cannot take user-provided values
preserveObjectMetaSystemFields := false
if c, ok := r.(rest.SubresourceObjectMetaPreserver); ok && len(scope.Subresource) > 0 {
preserveObjectMetaSystemFields = c.PreserveRequestObjectMetaSystemFieldsOnSubresourceCreate()
}
if !preserveObjectMetaSystemFields {
rest.WipeObjectMetaSystemFields(objectMeta)
}
// ensure namespace on the object is correct, or error if a conflicting namespace was set in the object
if err := rest.EnsureObjectNamespaceMatchesRequestNamespace(rest.ExpectedNamespaceForResource(namespace, scope.Resource), objectMeta); err != nil {

View File

@ -209,6 +209,13 @@ type NamedCreater interface {
Create(ctx context.Context, name string, obj runtime.Object, createValidation ValidateObjectFunc, options *metav1.CreateOptions) (runtime.Object, error)
}
// SubresourceObjectMetaPreserver adds configuration options to a Creater for subresources.
type SubresourceObjectMetaPreserver interface {
// PreserveRequestObjectMetaSystemFieldsOnSubresourceCreate indicates that a
// handler should preserve fields of ObjectMeta that are managed by the system.
PreserveRequestObjectMetaSystemFieldsOnSubresourceCreate() bool
}
// UpdatedObjectInfo provides information about an updated object to an Updater.
// It requires access to the old object in order to return the newly updated object.
type UpdatedObjectInfo interface {