|
|
|
|
@@ -550,25 +550,24 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag
|
|
|
|
|
versionedObject = defaultVersionedObject
|
|
|
|
|
}
|
|
|
|
|
reqScope.Namer = action.Namer
|
|
|
|
|
namespaced := ""
|
|
|
|
|
|
|
|
|
|
requestScope := "cluster"
|
|
|
|
|
var namespaced string
|
|
|
|
|
var operationSuffix string
|
|
|
|
|
if apiResource.Namespaced {
|
|
|
|
|
requestScope = "namespace"
|
|
|
|
|
namespaced = "Namespaced"
|
|
|
|
|
}
|
|
|
|
|
operationSuffix := ""
|
|
|
|
|
if strings.HasSuffix(action.Path, "/{path:*}") {
|
|
|
|
|
requestScope = "resource"
|
|
|
|
|
operationSuffix = operationSuffix + "WithPath"
|
|
|
|
|
}
|
|
|
|
|
if action.AllNamespaces {
|
|
|
|
|
requestScope = "cluster"
|
|
|
|
|
operationSuffix = operationSuffix + "ForAllNamespaces"
|
|
|
|
|
namespaced = ""
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// This variable is calculated for the purpose of instrumentation.
|
|
|
|
|
namespaceScope := "cluster"
|
|
|
|
|
if namespaced != "" {
|
|
|
|
|
namespaceScope = "namespace"
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if kubeVerb, found := toDiscoveryKubeVerb[action.Verb]; found {
|
|
|
|
|
if len(kubeVerb) != 0 {
|
|
|
|
|
kubeVerbs[kubeVerb] = struct{}{}
|
|
|
|
|
@@ -601,9 +600,9 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag
|
|
|
|
|
|
|
|
|
|
if needOverride {
|
|
|
|
|
// need change the reported verb
|
|
|
|
|
handler = metrics.InstrumentRouteFunc(verbOverrider.OverrideMetricsVerb(action.Verb), resource, subresource, namespaceScope, handler)
|
|
|
|
|
handler = metrics.InstrumentRouteFunc(verbOverrider.OverrideMetricsVerb(action.Verb), resource, subresource, requestScope, handler)
|
|
|
|
|
} else {
|
|
|
|
|
handler = metrics.InstrumentRouteFunc(action.Verb, resource, subresource, namespaceScope, handler)
|
|
|
|
|
handler = metrics.InstrumentRouteFunc(action.Verb, resource, subresource, requestScope, handler)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if a.enableAPIResponseCompression {
|
|
|
|
|
@@ -637,7 +636,7 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag
|
|
|
|
|
if hasSubresource {
|
|
|
|
|
doc = "list " + subresource + " of objects of kind " + kind
|
|
|
|
|
}
|
|
|
|
|
handler := metrics.InstrumentRouteFunc(action.Verb, resource, subresource, namespaceScope, restfulListResource(lister, watcher, reqScope, false, a.minRequestTimeout))
|
|
|
|
|
handler := metrics.InstrumentRouteFunc(action.Verb, resource, subresource, requestScope, restfulListResource(lister, watcher, reqScope, false, a.minRequestTimeout))
|
|
|
|
|
if a.enableAPIResponseCompression {
|
|
|
|
|
handler = genericfilters.RestfulWithCompression(handler, a.group.Context)
|
|
|
|
|
}
|
|
|
|
|
@@ -672,7 +671,7 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag
|
|
|
|
|
if hasSubresource {
|
|
|
|
|
doc = "replace " + subresource + " of the specified " + kind
|
|
|
|
|
}
|
|
|
|
|
handler := metrics.InstrumentRouteFunc(action.Verb, resource, subresource, namespaceScope, restfulUpdateResource(updater, reqScope, a.group.Typer, admit))
|
|
|
|
|
handler := metrics.InstrumentRouteFunc(action.Verb, resource, subresource, requestScope, restfulUpdateResource(updater, reqScope, a.group.Typer, admit))
|
|
|
|
|
route := ws.PUT(action.Path).To(handler).
|
|
|
|
|
Doc(doc).
|
|
|
|
|
Param(ws.QueryParameter("pretty", "If 'true', then the output is pretty printed.")).
|
|
|
|
|
@@ -688,7 +687,7 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag
|
|
|
|
|
if hasSubresource {
|
|
|
|
|
doc = "partially update " + subresource + " of the specified " + kind
|
|
|
|
|
}
|
|
|
|
|
handler := metrics.InstrumentRouteFunc(action.Verb, resource, subresource, namespaceScope, restfulPatchResource(patcher, reqScope, admit, mapping.ObjectConvertor))
|
|
|
|
|
handler := metrics.InstrumentRouteFunc(action.Verb, resource, subresource, requestScope, restfulPatchResource(patcher, reqScope, admit, mapping.ObjectConvertor))
|
|
|
|
|
route := ws.PATCH(action.Path).To(handler).
|
|
|
|
|
Doc(doc).
|
|
|
|
|
Param(ws.QueryParameter("pretty", "If 'true', then the output is pretty printed.")).
|
|
|
|
|
@@ -707,7 +706,7 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag
|
|
|
|
|
} else {
|
|
|
|
|
handler = restfulCreateResource(creater, reqScope, a.group.Typer, admit)
|
|
|
|
|
}
|
|
|
|
|
handler = metrics.InstrumentRouteFunc(action.Verb, resource, subresource, namespaceScope, handler)
|
|
|
|
|
handler = metrics.InstrumentRouteFunc(action.Verb, resource, subresource, requestScope, handler)
|
|
|
|
|
article := getArticleForNoun(kind, " ")
|
|
|
|
|
doc := "create" + article + kind
|
|
|
|
|
if hasSubresource {
|
|
|
|
|
@@ -729,7 +728,7 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag
|
|
|
|
|
if hasSubresource {
|
|
|
|
|
doc = "delete " + subresource + " of" + article + kind
|
|
|
|
|
}
|
|
|
|
|
handler := metrics.InstrumentRouteFunc(action.Verb, resource, subresource, namespaceScope, restfulDeleteResource(gracefulDeleter, isGracefulDeleter, reqScope, admit))
|
|
|
|
|
handler := metrics.InstrumentRouteFunc(action.Verb, resource, subresource, requestScope, restfulDeleteResource(gracefulDeleter, isGracefulDeleter, reqScope, admit))
|
|
|
|
|
route := ws.DELETE(action.Path).To(handler).
|
|
|
|
|
Doc(doc).
|
|
|
|
|
Param(ws.QueryParameter("pretty", "If 'true', then the output is pretty printed.")).
|
|
|
|
|
@@ -750,7 +749,7 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag
|
|
|
|
|
if hasSubresource {
|
|
|
|
|
doc = "delete collection of " + subresource + " of a " + kind
|
|
|
|
|
}
|
|
|
|
|
handler := metrics.InstrumentRouteFunc(action.Verb, resource, subresource, namespaceScope, restfulDeleteCollection(collectionDeleter, isCollectionDeleter, reqScope, admit))
|
|
|
|
|
handler := metrics.InstrumentRouteFunc(action.Verb, resource, subresource, requestScope, restfulDeleteCollection(collectionDeleter, isCollectionDeleter, reqScope, admit))
|
|
|
|
|
route := ws.DELETE(action.Path).To(handler).
|
|
|
|
|
Doc(doc).
|
|
|
|
|
Param(ws.QueryParameter("pretty", "If 'true', then the output is pretty printed.")).
|
|
|
|
|
@@ -769,7 +768,7 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag
|
|
|
|
|
if hasSubresource {
|
|
|
|
|
doc = "watch changes to " + subresource + " of an object of kind " + kind
|
|
|
|
|
}
|
|
|
|
|
handler := metrics.InstrumentRouteFunc(action.Verb, resource, subresource, namespaceScope, restfulListResource(lister, watcher, reqScope, true, a.minRequestTimeout))
|
|
|
|
|
handler := metrics.InstrumentRouteFunc(action.Verb, resource, subresource, requestScope, restfulListResource(lister, watcher, reqScope, true, a.minRequestTimeout))
|
|
|
|
|
route := ws.GET(action.Path).To(handler).
|
|
|
|
|
Doc(doc).
|
|
|
|
|
Param(ws.QueryParameter("pretty", "If 'true', then the output is pretty printed.")).
|
|
|
|
|
@@ -788,7 +787,7 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag
|
|
|
|
|
if hasSubresource {
|
|
|
|
|
doc = "watch individual changes to a list of " + subresource + " of " + kind
|
|
|
|
|
}
|
|
|
|
|
handler := metrics.InstrumentRouteFunc(action.Verb, resource, subresource, namespaceScope, restfulListResource(lister, watcher, reqScope, true, a.minRequestTimeout))
|
|
|
|
|
handler := metrics.InstrumentRouteFunc(action.Verb, resource, subresource, requestScope, restfulListResource(lister, watcher, reqScope, true, a.minRequestTimeout))
|
|
|
|
|
route := ws.GET(action.Path).To(handler).
|
|
|
|
|
Doc(doc).
|
|
|
|
|
Param(ws.QueryParameter("pretty", "If 'true', then the output is pretty printed.")).
|
|
|
|
|
@@ -806,20 +805,20 @@ func (a *APIInstaller) registerResourceHandlers(path string, storage rest.Storag
|
|
|
|
|
// TODO: DEPRECATED in v1.2.
|
|
|
|
|
case "PROXY": // Proxy requests to a resource.
|
|
|
|
|
// Accept all methods as per http://issue.k8s.io/3996
|
|
|
|
|
routes = append(routes, buildProxyRoute(ws, "GET", a.prefix, action.Path, kind, resource, subresource, namespaced, namespaceScope, hasSubresource, action.Params, proxyHandler, operationSuffix))
|
|
|
|
|
routes = append(routes, buildProxyRoute(ws, "PUT", a.prefix, action.Path, kind, resource, subresource, namespaced, namespaceScope, hasSubresource, action.Params, proxyHandler, operationSuffix))
|
|
|
|
|
routes = append(routes, buildProxyRoute(ws, "POST", a.prefix, action.Path, kind, resource, subresource, namespaced, namespaceScope, hasSubresource, action.Params, proxyHandler, operationSuffix))
|
|
|
|
|
routes = append(routes, buildProxyRoute(ws, "PATCH", a.prefix, action.Path, kind, resource, subresource, namespaced, namespaceScope, hasSubresource, action.Params, proxyHandler, operationSuffix))
|
|
|
|
|
routes = append(routes, buildProxyRoute(ws, "DELETE", a.prefix, action.Path, kind, resource, subresource, namespaced, namespaceScope, hasSubresource, action.Params, proxyHandler, operationSuffix))
|
|
|
|
|
routes = append(routes, buildProxyRoute(ws, "HEAD", a.prefix, action.Path, kind, resource, subresource, namespaced, namespaceScope, hasSubresource, action.Params, proxyHandler, operationSuffix))
|
|
|
|
|
routes = append(routes, buildProxyRoute(ws, "OPTIONS", a.prefix, action.Path, kind, resource, subresource, namespaced, namespaceScope, hasSubresource, action.Params, proxyHandler, operationSuffix))
|
|
|
|
|
routes = append(routes, buildProxyRoute(ws, "GET", a.prefix, action.Path, kind, resource, subresource, namespaced, requestScope, hasSubresource, action.Params, proxyHandler, operationSuffix))
|
|
|
|
|
routes = append(routes, buildProxyRoute(ws, "PUT", a.prefix, action.Path, kind, resource, subresource, namespaced, requestScope, hasSubresource, action.Params, proxyHandler, operationSuffix))
|
|
|
|
|
routes = append(routes, buildProxyRoute(ws, "POST", a.prefix, action.Path, kind, resource, subresource, namespaced, requestScope, hasSubresource, action.Params, proxyHandler, operationSuffix))
|
|
|
|
|
routes = append(routes, buildProxyRoute(ws, "PATCH", a.prefix, action.Path, kind, resource, subresource, namespaced, requestScope, hasSubresource, action.Params, proxyHandler, operationSuffix))
|
|
|
|
|
routes = append(routes, buildProxyRoute(ws, "DELETE", a.prefix, action.Path, kind, resource, subresource, namespaced, requestScope, hasSubresource, action.Params, proxyHandler, operationSuffix))
|
|
|
|
|
routes = append(routes, buildProxyRoute(ws, "HEAD", a.prefix, action.Path, kind, resource, subresource, namespaced, requestScope, hasSubresource, action.Params, proxyHandler, operationSuffix))
|
|
|
|
|
routes = append(routes, buildProxyRoute(ws, "OPTIONS", a.prefix, action.Path, kind, resource, subresource, namespaced, requestScope, hasSubresource, action.Params, proxyHandler, operationSuffix))
|
|
|
|
|
case "CONNECT":
|
|
|
|
|
for _, method := range connecter.ConnectMethods() {
|
|
|
|
|
doc := "connect " + method + " requests to " + kind
|
|
|
|
|
if hasSubresource {
|
|
|
|
|
doc = "connect " + method + " requests to " + subresource + " of " + kind
|
|
|
|
|
}
|
|
|
|
|
handler := metrics.InstrumentRouteFunc(action.Verb, resource, subresource, namespaceScope, restfulConnectResource(connecter, reqScope, admit, path, hasSubresource))
|
|
|
|
|
handler := metrics.InstrumentRouteFunc(action.Verb, resource, subresource, requestScope, restfulConnectResource(connecter, reqScope, admit, path, hasSubresource))
|
|
|
|
|
route := ws.Method(method).Path(action.Path).
|
|
|
|
|
To(handler).
|
|
|
|
|
Doc(doc).
|
|
|
|
|
@@ -892,7 +891,7 @@ func routeFunction(handler http.Handler) restful.RouteFunction {
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func buildProxyRoute(ws *restful.WebService,
|
|
|
|
|
method, prefix, path, kind, resource, subresource, namespaced, namespaceScope string,
|
|
|
|
|
method, prefix, path, kind, resource, subresource, namespaced, requestScope string,
|
|
|
|
|
hasSubresource bool,
|
|
|
|
|
params []*restful.Parameter,
|
|
|
|
|
proxyHandler http.Handler,
|
|
|
|
|
@@ -901,7 +900,7 @@ func buildProxyRoute(ws *restful.WebService,
|
|
|
|
|
if hasSubresource {
|
|
|
|
|
doc = "proxy " + method + " requests to " + subresource + " of " + kind
|
|
|
|
|
}
|
|
|
|
|
handler := metrics.InstrumentRouteFunc("PROXY", resource, subresource, namespaceScope, routeFunction(proxyHandler))
|
|
|
|
|
handler := metrics.InstrumentRouteFunc("PROXY", resource, subresource, requestScope, routeFunction(proxyHandler))
|
|
|
|
|
proxyRoute := ws.Method(method).Path(path).To(handler).
|
|
|
|
|
Doc(doc).
|
|
|
|
|
Operation("proxy" + strings.Title(method) + namespaced + kind + strings.Title(subresource) + operationSuffix).
|
|
|
|
|
|