mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
3976a33c1a
Instead of not adding experimental routes at all, fail with an explicit message if the daemon is not running in experimental mode. Added the `router.Experimental` which does this automatically. Signed-off-by: Andrea Luzzardi <aluzzardi@gmail.com>
67 lines
1.7 KiB
Go
67 lines
1.7 KiB
Go
package router
|
|
|
|
import (
|
|
"errors"
|
|
"net/http"
|
|
|
|
"golang.org/x/net/context"
|
|
|
|
apierrors "github.com/docker/docker/api/errors"
|
|
"github.com/docker/docker/api/server/httputils"
|
|
)
|
|
|
|
var (
|
|
errExperimentalFeature = errors.New("This experimental feature is disabled by default. Start the Docker daemon with --experimental in order to enable it.")
|
|
)
|
|
|
|
// ExperimentalRoute defines an experimental API route that can be enabled or disabled.
|
|
type ExperimentalRoute interface {
|
|
Route
|
|
|
|
Enable()
|
|
Disable()
|
|
}
|
|
|
|
// experimentalRoute defines an experimental API route that can be enabled or disabled.
|
|
// It implements ExperimentalRoute
|
|
type experimentalRoute struct {
|
|
local Route
|
|
handler httputils.APIFunc
|
|
}
|
|
|
|
// Enable enables this experimental route
|
|
func (r *experimentalRoute) Enable() {
|
|
r.handler = r.local.Handler()
|
|
}
|
|
|
|
// Disable disables the experimental route
|
|
func (r *experimentalRoute) Disable() {
|
|
r.handler = experimentalHandler
|
|
}
|
|
|
|
func experimentalHandler(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
|
|
return apierrors.NewErrorWithStatusCode(errExperimentalFeature, http.StatusNotImplemented)
|
|
}
|
|
|
|
// Handler returns returns the APIFunc to let the server wrap it in middlewares.
|
|
func (r *experimentalRoute) Handler() httputils.APIFunc {
|
|
return r.handler
|
|
}
|
|
|
|
// Method returns the http method that the route responds to.
|
|
func (r *experimentalRoute) Method() string {
|
|
return r.local.Method()
|
|
}
|
|
|
|
// Path returns the subpath where the route responds to.
|
|
func (r *experimentalRoute) Path() string {
|
|
return r.local.Path()
|
|
}
|
|
|
|
// Experimental will mark a route as experimental.
|
|
func Experimental(r Route) Route {
|
|
return &experimentalRoute{
|
|
local: r,
|
|
handler: experimentalHandler,
|
|
}
|
|
}
|