diff --git a/errors/errors.go b/api/errors/errors.go similarity index 100% rename from errors/errors.go rename to api/errors/errors.go diff --git a/api/server/httputils/errors.go b/api/server/httputils/errors.go index acfae85f98..d8d4972623 100644 --- a/api/server/httputils/errors.go +++ b/api/server/httputils/errors.go @@ -75,13 +75,18 @@ func GetHTTPErrorStatusCode(err error) int { return statusCode } +func apiVersionSupportsJSONErrors(version string) bool { + const firstAPIVersionWithJSONErrors = "1.23" + return version == "" || versions.GreaterThan(version, firstAPIVersionWithJSONErrors) +} + // MakeErrorHandler makes an HTTP handler that decodes a Docker error and // returns it in the response. func MakeErrorHandler(err error) http.HandlerFunc { return func(w http.ResponseWriter, r *http.Request) { statusCode := GetHTTPErrorStatusCode(err) vars := mux.Vars(r) - if vars["version"] == "" || versions.GreaterThan(vars["version"], "1.23") { + if apiVersionSupportsJSONErrors(vars["version"]) { response := &types.ErrorResponse{ Message: err.Error(), } diff --git a/api/server/middleware/version.go b/api/server/middleware/version.go index e0a4fc5f46..b6f62b212b 100644 --- a/api/server/middleware/version.go +++ b/api/server/middleware/version.go @@ -5,18 +5,11 @@ import ( "net/http" "runtime" + "github.com/docker/docker/api/errors" "github.com/docker/docker/api/types/versions" "golang.org/x/net/context" ) -type badRequestError struct { - error -} - -func (badRequestError) HTTPErrorStatusCode() int { - return http.StatusBadRequest -} - // VersionMiddleware is a middleware that // validates the client and server versions. type VersionMiddleware struct { @@ -44,10 +37,10 @@ func (v VersionMiddleware) WrapHandler(handler func(ctx context.Context, w http. } if versions.GreaterThan(apiVersion, v.defaultVersion) { - return badRequestError{fmt.Errorf("client is newer than server (client API version: %s, server API version: %s)", apiVersion, v.defaultVersion)} + return errors.NewBadRequestError(fmt.Errorf("client is newer than server (client API version: %s, server API version: %s)", apiVersion, v.defaultVersion)) } if versions.LessThan(apiVersion, v.minVersion) { - return badRequestError{fmt.Errorf("client version %s is too old. Minimum supported API version is %s, please upgrade your client to a newer version", apiVersion, v.minVersion)} + return errors.NewBadRequestError(fmt.Errorf("client version %s is too old. Minimum supported API version is %s, please upgrade your client to a newer version", apiVersion, v.minVersion)) } header := fmt.Sprintf("Docker/%s (%s)", v.serverVersion, runtime.GOOS) diff --git a/api/server/router/system/system_routes.go b/api/server/router/system/system_routes.go index 69e0e924cf..2a1cf384a1 100644 --- a/api/server/router/system/system_routes.go +++ b/api/server/router/system/system_routes.go @@ -8,13 +8,13 @@ import ( "github.com/Sirupsen/logrus" "github.com/docker/docker/api" + "github.com/docker/docker/api/errors" "github.com/docker/docker/api/server/httputils" "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/events" "github.com/docker/docker/api/types/filters" timetypes "github.com/docker/docker/api/types/time" "github.com/docker/docker/api/types/versions" - "github.com/docker/docker/errors" "github.com/docker/docker/pkg/ioutils" "golang.org/x/net/context" ) diff --git a/api/server/server.go b/api/server/server.go index 84a0558ae3..78835b041a 100644 --- a/api/server/server.go +++ b/api/server/server.go @@ -8,10 +8,10 @@ import ( "strings" "github.com/Sirupsen/logrus" + "github.com/docker/docker/api/errors" "github.com/docker/docker/api/server/httputils" "github.com/docker/docker/api/server/middleware" "github.com/docker/docker/api/server/router" - "github.com/docker/docker/errors" "github.com/gorilla/mux" "golang.org/x/net/context" ) diff --git a/daemon/attach.go b/daemon/attach.go index 3d4a51eead..917237dd89 100644 --- a/daemon/attach.go +++ b/daemon/attach.go @@ -6,10 +6,10 @@ import ( "time" "github.com/Sirupsen/logrus" + "github.com/docker/docker/api/errors" "github.com/docker/docker/api/types/backend" "github.com/docker/docker/container" "github.com/docker/docker/daemon/logger" - "github.com/docker/docker/errors" "github.com/docker/docker/pkg/stdcopy" "github.com/docker/docker/pkg/term" ) diff --git a/daemon/cluster/cluster.go b/daemon/cluster/cluster.go index 520c0f47e9..0850e80512 100644 --- a/daemon/cluster/cluster.go +++ b/daemon/cluster/cluster.go @@ -14,6 +14,7 @@ import ( "google.golang.org/grpc" "github.com/Sirupsen/logrus" + "github.com/docker/docker/api/errors" apitypes "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/filters" "github.com/docker/docker/api/types/network" @@ -21,7 +22,6 @@ import ( "github.com/docker/docker/daemon/cluster/convert" executorpkg "github.com/docker/docker/daemon/cluster/executor" "github.com/docker/docker/daemon/cluster/executor/container" - "github.com/docker/docker/errors" "github.com/docker/docker/opts" "github.com/docker/docker/pkg/ioutils" "github.com/docker/docker/pkg/signal" diff --git a/daemon/container.go b/daemon/container.go index bd9a307c12..ef1535850a 100644 --- a/daemon/container.go +++ b/daemon/container.go @@ -6,11 +6,11 @@ import ( "regexp" "time" + "github.com/docker/docker/api/errors" containertypes "github.com/docker/docker/api/types/container" "github.com/docker/docker/api/types/strslice" "github.com/docker/docker/container" "github.com/docker/docker/daemon/network" - "github.com/docker/docker/errors" "github.com/docker/docker/image" "github.com/docker/docker/pkg/signal" "github.com/docker/docker/pkg/system" diff --git a/daemon/container_operations.go b/daemon/container_operations.go index cb30d77f2e..22883e0360 100644 --- a/daemon/container_operations.go +++ b/daemon/container_operations.go @@ -9,11 +9,11 @@ import ( "strings" "github.com/Sirupsen/logrus" + derr "github.com/docker/docker/api/errors" containertypes "github.com/docker/docker/api/types/container" networktypes "github.com/docker/docker/api/types/network" "github.com/docker/docker/container" "github.com/docker/docker/daemon/network" - derr "github.com/docker/docker/errors" "github.com/docker/docker/pkg/stringid" "github.com/docker/docker/runconfig" "github.com/docker/go-connections/nat" diff --git a/daemon/create.go b/daemon/create.go index 64f7527521..bf8c90e3ef 100644 --- a/daemon/create.go +++ b/daemon/create.go @@ -6,11 +6,11 @@ import ( "strings" "github.com/Sirupsen/logrus" + "github.com/docker/docker/api/errors" "github.com/docker/docker/api/types" containertypes "github.com/docker/docker/api/types/container" networktypes "github.com/docker/docker/api/types/network" "github.com/docker/docker/container" - "github.com/docker/docker/errors" "github.com/docker/docker/image" "github.com/docker/docker/layer" "github.com/docker/docker/pkg/idtools" diff --git a/daemon/delete.go b/daemon/delete.go index 9658a40325..f1272d903a 100644 --- a/daemon/delete.go +++ b/daemon/delete.go @@ -7,9 +7,9 @@ import ( "strings" "github.com/Sirupsen/logrus" + "github.com/docker/docker/api/errors" "github.com/docker/docker/api/types" "github.com/docker/docker/container" - "github.com/docker/docker/errors" "github.com/docker/docker/layer" volumestore "github.com/docker/docker/volume/store" ) diff --git a/daemon/errors.go b/daemon/errors.go index 131c9a1e22..566a32f175 100644 --- a/daemon/errors.go +++ b/daemon/errors.go @@ -4,7 +4,7 @@ import ( "fmt" "strings" - "github.com/docker/docker/errors" + "github.com/docker/docker/api/errors" "github.com/docker/docker/reference" ) diff --git a/daemon/exec.go b/daemon/exec.go index e7352e81d8..ed3eb7a237 100644 --- a/daemon/exec.go +++ b/daemon/exec.go @@ -9,11 +9,11 @@ import ( "golang.org/x/net/context" "github.com/Sirupsen/logrus" + "github.com/docker/docker/api/errors" "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/strslice" "github.com/docker/docker/container" "github.com/docker/docker/daemon/exec" - "github.com/docker/docker/errors" "github.com/docker/docker/libcontainerd" "github.com/docker/docker/pkg/pools" "github.com/docker/docker/pkg/signal" diff --git a/daemon/image_delete.go b/daemon/image_delete.go index b071fca769..a492d2ad73 100644 --- a/daemon/image_delete.go +++ b/daemon/image_delete.go @@ -4,9 +4,9 @@ import ( "fmt" "strings" + "github.com/docker/docker/api/errors" "github.com/docker/docker/api/types" "github.com/docker/docker/container" - "github.com/docker/docker/errors" "github.com/docker/docker/image" "github.com/docker/docker/pkg/stringid" "github.com/docker/docker/reference" diff --git a/daemon/network.go b/daemon/network.go index b15906b519..57547993ed 100644 --- a/daemon/network.go +++ b/daemon/network.go @@ -7,10 +7,10 @@ import ( "strings" "github.com/Sirupsen/logrus" + "github.com/docker/docker/api/errors" "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/network" clustertypes "github.com/docker/docker/daemon/cluster/provider" - "github.com/docker/docker/errors" "github.com/docker/docker/runconfig" "github.com/docker/libnetwork" networktypes "github.com/docker/libnetwork/types" diff --git a/daemon/start.go b/daemon/start.go index 488cbb5d54..ed79117c8b 100644 --- a/daemon/start.go +++ b/daemon/start.go @@ -10,10 +10,10 @@ import ( "google.golang.org/grpc" "github.com/Sirupsen/logrus" + "github.com/docker/docker/api/errors" "github.com/docker/docker/api/types" containertypes "github.com/docker/docker/api/types/container" "github.com/docker/docker/container" - "github.com/docker/docker/errors" "github.com/docker/docker/libcontainerd" "github.com/docker/docker/runconfig" ) diff --git a/daemon/stop.go b/daemon/stop.go index 4bbdbbd74c..6faafa41cf 100644 --- a/daemon/stop.go +++ b/daemon/stop.go @@ -6,8 +6,8 @@ import ( "time" "github.com/Sirupsen/logrus" + "github.com/docker/docker/api/errors" "github.com/docker/docker/container" - "github.com/docker/docker/errors" ) // ContainerStop looks for the given container and terminates it, diff --git a/daemon/volumes.go b/daemon/volumes.go index 2f50bdb492..7680e7005e 100644 --- a/daemon/volumes.go +++ b/daemon/volumes.go @@ -7,11 +7,11 @@ import ( "path/filepath" "strings" + dockererrors "github.com/docker/docker/api/errors" "github.com/docker/docker/api/types" containertypes "github.com/docker/docker/api/types/container" mounttypes "github.com/docker/docker/api/types/mount" "github.com/docker/docker/container" - dockererrors "github.com/docker/docker/errors" "github.com/docker/docker/volume" "github.com/opencontainers/runc/libcontainer/label" ) diff --git a/runconfig/errors.go b/runconfig/errors.go index 6602937233..bb72c1699c 100644 --- a/runconfig/errors.go +++ b/runconfig/errors.go @@ -3,7 +3,7 @@ package runconfig import ( "fmt" - "github.com/docker/docker/errors" + "github.com/docker/docker/api/errors" ) var (