mirror of
https://github.com/k3s-io/kubernetes.git
synced 2025-07-23 11:50:44 +00:00
Merge pull request #100754 from liggitt/warning-ga
Graduate WarningHeader feature to GA
This commit is contained in:
commit
77e769b040
@ -841,7 +841,7 @@ var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureS
|
|||||||
genericfeatures.DryRun: {Default: true, PreRelease: featuregate.GA},
|
genericfeatures.DryRun: {Default: true, PreRelease: featuregate.GA},
|
||||||
genericfeatures.ServerSideApply: {Default: true, PreRelease: featuregate.GA},
|
genericfeatures.ServerSideApply: {Default: true, PreRelease: featuregate.GA},
|
||||||
genericfeatures.APIPriorityAndFairness: {Default: true, PreRelease: featuregate.Beta},
|
genericfeatures.APIPriorityAndFairness: {Default: true, PreRelease: featuregate.Beta},
|
||||||
genericfeatures.WarningHeaders: {Default: true, PreRelease: featuregate.Beta},
|
genericfeatures.WarningHeaders: {Default: true, PreRelease: featuregate.GA, LockToDefault: true}, // remove in 1.24
|
||||||
|
|
||||||
// features that enable backwards compatibility but are scheduled to be removed
|
// features that enable backwards compatibility but are scheduled to be removed
|
||||||
// ...
|
// ...
|
||||||
|
@ -958,12 +958,10 @@ func (r *crdHandler) getOrCreateServingInfoFor(uid types.UID, name string) (*crd
|
|||||||
|
|
||||||
if v.Deprecated {
|
if v.Deprecated {
|
||||||
deprecated[v.Name] = true
|
deprecated[v.Name] = true
|
||||||
if utilfeature.DefaultFeatureGate.Enabled(features.WarningHeaders) {
|
if v.DeprecationWarning != nil {
|
||||||
if v.DeprecationWarning != nil {
|
warnings[v.Name] = append(warnings[v.Name], *v.DeprecationWarning)
|
||||||
warnings[v.Name] = append(warnings[v.Name], *v.DeprecationWarning)
|
} else {
|
||||||
} else {
|
warnings[v.Name] = append(warnings[v.Name], defaultDeprecationWarning(v.Name, crd.Spec))
|
||||||
warnings[v.Name] = append(warnings[v.Name], defaultDeprecationWarning(v.Name, crd.Spec))
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -669,8 +669,6 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag
|
|||||||
|
|
||||||
// accumulate endpoint-level warnings
|
// accumulate endpoint-level warnings
|
||||||
var (
|
var (
|
||||||
enableWarningHeaders = utilfeature.DefaultFeatureGate.Enabled(features.WarningHeaders)
|
|
||||||
|
|
||||||
warnings []string
|
warnings []string
|
||||||
deprecated bool
|
deprecated bool
|
||||||
removedRelease string
|
removedRelease string
|
||||||
@ -702,9 +700,7 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag
|
|||||||
} else {
|
} else {
|
||||||
handler = metrics.InstrumentRouteFunc(action.Verb, group, version, resource, subresource, requestScope, metrics.APIServerComponent, deprecated, removedRelease, handler)
|
handler = metrics.InstrumentRouteFunc(action.Verb, group, version, resource, subresource, requestScope, metrics.APIServerComponent, deprecated, removedRelease, handler)
|
||||||
}
|
}
|
||||||
if enableWarningHeaders {
|
handler = utilwarning.AddWarningsHandler(handler, warnings)
|
||||||
handler = utilwarning.AddWarningsHandler(handler, warnings)
|
|
||||||
}
|
|
||||||
|
|
||||||
doc := "read the specified " + kind
|
doc := "read the specified " + kind
|
||||||
if isSubresource {
|
if isSubresource {
|
||||||
@ -730,9 +726,7 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag
|
|||||||
doc = "list " + subresource + " of objects of kind " + kind
|
doc = "list " + subresource + " of objects of kind " + kind
|
||||||
}
|
}
|
||||||
handler := metrics.InstrumentRouteFunc(action.Verb, group, version, resource, subresource, requestScope, metrics.APIServerComponent, deprecated, removedRelease, restfulListResource(lister, watcher, reqScope, false, a.minRequestTimeout))
|
handler := metrics.InstrumentRouteFunc(action.Verb, group, version, resource, subresource, requestScope, metrics.APIServerComponent, deprecated, removedRelease, restfulListResource(lister, watcher, reqScope, false, a.minRequestTimeout))
|
||||||
if enableWarningHeaders {
|
handler = utilwarning.AddWarningsHandler(handler, warnings)
|
||||||
handler = utilwarning.AddWarningsHandler(handler, warnings)
|
|
||||||
}
|
|
||||||
route := ws.GET(action.Path).To(handler).
|
route := ws.GET(action.Path).To(handler).
|
||||||
Doc(doc).
|
Doc(doc).
|
||||||
Param(ws.QueryParameter("pretty", "If 'true', then the output is pretty printed.")).
|
Param(ws.QueryParameter("pretty", "If 'true', then the output is pretty printed.")).
|
||||||
@ -765,9 +759,7 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag
|
|||||||
doc = "replace " + subresource + " of the specified " + kind
|
doc = "replace " + subresource + " of the specified " + kind
|
||||||
}
|
}
|
||||||
handler := metrics.InstrumentRouteFunc(action.Verb, group, version, resource, subresource, requestScope, metrics.APIServerComponent, deprecated, removedRelease, restfulUpdateResource(updater, reqScope, admit))
|
handler := metrics.InstrumentRouteFunc(action.Verb, group, version, resource, subresource, requestScope, metrics.APIServerComponent, deprecated, removedRelease, restfulUpdateResource(updater, reqScope, admit))
|
||||||
if enableWarningHeaders {
|
handler = utilwarning.AddWarningsHandler(handler, warnings)
|
||||||
handler = utilwarning.AddWarningsHandler(handler, warnings)
|
|
||||||
}
|
|
||||||
route := ws.PUT(action.Path).To(handler).
|
route := ws.PUT(action.Path).To(handler).
|
||||||
Doc(doc).
|
Doc(doc).
|
||||||
Param(ws.QueryParameter("pretty", "If 'true', then the output is pretty printed.")).
|
Param(ws.QueryParameter("pretty", "If 'true', then the output is pretty printed.")).
|
||||||
@ -798,9 +790,7 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag
|
|||||||
supportedTypes = append(supportedTypes, string(types.ApplyPatchType))
|
supportedTypes = append(supportedTypes, string(types.ApplyPatchType))
|
||||||
}
|
}
|
||||||
handler := metrics.InstrumentRouteFunc(action.Verb, group, version, resource, subresource, requestScope, metrics.APIServerComponent, deprecated, removedRelease, restfulPatchResource(patcher, reqScope, admit, supportedTypes))
|
handler := metrics.InstrumentRouteFunc(action.Verb, group, version, resource, subresource, requestScope, metrics.APIServerComponent, deprecated, removedRelease, restfulPatchResource(patcher, reqScope, admit, supportedTypes))
|
||||||
if enableWarningHeaders {
|
handler = utilwarning.AddWarningsHandler(handler, warnings)
|
||||||
handler = utilwarning.AddWarningsHandler(handler, warnings)
|
|
||||||
}
|
|
||||||
route := ws.PATCH(action.Path).To(handler).
|
route := ws.PATCH(action.Path).To(handler).
|
||||||
Doc(doc).
|
Doc(doc).
|
||||||
Param(ws.QueryParameter("pretty", "If 'true', then the output is pretty printed.")).
|
Param(ws.QueryParameter("pretty", "If 'true', then the output is pretty printed.")).
|
||||||
@ -825,9 +815,7 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag
|
|||||||
handler = restfulCreateResource(creater, reqScope, admit)
|
handler = restfulCreateResource(creater, reqScope, admit)
|
||||||
}
|
}
|
||||||
handler = metrics.InstrumentRouteFunc(action.Verb, group, version, resource, subresource, requestScope, metrics.APIServerComponent, deprecated, removedRelease, handler)
|
handler = metrics.InstrumentRouteFunc(action.Verb, group, version, resource, subresource, requestScope, metrics.APIServerComponent, deprecated, removedRelease, handler)
|
||||||
if enableWarningHeaders {
|
handler = utilwarning.AddWarningsHandler(handler, warnings)
|
||||||
handler = utilwarning.AddWarningsHandler(handler, warnings)
|
|
||||||
}
|
|
||||||
article := GetArticleForNoun(kind, " ")
|
article := GetArticleForNoun(kind, " ")
|
||||||
doc := "create" + article + kind
|
doc := "create" + article + kind
|
||||||
if isSubresource {
|
if isSubresource {
|
||||||
@ -861,9 +849,7 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag
|
|||||||
deleteReturnType = producedObject
|
deleteReturnType = producedObject
|
||||||
}
|
}
|
||||||
handler := metrics.InstrumentRouteFunc(action.Verb, group, version, resource, subresource, requestScope, metrics.APIServerComponent, deprecated, removedRelease, restfulDeleteResource(gracefulDeleter, isGracefulDeleter, reqScope, admit))
|
handler := metrics.InstrumentRouteFunc(action.Verb, group, version, resource, subresource, requestScope, metrics.APIServerComponent, deprecated, removedRelease, restfulDeleteResource(gracefulDeleter, isGracefulDeleter, reqScope, admit))
|
||||||
if enableWarningHeaders {
|
handler = utilwarning.AddWarningsHandler(handler, warnings)
|
||||||
handler = utilwarning.AddWarningsHandler(handler, warnings)
|
|
||||||
}
|
|
||||||
route := ws.DELETE(action.Path).To(handler).
|
route := ws.DELETE(action.Path).To(handler).
|
||||||
Doc(doc).
|
Doc(doc).
|
||||||
Param(ws.QueryParameter("pretty", "If 'true', then the output is pretty printed.")).
|
Param(ws.QueryParameter("pretty", "If 'true', then the output is pretty printed.")).
|
||||||
@ -887,9 +873,7 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag
|
|||||||
doc = "delete collection of " + subresource + " of a " + kind
|
doc = "delete collection of " + subresource + " of a " + kind
|
||||||
}
|
}
|
||||||
handler := metrics.InstrumentRouteFunc(action.Verb, group, version, resource, subresource, requestScope, metrics.APIServerComponent, deprecated, removedRelease, restfulDeleteCollection(collectionDeleter, isCollectionDeleter, reqScope, admit))
|
handler := metrics.InstrumentRouteFunc(action.Verb, group, version, resource, subresource, requestScope, metrics.APIServerComponent, deprecated, removedRelease, restfulDeleteCollection(collectionDeleter, isCollectionDeleter, reqScope, admit))
|
||||||
if enableWarningHeaders {
|
handler = utilwarning.AddWarningsHandler(handler, warnings)
|
||||||
handler = utilwarning.AddWarningsHandler(handler, warnings)
|
|
||||||
}
|
|
||||||
route := ws.DELETE(action.Path).To(handler).
|
route := ws.DELETE(action.Path).To(handler).
|
||||||
Doc(doc).
|
Doc(doc).
|
||||||
Param(ws.QueryParameter("pretty", "If 'true', then the output is pretty printed.")).
|
Param(ws.QueryParameter("pretty", "If 'true', then the output is pretty printed.")).
|
||||||
@ -917,9 +901,7 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag
|
|||||||
}
|
}
|
||||||
doc += ". deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter."
|
doc += ". deprecated: use the 'watch' parameter with a list operation instead, filtered to a single item with the 'fieldSelector' parameter."
|
||||||
handler := metrics.InstrumentRouteFunc(action.Verb, group, version, resource, subresource, requestScope, metrics.APIServerComponent, deprecated, removedRelease, restfulListResource(lister, watcher, reqScope, true, a.minRequestTimeout))
|
handler := metrics.InstrumentRouteFunc(action.Verb, group, version, resource, subresource, requestScope, metrics.APIServerComponent, deprecated, removedRelease, restfulListResource(lister, watcher, reqScope, true, a.minRequestTimeout))
|
||||||
if enableWarningHeaders {
|
handler = utilwarning.AddWarningsHandler(handler, warnings)
|
||||||
handler = utilwarning.AddWarningsHandler(handler, warnings)
|
|
||||||
}
|
|
||||||
route := ws.GET(action.Path).To(handler).
|
route := ws.GET(action.Path).To(handler).
|
||||||
Doc(doc).
|
Doc(doc).
|
||||||
Param(ws.QueryParameter("pretty", "If 'true', then the output is pretty printed.")).
|
Param(ws.QueryParameter("pretty", "If 'true', then the output is pretty printed.")).
|
||||||
@ -940,9 +922,7 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag
|
|||||||
}
|
}
|
||||||
doc += ". deprecated: use the 'watch' parameter with a list operation instead."
|
doc += ". deprecated: use the 'watch' parameter with a list operation instead."
|
||||||
handler := metrics.InstrumentRouteFunc(action.Verb, group, version, resource, subresource, requestScope, metrics.APIServerComponent, deprecated, removedRelease, restfulListResource(lister, watcher, reqScope, true, a.minRequestTimeout))
|
handler := metrics.InstrumentRouteFunc(action.Verb, group, version, resource, subresource, requestScope, metrics.APIServerComponent, deprecated, removedRelease, restfulListResource(lister, watcher, reqScope, true, a.minRequestTimeout))
|
||||||
if enableWarningHeaders {
|
handler = utilwarning.AddWarningsHandler(handler, warnings)
|
||||||
handler = utilwarning.AddWarningsHandler(handler, warnings)
|
|
||||||
}
|
|
||||||
route := ws.GET(action.Path).To(handler).
|
route := ws.GET(action.Path).To(handler).
|
||||||
Doc(doc).
|
Doc(doc).
|
||||||
Param(ws.QueryParameter("pretty", "If 'true', then the output is pretty printed.")).
|
Param(ws.QueryParameter("pretty", "If 'true', then the output is pretty printed.")).
|
||||||
@ -966,9 +946,7 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag
|
|||||||
doc = "connect " + method + " requests to " + subresource + " of " + kind
|
doc = "connect " + method + " requests to " + subresource + " of " + kind
|
||||||
}
|
}
|
||||||
handler := metrics.InstrumentRouteFunc(action.Verb, group, version, resource, subresource, requestScope, metrics.APIServerComponent, deprecated, removedRelease, restfulConnectResource(connecter, reqScope, admit, path, isSubresource))
|
handler := metrics.InstrumentRouteFunc(action.Verb, group, version, resource, subresource, requestScope, metrics.APIServerComponent, deprecated, removedRelease, restfulConnectResource(connecter, reqScope, admit, path, isSubresource))
|
||||||
if enableWarningHeaders {
|
handler = utilwarning.AddWarningsHandler(handler, warnings)
|
||||||
handler = utilwarning.AddWarningsHandler(handler, warnings)
|
|
||||||
}
|
|
||||||
route := ws.Method(method).Path(action.Path).
|
route := ws.Method(method).Path(action.Path).
|
||||||
To(handler).
|
To(handler).
|
||||||
Doc(doc).
|
Doc(doc).
|
||||||
|
@ -65,7 +65,7 @@ var (
|
|||||||
&compbasemetrics.GaugeOpts{
|
&compbasemetrics.GaugeOpts{
|
||||||
Name: "apiserver_requested_deprecated_apis",
|
Name: "apiserver_requested_deprecated_apis",
|
||||||
Help: "Gauge of deprecated APIs that have been requested, broken out by API group, version, resource, subresource, and removed_release.",
|
Help: "Gauge of deprecated APIs that have been requested, broken out by API group, version, resource, subresource, and removed_release.",
|
||||||
StabilityLevel: compbasemetrics.ALPHA,
|
StabilityLevel: compbasemetrics.STABLE,
|
||||||
},
|
},
|
||||||
[]string{"group", "version", "resource", "subresource", "removed_release"},
|
[]string{"group", "version", "resource", "subresource", "removed_release"},
|
||||||
)
|
)
|
||||||
|
@ -146,6 +146,7 @@ const (
|
|||||||
|
|
||||||
// owner: @liggitt
|
// owner: @liggitt
|
||||||
// beta: v1.19
|
// beta: v1.19
|
||||||
|
// GA: v1.22
|
||||||
//
|
//
|
||||||
// Allows sending warning headers in API responses.
|
// Allows sending warning headers in API responses.
|
||||||
WarningHeaders featuregate.Feature = "WarningHeaders"
|
WarningHeaders featuregate.Feature = "WarningHeaders"
|
||||||
@ -186,7 +187,7 @@ var defaultKubernetesFeatureGates = map[featuregate.Feature]featuregate.FeatureS
|
|||||||
APIPriorityAndFairness: {Default: true, PreRelease: featuregate.Beta},
|
APIPriorityAndFairness: {Default: true, PreRelease: featuregate.Beta},
|
||||||
RemoveSelfLink: {Default: true, PreRelease: featuregate.Beta},
|
RemoveSelfLink: {Default: true, PreRelease: featuregate.Beta},
|
||||||
SelectorIndex: {Default: true, PreRelease: featuregate.GA, LockToDefault: true},
|
SelectorIndex: {Default: true, PreRelease: featuregate.GA, LockToDefault: true},
|
||||||
WarningHeaders: {Default: true, PreRelease: featuregate.Beta},
|
WarningHeaders: {Default: true, PreRelease: featuregate.GA, LockToDefault: true},
|
||||||
EfficientWatchResumption: {Default: true, PreRelease: featuregate.Beta},
|
EfficientWatchResumption: {Default: true, PreRelease: featuregate.Beta},
|
||||||
APIServerIdentity: {Default: false, PreRelease: featuregate.Alpha},
|
APIServerIdentity: {Default: false, PreRelease: featuregate.Alpha},
|
||||||
}
|
}
|
||||||
|
@ -65,6 +65,17 @@
|
|||||||
- subresource
|
- subresource
|
||||||
- verb
|
- verb
|
||||||
- version
|
- version
|
||||||
|
- name: apiserver_requested_deprecated_apis
|
||||||
|
help: Gauge of deprecated APIs that have been requested, broken out by API group,
|
||||||
|
version, resource, subresource, and removed_release.
|
||||||
|
type: Gauge
|
||||||
|
stabilityLevel: STABLE
|
||||||
|
labels:
|
||||||
|
- group
|
||||||
|
- removed_release
|
||||||
|
- resource
|
||||||
|
- subresource
|
||||||
|
- version
|
||||||
- name: apiserver_storage_objects
|
- name: apiserver_storage_objects
|
||||||
help: Number of stored objects at the time of last check split by kind.
|
help: Number of stored objects at the time of last check split by kind.
|
||||||
type: Gauge
|
type: Gauge
|
||||||
|
Loading…
Reference in New Issue
Block a user