diff --git a/Godeps/Godeps.json b/Godeps/Godeps.json index 27f5a70c5..74a89bb0a 100644 --- a/Godeps/Godeps.json +++ b/Godeps/Godeps.json @@ -416,11 +416,11 @@ }, { "ImportPath": "k8s.io/apimachinery", - "Rev": "162a2dabc72f" + "Rev": "4a63d48c5dc1" }, { "ImportPath": "k8s.io/client-go", - "Rev": "4fd06e107451" + "Rev": "dafe3c5e1851" }, { "ImportPath": "k8s.io/component-base", diff --git a/go.mod b/go.mod index 47b9d72db..6edfc1088 100644 --- a/go.mod +++ b/go.mod @@ -53,8 +53,8 @@ require ( gopkg.in/yaml.v2 v2.2.2 gotest.tools v2.2.0+incompatible // indirect k8s.io/api v0.0.0-20190806064354-8b51d7113622 - k8s.io/apimachinery v0.0.0-20190806215851-162a2dabc72f - k8s.io/client-go v0.0.0-20190807061213-4fd06e107451 + k8s.io/apimachinery v0.0.0-20190808140701-4a63d48c5dc1 + k8s.io/client-go v0.0.0-20190808141243-dafe3c5e1851 k8s.io/component-base v0.0.0-20190807101431-d6d4632c35d0 k8s.io/klog v0.3.1 k8s.io/kube-openapi v0.0.0-20190709113604-33be087ad058 @@ -71,7 +71,7 @@ replace ( golang.org/x/text => golang.org/x/text v0.3.1-0.20181227161524-e6919f6577db golang.org/x/tools => golang.org/x/tools v0.0.0-20190313210603-aa82965741a9 k8s.io/api => k8s.io/api v0.0.0-20190806064354-8b51d7113622 - k8s.io/apimachinery => k8s.io/apimachinery v0.0.0-20190806215851-162a2dabc72f - k8s.io/client-go => k8s.io/client-go v0.0.0-20190807061213-4fd06e107451 + k8s.io/apimachinery => k8s.io/apimachinery v0.0.0-20190808140701-4a63d48c5dc1 + k8s.io/client-go => k8s.io/client-go v0.0.0-20190808141243-dafe3c5e1851 k8s.io/component-base => k8s.io/component-base v0.0.0-20190807101431-d6d4632c35d0 ) diff --git a/go.sum b/go.sum index 2c19130ed..ac231db25 100644 --- a/go.sum +++ b/go.sum @@ -222,8 +222,8 @@ gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= k8s.io/api v0.0.0-20190806064354-8b51d7113622/go.mod h1:SgXHCRh94q+5GrRf9Dty2ZG8+wCVmqvQbZJXXcAswkw= -k8s.io/apimachinery v0.0.0-20190806215851-162a2dabc72f/go.mod h1:+ntn62igV2hyNj7/0brOvXSMONE2KxcePkSxK7/9FFQ= -k8s.io/client-go v0.0.0-20190807061213-4fd06e107451/go.mod h1:RW3J3c0otV+R6G3oq1FpjifMKdKu05RyENQ9/UqhBdk= +k8s.io/apimachinery v0.0.0-20190808140701-4a63d48c5dc1/go.mod h1:+ntn62igV2hyNj7/0brOvXSMONE2KxcePkSxK7/9FFQ= +k8s.io/client-go v0.0.0-20190808141243-dafe3c5e1851/go.mod h1:ctmUC94qr+uRHonWS+WhRNFKTxg7XqMA455j7JfWM14= k8s.io/component-base v0.0.0-20190807101431-d6d4632c35d0/go.mod h1:SbX3ww4xiCxqQFA4pJgdbgBGm1776AVbtJDXsfvNRXA= k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= diff --git a/pkg/endpoints/handlers/patch.go b/pkg/endpoints/handlers/patch.go index 125955618..b7360dfe8 100644 --- a/pkg/endpoints/handlers/patch.go +++ b/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/pkg/endpoints/handlers/rest.go b/pkg/endpoints/handlers/rest.go index 87afbf9a3..8aecd4c14 100644 --- a/pkg/endpoints/handlers/rest.go +++ b/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/pkg/features/kube_features.go b/pkg/features/kube_features.go index 397f81c67..bd5fb8a09 100644 --- a/pkg/features/kube_features.go +++ b/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}, }