From 3bf4eb70723340cf84abec11e9ce14dfcc02a148 Mon Sep 17 00:00:00 2001 From: wojtekt Date: Mon, 5 Aug 2019 08:59:25 +0200 Subject: [PATCH] Deprecate SelfLink + featuregate for setting it --- staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/types.go | 8 ++++++++ .../src/k8s.io/apiserver/pkg/endpoints/handlers/patch.go | 7 +------ .../src/k8s.io/apiserver/pkg/endpoints/handlers/rest.go | 6 ++++++ .../src/k8s.io/apiserver/pkg/features/kube_features.go | 7 +++++++ 4 files changed, 22 insertions(+), 6 deletions(-) diff --git a/staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/types.go b/staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/types.go index 80d9a0891dd..b1e92ed66a0 100644 --- a/staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/types.go +++ b/staging/src/k8s.io/apimachinery/pkg/apis/meta/v1/types.go @@ -61,6 +61,10 @@ type ListMeta struct { // selfLink is a URL representing this object. // Populated by the system. // Read-only. + // + // DEPRECATED + // Kubernetes will stop propagating this field in 1.20 release and the field is planned + // to be removed in 1.21 release. // +optional SelfLink string `json:"selfLink,omitempty" protobuf:"bytes,1,opt,name=selfLink"` @@ -148,6 +152,10 @@ type ObjectMeta struct { // SelfLink is a URL representing this object. // Populated by the system. // Read-only. + // + // DEPRECATED + // Kubernetes will stop propagating this field in 1.20 release and the field is planned + // to be removed in 1.21 release. // +optional SelfLink string `json:"selfLink,omitempty" protobuf:"bytes,4,opt,name=selfLink"` diff --git a/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/patch.go b/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/patch.go index 7988b0a2fa4..406a74cd7d5 100644 --- a/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/patch.go +++ b/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/patch.go @@ -224,12 +224,7 @@ func PatchResource(r rest.Patcher, scope *RequestScope, admit admission.Interfac } trace.Step("Object stored in database") - requestInfo, ok := request.RequestInfoFrom(ctx) - if !ok { - scope.err(fmt.Errorf("missing requestInfo"), w, req) - return - } - if err := setSelfLink(result, requestInfo, scope.Namer); err != nil { + if err := setObjectSelfLink(ctx, result, req, scope.Namer); err != nil { scope.err(err, w, req) return } diff --git a/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/rest.go b/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/rest.go index 87afbf9a3ea..8aecd4c14a5 100644 --- a/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/rest.go +++ b/staging/src/k8s.io/apiserver/pkg/endpoints/handlers/rest.go @@ -39,7 +39,9 @@ import ( "k8s.io/apiserver/pkg/endpoints/handlers/responsewriters" "k8s.io/apiserver/pkg/endpoints/metrics" "k8s.io/apiserver/pkg/endpoints/request" + "k8s.io/apiserver/pkg/features" "k8s.io/apiserver/pkg/registry/rest" + utilfeature "k8s.io/apiserver/pkg/util/feature" "k8s.io/klog" ) @@ -318,6 +320,10 @@ func checkName(obj runtime.Object, name, namespace string, namer ScopeNamer) err // TODO: remove the need for the namer LinkSetters by requiring objects implement either Object or List // interfaces func setObjectSelfLink(ctx context.Context, obj runtime.Object, req *http.Request, namer ScopeNamer) error { + if utilfeature.DefaultFeatureGate.Enabled(features.RemoveSelfLink) { + return nil + } + // We only generate list links on objects that implement ListInterface - historically we duck typed this // check via reflection, but as we move away from reflection we require that you not only carry Items but // ListMeta into order to be identified as a list. diff --git a/staging/src/k8s.io/apiserver/pkg/features/kube_features.go b/staging/src/k8s.io/apiserver/pkg/features/kube_features.go index 397f81c6778..bd5fb8a09f6 100644 --- a/staging/src/k8s.io/apiserver/pkg/features/kube_features.go +++ b/staging/src/k8s.io/apiserver/pkg/features/kube_features.go @@ -132,6 +132,12 @@ const ( // // Enables managing request concurrency with prioritization and fairness at each server RequestManagement featuregate.Feature = "RequestManagement" + + // owner: @wojtek-t + // alpha: v1.16 + // + // Deprecates and removes SelfLink from ObjectMeta and ListMeta. + RemoveSelfLink featuregate.Feature = "RemoveSelfLink" ) func init() { @@ -156,4 +162,5 @@ var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureS WinDSR: {Default: false, PreRelease: featuregate.Alpha}, WatchBookmark: {Default: true, PreRelease: featuregate.Beta}, RequestManagement: {Default: false, PreRelease: featuregate.Alpha}, + RemoveSelfLink: {Default: false, PreRelease: featuregate.Alpha}, }