mirror of
https://github.com/rancher/steve.git
synced 2025-07-01 17:22:13 +00:00
This implements the Imperative API that is served at /ext with Steve. The imperative API is compatible with Kubernetes' API server and will be used as an extension API server.
53 lines
1.7 KiB
Go
53 lines
1.7 KiB
Go
package router
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
"github.com/gorilla/mux"
|
|
"github.com/rancher/apiserver/pkg/urlbuilder"
|
|
)
|
|
|
|
type RouterFunc func(h Handlers) http.Handler
|
|
|
|
type Handlers struct {
|
|
K8sResource http.Handler
|
|
APIRoot http.Handler
|
|
K8sProxy http.Handler
|
|
Next http.Handler
|
|
// ExtensionAPIServer serves under /ext. If nil, the default unknown path
|
|
// handler is served.
|
|
ExtensionAPIServer http.Handler
|
|
}
|
|
|
|
func Routes(h Handlers) http.Handler {
|
|
m := mux.NewRouter()
|
|
m.UseEncodedPath()
|
|
m.StrictSlash(true)
|
|
m.Use(urlbuilder.RedirectRewrite)
|
|
|
|
m.Path("/").Handler(h.APIRoot).HeadersRegexp("Accept", ".*json.*")
|
|
m.Path("/{name:v1}").Handler(h.APIRoot)
|
|
|
|
if h.ExtensionAPIServer != nil {
|
|
m.Path("/ext").Handler(http.StripPrefix("/ext", h.ExtensionAPIServer))
|
|
m.PathPrefix("/ext/").Handler(http.StripPrefix("/ext", h.ExtensionAPIServer))
|
|
}
|
|
|
|
m.Path("/v1/{type}").Handler(h.K8sResource)
|
|
m.Path("/v1/{type}/{nameorns}").Queries("link", "{link}").Handler(h.K8sResource)
|
|
m.Path("/v1/{type}/{nameorns}").Queries("action", "{action}").Handler(h.K8sResource)
|
|
m.Path("/v1/{type}/{nameorns}").Handler(h.K8sResource)
|
|
m.Path("/v1/{type}/{namespace}/{name}").Queries("action", "{action}").Handler(h.K8sResource)
|
|
m.Path("/v1/{type}/{namespace}/{name}").Queries("link", "{link}").Handler(h.K8sResource)
|
|
m.Path("/v1/{type}/{namespace}/{name}").Handler(h.K8sResource)
|
|
m.Path("/v1/{type}/{namespace}/{name}/{link}").Handler(h.K8sResource)
|
|
m.Path("/api").Handler(h.K8sProxy) // Can't just prefix this as UI needs /apikeys path
|
|
m.PathPrefix("/api/").Handler(h.K8sProxy)
|
|
m.PathPrefix("/apis").Handler(h.K8sProxy)
|
|
m.PathPrefix("/openapi").Handler(h.K8sProxy)
|
|
m.PathPrefix("/version").Handler(h.K8sProxy)
|
|
m.NotFoundHandler = h.Next
|
|
|
|
return m
|
|
}
|