From 15165b99b621a27c0c50c372bc849f80e2c1aa89 Mon Sep 17 00:00:00 2001 From: Yong Tang Date: Thu, 11 Jan 2018 18:02:08 +0000 Subject: [PATCH 01/12] Add required pkg-config for Dockerfile.simple This fix tries to address the issue raised in 35980 where pkg-config was missing and was causing Dockerfile.simple build to fail. ``` $ docker build -t docker:simple -f Dockerfile.simple . .......... CGO_ENABLED=1 go build -tags "seccomp apparmor selinux netgo cgo static_build" -installsuffix netgo -ldflags "-w -extldflags -static -X main.gitCommit="b2567b37d7b75eb4cf325b77297b140ea686ce8f" -X main.version=1.0.0-rc4+dev " -o runc . pkg-config: exec: "pkg-config": executable file not found in $PATH make: *** [static] Error 2 Makefile:42: recipe for target 'static' failed The command '/bin/sh -c /tmp/install-binaries.sh runc containerd tini proxy dockercli' returned a non-zero code: 2 ``` This fix fixes 35980. Signed-off-by: Yong Tang Upstream-commit: a018046ad0462c78601863784d3b882e77a7281b Component: engine --- components/engine/Dockerfile.simple | 1 + 1 file changed, 1 insertion(+) diff --git a/components/engine/Dockerfile.simple b/components/engine/Dockerfile.simple index 2a5d30bac0..d048d909cd 100644 --- a/components/engine/Dockerfile.simple +++ b/components/engine/Dockerfile.simple @@ -27,6 +27,7 @@ RUN apt-get update && apt-get install -y --no-install-recommends \ ca-certificates \ e2fsprogs \ iptables \ + pkg-config \ procps \ xfsprogs \ xz-utils \ From 952c29f8dadffda5b26b5b1f92187430620256cb Mon Sep 17 00:00:00 2001 From: Brian Goff Date: Tue, 28 Nov 2017 23:09:37 -0500 Subject: [PATCH 02/12] Add helpers to create errdef errors Instead of having to create a bunch of custom error types that are doing nothing but wrapping another error in sub-packages, use a common helper to create errors of the requested type. e.g. instead of re-implementing this over and over: ```go type notFoundError struct { cause error } func(e notFoundError) Error() string { return e.cause.Error() } func(e notFoundError) NotFound() {} func(e notFoundError) Cause() error { return e.cause } ``` Packages can instead just do: ``` errdefs.NotFound(err) ``` Signed-off-by: Brian Goff Upstream-commit: 87a12421a94faac294079bebc97c8abb4180dde5 Component: engine --- components/engine/api/errdefs/defs.go | 20 ++ components/engine/api/errdefs/helpers.go | 240 ++++++++++++++++++ components/engine/api/errdefs/helpers_test.go | 132 ++++++++++ components/engine/api/errdefs/is.go | 28 ++ .../engine/api/server/httputils/errors.go | 4 +- .../engine/api/server/httputils/httputils.go | 19 +- .../api/server/router/build/build_routes.go | 23 +- .../api/server/router/container/container.go | 14 - .../router/container/container_routes.go | 12 +- .../api/server/router/container/exec.go | 5 +- .../api/server/router/image/image_routes.go | 17 +- .../server/router/network/network_routes.go | 24 +- .../server/router/session/session_routes.go | 17 +- .../api/server/router/swarm/cluster_routes.go | 39 +-- .../engine/builder/dockerfile/builder.go | 11 +- .../engine/builder/dockerfile/dispatchers.go | 3 +- .../engine/builder/dockerfile/errors.go | 15 -- .../engine/builder/dockerfile/evaluator.go | 5 +- .../engine/builder/remotecontext/errors.go | 75 ------ .../engine/builder/remotecontext/remote.go | 21 +- components/engine/daemon/archive.go | 17 +- components/engine/daemon/attach.go | 7 +- components/engine/daemon/cluster/errors.go | 56 ---- components/engine/daemon/cluster/helpers.go | 23 +- components/engine/daemon/cluster/networks.go | 3 +- components/engine/daemon/cluster/nodes.go | 3 +- components/engine/daemon/cluster/services.go | 5 +- components/engine/daemon/cluster/swarm.go | 11 +- components/engine/daemon/commit.go | 5 +- components/engine/daemon/container.go | 5 +- components/engine/daemon/container_linux.go | 3 +- .../engine/daemon/container_operations.go | 3 +- .../daemon/container_operations_unix.go | 3 +- components/engine/daemon/create.go | 15 +- components/engine/daemon/delete.go | 7 +- components/engine/daemon/errors.go | 81 +----- components/engine/daemon/exec.go | 7 +- components/engine/daemon/export.go | 5 +- components/engine/daemon/image.go | 3 +- components/engine/daemon/image_delete.go | 3 +- components/engine/daemon/image_pull.go | 7 +- components/engine/daemon/import.go | 9 +- components/engine/daemon/inspect.go | 5 +- components/engine/daemon/list.go | 3 +- components/engine/daemon/logs.go | 5 +- components/engine/daemon/names.go | 3 +- components/engine/daemon/network.go | 17 +- components/engine/daemon/rename.go | 7 +- components/engine/daemon/start.go | 27 +- components/engine/daemon/start_unix.go | 3 +- components/engine/daemon/stop.go | 3 +- components/engine/daemon/update.go | 5 +- components/engine/daemon/volumes.go | 3 +- components/engine/distribution/errors.go | 17 +- .../engine/libcontainerd/client_daemon.go | 21 +- components/engine/libcontainerd/errors.go | 47 +--- components/engine/plugin/backend_linux.go | 13 +- components/engine/plugin/errors.go | 28 -- components/engine/plugin/manager_linux.go | 9 +- components/engine/plugin/store.go | 5 +- components/engine/registry/auth.go | 15 +- components/engine/registry/errors.go | 59 +---- components/engine/registry/service.go | 5 +- components/engine/registry/session.go | 7 +- components/engine/volume/local/local.go | 31 +-- 65 files changed, 682 insertions(+), 661 deletions(-) create mode 100644 components/engine/api/errdefs/helpers.go create mode 100644 components/engine/api/errdefs/helpers_test.go delete mode 100644 components/engine/builder/dockerfile/errors.go delete mode 100644 components/engine/builder/remotecontext/errors.go diff --git a/components/engine/api/errdefs/defs.go b/components/engine/api/errdefs/defs.go index 4987c623f0..29c3619600 100644 --- a/components/engine/api/errdefs/defs.go +++ b/components/engine/api/errdefs/defs.go @@ -43,6 +43,11 @@ type ErrNotModified interface { NotModified() } +// ErrAlreadyExists is a special case of ErrConflict which signals that the desired object already exists +type ErrAlreadyExists interface { + AlreadyExists() +} + // ErrNotImplemented signals that the requested action/feature is not implemented on the system as configured. type ErrNotImplemented interface { NotImplemented() @@ -52,3 +57,18 @@ type ErrNotImplemented interface { type ErrUnknown interface { Unknown() } + +// ErrCancelled signals that the action was cancelled. +type ErrCancelled interface { + Cancelled() +} + +// ErrDeadline signals that the deadline was reached before the action completed. +type ErrDeadline interface { + DeadlineExceeded() +} + +// ErrDataLoss indicates that data was lost or there is data corruption. +type ErrDataLoss interface { + DataLoss() +} diff --git a/components/engine/api/errdefs/helpers.go b/components/engine/api/errdefs/helpers.go new file mode 100644 index 0000000000..5afa944461 --- /dev/null +++ b/components/engine/api/errdefs/helpers.go @@ -0,0 +1,240 @@ +package errdefs + +import "context" + +type errNotFound struct{ error } + +func (errNotFound) NotFound() {} + +func (e errNotFound) Cause() error { + return e.error +} + +// NotFound is a helper to create an error of the class with the same name from any error type +func NotFound(err error) error { + if err == nil { + return nil + } + return errNotFound{err} +} + +type errInvalidParameter struct{ error } + +func (errInvalidParameter) InvalidParameter() {} + +func (e errInvalidParameter) Cause() error { + return e.error +} + +// InvalidParameter is a helper to create an error of the class with the same name from any error type +func InvalidParameter(err error) error { + if err == nil { + return nil + } + return errInvalidParameter{err} +} + +type errConflict struct{ error } + +func (errConflict) Conflict() {} + +func (e errConflict) Cause() error { + return e.error +} + +// Conflict is a helper to create an error of the class with the same name from any error type +func Conflict(err error) error { + if err == nil { + return nil + } + return errConflict{err} +} + +type errUnauthorized struct{ error } + +func (errUnauthorized) Unauthorized() {} + +func (e errUnauthorized) Cause() error { + return e.error +} + +// Unauthorized is a helper to create an error of the class with the same name from any error type +func Unauthorized(err error) error { + if err == nil { + return nil + } + return errUnauthorized{err} +} + +type errUnavailable struct{ error } + +func (errUnavailable) Unavailable() {} + +func (e errUnavailable) Cause() error { + return e.error +} + +// Unavailable is a helper to create an error of the class with the same name from any error type +func Unavailable(err error) error { + return errUnavailable{err} +} + +type errForbidden struct{ error } + +func (errForbidden) Forbidden() {} + +func (e errForbidden) Cause() error { + return e.error +} + +// Forbidden is a helper to create an error of the class with the same name from any error type +func Forbidden(err error) error { + if err == nil { + return nil + } + return errForbidden{err} +} + +type errSystem struct{ error } + +func (errSystem) System() {} + +func (e errSystem) Cause() error { + return e.error +} + +// System is a helper to create an error of the class with the same name from any error type +func System(err error) error { + if err == nil { + return nil + } + return errSystem{err} +} + +type errNotModified struct{ error } + +func (errNotModified) NotModified() {} + +func (e errNotModified) Cause() error { + return e.error +} + +// NotModified is a helper to create an error of the class with the same name from any error type +func NotModified(err error) error { + if err == nil { + return nil + } + return errNotModified{err} +} + +type errAlreadyExists struct{ error } + +func (errAlreadyExists) AlreadyExists() {} + +func (e errAlreadyExists) Cause() error { + return e.error +} + +// AlreadyExists is a helper to create an error of the class with the same name from any error type +func AlreadyExists(err error) error { + if err == nil { + return nil + } + return errAlreadyExists{err} +} + +type errNotImplemented struct{ error } + +func (errNotImplemented) NotImplemented() {} + +func (e errNotImplemented) Cause() error { + return e.error +} + +// NotImplemented is a helper to create an error of the class with the same name from any error type +func NotImplemented(err error) error { + if err == nil { + return nil + } + return errNotImplemented{err} +} + +type errUnknown struct{ error } + +func (errUnknown) Unknown() {} + +func (e errUnknown) Cause() error { + return e.error +} + +// Unknown is a helper to create an error of the class with the same name from any error type +func Unknown(err error) error { + if err == nil { + return nil + } + return errUnknown{err} +} + +type errCancelled struct{ error } + +func (errCancelled) Cancelled() {} + +func (e errCancelled) Cause() error { + return e.error +} + +// Cancelled is a helper to create an error of the class with the same name from any error type +func Cancelled(err error) error { + if err == nil { + return nil + } + return errCancelled{err} +} + +type errDeadline struct{ error } + +func (errDeadline) DeadlineExceeded() {} + +func (e errDeadline) Cause() error { + return e.error +} + +// Deadline is a helper to create an error of the class with the same name from any error type +func Deadline(err error) error { + if err == nil { + return nil + } + return errDeadline{err} +} + +type errDataLoss struct{ error } + +func (errDataLoss) DataLoss() {} + +func (e errDataLoss) Cause() error { + return e.error +} + +// DataLoss is a helper to create an error of the class with the same name from any error type +func DataLoss(err error) error { + if err == nil { + return nil + } + return errDataLoss{err} +} + +// FromContext returns the error class from the passed in context +func FromContext(ctx context.Context) error { + e := ctx.Err() + if e == nil { + return nil + } + + if e == context.Canceled { + return Cancelled(e) + } + if e == context.DeadlineExceeded { + return Deadline(e) + } + return Unknown(e) +} diff --git a/components/engine/api/errdefs/helpers_test.go b/components/engine/api/errdefs/helpers_test.go new file mode 100644 index 0000000000..984f0a77a9 --- /dev/null +++ b/components/engine/api/errdefs/helpers_test.go @@ -0,0 +1,132 @@ +package errdefs + +import ( + "errors" + "testing" +) + +var errTest = errors.New("this is a test") + +type causal interface { + Cause() error +} + +func TestNotFound(t *testing.T) { + e := NotFound(errTest) + if !IsNotFound(e) { + t.Fatalf("expected not found error, got: %T", e) + } + if cause := e.(causal).Cause(); cause != errTest { + t.Fatalf("causual should be errTest, got: %v", cause) + } +} + +func TestConflict(t *testing.T) { + e := Conflict(errTest) + if !IsConflict(e) { + t.Fatalf("expected conflcit error, got: %T", e) + } + if cause := e.(causal).Cause(); cause != errTest { + t.Fatalf("causual should be errTest, got: %v", cause) + } +} + +func TestForbidden(t *testing.T) { + e := Forbidden(errTest) + if !IsForbidden(e) { + t.Fatalf("expected forbidden error, got: %T", e) + } + if cause := e.(causal).Cause(); cause != errTest { + t.Fatalf("causual should be errTest, got: %v", cause) + } +} + +func TestInvalidParameter(t *testing.T) { + e := InvalidParameter(errTest) + if !IsInvalidParameter(e) { + t.Fatalf("expected invalid argument error, got %T", e) + } + if cause := e.(causal).Cause(); cause != errTest { + t.Fatalf("causual should be errTest, got: %v", cause) + } +} + +func TestNotImplemented(t *testing.T) { + e := NotImplemented(errTest) + if !IsNotImplemented(e) { + t.Fatalf("expected not implemented error, got %T", e) + } + if cause := e.(causal).Cause(); cause != errTest { + t.Fatalf("causual should be errTest, got: %v", cause) + } +} + +func TestNotModified(t *testing.T) { + e := NotModified(errTest) + if !IsNotModified(e) { + t.Fatalf("expected not modified error, got %T", e) + } + if cause := e.(causal).Cause(); cause != errTest { + t.Fatalf("causual should be errTest, got: %v", cause) + } +} + +func TestAlreadyExists(t *testing.T) { + e := AlreadyExists(errTest) + if !IsAlreadyExists(e) { + t.Fatalf("expected already exists error, got %T", e) + } + if cause := e.(causal).Cause(); cause != errTest { + t.Fatalf("causual should be errTest, got: %v", cause) + } +} + +func TestUnauthorized(t *testing.T) { + e := Unauthorized(errTest) + if !IsUnauthorized(e) { + t.Fatalf("expected unauthorized error, got %T", e) + } + if cause := e.(causal).Cause(); cause != errTest { + t.Fatalf("causual should be errTest, got: %v", cause) + } +} + +func TestUnknown(t *testing.T) { + e := Unknown(errTest) + if !IsUnknown(e) { + t.Fatalf("expected unknown error, got %T", e) + } + if cause := e.(causal).Cause(); cause != errTest { + t.Fatalf("causual should be errTest, got: %v", cause) + } +} + +func TestCancelled(t *testing.T) { + e := Cancelled(errTest) + if !IsCancelled(e) { + t.Fatalf("expected canclled error, got %T", e) + } + if cause := e.(causal).Cause(); cause != errTest { + t.Fatalf("causual should be errTest, got: %v", cause) + } +} + +func TestDeadline(t *testing.T) { + e := Deadline(errTest) + if !IsDeadline(e) { + t.Fatalf("expected deadline error, got %T", e) + } + if cause := e.(causal).Cause(); cause != errTest { + t.Fatalf("causual should be errTest, got: %v", cause) + } +} + +func TestIsDataLoss(t *testing.T) { + e := DataLoss(errTest) + if !IsDataLoss(e) { + t.Fatalf("expected data loss error, got %T", e) + } + if cause := e.(causal).Cause(); cause != errTest { + t.Fatalf("causual should be errTest, got: %v", cause) + } +} diff --git a/components/engine/api/errdefs/is.go b/components/engine/api/errdefs/is.go index b0be0b8147..286ffd694a 100644 --- a/components/engine/api/errdefs/is.go +++ b/components/engine/api/errdefs/is.go @@ -15,7 +15,11 @@ func getImplementer(err error) error { ErrForbidden, ErrSystem, ErrNotModified, + ErrAlreadyExists, ErrNotImplemented, + ErrCancelled, + ErrDeadline, + ErrDataLoss, ErrUnknown: return e case causer: @@ -73,6 +77,12 @@ func IsNotModified(err error) bool { return ok } +// IsAlreadyExists returns if the passed in error is a AlreadyExists error +func IsAlreadyExists(err error) bool { + _, ok := getImplementer(err).(ErrAlreadyExists) + return ok +} + // IsNotImplemented returns if the passed in error is an ErrNotImplemented func IsNotImplemented(err error) bool { _, ok := getImplementer(err).(ErrNotImplemented) @@ -84,3 +94,21 @@ func IsUnknown(err error) bool { _, ok := getImplementer(err).(ErrUnknown) return ok } + +// IsCancelled returns if the passed in error is an ErrCancelled +func IsCancelled(err error) bool { + _, ok := getImplementer(err).(ErrCancelled) + return ok +} + +// IsDeadline returns if the passed in error is an ErrDeadline +func IsDeadline(err error) bool { + _, ok := getImplementer(err).(ErrDeadline) + return ok +} + +// IsDataLoss returns if the passed in error is an ErrDataLoss +func IsDataLoss(err error) bool { + _, ok := getImplementer(err).(ErrDataLoss) + return ok +} diff --git a/components/engine/api/server/httputils/errors.go b/components/engine/api/server/httputils/errors.go index 05a842c3af..577d19c166 100644 --- a/components/engine/api/server/httputils/errors.go +++ b/components/engine/api/server/httputils/errors.go @@ -35,7 +35,7 @@ func GetHTTPErrorStatusCode(err error) int { statusCode = http.StatusNotFound case errdefs.IsInvalidParameter(err): statusCode = http.StatusBadRequest - case errdefs.IsConflict(err): + case errdefs.IsConflict(err) || errdefs.IsAlreadyExists(err): statusCode = http.StatusConflict case errdefs.IsUnauthorized(err): statusCode = http.StatusUnauthorized @@ -47,7 +47,7 @@ func GetHTTPErrorStatusCode(err error) int { statusCode = http.StatusNotModified case errdefs.IsNotImplemented(err): statusCode = http.StatusNotImplemented - case errdefs.IsSystem(err) || errdefs.IsUnknown(err): + case errdefs.IsSystem(err) || errdefs.IsUnknown(err) || errdefs.IsDataLoss(err) || errdefs.IsDeadline(err) || errdefs.IsCancelled(err): statusCode = http.StatusInternalServerError default: statusCode = statusCodeFromGRPCError(err) diff --git a/components/engine/api/server/httputils/httputils.go b/components/engine/api/server/httputils/httputils.go index 57eeb4beba..dbf5b7a2a0 100644 --- a/components/engine/api/server/httputils/httputils.go +++ b/components/engine/api/server/httputils/httputils.go @@ -6,6 +6,7 @@ import ( "net/http" "strings" + "github.com/docker/docker/api/errdefs" "github.com/pkg/errors" "github.com/sirupsen/logrus" "golang.org/x/net/context" @@ -43,20 +44,6 @@ func CloseStreams(streams ...interface{}) { } } -type validationError struct { - cause error -} - -func (e validationError) Error() string { - return e.cause.Error() -} - -func (e validationError) Cause() error { - return e.cause -} - -func (e validationError) InvalidParameter() {} - // CheckForJSON makes sure that the request's Content-Type is application/json. func CheckForJSON(r *http.Request) error { ct := r.Header.Get("Content-Type") @@ -72,7 +59,7 @@ func CheckForJSON(r *http.Request) error { if matchesContentType(ct, "application/json") { return nil } - return validationError{errors.Errorf("Content-Type specified (%s) must be 'application/json'", ct)} + return errdefs.InvalidParameter(errors.Errorf("Content-Type specified (%s) must be 'application/json'", ct)) } // ParseForm ensures the request form is parsed even with invalid content types. @@ -82,7 +69,7 @@ func ParseForm(r *http.Request) error { return nil } if err := r.ParseForm(); err != nil && !strings.HasPrefix(err.Error(), "mime:") { - return validationError{err} + return errdefs.InvalidParameter(err) } return nil } diff --git a/components/engine/api/server/router/build/build_routes.go b/components/engine/api/server/router/build/build_routes.go index fefb875de1..553f8fcee4 100644 --- a/components/engine/api/server/router/build/build_routes.go +++ b/components/engine/api/server/router/build/build_routes.go @@ -13,6 +13,7 @@ import ( "strings" "sync" + "github.com/docker/docker/api/errdefs" "github.com/docker/docker/api/server/httputils" "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/backend" @@ -83,7 +84,7 @@ func newImageBuildOptions(ctx context.Context, r *http.Request) (*types.ImageBui } p := system.ParsePlatform(apiPlatform) if err := system.ValidatePlatform(p); err != nil { - return nil, validationError{fmt.Errorf("invalid platform: %s", err)} + return nil, errdefs.InvalidParameter(errors.Errorf("invalid platform: %s", err)) } options.Platform = p.OS } @@ -104,14 +105,14 @@ func newImageBuildOptions(ctx context.Context, r *http.Request) (*types.ImageBui } if runtime.GOOS != "windows" && options.SecurityOpt != nil { - return nil, validationError{fmt.Errorf("The daemon on this platform does not support setting security options on build")} + return nil, errdefs.InvalidParameter(errors.New("The daemon on this platform does not support setting security options on build")) } var buildUlimits = []*units.Ulimit{} ulimitsJSON := r.FormValue("ulimits") if ulimitsJSON != "" { if err := json.Unmarshal([]byte(ulimitsJSON), &buildUlimits); err != nil { - return nil, errors.Wrap(validationError{err}, "error reading ulimit settings") + return nil, errors.Wrap(errdefs.InvalidParameter(err), "error reading ulimit settings") } options.Ulimits = buildUlimits } @@ -132,7 +133,7 @@ func newImageBuildOptions(ctx context.Context, r *http.Request) (*types.ImageBui if buildArgsJSON != "" { var buildArgs = map[string]*string{} if err := json.Unmarshal([]byte(buildArgsJSON), &buildArgs); err != nil { - return nil, errors.Wrap(validationError{err}, "error reading build args") + return nil, errors.Wrap(errdefs.InvalidParameter(err), "error reading build args") } options.BuildArgs = buildArgs } @@ -141,7 +142,7 @@ func newImageBuildOptions(ctx context.Context, r *http.Request) (*types.ImageBui if labelsJSON != "" { var labels = map[string]string{} if err := json.Unmarshal([]byte(labelsJSON), &labels); err != nil { - return nil, errors.Wrap(validationError{err}, "error reading labels") + return nil, errors.Wrap(errdefs.InvalidParameter(err), "error reading labels") } options.Labels = labels } @@ -167,16 +168,6 @@ func (br *buildRouter) postPrune(ctx context.Context, w http.ResponseWriter, r * return httputils.WriteJSON(w, http.StatusOK, report) } -type validationError struct { - cause error -} - -func (e validationError) Error() string { - return e.cause.Error() -} - -func (e validationError) InvalidParameter() {} - func (br *buildRouter) postBuild(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error { var ( notVerboseBuffer = bytes.NewBuffer(nil) @@ -210,7 +201,7 @@ func (br *buildRouter) postBuild(ctx context.Context, w http.ResponseWriter, r * buildOptions.AuthConfigs = getAuthConfigs(r.Header) if buildOptions.Squash && !br.daemon.HasExperimental() { - return validationError{errors.New("squash is only supported with experimental mode")} + return errdefs.InvalidParameter(errors.New("squash is only supported with experimental mode")) } out := io.Writer(output) diff --git a/components/engine/api/server/router/container/container.go b/components/engine/api/server/router/container/container.go index 90ae6dc38e..e3637824b6 100644 --- a/components/engine/api/server/router/container/container.go +++ b/components/engine/api/server/router/container/container.go @@ -5,20 +5,6 @@ import ( "github.com/docker/docker/api/server/router" ) -type validationError struct { - cause error -} - -func (e validationError) Error() string { - return e.cause.Error() -} - -func (e validationError) Cause() error { - return e.cause -} - -func (e validationError) InvalidParameter() {} - // containerRouter is a router to talk with the container controller type containerRouter struct { backend Backend diff --git a/components/engine/api/server/router/container/container_routes.go b/components/engine/api/server/router/container/container_routes.go index b7848a3c94..0343072283 100644 --- a/components/engine/api/server/router/container/container_routes.go +++ b/components/engine/api/server/router/container/container_routes.go @@ -88,7 +88,7 @@ func (s *containerRouter) getContainersLogs(ctx context.Context, w http.Response // with the appropriate status code. stdout, stderr := httputils.BoolValue(r, "stdout"), httputils.BoolValue(r, "stderr") if !(stdout || stderr) { - return validationError{errors.New("Bad parameters: you must choose at least one stream")} + return errdefs.InvalidParameter(errors.New("Bad parameters: you must choose at least one stream")) } containerName := vars["name"] @@ -203,7 +203,7 @@ func (s *containerRouter) postContainersKill(ctx context.Context, w http.Respons if sigStr := r.Form.Get("signal"); sigStr != "" { var err error if sig, err = signal.ParseSignal(sigStr); err != nil { - return validationError{err} + return errdefs.InvalidParameter(err) } } @@ -468,11 +468,11 @@ func (s *containerRouter) postContainersResize(ctx context.Context, w http.Respo height, err := strconv.Atoi(r.Form.Get("h")) if err != nil { - return validationError{err} + return errdefs.InvalidParameter(err) } width, err := strconv.Atoi(r.Form.Get("w")) if err != nil { - return validationError{err} + return errdefs.InvalidParameter(err) } return s.backend.ContainerResize(vars["name"], height, width) @@ -490,7 +490,7 @@ func (s *containerRouter) postContainersAttach(ctx context.Context, w http.Respo hijacker, ok := w.(http.Hijacker) if !ok { - return validationError{errors.Errorf("error attaching to container %s, hijack connection missing", containerName)} + return errdefs.InvalidParameter(errors.Errorf("error attaching to container %s, hijack connection missing", containerName)) } setupStreams := func() (io.ReadCloser, io.Writer, io.Writer, error) { @@ -611,7 +611,7 @@ func (s *containerRouter) postContainersPrune(ctx context.Context, w http.Respon pruneFilters, err := filters.FromJSON(r.Form.Get("filters")) if err != nil { - return validationError{err} + return errdefs.InvalidParameter(err) } pruneReport, err := s.backend.ContainersPrune(ctx, pruneFilters) diff --git a/components/engine/api/server/router/container/exec.go b/components/engine/api/server/router/container/exec.go index 97c27d844f..60be8476eb 100644 --- a/components/engine/api/server/router/container/exec.go +++ b/components/engine/api/server/router/container/exec.go @@ -7,6 +7,7 @@ import ( "net/http" "strconv" + "github.com/docker/docker/api/errdefs" "github.com/docker/docker/api/server/httputils" "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/versions" @@ -137,11 +138,11 @@ func (s *containerRouter) postContainerExecResize(ctx context.Context, w http.Re } height, err := strconv.Atoi(r.Form.Get("h")) if err != nil { - return validationError{err} + return errdefs.InvalidParameter(err) } width, err := strconv.Atoi(r.Form.Get("w")) if err != nil { - return validationError{err} + return errdefs.InvalidParameter(err) } return s.backend.ContainerExecResize(vars["name"], height, width) diff --git a/components/engine/api/server/router/image/image_routes.go b/components/engine/api/server/router/image/image_routes.go index fd95420ef8..42e2710828 100644 --- a/components/engine/api/server/router/image/image_routes.go +++ b/components/engine/api/server/router/image/image_routes.go @@ -10,6 +10,7 @@ import ( "strconv" "strings" + "github.com/docker/docker/api/errdefs" "github.com/docker/docker/api/server/httputils" "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/backend" @@ -144,20 +145,6 @@ func (s *imageRouter) postImagesCreate(ctx context.Context, w http.ResponseWrite return nil } -type validationError struct { - cause error -} - -func (e validationError) Error() string { - return e.cause.Error() -} - -func (e validationError) Cause() error { - return e.cause -} - -func (validationError) InvalidParameter() {} - func (s *imageRouter) postImagesPush(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error { metaHeaders := map[string][]string{} for k, v := range r.Header { @@ -181,7 +168,7 @@ func (s *imageRouter) postImagesPush(ctx context.Context, w http.ResponseWriter, } else { // the old format is supported for compatibility if there was no authConfig header if err := json.NewDecoder(r.Body).Decode(authConfig); err != nil { - return errors.Wrap(validationError{err}, "Bad parameters and missing X-Registry-Auth") + return errors.Wrap(errdefs.InvalidParameter(err), "Bad parameters and missing X-Registry-Auth") } } diff --git a/components/engine/api/server/router/network/network_routes.go b/components/engine/api/server/router/network/network_routes.go index f124813439..eb5dfe2a4d 100644 --- a/components/engine/api/server/router/network/network_routes.go +++ b/components/engine/api/server/router/network/network_routes.go @@ -2,13 +2,13 @@ package network import ( "encoding/json" - "fmt" "net/http" "strconv" "strings" "golang.org/x/net/context" + "github.com/docker/docker/api/errdefs" "github.com/docker/docker/api/server/httputils" "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/filters" @@ -101,22 +101,8 @@ func (e ambigousResultsError) Error() string { func (ambigousResultsError) InvalidParameter() {} -type conflictError struct { - cause error -} - -func (e conflictError) Error() string { - return e.cause.Error() -} - -func (e conflictError) Cause() error { - return e.cause -} - -func (e conflictError) Conflict() {} - func nameConflict(name string) error { - return conflictError{libnetwork.NetworkNameError(name)} + return errdefs.Conflict(libnetwork.NetworkNameError(name)) } func (n *networkRouter) getNetwork(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error { @@ -589,7 +575,7 @@ func (n *networkRouter) findUniqueNetwork(term string) (types.NetworkResource, e } } if len(listByFullName) > 1 { - return types.NetworkResource{}, fmt.Errorf("network %s is ambiguous (%d matches found based on name)", term, len(listByFullName)) + return types.NetworkResource{}, errdefs.InvalidParameter(errors.Errorf("network %s is ambiguous (%d matches found based on name)", term, len(listByFullName))) } // Find based on partial ID, returns true only if no duplicates @@ -599,8 +585,8 @@ func (n *networkRouter) findUniqueNetwork(term string) (types.NetworkResource, e } } if len(listByPartialID) > 1 { - return types.NetworkResource{}, fmt.Errorf("network %s is ambiguous (%d matches found based on ID prefix)", term, len(listByPartialID)) + return types.NetworkResource{}, errdefs.InvalidParameter(errors.Errorf("network %s is ambiguous (%d matches found based on ID prefix)", term, len(listByPartialID))) } - return types.NetworkResource{}, libnetwork.ErrNoSuchNetwork(term) + return types.NetworkResource{}, errdefs.NotFound(libnetwork.ErrNoSuchNetwork(term)) } diff --git a/components/engine/api/server/router/session/session_routes.go b/components/engine/api/server/router/session/session_routes.go index bccd764226..49493cdf64 100644 --- a/components/engine/api/server/router/session/session_routes.go +++ b/components/engine/api/server/router/session/session_routes.go @@ -3,27 +3,14 @@ package session import ( "net/http" + "github.com/docker/docker/api/errdefs" "golang.org/x/net/context" ) -type invalidRequest struct { - cause error -} - -func (e invalidRequest) Error() string { - return e.cause.Error() -} - -func (e invalidRequest) Cause() error { - return e.cause -} - -func (e invalidRequest) InvalidParameter() {} - func (sr *sessionRouter) startSession(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error { err := sr.backend.HandleHTTPRequest(ctx, w, r) if err != nil { - return invalidRequest{err} + return errdefs.InvalidParameter(err) } return nil } diff --git a/components/engine/api/server/router/swarm/cluster_routes.go b/components/engine/api/server/router/swarm/cluster_routes.go index 5b6c19d9c1..124900d459 100644 --- a/components/engine/api/server/router/swarm/cluster_routes.go +++ b/components/engine/api/server/router/swarm/cluster_routes.go @@ -6,6 +6,7 @@ import ( "net/http" "strconv" + "github.com/docker/docker/api/errdefs" "github.com/docker/docker/api/server/httputils" basictypes "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/backend" @@ -57,20 +58,6 @@ func (sr *swarmRouter) inspectCluster(ctx context.Context, w http.ResponseWriter return httputils.WriteJSON(w, http.StatusOK, swarm) } -type invalidRequestError struct { - err error -} - -func (e invalidRequestError) Error() string { - return e.err.Error() -} - -func (e invalidRequestError) Cause() error { - return e.err -} - -func (e invalidRequestError) InvalidParameter() {} - func (sr *swarmRouter) updateCluster(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error { var swarm types.Spec if err := json.NewDecoder(r.Body).Decode(&swarm); err != nil { @@ -81,7 +68,7 @@ func (sr *swarmRouter) updateCluster(ctx context.Context, w http.ResponseWriter, version, err := strconv.ParseUint(rawVersion, 10, 64) if err != nil { err := fmt.Errorf("invalid swarm version '%s': %v", rawVersion, err) - return invalidRequestError{err} + return errdefs.InvalidParameter(err) } var flags types.UpdateFlags @@ -90,7 +77,7 @@ func (sr *swarmRouter) updateCluster(ctx context.Context, w http.ResponseWriter, rot, err := strconv.ParseBool(value) if err != nil { err := fmt.Errorf("invalid value for rotateWorkerToken: %s", value) - return invalidRequestError{err} + return errdefs.InvalidParameter(err) } flags.RotateWorkerToken = rot @@ -100,7 +87,7 @@ func (sr *swarmRouter) updateCluster(ctx context.Context, w http.ResponseWriter, rot, err := strconv.ParseBool(value) if err != nil { err := fmt.Errorf("invalid value for rotateManagerToken: %s", value) - return invalidRequestError{err} + return errdefs.InvalidParameter(err) } flags.RotateManagerToken = rot @@ -109,7 +96,7 @@ func (sr *swarmRouter) updateCluster(ctx context.Context, w http.ResponseWriter, if value := r.URL.Query().Get("rotateManagerUnlockKey"); value != "" { rot, err := strconv.ParseBool(value) if err != nil { - return invalidRequestError{fmt.Errorf("invalid value for rotateManagerUnlockKey: %s", value)} + return errdefs.InvalidParameter(fmt.Errorf("invalid value for rotateManagerUnlockKey: %s", value)) } flags.RotateManagerUnlockKey = rot @@ -153,7 +140,7 @@ func (sr *swarmRouter) getServices(ctx context.Context, w http.ResponseWriter, r } filter, err := filters.FromJSON(r.Form.Get("filters")) if err != nil { - return invalidRequestError{err} + return errdefs.InvalidParameter(err) } services, err := sr.backend.GetServices(basictypes.ServiceListOptions{Filters: filter}) @@ -172,7 +159,7 @@ func (sr *swarmRouter) getService(ctx context.Context, w http.ResponseWriter, r insertDefaults, err = strconv.ParseBool(value) if err != nil { err := fmt.Errorf("invalid value for insertDefaults: %s", value) - return errors.Wrapf(invalidRequestError{err}, "invalid value for insertDefaults: %s", value) + return errors.Wrapf(errdefs.InvalidParameter(err), "invalid value for insertDefaults: %s", value) } } @@ -218,7 +205,7 @@ func (sr *swarmRouter) updateService(ctx context.Context, w http.ResponseWriter, version, err := strconv.ParseUint(rawVersion, 10, 64) if err != nil { err := fmt.Errorf("invalid service version '%s': %v", rawVersion, err) - return invalidRequestError{err} + return errdefs.InvalidParameter(err) } var flags basictypes.ServiceUpdateOptions @@ -311,7 +298,7 @@ func (sr *swarmRouter) updateNode(ctx context.Context, w http.ResponseWriter, r version, err := strconv.ParseUint(rawVersion, 10, 64) if err != nil { err := fmt.Errorf("invalid node version '%s': %v", rawVersion, err) - return invalidRequestError{err} + return errdefs.InvalidParameter(err) } if err := sr.backend.UpdateNode(vars["id"], version, node); err != nil { @@ -417,13 +404,13 @@ func (sr *swarmRouter) getSecret(ctx context.Context, w http.ResponseWriter, r * func (sr *swarmRouter) updateSecret(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error { var secret types.SecretSpec if err := json.NewDecoder(r.Body).Decode(&secret); err != nil { - return invalidRequestError{err} + return errdefs.InvalidParameter(err) } rawVersion := r.URL.Query().Get("version") version, err := strconv.ParseUint(rawVersion, 10, 64) if err != nil { - return invalidRequestError{fmt.Errorf("invalid secret version")} + return errdefs.InvalidParameter(fmt.Errorf("invalid secret version")) } id := vars["id"] @@ -484,13 +471,13 @@ func (sr *swarmRouter) getConfig(ctx context.Context, w http.ResponseWriter, r * func (sr *swarmRouter) updateConfig(ctx context.Context, w http.ResponseWriter, r *http.Request, vars map[string]string) error { var config types.ConfigSpec if err := json.NewDecoder(r.Body).Decode(&config); err != nil { - return invalidRequestError{err} + return errdefs.InvalidParameter(err) } rawVersion := r.URL.Query().Get("version") version, err := strconv.ParseUint(rawVersion, 10, 64) if err != nil { - return invalidRequestError{fmt.Errorf("invalid config version")} + return errdefs.InvalidParameter(fmt.Errorf("invalid config version")) } id := vars["id"] diff --git a/components/engine/builder/dockerfile/builder.go b/components/engine/builder/dockerfile/builder.go index 20f1650825..bd2418f59e 100644 --- a/components/engine/builder/dockerfile/builder.go +++ b/components/engine/builder/dockerfile/builder.go @@ -9,6 +9,7 @@ import ( "strings" "time" + "github.com/docker/docker/api/errdefs" "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/backend" "github.com/docker/docker/api/types/container" @@ -225,7 +226,7 @@ func (b *Builder) build(source builder.Source, dockerfile *parser.Result) (*buil if instructions.IsUnknownInstruction(err) { buildsFailed.WithValues(metricsUnknownInstructionError).Inc() } - return nil, validationError{err} + return nil, errdefs.InvalidParameter(err) } if b.options.Target != "" { targetIx, found := instructions.HasStage(stages, b.options.Target) @@ -363,7 +364,7 @@ func BuildFromConfig(config *container.Config, changes []string) (*container.Con dockerfile, err := parser.Parse(bytes.NewBufferString(strings.Join(changes, "\n"))) if err != nil { - return nil, validationError{err} + return nil, errdefs.InvalidParameter(err) } os := runtime.GOOS @@ -378,7 +379,7 @@ func BuildFromConfig(config *container.Config, changes []string) (*container.Con // ensure that the commands are valid for _, n := range dockerfile.AST.Children { if !validCommitCommands[n.Value] { - return nil, validationError{errors.Errorf("%s is not a valid change command", n.Value)} + return nil, errdefs.InvalidParameter(errors.Errorf("%s is not a valid change command", n.Value)) } } @@ -390,7 +391,7 @@ func BuildFromConfig(config *container.Config, changes []string) (*container.Con for _, n := range dockerfile.AST.Children { cmd, err := instructions.ParseCommand(n) if err != nil { - return nil, validationError{err} + return nil, errdefs.InvalidParameter(err) } commands = append(commands, cmd) } @@ -402,7 +403,7 @@ func BuildFromConfig(config *container.Config, changes []string) (*container.Con for _, cmd := range commands { err := dispatch(dispatchRequest, cmd) if err != nil { - return nil, validationError{err} + return nil, errdefs.InvalidParameter(err) } dispatchRequest.state.updateRunConfig() } diff --git a/components/engine/builder/dockerfile/dispatchers.go b/components/engine/builder/dockerfile/dispatchers.go index 8d3ea7ed62..f1f886007e 100644 --- a/components/engine/builder/dockerfile/dispatchers.go +++ b/components/engine/builder/dockerfile/dispatchers.go @@ -15,6 +15,7 @@ import ( "strings" "github.com/docker/docker/api" + "github.com/docker/docker/api/errdefs" "github.com/docker/docker/api/types/container" "github.com/docker/docker/api/types/strslice" "github.com/docker/docker/builder" @@ -510,7 +511,7 @@ func dispatchStopSignal(d dispatchRequest, c *instructions.StopSignalCommand) er _, err := signal.ParseSignal(c.Signal) if err != nil { - return validationError{err} + return errdefs.InvalidParameter(err) } d.state.runConfig.StopSignal = c.Signal return d.builder.commit(d.state, fmt.Sprintf("STOPSIGNAL %v", c.Signal)) diff --git a/components/engine/builder/dockerfile/errors.go b/components/engine/builder/dockerfile/errors.go deleted file mode 100644 index 25664dee78..0000000000 --- a/components/engine/builder/dockerfile/errors.go +++ /dev/null @@ -1,15 +0,0 @@ -package dockerfile - -type validationError struct { - err error -} - -func (e validationError) Error() string { - return e.err.Error() -} - -func (e validationError) InvalidParameter() {} - -func (e validationError) Cause() error { - return e.err -} diff --git a/components/engine/builder/dockerfile/evaluator.go b/components/engine/builder/dockerfile/evaluator.go index 6236a194d3..de9cdaa924 100644 --- a/components/engine/builder/dockerfile/evaluator.go +++ b/components/engine/builder/dockerfile/evaluator.go @@ -24,6 +24,7 @@ import ( "strconv" "strings" + "github.com/docker/docker/api/errdefs" "github.com/docker/docker/api/types/container" "github.com/docker/docker/builder" "github.com/docker/docker/builder/dockerfile/instructions" @@ -37,7 +38,7 @@ func dispatch(d dispatchRequest, cmd instructions.Command) (err error) { optionsOS := system.ParsePlatform(d.builder.options.Platform).OS err := c.CheckPlatform(optionsOS) if err != nil { - return validationError{err} + return errdefs.InvalidParameter(err) } } runConfigEnv := d.state.runConfig.Env @@ -48,7 +49,7 @@ func dispatch(d dispatchRequest, cmd instructions.Command) (err error) { return d.shlex.ProcessWord(word, envs) }) if err != nil { - return validationError{err} + return errdefs.InvalidParameter(err) } } diff --git a/components/engine/builder/remotecontext/errors.go b/components/engine/builder/remotecontext/errors.go deleted file mode 100644 index 8ee33bc607..0000000000 --- a/components/engine/builder/remotecontext/errors.go +++ /dev/null @@ -1,75 +0,0 @@ -package remotecontext - -type notFoundError string - -func (e notFoundError) Error() string { - return string(e) -} - -func (notFoundError) NotFound() {} - -type requestError string - -func (e requestError) Error() string { - return string(e) -} - -func (e requestError) InvalidParameter() {} - -type unauthorizedError string - -func (e unauthorizedError) Error() string { - return string(e) -} - -func (unauthorizedError) Unauthorized() {} - -type forbiddenError string - -func (e forbiddenError) Error() string { - return string(e) -} - -func (forbiddenError) Forbidden() {} - -type dnsError struct { - cause error -} - -func (e dnsError) Error() string { - return e.cause.Error() -} - -func (e dnsError) NotFound() {} - -func (e dnsError) Cause() error { - return e.cause -} - -type systemError struct { - cause error -} - -func (e systemError) Error() string { - return e.cause.Error() -} - -func (e systemError) SystemError() {} - -func (e systemError) Cause() error { - return e.cause -} - -type unknownError struct { - cause error -} - -func (e unknownError) Error() string { - return e.cause.Error() -} - -func (unknownError) Unknown() {} - -func (e unknownError) Cause() error { - return e.cause -} diff --git a/components/engine/builder/remotecontext/remote.go b/components/engine/builder/remotecontext/remote.go index ee0282f706..0c3345c785 100644 --- a/components/engine/builder/remotecontext/remote.go +++ b/components/engine/builder/remotecontext/remote.go @@ -10,6 +10,7 @@ import ( "net/url" "regexp" + "github.com/docker/docker/api/errdefs" "github.com/docker/docker/pkg/ioutils" "github.com/pkg/errors" ) @@ -26,7 +27,7 @@ var mimeRe = regexp.MustCompile(acceptableRemoteMIME) func downloadRemote(remoteURL string) (string, io.ReadCloser, error) { response, err := GetWithStatusError(remoteURL) if err != nil { - return "", nil, fmt.Errorf("error downloading remote context %s: %v", remoteURL, err) + return "", nil, errors.Wrapf(err, "error downloading remote context %s", remoteURL) } contentType, contextReader, err := inspectResponse( @@ -35,7 +36,7 @@ func downloadRemote(remoteURL string) (string, io.ReadCloser, error) { response.ContentLength) if err != nil { response.Body.Close() - return "", nil, fmt.Errorf("error detecting content type for remote %s: %v", remoteURL, err) + return "", nil, errors.Wrapf(err, "error detecting content type for remote %s", remoteURL) } return contentType, ioutils.NewReadCloserWrapper(contextReader, response.Body.Close), nil @@ -47,10 +48,10 @@ func GetWithStatusError(address string) (resp *http.Response, err error) { if resp, err = http.Get(address); err != nil { if uerr, ok := err.(*url.Error); ok { if derr, ok := uerr.Err.(*net.DNSError); ok && !derr.IsTimeout { - return nil, dnsError{err} + return nil, errdefs.NotFound(err) } } - return nil, systemError{err} + return nil, errdefs.System(err) } if resp.StatusCode < 400 { return resp, nil @@ -59,21 +60,21 @@ func GetWithStatusError(address string) (resp *http.Response, err error) { body, err := ioutil.ReadAll(resp.Body) resp.Body.Close() if err != nil { - return nil, errors.Wrap(systemError{err}, msg+": error reading body") + return nil, errdefs.System(errors.New(msg + ": error reading body")) } msg += ": " + string(bytes.TrimSpace(body)) switch resp.StatusCode { case http.StatusNotFound: - return nil, notFoundError(msg) + return nil, errdefs.NotFound(errors.New(msg)) case http.StatusBadRequest: - return nil, requestError(msg) + return nil, errdefs.InvalidParameter(errors.New(msg)) case http.StatusUnauthorized: - return nil, unauthorizedError(msg) + return nil, errdefs.Unauthorized(errors.New(msg)) case http.StatusForbidden: - return nil, forbiddenError(msg) + return nil, errdefs.Forbidden(errors.New(msg)) } - return nil, unknownError{errors.New(msg)} + return nil, errdefs.Unknown(errors.New(msg)) } // inspectResponse looks into the http response data at r to determine whether its diff --git a/components/engine/daemon/archive.go b/components/engine/daemon/archive.go index c52d3b8509..ddc4b572bd 100644 --- a/components/engine/daemon/archive.go +++ b/components/engine/daemon/archive.go @@ -5,6 +5,7 @@ import ( "os" "strings" + "github.com/docker/docker/api/errdefs" "github.com/docker/docker/api/types" "github.com/docker/docker/container" "github.com/docker/docker/pkg/archive" @@ -54,7 +55,7 @@ func (daemon *Daemon) ContainerCopy(name string, res string) (io.ReadCloser, err // Make sure an online file-system operation is permitted. if err := daemon.isOnlineFSOperationPermitted(container); err != nil { - return nil, systemError{err} + return nil, errdefs.System(err) } data, err := daemon.containerCopy(container, res) @@ -65,7 +66,7 @@ func (daemon *Daemon) ContainerCopy(name string, res string) (io.ReadCloser, err if os.IsNotExist(err) { return nil, containerFileNotFound{res, name} } - return nil, systemError{err} + return nil, errdefs.System(err) } // ContainerStatPath stats the filesystem resource at the specified path in the @@ -78,7 +79,7 @@ func (daemon *Daemon) ContainerStatPath(name string, path string) (stat *types.C // Make sure an online file-system operation is permitted. if err := daemon.isOnlineFSOperationPermitted(container); err != nil { - return nil, systemError{err} + return nil, errdefs.System(err) } stat, err = daemon.containerStatPath(container, path) @@ -89,7 +90,7 @@ func (daemon *Daemon) ContainerStatPath(name string, path string) (stat *types.C if os.IsNotExist(err) { return nil, containerFileNotFound{path, name} } - return nil, systemError{err} + return nil, errdefs.System(err) } // ContainerArchivePath creates an archive of the filesystem resource at the @@ -103,7 +104,7 @@ func (daemon *Daemon) ContainerArchivePath(name string, path string) (content io // Make sure an online file-system operation is permitted. if err := daemon.isOnlineFSOperationPermitted(container); err != nil { - return nil, nil, systemError{err} + return nil, nil, errdefs.System(err) } content, stat, err = daemon.containerArchivePath(container, path) @@ -114,7 +115,7 @@ func (daemon *Daemon) ContainerArchivePath(name string, path string) (content io if os.IsNotExist(err) { return nil, nil, containerFileNotFound{path, name} } - return nil, nil, systemError{err} + return nil, nil, errdefs.System(err) } // ContainerExtractToDir extracts the given archive to the specified location @@ -131,7 +132,7 @@ func (daemon *Daemon) ContainerExtractToDir(name, path string, copyUIDGID, noOve // Make sure an online file-system operation is permitted. if err := daemon.isOnlineFSOperationPermitted(container); err != nil { - return systemError{err} + return errdefs.System(err) } err = daemon.containerExtractToDir(container, path, copyUIDGID, noOverwriteDirNonDir, content) @@ -142,7 +143,7 @@ func (daemon *Daemon) ContainerExtractToDir(name, path string, copyUIDGID, noOve if os.IsNotExist(err) { return containerFileNotFound{path, name} } - return systemError{err} + return errdefs.System(err) } // containerStatPath stats the filesystem resource at the specified path in this diff --git a/components/engine/daemon/attach.go b/components/engine/daemon/attach.go index 651a964c05..1b52fd0168 100644 --- a/components/engine/daemon/attach.go +++ b/components/engine/daemon/attach.go @@ -5,6 +5,7 @@ import ( "fmt" "io" + "github.com/docker/docker/api/errdefs" "github.com/docker/docker/api/types/backend" "github.com/docker/docker/container" "github.com/docker/docker/container/stream" @@ -22,7 +23,7 @@ func (daemon *Daemon) ContainerAttach(prefixOrName string, c *backend.ContainerA if c.DetachKeys != "" { keys, err = term.ToBytes(c.DetachKeys) if err != nil { - return validationError{errors.Errorf("Invalid detach keys (%s) provided", c.DetachKeys)} + return errdefs.InvalidParameter(errors.Errorf("Invalid detach keys (%s) provided", c.DetachKeys)) } } @@ -32,11 +33,11 @@ func (daemon *Daemon) ContainerAttach(prefixOrName string, c *backend.ContainerA } if container.IsPaused() { err := fmt.Errorf("container %s is paused, unpause the container before attach", prefixOrName) - return stateConflictError{err} + return errdefs.Conflict(err) } if container.IsRestarting() { err := fmt.Errorf("container %s is restarting, wait until the container is running", prefixOrName) - return stateConflictError{err} + return errdefs.Conflict(err) } cfg := stream.AttachConfig{ diff --git a/components/engine/daemon/cluster/errors.go b/components/engine/daemon/cluster/errors.go index 0ffe78b98b..9b2e81e0a8 100644 --- a/components/engine/daemon/cluster/errors.go +++ b/components/engine/daemon/cluster/errors.go @@ -20,48 +20,6 @@ const ( errSwarmNotManager notAvailableError = "This node is not a swarm manager. Worker nodes can't be used to view or modify cluster state. Please run this command on a manager node or promote the current node to a manager." ) -type notFoundError struct { - cause error -} - -func (e notFoundError) Error() string { - return e.cause.Error() -} - -func (e notFoundError) NotFound() {} - -func (e notFoundError) Cause() error { - return e.cause -} - -type ambiguousResultsError struct { - cause error -} - -func (e ambiguousResultsError) Error() string { - return e.cause.Error() -} - -func (e ambiguousResultsError) InvalidParameter() {} - -func (e ambiguousResultsError) Cause() error { - return e.cause -} - -type convertError struct { - cause error -} - -func (e convertError) Error() string { - return e.cause.Error() -} - -func (e convertError) InvalidParameter() {} - -func (e convertError) Cause() error { - return e.cause -} - type notAllowedError string func (e notAllowedError) Error() string { @@ -70,20 +28,6 @@ func (e notAllowedError) Error() string { func (e notAllowedError) Forbidden() {} -type validationError struct { - cause error -} - -func (e validationError) Error() string { - return e.cause.Error() -} - -func (e validationError) InvalidParameter() {} - -func (e validationError) Cause() error { - return e.cause -} - type notAvailableError string func (e notAvailableError) Error() string { diff --git a/components/engine/daemon/cluster/helpers.go b/components/engine/daemon/cluster/helpers.go index fd50eef66e..52d0cd173d 100644 --- a/components/engine/daemon/cluster/helpers.go +++ b/components/engine/daemon/cluster/helpers.go @@ -3,6 +3,7 @@ package cluster import ( "fmt" + "github.com/docker/docker/api/errdefs" swarmapi "github.com/docker/swarmkit/api" "github.com/pkg/errors" "golang.org/x/net/context" @@ -48,11 +49,11 @@ func getNode(ctx context.Context, c swarmapi.ControlClient, input string) (*swar if len(rl.Nodes) == 0 { err := fmt.Errorf("node %s not found", input) - return nil, notFoundError{err} + return nil, errdefs.NotFound(err) } if l := len(rl.Nodes); l > 1 { - return nil, ambiguousResultsError{fmt.Errorf("node %s is ambiguous (%d matches found)", input, l)} + return nil, errdefs.InvalidParameter(fmt.Errorf("node %s is ambiguous (%d matches found)", input, l)) } return rl.Nodes[0], nil @@ -84,11 +85,11 @@ func getService(ctx context.Context, c swarmapi.ControlClient, input string, ins if len(rl.Services) == 0 { err := fmt.Errorf("service %s not found", input) - return nil, notFoundError{err} + return nil, errdefs.NotFound(err) } if l := len(rl.Services); l > 1 { - return nil, ambiguousResultsError{fmt.Errorf("service %s is ambiguous (%d matches found)", input, l)} + return nil, errdefs.InvalidParameter(fmt.Errorf("service %s is ambiguous (%d matches found)", input, l)) } if !insertDefaults { @@ -128,11 +129,11 @@ func getTask(ctx context.Context, c swarmapi.ControlClient, input string) (*swar if len(rl.Tasks) == 0 { err := fmt.Errorf("task %s not found", input) - return nil, notFoundError{err} + return nil, errdefs.NotFound(err) } if l := len(rl.Tasks); l > 1 { - return nil, ambiguousResultsError{fmt.Errorf("task %s is ambiguous (%d matches found)", input, l)} + return nil, errdefs.InvalidParameter(fmt.Errorf("task %s is ambiguous (%d matches found)", input, l)) } return rl.Tasks[0], nil @@ -164,11 +165,11 @@ func getSecret(ctx context.Context, c swarmapi.ControlClient, input string) (*sw if len(rl.Secrets) == 0 { err := fmt.Errorf("secret %s not found", input) - return nil, notFoundError{err} + return nil, errdefs.NotFound(err) } if l := len(rl.Secrets); l > 1 { - return nil, ambiguousResultsError{fmt.Errorf("secret %s is ambiguous (%d matches found)", input, l)} + return nil, errdefs.InvalidParameter(fmt.Errorf("secret %s is ambiguous (%d matches found)", input, l)) } return rl.Secrets[0], nil @@ -200,11 +201,11 @@ func getConfig(ctx context.Context, c swarmapi.ControlClient, input string) (*sw if len(rl.Configs) == 0 { err := fmt.Errorf("config %s not found", input) - return nil, notFoundError{err} + return nil, errdefs.NotFound(err) } if l := len(rl.Configs); l > 1 { - return nil, ambiguousResultsError{fmt.Errorf("config %s is ambiguous (%d matches found)", input, l)} + return nil, errdefs.InvalidParameter(fmt.Errorf("config %s is ambiguous (%d matches found)", input, l)) } return rl.Configs[0], nil @@ -238,7 +239,7 @@ func getNetwork(ctx context.Context, c swarmapi.ControlClient, input string) (*s } if l := len(rl.Networks); l > 1 { - return nil, ambiguousResultsError{fmt.Errorf("network %s is ambiguous (%d matches found)", input, l)} + return nil, errdefs.InvalidParameter(fmt.Errorf("network %s is ambiguous (%d matches found)", input, l)) } return rl.Networks[0], nil diff --git a/components/engine/daemon/cluster/networks.go b/components/engine/daemon/cluster/networks.go index 3b01ea4efb..e43808ddba 100644 --- a/components/engine/daemon/cluster/networks.go +++ b/components/engine/daemon/cluster/networks.go @@ -3,6 +3,7 @@ package cluster import ( "fmt" + "github.com/docker/docker/api/errdefs" apitypes "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/network" types "github.com/docker/docker/api/types/swarm" @@ -298,7 +299,7 @@ func (c *Cluster) populateNetworkID(ctx context.Context, client swarmapi.Control // and use its id for the request. apiNetwork, err = getNetwork(ctx, client, ln.Name()) if err != nil { - return errors.Wrap(notFoundError{err}, "could not find the corresponding predefined swarm network") + return errors.Wrap(errdefs.NotFound(err), "could not find the corresponding predefined swarm network") } goto setid } diff --git a/components/engine/daemon/cluster/nodes.go b/components/engine/daemon/cluster/nodes.go index 582e7cdc74..6a345bea0a 100644 --- a/components/engine/daemon/cluster/nodes.go +++ b/components/engine/daemon/cluster/nodes.go @@ -1,6 +1,7 @@ package cluster import ( + "github.com/docker/docker/api/errdefs" apitypes "github.com/docker/docker/api/types" types "github.com/docker/docker/api/types/swarm" "github.com/docker/docker/daemon/cluster/convert" @@ -64,7 +65,7 @@ func (c *Cluster) UpdateNode(input string, version uint64, spec types.NodeSpec) return c.lockedManagerAction(func(ctx context.Context, state nodeState) error { nodeSpec, err := convert.NodeSpecToGRPC(spec) if err != nil { - return convertError{err} + return errdefs.InvalidParameter(err) } ctx, cancel := c.getRequestContext() diff --git a/components/engine/daemon/cluster/services.go b/components/engine/daemon/cluster/services.go index f3fba8d9d1..6d2676540e 100644 --- a/components/engine/daemon/cluster/services.go +++ b/components/engine/daemon/cluster/services.go @@ -11,6 +11,7 @@ import ( "time" "github.com/docker/distribution/reference" + "github.com/docker/docker/api/errdefs" apitypes "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/backend" types "github.com/docker/docker/api/types/swarm" @@ -128,7 +129,7 @@ func (c *Cluster) CreateService(s types.ServiceSpec, encodedAuth string, queryRe serviceSpec, err := convert.ServiceSpecToGRPC(s) if err != nil { - return convertError{err} + return errdefs.InvalidParameter(err) } resp = &apitypes.ServiceCreateResponse{} @@ -232,7 +233,7 @@ func (c *Cluster) UpdateService(serviceIDOrName string, version uint64, spec typ serviceSpec, err := convert.ServiceSpecToGRPC(spec) if err != nil { - return convertError{err} + return errdefs.InvalidParameter(err) } currentService, err := getService(ctx, state.controlClient, serviceIDOrName, false) diff --git a/components/engine/daemon/cluster/swarm.go b/components/engine/daemon/cluster/swarm.go index ec527ce59f..4de44656d9 100644 --- a/components/engine/daemon/cluster/swarm.go +++ b/components/engine/daemon/cluster/swarm.go @@ -6,6 +6,7 @@ import ( "strings" "time" + "github.com/docker/docker/api/errdefs" apitypes "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/filters" types "github.com/docker/docker/api/types/swarm" @@ -44,7 +45,7 @@ func (c *Cluster) Init(req types.InitRequest) (string, error) { } if err := validateAndSanitizeInitRequest(&req); err != nil { - return "", validationError{err} + return "", errdefs.InvalidParameter(err) } listenHost, listenPort, err := resolveListenAddr(req.ListenAddr) @@ -140,7 +141,7 @@ func (c *Cluster) Join(req types.JoinRequest) error { c.mu.Unlock() if err := validateAndSanitizeJoinRequest(&req); err != nil { - return validationError{err} + return errdefs.InvalidParameter(err) } listenHost, listenPort, err := resolveListenAddr(req.ListenAddr) @@ -232,7 +233,7 @@ func (c *Cluster) Update(version uint64, spec types.Spec, flags types.UpdateFlag if spec.Annotations.Name == "" { spec.Annotations.Name = "default" } else if spec.Annotations.Name != "default" { - return validationError{errors.New(`swarm spec must be named "default"`)} + return errdefs.InvalidParameter(errors.New(`swarm spec must be named "default"`)) } // In update, client should provide the complete spec of the swarm, including @@ -240,7 +241,7 @@ func (c *Cluster) Update(version uint64, spec types.Spec, flags types.UpdateFlag // will be used to swarmkit. clusterSpec, err := convert.SwarmSpecToGRPC(spec) if err != nil { - return convertError{err} + return errdefs.InvalidParameter(err) } _, err = state.controlClient.UpdateCluster( @@ -311,7 +312,7 @@ func (c *Cluster) UnlockSwarm(req types.UnlockRequest) error { key, err := encryption.ParseHumanReadableKey(req.UnlockKey) if err != nil { - return validationError{err} + return errdefs.InvalidParameter(err) } config := nr.config diff --git a/components/engine/daemon/commit.go b/components/engine/daemon/commit.go index 1bdbd6be4f..3208b17817 100644 --- a/components/engine/daemon/commit.go +++ b/components/engine/daemon/commit.go @@ -9,6 +9,7 @@ import ( "time" "github.com/docker/distribution/reference" + "github.com/docker/docker/api/errdefs" "github.com/docker/docker/api/types/backend" containertypes "github.com/docker/docker/api/types/container" "github.com/docker/docker/builder/dockerfile" @@ -136,12 +137,12 @@ func (daemon *Daemon) Commit(name string, c *backend.ContainerCommitConfig) (str if container.IsDead() { err := fmt.Errorf("You cannot commit container %s which is Dead", container.ID) - return "", stateConflictError{err} + return "", errdefs.Conflict(err) } if container.IsRemovalInProgress() { err := fmt.Errorf("You cannot commit container %s which is being removed", container.ID) - return "", stateConflictError{err} + return "", errdefs.Conflict(err) } if c.Pause && !container.IsPaused() { diff --git a/components/engine/daemon/container.go b/components/engine/daemon/container.go index b2f4f1053f..c062e7ac76 100644 --- a/components/engine/daemon/container.go +++ b/components/engine/daemon/container.go @@ -9,6 +9,7 @@ import ( "strings" "time" + "github.com/docker/docker/api/errdefs" containertypes "github.com/docker/docker/api/types/container" "github.com/docker/docker/api/types/strslice" "github.com/docker/docker/container" @@ -54,7 +55,7 @@ func (daemon *Daemon) GetContainer(prefixOrName string) (*container.Container, e if indexError == truncindex.ErrNotExist { return nil, containerNotFound(prefixOrName) } - return nil, systemError{indexError} + return nil, errdefs.System(indexError) } return daemon.containers.Get(containerID), nil } @@ -139,7 +140,7 @@ func (daemon *Daemon) newContainer(name string, operatingSystem string, config * if config.Hostname == "" { config.Hostname, err = os.Hostname() if err != nil { - return nil, systemError{err} + return nil, errdefs.System(err) } } } else { diff --git a/components/engine/daemon/container_linux.go b/components/engine/daemon/container_linux.go index d05992d0fe..6c9d52509f 100644 --- a/components/engine/daemon/container_linux.go +++ b/components/engine/daemon/container_linux.go @@ -3,6 +3,7 @@ package daemon import ( + "github.com/docker/docker/api/errdefs" "github.com/docker/docker/container" ) @@ -14,7 +15,7 @@ func (daemon *Daemon) saveApparmorConfig(container *container.Container) error { } if err := parseSecurityOpt(container, container.HostConfig); err != nil { - return validationError{err} + return errdefs.InvalidParameter(err) } if !container.HostConfig.Privileged { diff --git a/components/engine/daemon/container_operations.go b/components/engine/daemon/container_operations.go index 355d5496ea..aa18f3767c 100644 --- a/components/engine/daemon/container_operations.go +++ b/components/engine/daemon/container_operations.go @@ -10,6 +10,7 @@ import ( "strings" "time" + "github.com/docker/docker/api/errdefs" containertypes "github.com/docker/docker/api/types/container" networktypes "github.com/docker/docker/api/types/network" "github.com/docker/docker/container" @@ -922,7 +923,7 @@ func (daemon *Daemon) getNetworkedContainer(containerID, connectedContainerID st } if !nc.IsRunning() { err := fmt.Errorf("cannot join network of a non running container: %s", connectedContainerID) - return nil, stateConflictError{err} + return nil, errdefs.Conflict(err) } if nc.IsRestarting() { return nil, errContainerIsRestarting(connectedContainerID) diff --git a/components/engine/daemon/container_operations_unix.go b/components/engine/daemon/container_operations_unix.go index 09b9b3f4bb..9eff1ebfbc 100644 --- a/components/engine/daemon/container_operations_unix.go +++ b/components/engine/daemon/container_operations_unix.go @@ -11,6 +11,7 @@ import ( "strconv" "time" + "github.com/docker/docker/api/errdefs" "github.com/docker/docker/container" "github.com/docker/docker/daemon/links" "github.com/docker/docker/pkg/idtools" @@ -91,7 +92,7 @@ func (daemon *Daemon) getPidContainer(container *container.Container) (*containe func containerIsRunning(c *container.Container) error { if !c.IsRunning() { - return stateConflictError{errors.Errorf("container %s is not running", c.ID)} + return errdefs.Conflict(errors.Errorf("container %s is not running", c.ID)) } return nil } diff --git a/components/engine/daemon/create.go b/components/engine/daemon/create.go index e4d17cc2df..a9c9e775ad 100644 --- a/components/engine/daemon/create.go +++ b/components/engine/daemon/create.go @@ -9,6 +9,7 @@ import ( "github.com/pkg/errors" + "github.com/docker/docker/api/errdefs" "github.com/docker/docker/api/types" containertypes "github.com/docker/docker/api/types/container" networktypes "github.com/docker/docker/api/types/network" @@ -36,7 +37,7 @@ func (daemon *Daemon) ContainerCreate(params types.ContainerCreateConfig) (conta func (daemon *Daemon) containerCreate(params types.ContainerCreateConfig, managed bool) (containertypes.ContainerCreateCreatedBody, error) { start := time.Now() if params.Config == nil { - return containertypes.ContainerCreateCreatedBody{}, validationError{errors.New("Config cannot be empty in order to create a container")} + return containertypes.ContainerCreateCreatedBody{}, errdefs.InvalidParameter(errors.New("Config cannot be empty in order to create a container")) } os := runtime.GOOS @@ -55,12 +56,12 @@ func (daemon *Daemon) containerCreate(params types.ContainerCreateConfig, manage warnings, err := daemon.verifyContainerSettings(os, params.HostConfig, params.Config, false) if err != nil { - return containertypes.ContainerCreateCreatedBody{Warnings: warnings}, validationError{err} + return containertypes.ContainerCreateCreatedBody{Warnings: warnings}, errdefs.InvalidParameter(err) } err = verifyNetworkingConfig(params.NetworkingConfig) if err != nil { - return containertypes.ContainerCreateCreatedBody{Warnings: warnings}, validationError{err} + return containertypes.ContainerCreateCreatedBody{Warnings: warnings}, errdefs.InvalidParameter(err) } if params.HostConfig == nil { @@ -68,7 +69,7 @@ func (daemon *Daemon) containerCreate(params types.ContainerCreateConfig, manage } err = daemon.adaptContainerSettings(params.HostConfig, params.AdjustCPUShares) if err != nil { - return containertypes.ContainerCreateCreatedBody{Warnings: warnings}, validationError{err} + return containertypes.ContainerCreateCreatedBody{Warnings: warnings}, errdefs.InvalidParameter(err) } container, err := daemon.create(params, managed) @@ -115,11 +116,11 @@ func (daemon *Daemon) create(params types.ContainerCreateConfig, managed bool) ( } if err := daemon.mergeAndVerifyConfig(params.Config, img); err != nil { - return nil, validationError{err} + return nil, errdefs.InvalidParameter(err) } if err := daemon.mergeAndVerifyLogConfig(¶ms.HostConfig.LogConfig); err != nil { - return nil, validationError{err} + return nil, errdefs.InvalidParameter(err) } if container, err = daemon.newContainer(params.Name, os, params.Config, params.HostConfig, imgID, managed); err != nil { @@ -158,7 +159,7 @@ func (daemon *Daemon) create(params types.ContainerCreateConfig, managed bool) ( // Set RWLayer for container after mount labels have been set if err := daemon.setRWLayer(container); err != nil { - return nil, systemError{err} + return nil, errdefs.System(err) } rootIDs := daemon.idMappings.RootPair() diff --git a/components/engine/daemon/delete.go b/components/engine/daemon/delete.go index 4d56d14529..e6fc1a5264 100644 --- a/components/engine/daemon/delete.go +++ b/components/engine/daemon/delete.go @@ -7,6 +7,7 @@ import ( "strings" "time" + "github.com/docker/docker/api/errdefs" "github.com/docker/docker/api/types" "github.com/docker/docker/container" "github.com/docker/docker/layer" @@ -31,7 +32,7 @@ func (daemon *Daemon) ContainerRm(name string, config *types.ContainerRmConfig) // Container state RemovalInProgress should be used to avoid races. if inProgress := container.SetRemovalInProgress(); inProgress { err := fmt.Errorf("removal of container %s is already in progress", name) - return stateConflictError{err} + return errdefs.Conflict(err) } defer container.ResetRemovalInProgress() @@ -87,7 +88,7 @@ func (daemon *Daemon) cleanupContainer(container *container.Container, forceRemo procedure = "Unpause and then " + strings.ToLower(procedure) } err := fmt.Errorf("You cannot remove a %s container %s. %s", state, container.ID, procedure) - return stateConflictError{err} + return errdefs.Conflict(err) } if err := daemon.Kill(container); err != nil { return fmt.Errorf("Could not kill running container %s, cannot remove - %v", container.ID, err) @@ -164,7 +165,7 @@ func (daemon *Daemon) VolumeRm(name string, force bool) error { err = daemon.volumeRm(v) if err != nil && volumestore.IsInUse(err) { - return stateConflictError{err} + return errdefs.Conflict(err) } if err == nil || force { diff --git a/components/engine/daemon/errors.go b/components/engine/daemon/errors.go index 69c09fb83d..b39f9d1720 100644 --- a/components/engine/daemon/errors.go +++ b/components/engine/daemon/errors.go @@ -5,12 +5,13 @@ import ( "strings" "syscall" + "github.com/docker/docker/api/errdefs" "github.com/pkg/errors" "google.golang.org/grpc" ) func errNotRunning(id string) error { - return stateConflictError{errors.Errorf("Container %s is not running", id)} + return errdefs.Conflict(errors.Errorf("Container %s is not running", id)) } func containerNotFound(id string) error { @@ -32,23 +33,9 @@ func (e objNotFoundError) Error() string { func (e objNotFoundError) NotFound() {} -type stateConflictError struct { - cause error -} - -func (e stateConflictError) Error() string { - return e.cause.Error() -} - -func (e stateConflictError) Cause() error { - return e.cause -} - -func (e stateConflictError) Conflict() {} - func errContainerIsRestarting(containerID string) error { cause := errors.Errorf("Container %s is restarting, wait until the container is running", containerID) - return stateConflictError{cause} + return errdefs.Conflict(cause) } func errExecNotFound(id string) error { @@ -57,12 +44,12 @@ func errExecNotFound(id string) error { func errExecPaused(id string) error { cause := errors.Errorf("Container %s is paused, unpause the container before exec", id) - return stateConflictError{cause} + return errdefs.Conflict(cause) } func errNotPaused(id string) error { cause := errors.Errorf("Container %s is already paused", id) - return stateConflictError{cause} + return errdefs.Conflict(cause) } type nameConflictError struct { @@ -76,34 +63,6 @@ func (e nameConflictError) Error() string { func (nameConflictError) Conflict() {} -type validationError struct { - cause error -} - -func (e validationError) Error() string { - return e.cause.Error() -} - -func (e validationError) InvalidParameter() {} - -func (e validationError) Cause() error { - return e.cause -} - -type notAllowedError struct { - cause error -} - -func (e notAllowedError) Error() string { - return e.cause.Error() -} - -func (e notAllowedError) Forbidden() {} - -func (e notAllowedError) Cause() error { - return e.cause -} - type containerNotModifiedError struct { running bool } @@ -117,20 +76,6 @@ func (e containerNotModifiedError) Error() string { func (e containerNotModifiedError) NotModified() {} -type systemError struct { - cause error -} - -func (e systemError) Error() string { - return e.cause.Error() -} - -func (e systemError) SystemError() {} - -func (e systemError) Cause() error { - return e.cause -} - type invalidIdentifier string func (e invalidIdentifier) Error() string { @@ -172,20 +117,6 @@ func (e invalidFilter) Error() string { func (e invalidFilter) InvalidParameter() {} -type unknownError struct { - cause error -} - -func (e unknownError) Error() string { - return e.cause.Error() -} - -func (unknownError) Unknown() {} - -func (e unknownError) Cause() error { - return e.cause -} - type startInvalidConfigError string func (e startInvalidConfigError) Error() string { @@ -199,7 +130,7 @@ func translateContainerdStartErr(cmd string, setExitCode func(int), err error) e contains := func(s1, s2 string) bool { return strings.Contains(strings.ToLower(s1), s2) } - var retErr error = unknownError{errors.New(errDesc)} + var retErr = errdefs.Unknown(errors.New(errDesc)) // if we receive an internal error from the initial start of a container then lets // return it instead of entering the restart loop // set to 127 for container cmd not found/does not exist) diff --git a/components/engine/daemon/exec.go b/components/engine/daemon/exec.go index 83b7de2255..9955053739 100644 --- a/components/engine/daemon/exec.go +++ b/components/engine/daemon/exec.go @@ -8,6 +8,7 @@ import ( "golang.org/x/net/context" + "github.com/docker/docker/api/errdefs" "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/strslice" "github.com/docker/docker/container" @@ -161,12 +162,12 @@ func (d *Daemon) ContainerExecStart(ctx context.Context, name string, stdin io.R if ec.ExitCode != nil { ec.Unlock() err := fmt.Errorf("Error: Exec command %s has already run", ec.ID) - return stateConflictError{err} + return errdefs.Conflict(err) } if ec.Running { ec.Unlock() - return stateConflictError{fmt.Errorf("Error: Exec command %s is already running", ec.ID)} + return errdefs.Conflict(fmt.Errorf("Error: Exec command %s is already running", ec.ID)) } ec.Running = true ec.Unlock() @@ -267,7 +268,7 @@ func (d *Daemon) ContainerExecStart(ctx context.Context, name string, stdin io.R case err := <-attachErr: if err != nil { if _, ok := err.(term.EscapeError); !ok { - return errors.Wrap(systemError{err}, "exec attach failed") + return errdefs.System(errors.Wrap(err, "exec attach failed")) } d.LogContainerEvent(c, "exec_detach") } diff --git a/components/engine/daemon/export.go b/components/engine/daemon/export.go index c0e6affbe0..6024f74259 100644 --- a/components/engine/daemon/export.go +++ b/components/engine/daemon/export.go @@ -5,6 +5,7 @@ import ( "io" "runtime" + "github.com/docker/docker/api/errdefs" "github.com/docker/docker/container" "github.com/docker/docker/pkg/archive" "github.com/docker/docker/pkg/ioutils" @@ -24,12 +25,12 @@ func (daemon *Daemon) ContainerExport(name string, out io.Writer) error { if container.IsDead() { err := fmt.Errorf("You cannot export container %s which is Dead", container.ID) - return stateConflictError{err} + return errdefs.Conflict(err) } if container.IsRemovalInProgress() { err := fmt.Errorf("You cannot export container %s which is being removed", container.ID) - return stateConflictError{err} + return errdefs.Conflict(err) } data, err := daemon.containerExport(container) diff --git a/components/engine/daemon/image.go b/components/engine/daemon/image.go index 486f2a2c17..a59f0ff205 100644 --- a/components/engine/daemon/image.go +++ b/components/engine/daemon/image.go @@ -5,6 +5,7 @@ import ( "runtime" "github.com/docker/distribution/reference" + "github.com/docker/docker/api/errdefs" "github.com/docker/docker/image" ) @@ -28,7 +29,7 @@ func (e errImageDoesNotExist) NotFound() {} func (daemon *Daemon) GetImageIDAndOS(refOrID string) (image.ID, string, error) { ref, err := reference.ParseAnyReference(refOrID) if err != nil { - return "", "", validationError{err} + return "", "", errdefs.InvalidParameter(err) } namedRef, ok := ref.(reference.Named) if !ok { diff --git a/components/engine/daemon/image_delete.go b/components/engine/daemon/image_delete.go index 8e51931cc4..a4b1299909 100644 --- a/components/engine/daemon/image_delete.go +++ b/components/engine/daemon/image_delete.go @@ -6,6 +6,7 @@ import ( "time" "github.com/docker/distribution/reference" + "github.com/docker/docker/api/errdefs" "github.com/docker/docker/api/types" "github.com/docker/docker/container" "github.com/docker/docker/image" @@ -85,7 +86,7 @@ func (daemon *Daemon) ImageDelete(imageRef string, force, prune bool) ([]types.I // we really want to avoid that the client must // explicitly force its removal. err := errors.Errorf("conflict: unable to remove repository reference %q (must force) - container %s is using its referenced image %s", imageRef, stringid.TruncateID(container.ID), stringid.TruncateID(imgID.String())) - return nil, stateConflictError{err} + return nil, errdefs.Conflict(err) } } diff --git a/components/engine/daemon/image_pull.go b/components/engine/daemon/image_pull.go index aef1876bad..b59753ac00 100644 --- a/components/engine/daemon/image_pull.go +++ b/components/engine/daemon/image_pull.go @@ -7,6 +7,7 @@ import ( dist "github.com/docker/distribution" "github.com/docker/distribution/reference" + "github.com/docker/docker/api/errdefs" "github.com/docker/docker/api/types" "github.com/docker/docker/distribution" progressutils "github.com/docker/docker/distribution/utils" @@ -26,7 +27,7 @@ func (daemon *Daemon) PullImage(ctx context.Context, image, tag, platform string ref, err := reference.ParseNormalizedNamed(image) if err != nil { - return validationError{err} + return errdefs.InvalidParameter(err) } if tag != "" { @@ -39,7 +40,7 @@ func (daemon *Daemon) PullImage(ctx context.Context, image, tag, platform string ref, err = reference.WithTag(ref, tag) } if err != nil { - return validationError{err} + return errdefs.InvalidParameter(err) } } @@ -96,7 +97,7 @@ func (daemon *Daemon) GetRepository(ctx context.Context, ref reference.Named, au } // makes sure name is not empty or `scratch` if err := distribution.ValidateRepoName(repoInfo.Name); err != nil { - return nil, false, validationError{err} + return nil, false, errdefs.InvalidParameter(err) } // get endpoints diff --git a/components/engine/daemon/import.go b/components/engine/daemon/import.go index 3a25bb823e..b41f8e579e 100644 --- a/components/engine/daemon/import.go +++ b/components/engine/daemon/import.go @@ -10,6 +10,7 @@ import ( "time" "github.com/docker/distribution/reference" + "github.com/docker/docker/api/errdefs" "github.com/docker/docker/api/types/container" "github.com/docker/docker/builder/dockerfile" "github.com/docker/docker/builder/remotecontext" @@ -42,16 +43,16 @@ func (daemon *Daemon) ImportImage(src string, repository, os string, tag string, var err error newRef, err = reference.ParseNormalizedNamed(repository) if err != nil { - return validationError{err} + return errdefs.InvalidParameter(err) } if _, isCanonical := newRef.(reference.Canonical); isCanonical { - return validationError{errors.New("cannot import digest reference")} + return errdefs.InvalidParameter(errors.New("cannot import digest reference")) } if tag != "" { newRef, err = reference.WithTag(newRef, tag) if err != nil { - return validationError{err} + return errdefs.InvalidParameter(err) } } } @@ -69,7 +70,7 @@ func (daemon *Daemon) ImportImage(src string, repository, os string, tag string, } u, err := url.Parse(src) if err != nil { - return validationError{err} + return errdefs.InvalidParameter(err) } resp, err = remotecontext.GetWithStatusError(u.String()) diff --git a/components/engine/daemon/inspect.go b/components/engine/daemon/inspect.go index 20cfa6ce2b..25805b296e 100644 --- a/components/engine/daemon/inspect.go +++ b/components/engine/daemon/inspect.go @@ -4,6 +4,7 @@ import ( "fmt" "time" + "github.com/docker/docker/api/errdefs" "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/backend" networktypes "github.com/docker/docker/api/types/network" @@ -188,7 +189,7 @@ func (daemon *Daemon) getInspectData(container *container.Container) (*types.Con // could have been removed, it will cause error if we try to get the metadata, // we can ignore the error if the container is dead. if err != nil && !container.Dead { - return nil, systemError{err} + return nil, errdefs.System(err) } contJSONBase.GraphDriver.Data = graphDriverData @@ -232,7 +233,7 @@ func (daemon *Daemon) VolumeInspect(name string) (*types.Volume, error) { if volumestore.IsNotExist(err) { return nil, volumeNotFound(name) } - return nil, systemError{err} + return nil, errdefs.System(err) } apiV := volumeToAPIType(v) apiV.Mountpoint = v.Path() diff --git a/components/engine/daemon/list.go b/components/engine/daemon/list.go index c87dd6ec1e..73d3f56769 100644 --- a/components/engine/daemon/list.go +++ b/components/engine/daemon/list.go @@ -6,6 +6,7 @@ import ( "strconv" "strings" + "github.com/docker/docker/api/errdefs" "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/filters" "github.com/docker/docker/container" @@ -290,7 +291,7 @@ func (daemon *Daemon) foldFilter(view container.View, config *types.ContainerLis err = psFilters.WalkValues("health", func(value string) error { if !container.IsValidHealthString(value) { - return validationError{errors.Errorf("Unrecognised filter value for health: %s", value)} + return errdefs.InvalidParameter(errors.Errorf("Unrecognised filter value for health: %s", value)) } return nil diff --git a/components/engine/daemon/logs.go b/components/engine/daemon/logs.go index 131360b7b4..612aeecb14 100644 --- a/components/engine/daemon/logs.go +++ b/components/engine/daemon/logs.go @@ -7,6 +7,7 @@ import ( "golang.org/x/net/context" + "github.com/docker/docker/api/errdefs" "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/backend" containertypes "github.com/docker/docker/api/types/container" @@ -30,7 +31,7 @@ func (daemon *Daemon) ContainerLogs(ctx context.Context, containerName string, c }) if !(config.ShowStdout || config.ShowStderr) { - return nil, false, validationError{errors.New("You must choose at least one stream")} + return nil, false, errdefs.InvalidParameter(errors.New("You must choose at least one stream")) } container, err := daemon.GetContainer(containerName) if err != nil { @@ -38,7 +39,7 @@ func (daemon *Daemon) ContainerLogs(ctx context.Context, containerName string, c } if container.RemovalInProgress || container.Dead { - return nil, false, stateConflictError{errors.New("can not get logs from container which is dead or marked for removal")} + return nil, false, errdefs.Conflict(errors.New("can not get logs from container which is dead or marked for removal")) } if container.HostConfig.LogConfig.Type == "none" { diff --git a/components/engine/daemon/names.go b/components/engine/daemon/names.go index 3ef96b1cdc..da87447676 100644 --- a/components/engine/daemon/names.go +++ b/components/engine/daemon/names.go @@ -4,6 +4,7 @@ import ( "fmt" "strings" + "github.com/docker/docker/api/errdefs" "github.com/docker/docker/container" "github.com/docker/docker/daemon/names" "github.com/docker/docker/pkg/namesgenerator" @@ -56,7 +57,7 @@ func (daemon *Daemon) generateIDAndName(name string) (string, string, error) { func (daemon *Daemon) reserveName(id, name string) (string, error) { if !validContainerNamePattern.MatchString(strings.TrimPrefix(name, "/")) { - return "", validationError{errors.Errorf("Invalid container name (%s), only %s are allowed", name, validContainerNameChars)} + return "", errdefs.InvalidParameter(errors.Errorf("Invalid container name (%s), only %s are allowed", name, validContainerNameChars)) } if name[0] != '/' { name = "/" + name diff --git a/components/engine/daemon/network.go b/components/engine/daemon/network.go index cf3d015b80..3deb13ef88 100644 --- a/components/engine/daemon/network.go +++ b/components/engine/daemon/network.go @@ -8,6 +8,7 @@ import ( "strings" "sync" + "github.com/docker/docker/api/errdefs" "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/network" clustertypes "github.com/docker/docker/daemon/cluster/provider" @@ -52,13 +53,17 @@ func (daemon *Daemon) FindUniqueNetwork(term string) (libnetwork.Network, error) case len(listByFullName) == 1: return listByFullName[0], nil case len(listByFullName) > 1: - return nil, fmt.Errorf("network %s is ambiguous (%d matches found based on name)", term, len(listByFullName)) + return nil, errdefs.InvalidParameter(errors.Errorf("network %s is ambiguous (%d matches found on name)", term, len(listByFullName))) case len(listByPartialID) == 1: return listByPartialID[0], nil case len(listByPartialID) > 1: - return nil, fmt.Errorf("network %s is ambiguous (%d matches found based on ID prefix)", term, len(listByPartialID)) + return nil, errdefs.InvalidParameter(errors.Errorf("network %s is ambiguous (%d matches found based on ID prefix)", term, len(listByPartialID))) } - return nil, libnetwork.ErrNoSuchNetwork(term) + + // Be very careful to change the error type here, the + // libnetwork.ErrNoSuchNetwork error is used by the controller + // to retry the creation of the network as managed through the swarm manager + return nil, errdefs.NotFound(libnetwork.ErrNoSuchNetwork(term)) } // GetNetworkByID function returns a network whose ID matches the given ID. @@ -264,7 +269,7 @@ func (daemon *Daemon) CreateNetwork(create types.NetworkCreateRequest) (*types.N func (daemon *Daemon) createNetwork(create types.NetworkCreateRequest, id string, agent bool) (*types.NetworkCreateResponse, error) { if runconfig.IsPreDefinedNetwork(create.Name) && !agent { err := fmt.Errorf("%s is a pre-defined network and cannot be created", create.Name) - return nil, notAllowedError{err} + return nil, errdefs.Forbidden(err) } var warning string @@ -522,7 +527,7 @@ func (daemon *Daemon) deleteLoadBalancerSandbox(n libnetwork.Network) { func (daemon *Daemon) deleteNetwork(nw libnetwork.Network, dynamic bool) error { if runconfig.IsPreDefinedNetwork(nw.Name()) && !dynamic { err := fmt.Errorf("%s is a pre-defined network and cannot be removed", nw.Name()) - return notAllowedError{err} + return errdefs.Forbidden(err) } if dynamic && !nw.Info().Dynamic() { @@ -532,7 +537,7 @@ func (daemon *Daemon) deleteNetwork(nw libnetwork.Network, dynamic bool) error { return nil } err := fmt.Errorf("%s is not a dynamic network", nw.Name()) - return notAllowedError{err} + return errdefs.Forbidden(err) } if err := nw.Delete(); err != nil { diff --git a/components/engine/daemon/rename.go b/components/engine/daemon/rename.go index 26ee9beaea..14e66be1b5 100644 --- a/components/engine/daemon/rename.go +++ b/components/engine/daemon/rename.go @@ -3,6 +3,7 @@ package daemon import ( "strings" + "github.com/docker/docker/api/errdefs" dockercontainer "github.com/docker/docker/container" "github.com/docker/libnetwork" "github.com/pkg/errors" @@ -19,7 +20,7 @@ func (daemon *Daemon) ContainerRename(oldName, newName string) error { ) if oldName == "" || newName == "" { - return validationError{errors.New("Neither old nor new names may be empty")} + return errdefs.InvalidParameter(errors.New("Neither old nor new names may be empty")) } if newName[0] != '/' { @@ -38,13 +39,13 @@ func (daemon *Daemon) ContainerRename(oldName, newName string) error { oldIsAnonymousEndpoint := container.NetworkSettings.IsAnonymousEndpoint if oldName == newName { - return validationError{errors.New("Renaming a container with the same name as its current name")} + return errdefs.InvalidParameter(errors.New("Renaming a container with the same name as its current name")) } links := map[string]*dockercontainer.Container{} for k, v := range daemon.linkIndex.children(container) { if !strings.HasPrefix(k, oldName) { - return validationError{errors.Errorf("Linked container %s does not match parent %s", k, oldName)} + return errdefs.InvalidParameter(errors.Errorf("Linked container %s does not match parent %s", k, oldName)) } links[strings.TrimPrefix(k, oldName)] = v } diff --git a/components/engine/daemon/start.go b/components/engine/daemon/start.go index 3b9f0f9f63..9509089f0f 100644 --- a/components/engine/daemon/start.go +++ b/components/engine/daemon/start.go @@ -5,6 +5,7 @@ import ( "runtime" "time" + "github.com/docker/docker/api/errdefs" "github.com/docker/docker/api/types" containertypes "github.com/docker/docker/api/types/container" "github.com/docker/docker/container" @@ -15,7 +16,7 @@ import ( // ContainerStart starts a container. func (daemon *Daemon) ContainerStart(name string, hostConfig *containertypes.HostConfig, checkpoint string, checkpointDir string) error { if checkpoint != "" && !daemon.HasExperimental() { - return validationError{errors.New("checkpoint is only supported in experimental mode")} + return errdefs.InvalidParameter(errors.New("checkpoint is only supported in experimental mode")) } container, err := daemon.GetContainer(name) @@ -28,7 +29,7 @@ func (daemon *Daemon) ContainerStart(name string, hostConfig *containertypes.Hos defer container.Unlock() if container.Paused { - return stateConflictError{errors.New("cannot start a paused container, try unpause instead")} + return errdefs.Conflict(errors.New("cannot start a paused container, try unpause instead")) } if container.Running { @@ -36,7 +37,7 @@ func (daemon *Daemon) ContainerStart(name string, hostConfig *containertypes.Hos } if container.RemovalInProgress || container.Dead { - return stateConflictError{errors.New("container is marked for removal and cannot be started")} + return errdefs.Conflict(errors.New("container is marked for removal and cannot be started")) } return nil } @@ -53,13 +54,13 @@ func (daemon *Daemon) ContainerStart(name string, hostConfig *containertypes.Hos logrus.Warn("DEPRECATED: Setting host configuration options when the container starts is deprecated and has been removed in Docker 1.12") oldNetworkMode := container.HostConfig.NetworkMode if err := daemon.setSecurityOptions(container, hostConfig); err != nil { - return validationError{err} + return errdefs.InvalidParameter(err) } if err := daemon.mergeAndVerifyLogConfig(&hostConfig.LogConfig); err != nil { - return validationError{err} + return errdefs.InvalidParameter(err) } if err := daemon.setHostConfig(container, hostConfig); err != nil { - return validationError{err} + return errdefs.InvalidParameter(err) } newNetworkMode := container.HostConfig.NetworkMode if string(oldNetworkMode) != string(newNetworkMode) { @@ -67,27 +68,27 @@ func (daemon *Daemon) ContainerStart(name string, hostConfig *containertypes.Hos // old networks. It is a deprecated feature and has been removed in Docker 1.12 container.NetworkSettings.Networks = nil if err := container.CheckpointTo(daemon.containersReplica); err != nil { - return systemError{err} + return errdefs.System(err) } } container.InitDNSHostConfig() } } else { if hostConfig != nil { - return validationError{errors.New("Supplying a hostconfig on start is not supported. It should be supplied on create")} + return errdefs.InvalidParameter(errors.New("Supplying a hostconfig on start is not supported. It should be supplied on create")) } } // check if hostConfig is in line with the current system settings. // It may happen cgroups are umounted or the like. if _, err = daemon.verifyContainerSettings(container.OS, container.HostConfig, nil, false); err != nil { - return validationError{err} + return errdefs.InvalidParameter(err) } // Adapt for old containers in case we have updates in this function and // old containers never have chance to call the new function in create stage. if hostConfig != nil { if err := daemon.adaptContainerSettings(container.HostConfig, false); err != nil { - return validationError{err} + return errdefs.InvalidParameter(err) } } @@ -111,12 +112,12 @@ func (daemon *Daemon) containerStart(container *container.Container, checkpoint } if container.RemovalInProgress || container.Dead { - return stateConflictError{errors.New("container is marked for removal and cannot be started")} + return errdefs.Conflict(errors.New("container is marked for removal and cannot be started")) } if checkpointDir != "" { // TODO(mlaventure): how would we support that? - return notAllowedError{errors.New("custom checkpointdir is not supported")} + return errdefs.Forbidden(errors.New("custom checkpointdir is not supported")) } // if we encounter an error during start we need to ensure that any other @@ -155,7 +156,7 @@ func (daemon *Daemon) containerStart(container *container.Container, checkpoint spec, err := daemon.createSpec(container) if err != nil { - return systemError{err} + return errdefs.System(err) } if resetRestartManager { diff --git a/components/engine/daemon/start_unix.go b/components/engine/daemon/start_unix.go index 119b0a9240..1efd07f959 100644 --- a/components/engine/daemon/start_unix.go +++ b/components/engine/daemon/start_unix.go @@ -8,6 +8,7 @@ import ( "path/filepath" "github.com/containerd/containerd/linux/runctypes" + "github.com/docker/docker/api/errdefs" "github.com/docker/docker/container" "github.com/pkg/errors" ) @@ -16,7 +17,7 @@ func (daemon *Daemon) getRuntimeScript(container *container.Container) (string, name := container.HostConfig.Runtime rt := daemon.configStore.GetRuntime(name) if rt == nil { - return "", validationError{errors.Errorf("no such runtime '%s'", name)} + return "", errdefs.InvalidParameter(errors.Errorf("no such runtime '%s'", name)) } if len(rt.Args) > 0 { diff --git a/components/engine/daemon/stop.go b/components/engine/daemon/stop.go index 71d0b2ab9c..9b0bdcd2e3 100644 --- a/components/engine/daemon/stop.go +++ b/components/engine/daemon/stop.go @@ -4,6 +4,7 @@ import ( "context" "time" + "github.com/docker/docker/api/errdefs" containerpkg "github.com/docker/docker/container" "github.com/pkg/errors" "github.com/sirupsen/logrus" @@ -28,7 +29,7 @@ func (daemon *Daemon) ContainerStop(name string, seconds *int) error { seconds = &stopTimeout } if err := daemon.containerStop(container, *seconds); err != nil { - return errors.Wrapf(systemError{err}, "cannot stop container: %s", name) + return errdefs.System(errors.Wrapf(err, "cannot stop container: %s", name)) } return nil } diff --git a/components/engine/daemon/update.go b/components/engine/daemon/update.go index 0a79c199f3..49321934be 100644 --- a/components/engine/daemon/update.go +++ b/components/engine/daemon/update.go @@ -4,6 +4,7 @@ import ( "context" "fmt" + "github.com/docker/docker/api/errdefs" "github.com/docker/docker/api/types/container" "github.com/pkg/errors" ) @@ -19,7 +20,7 @@ func (daemon *Daemon) ContainerUpdate(name string, hostConfig *container.HostCon warnings, err = daemon.verifyContainerSettings(c.OS, hostConfig, nil, true) if err != nil { - return container.ContainerUpdateOKBody{Warnings: warnings}, validationError{err} + return container.ContainerUpdateOKBody{Warnings: warnings}, errdefs.InvalidParameter(err) } if err := daemon.update(name, hostConfig); err != nil { @@ -80,7 +81,7 @@ func (daemon *Daemon) update(name string, hostConfig *container.HostConfig) erro if err := daemon.containerd.UpdateResources(context.Background(), container.ID, toContainerdResources(hostConfig.Resources)); err != nil { restoreConfig = true // TODO: it would be nice if containerd responded with better errors here so we can classify this better. - return errCannotUpdate(container.ID, systemError{err}) + return errCannotUpdate(container.ID, errdefs.System(err)) } } diff --git a/components/engine/daemon/volumes.go b/components/engine/daemon/volumes.go index 6a42ec23e5..2e667c873d 100644 --- a/components/engine/daemon/volumes.go +++ b/components/engine/daemon/volumes.go @@ -8,6 +8,7 @@ import ( "strings" "time" + "github.com/docker/docker/api/errdefs" "github.com/docker/docker/api/types" containertypes "github.com/docker/docker/api/types/container" mounttypes "github.com/docker/docker/api/types/mount" @@ -175,7 +176,7 @@ func (daemon *Daemon) registerMountPoints(container *container.Container, hostCo for _, cfg := range hostConfig.Mounts { mp, err := parser.ParseMountSpec(cfg) if err != nil { - return validationError{err} + return errdefs.InvalidParameter(err) } if binds[mp.Destination] { diff --git a/components/engine/distribution/errors.go b/components/engine/distribution/errors.go index 355e9da1bd..3edeb3717f 100644 --- a/components/engine/distribution/errors.go +++ b/components/engine/distribution/errors.go @@ -12,6 +12,7 @@ import ( "github.com/docker/distribution/registry/api/v2" "github.com/docker/distribution/registry/client" "github.com/docker/distribution/registry/client/auth" + "github.com/docker/docker/api/errdefs" "github.com/docker/docker/distribution/xfer" "github.com/sirupsen/logrus" ) @@ -85,20 +86,6 @@ func (e notFoundError) Cause() error { return e.cause } -type unknownError struct { - cause error -} - -func (e unknownError) Error() string { - return e.cause.Error() -} - -func (e unknownError) Cause() error { - return e.cause -} - -func (e unknownError) Unknown() {} - // TranslatePullError is used to convert an error from a registry pull // operation to an error representing the entire pull operation. Any error // information which is not used by the returned error gets output to @@ -121,7 +108,7 @@ func TranslatePullError(err error, ref reference.Named) error { return TranslatePullError(v.Err, ref) } - return unknownError{err} + return errdefs.Unknown(err) } // continueOnError returns true if we should fallback to the next endpoint diff --git a/components/engine/libcontainerd/client_daemon.go b/components/engine/libcontainerd/client_daemon.go index eb76fe117b..cc0c099c43 100644 --- a/components/engine/libcontainerd/client_daemon.go +++ b/components/engine/libcontainerd/client_daemon.go @@ -27,10 +27,11 @@ import ( "github.com/containerd/containerd/archive" "github.com/containerd/containerd/cio" "github.com/containerd/containerd/content" - "github.com/containerd/containerd/errdefs" + containerderrors "github.com/containerd/containerd/errdefs" "github.com/containerd/containerd/images" "github.com/containerd/containerd/linux/runctypes" "github.com/containerd/typeurl" + "github.com/docker/docker/api/errdefs" "github.com/docker/docker/pkg/ioutils" "github.com/opencontainers/image-spec/specs-go/v1" specs "github.com/opencontainers/runtime-spec/specs-go" @@ -181,7 +182,7 @@ func (c *client) Create(ctx context.Context, id string, ociSpec *specs.Spec, run bdir, err := prepareBundleDir(filepath.Join(c.stateDir, id), ociSpec) if err != nil { - return wrapSystemError(errors.Wrap(err, "prepare bundle dir failed")) + return errdefs.System(errors.Wrap(err, "prepare bundle dir failed")) } c.logger.WithField("bundle", bdir).WithField("root", ociSpec.Root.Path).Debug("bundle dir created") @@ -536,11 +537,11 @@ func (c *client) CreateCheckpoint(ctx context.Context, containerID, checkpointDi b, err := content.ReadBlob(ctx, c.remote.ContentStore(), img.Target().Digest) if err != nil { - return wrapSystemError(errors.Wrapf(err, "failed to retrieve checkpoint data")) + return errdefs.System(errors.Wrapf(err, "failed to retrieve checkpoint data")) } var index v1.Index if err := json.Unmarshal(b, &index); err != nil { - return wrapSystemError(errors.Wrapf(err, "failed to decode checkpoint data")) + return errdefs.System(errors.Wrapf(err, "failed to decode checkpoint data")) } var cpDesc *v1.Descriptor @@ -551,17 +552,17 @@ func (c *client) CreateCheckpoint(ctx context.Context, containerID, checkpointDi } } if cpDesc == nil { - return wrapSystemError(errors.Wrapf(err, "invalid checkpoint")) + return errdefs.System(errors.Wrapf(err, "invalid checkpoint")) } rat, err := c.remote.ContentStore().ReaderAt(ctx, cpDesc.Digest) if err != nil { - return wrapSystemError(errors.Wrapf(err, "failed to get checkpoint reader")) + return errdefs.System(errors.Wrapf(err, "failed to get checkpoint reader")) } defer rat.Close() _, err = archive.Apply(ctx, checkpointDir, content.NewReader(rat)) if err != nil { - return wrapSystemError(errors.Wrapf(err, "failed to read checkpoint reader")) + return errdefs.System(errors.Wrapf(err, "failed to read checkpoint reader")) } return err @@ -847,14 +848,14 @@ func wrapError(err error) error { switch { case err == nil: return nil - case errdefs.IsNotFound(err): - return wrapNotFoundError(err) + case containerderrors.IsNotFound(err): + return errdefs.NotFound(err) } msg := err.Error() for _, s := range []string{"container does not exist", "not found", "no such container"} { if strings.Contains(msg, s) { - return wrapNotFoundError(err) + return errdefs.NotFound(err) } } return err diff --git a/components/engine/libcontainerd/errors.go b/components/engine/libcontainerd/errors.go index db59ea878c..1ecec7ba9d 100644 --- a/components/engine/libcontainerd/errors.go +++ b/components/engine/libcontainerd/errors.go @@ -1,46 +1,13 @@ package libcontainerd -import "errors" +import ( + "errors" -type liberr struct { - err error -} + "github.com/docker/docker/api/errdefs" +) -func (e liberr) Error() string { - return e.err.Error() -} +func newNotFoundError(err string) error { return errdefs.NotFound(errors.New(err)) } -func (e liberr) Cause() error { - return e.err -} +func newInvalidParameterError(err string) error { return errdefs.InvalidParameter(errors.New(err)) } -type notFoundErr struct { - liberr -} - -func (notFoundErr) NotFound() {} - -func newNotFoundError(err string) error { return notFoundErr{liberr{errors.New(err)}} } -func wrapNotFoundError(err error) error { return notFoundErr{liberr{err}} } - -type invalidParamErr struct { - liberr -} - -func (invalidParamErr) InvalidParameter() {} - -func newInvalidParameterError(err string) error { return invalidParamErr{liberr{errors.New(err)}} } - -type conflictErr struct { - liberr -} - -func (conflictErr) ConflictErr() {} - -func newConflictError(err string) error { return conflictErr{liberr{errors.New(err)}} } - -type sysErr struct { - liberr -} - -func wrapSystemError(err error) error { return sysErr{liberr{err}} } +func newConflictError(err string) error { return errdefs.Conflict(errors.New(err)) } diff --git a/components/engine/plugin/backend_linux.go b/components/engine/plugin/backend_linux.go index 1f2830a899..3437a7dca2 100644 --- a/components/engine/plugin/backend_linux.go +++ b/components/engine/plugin/backend_linux.go @@ -14,6 +14,7 @@ import ( "github.com/docker/distribution/manifest/schema2" "github.com/docker/distribution/reference" + "github.com/docker/docker/api/errdefs" "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/filters" "github.com/docker/docker/distribution" @@ -233,7 +234,7 @@ func (pm *Manager) Privileges(ctx context.Context, ref reference.Named, metaHead } var config types.PluginConfig if err := json.Unmarshal(cs.config, &config); err != nil { - return nil, systemError{err} + return nil, errdefs.System(err) } return computePrivileges(config), nil @@ -255,12 +256,12 @@ func (pm *Manager) Upgrade(ctx context.Context, ref reference.Named, name string // revalidate because Pull is public if _, err := reference.ParseNormalizedNamed(name); err != nil { - return errors.Wrapf(validationError{err}, "failed to parse %q", name) + return errors.Wrapf(errdefs.InvalidParameter(err), "failed to parse %q", name) } tmpRootFSDir, err := ioutil.TempDir(pm.tmpDir(), ".rootfs") if err != nil { - return errors.Wrap(systemError{err}, "error preparing upgrade") + return errors.Wrap(errdefs.System(err), "error preparing upgrade") } defer os.RemoveAll(tmpRootFSDir) @@ -302,17 +303,17 @@ func (pm *Manager) Pull(ctx context.Context, ref reference.Named, name string, m // revalidate because Pull is public nameref, err := reference.ParseNormalizedNamed(name) if err != nil { - return errors.Wrapf(validationError{err}, "failed to parse %q", name) + return errors.Wrapf(errdefs.InvalidParameter(err), "failed to parse %q", name) } name = reference.FamiliarString(reference.TagNameOnly(nameref)) if err := pm.config.Store.validateName(name); err != nil { - return validationError{err} + return errdefs.InvalidParameter(err) } tmpRootFSDir, err := ioutil.TempDir(pm.tmpDir(), ".rootfs") if err != nil { - return errors.Wrap(systemError{err}, "error preparing pull") + return errors.Wrap(errdefs.System(err), "error preparing pull") } defer os.RemoveAll(tmpRootFSDir) diff --git a/components/engine/plugin/errors.go b/components/engine/plugin/errors.go index 0a101d4dc5..a4f6fa8103 100644 --- a/components/engine/plugin/errors.go +++ b/components/engine/plugin/errors.go @@ -26,34 +26,6 @@ func (name errDisabled) Error() string { func (name errDisabled) Conflict() {} -type validationError struct { - cause error -} - -func (e validationError) Error() string { - return e.cause.Error() -} - -func (validationError) Conflict() {} - -func (e validationError) Cause() error { - return e.cause -} - -type systemError struct { - cause error -} - -func (e systemError) Error() string { - return e.cause.Error() -} - -func (systemError) SystemError() {} - -func (e systemError) Cause() error { - return e.cause -} - type invalidFilter struct { filter string value []string diff --git a/components/engine/plugin/manager_linux.go b/components/engine/plugin/manager_linux.go index 59066c1d79..888f06dd91 100644 --- a/components/engine/plugin/manager_linux.go +++ b/components/engine/plugin/manager_linux.go @@ -7,6 +7,7 @@ import ( "path/filepath" "time" + "github.com/docker/docker/api/errdefs" "github.com/docker/docker/api/types" "github.com/docker/docker/daemon/initlayer" "github.com/docker/docker/pkg/containerfs" @@ -217,12 +218,12 @@ func (pm *Manager) upgradePlugin(p *v2.Plugin, configDigest digest.Digest, blobs // This could happen if the plugin was disabled with `-f` with active mounts. // If there is anything in `orig` is still mounted, this should error out. if err := mount.RecursiveUnmount(orig); err != nil { - return systemError{err} + return errdefs.System(err) } backup := orig + "-old" if err := os.Rename(orig, backup); err != nil { - return errors.Wrap(systemError{err}, "error backing up plugin data before upgrade") + return errors.Wrap(errdefs.System(err), "error backing up plugin data before upgrade") } defer func() { @@ -248,7 +249,7 @@ func (pm *Manager) upgradePlugin(p *v2.Plugin, configDigest digest.Digest, blobs }() if err := os.Rename(tmpRootFSDir, orig); err != nil { - return errors.Wrap(systemError{err}, "error upgrading") + return errors.Wrap(errdefs.System(err), "error upgrading") } p.PluginObj.Config = config @@ -288,7 +289,7 @@ func (pm *Manager) setupNewPlugin(configDigest digest.Digest, blobsums []digest. // createPlugin creates a new plugin. take lock before calling. func (pm *Manager) createPlugin(name string, configDigest digest.Digest, blobsums []digest.Digest, rootFSDir string, privileges *types.PluginPrivileges, opts ...CreateOpt) (p *v2.Plugin, err error) { if err := pm.config.Store.validateName(name); err != nil { // todo: this check is wrong. remove store - return nil, validationError{err} + return nil, errdefs.InvalidParameter(err) } config, err := pm.setupNewPlugin(configDigest, blobsums, privileges) diff --git a/components/engine/plugin/store.go b/components/engine/plugin/store.go index b3398145d7..4ce817491c 100644 --- a/components/engine/plugin/store.go +++ b/components/engine/plugin/store.go @@ -5,6 +5,7 @@ import ( "strings" "github.com/docker/distribution/reference" + "github.com/docker/docker/api/errdefs" "github.com/docker/docker/pkg/plugingetter" "github.com/docker/docker/pkg/plugins" "github.com/docker/docker/plugin/v2" @@ -144,7 +145,7 @@ func (ps *Store) Get(name, capability string, mode int) (plugingetter.CompatPlug if errors.Cause(err) == plugins.ErrNotFound { return nil, errNotFound(name) } - return nil, errors.Wrap(systemError{err}, "legacy plugin") + return nil, errors.Wrap(errdefs.System(err), "legacy plugin") } // GetAllManagedPluginsByCap returns a list of managed plugins matching the given capability. @@ -172,7 +173,7 @@ func (ps *Store) GetAllByCap(capability string) ([]plugingetter.CompatPlugin, er if allowV1PluginsFallback { pl, err := plugins.GetAll(capability) if err != nil { - return nil, errors.Wrap(systemError{err}, "legacy plugin") + return nil, errors.Wrap(errdefs.System(err), "legacy plugin") } for _, p := range pl { result = append(result, p) diff --git a/components/engine/registry/auth.go b/components/engine/registry/auth.go index 11937d801a..e91631701d 100644 --- a/components/engine/registry/auth.go +++ b/components/engine/registry/auth.go @@ -10,6 +10,7 @@ import ( "github.com/docker/distribution/registry/client/auth" "github.com/docker/distribution/registry/client/auth/challenge" "github.com/docker/distribution/registry/client/transport" + "github.com/docker/docker/api/errdefs" "github.com/docker/docker/api/types" registrytypes "github.com/docker/docker/api/types/registry" "github.com/pkg/errors" @@ -29,7 +30,7 @@ func loginV1(authConfig *types.AuthConfig, apiEndpoint APIEndpoint, userAgent st logrus.Debugf("attempting v1 login to registry endpoint %s", serverAddress) if serverAddress == "" { - return "", "", systemError{errors.New("server Error: Server Address not set")} + return "", "", errdefs.System(errors.New("server Error: Server Address not set")) } req, err := http.NewRequest("GET", serverAddress+"users/", nil) @@ -47,23 +48,23 @@ func loginV1(authConfig *types.AuthConfig, apiEndpoint APIEndpoint, userAgent st defer resp.Body.Close() body, err := ioutil.ReadAll(resp.Body) if err != nil { - return "", "", systemError{err} + return "", "", errdefs.System(err) } switch resp.StatusCode { case http.StatusOK: return "Login Succeeded", "", nil case http.StatusUnauthorized: - return "", "", unauthorizedError{errors.New("Wrong login/password, please try again")} + return "", "", errdefs.Unauthorized(errors.New("Wrong login/password, please try again")) case http.StatusForbidden: // *TODO: Use registry configuration to determine what this says, if anything? - return "", "", notActivatedError{errors.Errorf("Login: Account is not active. Please see the documentation of the registry %s for instructions how to activate it.", serverAddress)} + return "", "", errdefs.Forbidden(errors.Errorf("Login: Account is not active. Please see the documentation of the registry %s for instructions how to activate it.", serverAddress)) case http.StatusInternalServerError: logrus.Errorf("%s returned status code %d. Response Body :\n%s", req.URL.String(), resp.StatusCode, body) - return "", "", systemError{errors.New("Internal Server Error")} + return "", "", errdefs.System(errors.New("Internal Server Error")) } - return "", "", systemError{errors.Errorf("Login: %s (Code: %d; Headers: %s)", body, - resp.StatusCode, resp.Header)} + return "", "", errdefs.System(errors.Errorf("Login: %s (Code: %d; Headers: %s)", body, + resp.StatusCode, resp.Header)) } type loginCredentialStore struct { diff --git a/components/engine/registry/errors.go b/components/engine/registry/errors.go index b388efca73..1b8ea97f36 100644 --- a/components/engine/registry/errors.go +++ b/components/engine/registry/errors.go @@ -4,6 +4,7 @@ import ( "net/url" "github.com/docker/distribution/registry/api/errcode" + "github.com/docker/docker/api/errdefs" ) type notFoundError string @@ -14,62 +15,6 @@ func (e notFoundError) Error() string { func (notFoundError) NotFound() {} -type validationError struct { - cause error -} - -func (e validationError) Error() string { - return e.cause.Error() -} - -func (e validationError) InvalidParameter() {} - -func (e validationError) Cause() error { - return e.cause -} - -type unauthorizedError struct { - cause error -} - -func (e unauthorizedError) Error() string { - return e.cause.Error() -} - -func (e unauthorizedError) Unauthorized() {} - -func (e unauthorizedError) Cause() error { - return e.cause -} - -type systemError struct { - cause error -} - -func (e systemError) Error() string { - return e.cause.Error() -} - -func (e systemError) SystemError() {} - -func (e systemError) Cause() error { - return e.cause -} - -type notActivatedError struct { - cause error -} - -func (e notActivatedError) Error() string { - return e.cause.Error() -} - -func (e notActivatedError) Forbidden() {} - -func (e notActivatedError) Cause() error { - return e.cause -} - func translateV2AuthError(err error) error { switch e := err.(type) { case *url.Error: @@ -77,7 +22,7 @@ func translateV2AuthError(err error) error { case errcode.Error: switch e2.Code { case errcode.ErrorCodeUnauthorized: - return unauthorizedError{err} + return errdefs.Unauthorized(err) } } } diff --git a/components/engine/registry/service.go b/components/engine/registry/service.go index f3f1b4a567..ac240f0c69 100644 --- a/components/engine/registry/service.go +++ b/components/engine/registry/service.go @@ -11,6 +11,7 @@ import ( "github.com/docker/distribution/reference" "github.com/docker/distribution/registry/client/auth" + "github.com/docker/docker/api/errdefs" "github.com/docker/docker/api/types" registrytypes "github.com/docker/docker/api/types/registry" "github.com/pkg/errors" @@ -117,12 +118,12 @@ func (s *DefaultService) Auth(ctx context.Context, authConfig *types.AuthConfig, } u, err := url.Parse(serverAddress) if err != nil { - return "", "", validationError{errors.Errorf("unable to parse server address: %v", err)} + return "", "", errdefs.InvalidParameter(errors.Errorf("unable to parse server address: %v", err)) } endpoints, err := s.LookupPushEndpoints(u.Host) if err != nil { - return "", "", validationError{err} + return "", "", errdefs.InvalidParameter(err) } for _, endpoint := range endpoints { diff --git a/components/engine/registry/session.go b/components/engine/registry/session.go index e619d9f644..89c374f618 100644 --- a/components/engine/registry/session.go +++ b/components/engine/registry/session.go @@ -19,6 +19,7 @@ import ( "github.com/docker/distribution/reference" "github.com/docker/distribution/registry/api/errcode" + "github.com/docker/docker/api/errdefs" "github.com/docker/docker/api/types" registrytypes "github.com/docker/docker/api/types/registry" "github.com/docker/docker/pkg/ioutils" @@ -734,20 +735,20 @@ func shouldRedirect(response *http.Response) bool { // SearchRepositories performs a search against the remote repository func (r *Session) SearchRepositories(term string, limit int) (*registrytypes.SearchResults, error) { if limit < 1 || limit > 100 { - return nil, validationError{errors.Errorf("Limit %d is outside the range of [1, 100]", limit)} + return nil, errdefs.InvalidParameter(errors.Errorf("Limit %d is outside the range of [1, 100]", limit)) } logrus.Debugf("Index server: %s", r.indexEndpoint) u := r.indexEndpoint.String() + "search?q=" + url.QueryEscape(term) + "&n=" + url.QueryEscape(fmt.Sprintf("%d", limit)) req, err := http.NewRequest("GET", u, nil) if err != nil { - return nil, errors.Wrap(validationError{err}, "Error building request") + return nil, errors.Wrap(errdefs.InvalidParameter(err), "Error building request") } // Have the AuthTransport send authentication, when logged in. req.Header.Set("X-Docker-Token", "true") res, err := r.client.Do(req) if err != nil { - return nil, systemError{err} + return nil, errdefs.System(err) } defer res.Body.Close() if res.StatusCode != 200 { diff --git a/components/engine/volume/local/local.go b/components/engine/volume/local/local.go index c11a18c3dc..49e18b761a 100644 --- a/components/engine/volume/local/local.go +++ b/components/engine/volume/local/local.go @@ -13,6 +13,7 @@ import ( "strings" "sync" + "github.com/docker/docker/api/errdefs" "github.com/docker/docker/daemon/names" "github.com/docker/docker/pkg/idtools" "github.com/docker/docker/pkg/mount" @@ -139,20 +140,6 @@ func (r *Root) Name() string { return volume.DefaultDriverName } -type systemError struct { - err error -} - -func (e systemError) Error() string { - return e.err.Error() -} - -func (e systemError) SystemError() {} - -func (e systemError) Cause() error { - return e.err -} - // Create creates a new volume.Volume with the provided name, creating // the underlying directory tree required for this volume in the // process. @@ -171,7 +158,7 @@ func (r *Root) Create(name string, opts map[string]string) (volume.Volume, error path := r.DataPath(name) if err := idtools.MkdirAllAndChown(path, 0755, r.rootIDs); err != nil { - return nil, errors.Wrapf(systemError{err}, "error while creating volume path '%s'", path) + return nil, errors.Wrapf(errdefs.System(err), "error while creating volume path '%s'", path) } var err error @@ -197,7 +184,7 @@ func (r *Root) Create(name string, opts map[string]string) (volume.Volume, error return nil, err } if err = ioutil.WriteFile(filepath.Join(filepath.Dir(path), "opts.json"), b, 600); err != nil { - return nil, errors.Wrap(systemError{err}, "error while persisting volume options") + return nil, errdefs.System(errors.Wrap(err, "error while persisting volume options")) } } @@ -215,11 +202,11 @@ func (r *Root) Remove(v volume.Volume) error { lv, ok := v.(*localVolume) if !ok { - return systemError{errors.Errorf("unknown volume type %T", v)} + return errdefs.System(errors.Errorf("unknown volume type %T", v)) } if lv.active.count > 0 { - return systemError{errors.Errorf("volume has active mounts")} + return errdefs.System(errors.Errorf("volume has active mounts")) } if err := lv.unmount(); err != nil { @@ -235,7 +222,7 @@ func (r *Root) Remove(v volume.Volume) error { } if !r.scopedPath(realPath) { - return systemError{errors.Errorf("Unable to remove a directory of out the Docker root %s: %s", r.scope, realPath)} + return errdefs.System(errors.Errorf("Unable to remove a directory of out the Docker root %s: %s", r.scope, realPath)) } if err := removePath(realPath); err != nil { @@ -251,7 +238,7 @@ func removePath(path string) error { if os.IsNotExist(err) { return nil } - return errors.Wrapf(systemError{err}, "error removing volume path '%s'", path) + return errdefs.System(errors.Wrapf(err, "error removing volume path '%s'", path)) } return nil } @@ -334,7 +321,7 @@ func (v *localVolume) Mount(id string) (string, error) { if v.opts != nil { if !v.active.mounted { if err := v.mount(); err != nil { - return "", systemError{err} + return "", errdefs.System(err) } v.active.mounted = true } @@ -368,7 +355,7 @@ func (v *localVolume) unmount() error { if v.opts != nil { if err := mount.Unmount(v.path); err != nil { if mounted, mErr := mount.Mounted(v.path); mounted || mErr != nil { - return errors.Wrapf(systemError{err}, "error while unmounting volume path '%s'", v.path) + return errdefs.System(errors.Wrapf(err, "error while unmounting volume path '%s'", v.path)) } } v.active.mounted = false From d4d0b5c26833a622ef21503251a85c803a3bcc4f Mon Sep 17 00:00:00 2001 From: Brian Goff Date: Thu, 11 Jan 2018 14:53:06 -0500 Subject: [PATCH 03/12] Move api/errdefs to errdefs Signed-off-by: Brian Goff Upstream-commit: d453fe35b9b8b52d0677fe0c3cc8373f2f5d30d0 Component: engine --- components/engine/api/server/httputils/errors.go | 2 +- components/engine/api/server/httputils/httputils.go | 2 +- components/engine/api/server/router/build/build_routes.go | 2 +- .../engine/api/server/router/container/container_routes.go | 2 +- components/engine/api/server/router/container/exec.go | 2 +- components/engine/api/server/router/image/image_routes.go | 2 +- components/engine/api/server/router/network/network_routes.go | 2 +- components/engine/api/server/router/session/session_routes.go | 2 +- components/engine/api/server/router/swarm/cluster_routes.go | 2 +- components/engine/builder/dockerfile/builder.go | 2 +- components/engine/builder/dockerfile/dispatchers.go | 2 +- components/engine/builder/dockerfile/evaluator.go | 2 +- components/engine/builder/remotecontext/remote.go | 2 +- components/engine/daemon/archive.go | 2 +- components/engine/daemon/attach.go | 2 +- .../engine/daemon/cluster/controllers/plugin/controller.go | 2 +- components/engine/daemon/cluster/helpers.go | 2 +- components/engine/daemon/cluster/networks.go | 2 +- components/engine/daemon/cluster/nodes.go | 2 +- components/engine/daemon/cluster/services.go | 2 +- components/engine/daemon/cluster/swarm.go | 2 +- components/engine/daemon/commit.go | 2 +- components/engine/daemon/container.go | 2 +- components/engine/daemon/container_linux.go | 2 +- components/engine/daemon/container_operations.go | 2 +- components/engine/daemon/container_operations_unix.go | 2 +- components/engine/daemon/create.go | 2 +- components/engine/daemon/daemon.go | 2 +- components/engine/daemon/daemon_test.go | 2 +- components/engine/daemon/delete.go | 2 +- components/engine/daemon/errors.go | 2 +- components/engine/daemon/exec.go | 2 +- components/engine/daemon/export.go | 2 +- components/engine/daemon/graphdriver/quota/errors.go | 2 +- components/engine/daemon/image.go | 2 +- components/engine/daemon/image_delete.go | 2 +- components/engine/daemon/image_pull.go | 2 +- components/engine/daemon/import.go | 2 +- components/engine/daemon/inspect.go | 2 +- components/engine/daemon/kill.go | 2 +- components/engine/daemon/list.go | 2 +- components/engine/daemon/logs.go | 2 +- components/engine/daemon/names.go | 2 +- components/engine/daemon/network.go | 2 +- components/engine/daemon/rename.go | 2 +- components/engine/daemon/start.go | 2 +- components/engine/daemon/start_unix.go | 2 +- components/engine/daemon/stop.go | 2 +- components/engine/daemon/update.go | 2 +- components/engine/daemon/volumes.go | 2 +- components/engine/distribution/errors.go | 2 +- components/engine/{api => }/errdefs/defs.go | 0 components/engine/{api => }/errdefs/doc.go | 0 components/engine/{api => }/errdefs/helpers.go | 0 components/engine/{api => }/errdefs/helpers_test.go | 0 components/engine/{api => }/errdefs/is.go | 0 components/engine/libcontainerd/client_daemon.go | 2 +- components/engine/libcontainerd/errors.go | 2 +- components/engine/plugin/backend_linux.go | 2 +- components/engine/plugin/executor/containerd/containerd.go | 2 +- components/engine/plugin/manager_linux.go | 2 +- components/engine/plugin/store.go | 2 +- components/engine/registry/auth.go | 2 +- components/engine/registry/errors.go | 2 +- components/engine/registry/service.go | 2 +- components/engine/registry/session.go | 2 +- components/engine/volume/local/local.go | 2 +- 67 files changed, 62 insertions(+), 62 deletions(-) rename components/engine/{api => }/errdefs/defs.go (100%) rename components/engine/{api => }/errdefs/doc.go (100%) rename components/engine/{api => }/errdefs/helpers.go (100%) rename components/engine/{api => }/errdefs/helpers_test.go (100%) rename components/engine/{api => }/errdefs/is.go (100%) diff --git a/components/engine/api/server/httputils/errors.go b/components/engine/api/server/httputils/errors.go index 577d19c166..f5008223c9 100644 --- a/components/engine/api/server/httputils/errors.go +++ b/components/engine/api/server/httputils/errors.go @@ -4,9 +4,9 @@ import ( "fmt" "net/http" - "github.com/docker/docker/api/errdefs" "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/versions" + "github.com/docker/docker/errdefs" "github.com/gorilla/mux" "github.com/sirupsen/logrus" "google.golang.org/grpc" diff --git a/components/engine/api/server/httputils/httputils.go b/components/engine/api/server/httputils/httputils.go index dbf5b7a2a0..e292928bf6 100644 --- a/components/engine/api/server/httputils/httputils.go +++ b/components/engine/api/server/httputils/httputils.go @@ -6,7 +6,7 @@ import ( "net/http" "strings" - "github.com/docker/docker/api/errdefs" + "github.com/docker/docker/errdefs" "github.com/pkg/errors" "github.com/sirupsen/logrus" "golang.org/x/net/context" diff --git a/components/engine/api/server/router/build/build_routes.go b/components/engine/api/server/router/build/build_routes.go index 553f8fcee4..491fa85a86 100644 --- a/components/engine/api/server/router/build/build_routes.go +++ b/components/engine/api/server/router/build/build_routes.go @@ -13,12 +13,12 @@ import ( "strings" "sync" - "github.com/docker/docker/api/errdefs" "github.com/docker/docker/api/server/httputils" "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/backend" "github.com/docker/docker/api/types/container" "github.com/docker/docker/api/types/versions" + "github.com/docker/docker/errdefs" "github.com/docker/docker/pkg/ioutils" "github.com/docker/docker/pkg/progress" "github.com/docker/docker/pkg/streamformatter" diff --git a/components/engine/api/server/router/container/container_routes.go b/components/engine/api/server/router/container/container_routes.go index 0343072283..5f8456d706 100644 --- a/components/engine/api/server/router/container/container_routes.go +++ b/components/engine/api/server/router/container/container_routes.go @@ -8,7 +8,6 @@ import ( "strconv" "syscall" - "github.com/docker/docker/api/errdefs" "github.com/docker/docker/api/server/httputils" "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/backend" @@ -16,6 +15,7 @@ import ( "github.com/docker/docker/api/types/filters" "github.com/docker/docker/api/types/versions" containerpkg "github.com/docker/docker/container" + "github.com/docker/docker/errdefs" "github.com/docker/docker/pkg/ioutils" "github.com/docker/docker/pkg/signal" "github.com/pkg/errors" diff --git a/components/engine/api/server/router/container/exec.go b/components/engine/api/server/router/container/exec.go index 60be8476eb..6dfca729c5 100644 --- a/components/engine/api/server/router/container/exec.go +++ b/components/engine/api/server/router/container/exec.go @@ -7,10 +7,10 @@ import ( "net/http" "strconv" - "github.com/docker/docker/api/errdefs" "github.com/docker/docker/api/server/httputils" "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/versions" + "github.com/docker/docker/errdefs" "github.com/docker/docker/pkg/stdcopy" "github.com/sirupsen/logrus" "golang.org/x/net/context" diff --git a/components/engine/api/server/router/image/image_routes.go b/components/engine/api/server/router/image/image_routes.go index 42e2710828..dc16a23af0 100644 --- a/components/engine/api/server/router/image/image_routes.go +++ b/components/engine/api/server/router/image/image_routes.go @@ -10,12 +10,12 @@ import ( "strconv" "strings" - "github.com/docker/docker/api/errdefs" "github.com/docker/docker/api/server/httputils" "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/backend" "github.com/docker/docker/api/types/filters" "github.com/docker/docker/api/types/versions" + "github.com/docker/docker/errdefs" "github.com/docker/docker/pkg/ioutils" "github.com/docker/docker/pkg/streamformatter" "github.com/docker/docker/pkg/system" diff --git a/components/engine/api/server/router/network/network_routes.go b/components/engine/api/server/router/network/network_routes.go index eb5dfe2a4d..fcfeb83f55 100644 --- a/components/engine/api/server/router/network/network_routes.go +++ b/components/engine/api/server/router/network/network_routes.go @@ -8,12 +8,12 @@ import ( "golang.org/x/net/context" - "github.com/docker/docker/api/errdefs" "github.com/docker/docker/api/server/httputils" "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/filters" "github.com/docker/docker/api/types/network" "github.com/docker/docker/api/types/versions" + "github.com/docker/docker/errdefs" "github.com/docker/libnetwork" netconst "github.com/docker/libnetwork/datastore" "github.com/docker/libnetwork/networkdb" diff --git a/components/engine/api/server/router/session/session_routes.go b/components/engine/api/server/router/session/session_routes.go index 49493cdf64..8eb8074ebc 100644 --- a/components/engine/api/server/router/session/session_routes.go +++ b/components/engine/api/server/router/session/session_routes.go @@ -3,7 +3,7 @@ package session import ( "net/http" - "github.com/docker/docker/api/errdefs" + "github.com/docker/docker/errdefs" "golang.org/x/net/context" ) diff --git a/components/engine/api/server/router/swarm/cluster_routes.go b/components/engine/api/server/router/swarm/cluster_routes.go index 124900d459..bd98acfcf1 100644 --- a/components/engine/api/server/router/swarm/cluster_routes.go +++ b/components/engine/api/server/router/swarm/cluster_routes.go @@ -6,13 +6,13 @@ import ( "net/http" "strconv" - "github.com/docker/docker/api/errdefs" "github.com/docker/docker/api/server/httputils" basictypes "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/backend" "github.com/docker/docker/api/types/filters" types "github.com/docker/docker/api/types/swarm" "github.com/docker/docker/api/types/versions" + "github.com/docker/docker/errdefs" "github.com/pkg/errors" "github.com/sirupsen/logrus" "golang.org/x/net/context" diff --git a/components/engine/builder/dockerfile/builder.go b/components/engine/builder/dockerfile/builder.go index bd2418f59e..0354b2d3f9 100644 --- a/components/engine/builder/dockerfile/builder.go +++ b/components/engine/builder/dockerfile/builder.go @@ -9,7 +9,6 @@ import ( "strings" "time" - "github.com/docker/docker/api/errdefs" "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/backend" "github.com/docker/docker/api/types/container" @@ -18,6 +17,7 @@ import ( "github.com/docker/docker/builder/dockerfile/parser" "github.com/docker/docker/builder/fscache" "github.com/docker/docker/builder/remotecontext" + "github.com/docker/docker/errdefs" "github.com/docker/docker/pkg/idtools" "github.com/docker/docker/pkg/streamformatter" "github.com/docker/docker/pkg/stringid" diff --git a/components/engine/builder/dockerfile/dispatchers.go b/components/engine/builder/dockerfile/dispatchers.go index f1f886007e..1cf275d8c4 100644 --- a/components/engine/builder/dockerfile/dispatchers.go +++ b/components/engine/builder/dockerfile/dispatchers.go @@ -15,12 +15,12 @@ import ( "strings" "github.com/docker/docker/api" - "github.com/docker/docker/api/errdefs" "github.com/docker/docker/api/types/container" "github.com/docker/docker/api/types/strslice" "github.com/docker/docker/builder" "github.com/docker/docker/builder/dockerfile/instructions" "github.com/docker/docker/builder/dockerfile/parser" + "github.com/docker/docker/errdefs" "github.com/docker/docker/image" "github.com/docker/docker/pkg/jsonmessage" "github.com/docker/docker/pkg/signal" diff --git a/components/engine/builder/dockerfile/evaluator.go b/components/engine/builder/dockerfile/evaluator.go index de9cdaa924..cf3d4fd01e 100644 --- a/components/engine/builder/dockerfile/evaluator.go +++ b/components/engine/builder/dockerfile/evaluator.go @@ -24,10 +24,10 @@ import ( "strconv" "strings" - "github.com/docker/docker/api/errdefs" "github.com/docker/docker/api/types/container" "github.com/docker/docker/builder" "github.com/docker/docker/builder/dockerfile/instructions" + "github.com/docker/docker/errdefs" "github.com/docker/docker/pkg/system" "github.com/docker/docker/runconfig/opts" "github.com/pkg/errors" diff --git a/components/engine/builder/remotecontext/remote.go b/components/engine/builder/remotecontext/remote.go index 0c3345c785..b67914cc11 100644 --- a/components/engine/builder/remotecontext/remote.go +++ b/components/engine/builder/remotecontext/remote.go @@ -10,7 +10,7 @@ import ( "net/url" "regexp" - "github.com/docker/docker/api/errdefs" + "github.com/docker/docker/errdefs" "github.com/docker/docker/pkg/ioutils" "github.com/pkg/errors" ) diff --git a/components/engine/daemon/archive.go b/components/engine/daemon/archive.go index ddc4b572bd..69301342ef 100644 --- a/components/engine/daemon/archive.go +++ b/components/engine/daemon/archive.go @@ -5,9 +5,9 @@ import ( "os" "strings" - "github.com/docker/docker/api/errdefs" "github.com/docker/docker/api/types" "github.com/docker/docker/container" + "github.com/docker/docker/errdefs" "github.com/docker/docker/pkg/archive" "github.com/docker/docker/pkg/chrootarchive" "github.com/docker/docker/pkg/ioutils" diff --git a/components/engine/daemon/attach.go b/components/engine/daemon/attach.go index 1b52fd0168..d63eaa6632 100644 --- a/components/engine/daemon/attach.go +++ b/components/engine/daemon/attach.go @@ -5,11 +5,11 @@ import ( "fmt" "io" - "github.com/docker/docker/api/errdefs" "github.com/docker/docker/api/types/backend" "github.com/docker/docker/container" "github.com/docker/docker/container/stream" "github.com/docker/docker/daemon/logger" + "github.com/docker/docker/errdefs" "github.com/docker/docker/pkg/stdcopy" "github.com/docker/docker/pkg/term" "github.com/pkg/errors" diff --git a/components/engine/daemon/cluster/controllers/plugin/controller.go b/components/engine/daemon/cluster/controllers/plugin/controller.go index b48c9fd4e2..d4f24e82df 100644 --- a/components/engine/daemon/cluster/controllers/plugin/controller.go +++ b/components/engine/daemon/cluster/controllers/plugin/controller.go @@ -6,9 +6,9 @@ import ( "net/http" "github.com/docker/distribution/reference" - "github.com/docker/docker/api/errdefs" enginetypes "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/swarm/runtime" + "github.com/docker/docker/errdefs" "github.com/docker/docker/plugin" "github.com/docker/docker/plugin/v2" "github.com/docker/swarmkit/api" diff --git a/components/engine/daemon/cluster/helpers.go b/components/engine/daemon/cluster/helpers.go index 52d0cd173d..9541bff390 100644 --- a/components/engine/daemon/cluster/helpers.go +++ b/components/engine/daemon/cluster/helpers.go @@ -3,7 +3,7 @@ package cluster import ( "fmt" - "github.com/docker/docker/api/errdefs" + "github.com/docker/docker/errdefs" swarmapi "github.com/docker/swarmkit/api" "github.com/pkg/errors" "golang.org/x/net/context" diff --git a/components/engine/daemon/cluster/networks.go b/components/engine/daemon/cluster/networks.go index e43808ddba..081526f768 100644 --- a/components/engine/daemon/cluster/networks.go +++ b/components/engine/daemon/cluster/networks.go @@ -3,11 +3,11 @@ package cluster import ( "fmt" - "github.com/docker/docker/api/errdefs" apitypes "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/network" types "github.com/docker/docker/api/types/swarm" "github.com/docker/docker/daemon/cluster/convert" + "github.com/docker/docker/errdefs" "github.com/docker/docker/runconfig" swarmapi "github.com/docker/swarmkit/api" "github.com/pkg/errors" diff --git a/components/engine/daemon/cluster/nodes.go b/components/engine/daemon/cluster/nodes.go index 6a345bea0a..879d272e75 100644 --- a/components/engine/daemon/cluster/nodes.go +++ b/components/engine/daemon/cluster/nodes.go @@ -1,10 +1,10 @@ package cluster import ( - "github.com/docker/docker/api/errdefs" apitypes "github.com/docker/docker/api/types" types "github.com/docker/docker/api/types/swarm" "github.com/docker/docker/daemon/cluster/convert" + "github.com/docker/docker/errdefs" swarmapi "github.com/docker/swarmkit/api" "golang.org/x/net/context" ) diff --git a/components/engine/daemon/cluster/services.go b/components/engine/daemon/cluster/services.go index 6d2676540e..931d17c75f 100644 --- a/components/engine/daemon/cluster/services.go +++ b/components/engine/daemon/cluster/services.go @@ -11,12 +11,12 @@ import ( "time" "github.com/docker/distribution/reference" - "github.com/docker/docker/api/errdefs" apitypes "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/backend" types "github.com/docker/docker/api/types/swarm" timetypes "github.com/docker/docker/api/types/time" "github.com/docker/docker/daemon/cluster/convert" + "github.com/docker/docker/errdefs" runconfigopts "github.com/docker/docker/runconfig/opts" swarmapi "github.com/docker/swarmkit/api" gogotypes "github.com/gogo/protobuf/types" diff --git a/components/engine/daemon/cluster/swarm.go b/components/engine/daemon/cluster/swarm.go index 4de44656d9..3c7a23b71d 100644 --- a/components/engine/daemon/cluster/swarm.go +++ b/components/engine/daemon/cluster/swarm.go @@ -6,11 +6,11 @@ import ( "strings" "time" - "github.com/docker/docker/api/errdefs" apitypes "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/filters" types "github.com/docker/docker/api/types/swarm" "github.com/docker/docker/daemon/cluster/convert" + "github.com/docker/docker/errdefs" "github.com/docker/docker/opts" "github.com/docker/docker/pkg/signal" swarmapi "github.com/docker/swarmkit/api" diff --git a/components/engine/daemon/commit.go b/components/engine/daemon/commit.go index 3208b17817..b2c969316b 100644 --- a/components/engine/daemon/commit.go +++ b/components/engine/daemon/commit.go @@ -9,11 +9,11 @@ import ( "time" "github.com/docker/distribution/reference" - "github.com/docker/docker/api/errdefs" "github.com/docker/docker/api/types/backend" containertypes "github.com/docker/docker/api/types/container" "github.com/docker/docker/builder/dockerfile" "github.com/docker/docker/container" + "github.com/docker/docker/errdefs" "github.com/docker/docker/image" "github.com/docker/docker/layer" "github.com/docker/docker/pkg/ioutils" diff --git a/components/engine/daemon/container.go b/components/engine/daemon/container.go index c062e7ac76..d55c98f5a7 100644 --- a/components/engine/daemon/container.go +++ b/components/engine/daemon/container.go @@ -9,11 +9,11 @@ import ( "strings" "time" - "github.com/docker/docker/api/errdefs" 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/errdefs" "github.com/docker/docker/image" "github.com/docker/docker/opts" "github.com/docker/docker/pkg/signal" diff --git a/components/engine/daemon/container_linux.go b/components/engine/daemon/container_linux.go index 6c9d52509f..d63f4b72a5 100644 --- a/components/engine/daemon/container_linux.go +++ b/components/engine/daemon/container_linux.go @@ -3,8 +3,8 @@ package daemon import ( - "github.com/docker/docker/api/errdefs" "github.com/docker/docker/container" + "github.com/docker/docker/errdefs" ) func (daemon *Daemon) saveApparmorConfig(container *container.Container) error { diff --git a/components/engine/daemon/container_operations.go b/components/engine/daemon/container_operations.go index aa18f3767c..32846a2f77 100644 --- a/components/engine/daemon/container_operations.go +++ b/components/engine/daemon/container_operations.go @@ -10,11 +10,11 @@ import ( "strings" "time" - "github.com/docker/docker/api/errdefs" 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" + "github.com/docker/docker/errdefs" "github.com/docker/docker/opts" "github.com/docker/docker/pkg/stringid" "github.com/docker/docker/runconfig" diff --git a/components/engine/daemon/container_operations_unix.go b/components/engine/daemon/container_operations_unix.go index 9eff1ebfbc..9fe899b623 100644 --- a/components/engine/daemon/container_operations_unix.go +++ b/components/engine/daemon/container_operations_unix.go @@ -11,9 +11,9 @@ import ( "strconv" "time" - "github.com/docker/docker/api/errdefs" "github.com/docker/docker/container" "github.com/docker/docker/daemon/links" + "github.com/docker/docker/errdefs" "github.com/docker/docker/pkg/idtools" "github.com/docker/docker/pkg/mount" "github.com/docker/docker/pkg/stringid" diff --git a/components/engine/daemon/create.go b/components/engine/daemon/create.go index a9c9e775ad..54ce12c239 100644 --- a/components/engine/daemon/create.go +++ b/components/engine/daemon/create.go @@ -9,11 +9,11 @@ import ( "github.com/pkg/errors" - "github.com/docker/docker/api/errdefs" "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/errdefs" "github.com/docker/docker/image" "github.com/docker/docker/layer" "github.com/docker/docker/pkg/idtools" diff --git a/components/engine/daemon/daemon.go b/components/engine/daemon/daemon.go index dd8c100c83..0f05f5783a 100644 --- a/components/engine/daemon/daemon.go +++ b/components/engine/daemon/daemon.go @@ -18,7 +18,6 @@ import ( "sync" "time" - "github.com/docker/docker/api/errdefs" "github.com/docker/docker/api/types" containertypes "github.com/docker/docker/api/types/container" "github.com/docker/docker/api/types/swarm" @@ -29,6 +28,7 @@ import ( "github.com/docker/docker/daemon/exec" "github.com/docker/docker/daemon/logger" "github.com/docker/docker/daemon/network" + "github.com/docker/docker/errdefs" "github.com/sirupsen/logrus" // register graph drivers _ "github.com/docker/docker/daemon/graphdriver/register" diff --git a/components/engine/daemon/daemon_test.go b/components/engine/daemon/daemon_test.go index 44bf3414c0..8ca1f0dd57 100644 --- a/components/engine/daemon/daemon_test.go +++ b/components/engine/daemon/daemon_test.go @@ -7,9 +7,9 @@ import ( "runtime" "testing" - "github.com/docker/docker/api/errdefs" containertypes "github.com/docker/docker/api/types/container" "github.com/docker/docker/container" + "github.com/docker/docker/errdefs" _ "github.com/docker/docker/pkg/discovery/memory" "github.com/docker/docker/pkg/idtools" "github.com/docker/docker/pkg/truncindex" diff --git a/components/engine/daemon/delete.go b/components/engine/daemon/delete.go index e6fc1a5264..5fb9b9a1d9 100644 --- a/components/engine/daemon/delete.go +++ b/components/engine/daemon/delete.go @@ -7,9 +7,9 @@ import ( "strings" "time" - "github.com/docker/docker/api/errdefs" "github.com/docker/docker/api/types" "github.com/docker/docker/container" + "github.com/docker/docker/errdefs" "github.com/docker/docker/layer" "github.com/docker/docker/pkg/system" "github.com/docker/docker/volume" diff --git a/components/engine/daemon/errors.go b/components/engine/daemon/errors.go index b39f9d1720..e3a16b0586 100644 --- a/components/engine/daemon/errors.go +++ b/components/engine/daemon/errors.go @@ -5,7 +5,7 @@ import ( "strings" "syscall" - "github.com/docker/docker/api/errdefs" + "github.com/docker/docker/errdefs" "github.com/pkg/errors" "google.golang.org/grpc" ) diff --git a/components/engine/daemon/exec.go b/components/engine/daemon/exec.go index 9955053739..6fe107987a 100644 --- a/components/engine/daemon/exec.go +++ b/components/engine/daemon/exec.go @@ -8,12 +8,12 @@ import ( "golang.org/x/net/context" - "github.com/docker/docker/api/errdefs" "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/strslice" "github.com/docker/docker/container" "github.com/docker/docker/container/stream" "github.com/docker/docker/daemon/exec" + "github.com/docker/docker/errdefs" "github.com/docker/docker/pkg/pools" "github.com/docker/docker/pkg/signal" "github.com/docker/docker/pkg/term" diff --git a/components/engine/daemon/export.go b/components/engine/daemon/export.go index 6024f74259..66a0cca048 100644 --- a/components/engine/daemon/export.go +++ b/components/engine/daemon/export.go @@ -5,8 +5,8 @@ import ( "io" "runtime" - "github.com/docker/docker/api/errdefs" "github.com/docker/docker/container" + "github.com/docker/docker/errdefs" "github.com/docker/docker/pkg/archive" "github.com/docker/docker/pkg/ioutils" ) diff --git a/components/engine/daemon/graphdriver/quota/errors.go b/components/engine/daemon/graphdriver/quota/errors.go index 1741f2f5db..6d755904a8 100644 --- a/components/engine/daemon/graphdriver/quota/errors.go +++ b/components/engine/daemon/graphdriver/quota/errors.go @@ -1,6 +1,6 @@ package quota -import "github.com/docker/docker/api/errdefs" +import "github.com/docker/docker/errdefs" var ( _ errdefs.ErrNotImplemented = (*errQuotaNotSupported)(nil) diff --git a/components/engine/daemon/image.go b/components/engine/daemon/image.go index a59f0ff205..fdbd6e2be7 100644 --- a/components/engine/daemon/image.go +++ b/components/engine/daemon/image.go @@ -5,7 +5,7 @@ import ( "runtime" "github.com/docker/distribution/reference" - "github.com/docker/docker/api/errdefs" + "github.com/docker/docker/errdefs" "github.com/docker/docker/image" ) diff --git a/components/engine/daemon/image_delete.go b/components/engine/daemon/image_delete.go index a4b1299909..36ac2c7c68 100644 --- a/components/engine/daemon/image_delete.go +++ b/components/engine/daemon/image_delete.go @@ -6,9 +6,9 @@ import ( "time" "github.com/docker/distribution/reference" - "github.com/docker/docker/api/errdefs" "github.com/docker/docker/api/types" "github.com/docker/docker/container" + "github.com/docker/docker/errdefs" "github.com/docker/docker/image" "github.com/docker/docker/pkg/stringid" "github.com/pkg/errors" diff --git a/components/engine/daemon/image_pull.go b/components/engine/daemon/image_pull.go index b59753ac00..4944721f9f 100644 --- a/components/engine/daemon/image_pull.go +++ b/components/engine/daemon/image_pull.go @@ -7,10 +7,10 @@ import ( dist "github.com/docker/distribution" "github.com/docker/distribution/reference" - "github.com/docker/docker/api/errdefs" "github.com/docker/docker/api/types" "github.com/docker/docker/distribution" progressutils "github.com/docker/docker/distribution/utils" + "github.com/docker/docker/errdefs" "github.com/docker/docker/pkg/progress" "github.com/docker/docker/registry" "github.com/opencontainers/go-digest" diff --git a/components/engine/daemon/import.go b/components/engine/daemon/import.go index b41f8e579e..3ac83a9fa9 100644 --- a/components/engine/daemon/import.go +++ b/components/engine/daemon/import.go @@ -10,11 +10,11 @@ import ( "time" "github.com/docker/distribution/reference" - "github.com/docker/docker/api/errdefs" "github.com/docker/docker/api/types/container" "github.com/docker/docker/builder/dockerfile" "github.com/docker/docker/builder/remotecontext" "github.com/docker/docker/dockerversion" + "github.com/docker/docker/errdefs" "github.com/docker/docker/image" "github.com/docker/docker/layer" "github.com/docker/docker/pkg/archive" diff --git a/components/engine/daemon/inspect.go b/components/engine/daemon/inspect.go index 25805b296e..cab4f9279c 100644 --- a/components/engine/daemon/inspect.go +++ b/components/engine/daemon/inspect.go @@ -4,7 +4,6 @@ import ( "fmt" "time" - "github.com/docker/docker/api/errdefs" "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/backend" networktypes "github.com/docker/docker/api/types/network" @@ -12,6 +11,7 @@ import ( "github.com/docker/docker/api/types/versions/v1p20" "github.com/docker/docker/container" "github.com/docker/docker/daemon/network" + "github.com/docker/docker/errdefs" volumestore "github.com/docker/docker/volume/store" "github.com/docker/go-connections/nat" ) diff --git a/components/engine/daemon/kill.go b/components/engine/daemon/kill.go index 5cde0d776d..ad6104bfe9 100644 --- a/components/engine/daemon/kill.go +++ b/components/engine/daemon/kill.go @@ -7,8 +7,8 @@ import ( "syscall" "time" - "github.com/docker/docker/api/errdefs" containerpkg "github.com/docker/docker/container" + "github.com/docker/docker/errdefs" "github.com/docker/docker/libcontainerd" "github.com/docker/docker/pkg/signal" "github.com/pkg/errors" diff --git a/components/engine/daemon/list.go b/components/engine/daemon/list.go index 73d3f56769..8598d25280 100644 --- a/components/engine/daemon/list.go +++ b/components/engine/daemon/list.go @@ -6,10 +6,10 @@ import ( "strconv" "strings" - "github.com/docker/docker/api/errdefs" "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/filters" "github.com/docker/docker/container" + "github.com/docker/docker/errdefs" "github.com/docker/docker/image" "github.com/docker/docker/volume" "github.com/docker/go-connections/nat" diff --git a/components/engine/daemon/logs.go b/components/engine/daemon/logs.go index 612aeecb14..c819768dc3 100644 --- a/components/engine/daemon/logs.go +++ b/components/engine/daemon/logs.go @@ -7,13 +7,13 @@ import ( "golang.org/x/net/context" - "github.com/docker/docker/api/errdefs" "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/backend" containertypes "github.com/docker/docker/api/types/container" timetypes "github.com/docker/docker/api/types/time" "github.com/docker/docker/container" "github.com/docker/docker/daemon/logger" + "github.com/docker/docker/errdefs" "github.com/sirupsen/logrus" ) diff --git a/components/engine/daemon/names.go b/components/engine/daemon/names.go index da87447676..0e43738849 100644 --- a/components/engine/daemon/names.go +++ b/components/engine/daemon/names.go @@ -4,9 +4,9 @@ import ( "fmt" "strings" - "github.com/docker/docker/api/errdefs" "github.com/docker/docker/container" "github.com/docker/docker/daemon/names" + "github.com/docker/docker/errdefs" "github.com/docker/docker/pkg/namesgenerator" "github.com/docker/docker/pkg/stringid" "github.com/pkg/errors" diff --git a/components/engine/daemon/network.go b/components/engine/daemon/network.go index 3deb13ef88..35db27148a 100644 --- a/components/engine/daemon/network.go +++ b/components/engine/daemon/network.go @@ -8,10 +8,10 @@ import ( "strings" "sync" - "github.com/docker/docker/api/errdefs" "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/errdefs" "github.com/docker/docker/pkg/plugingetter" "github.com/docker/docker/runconfig" "github.com/docker/libnetwork" diff --git a/components/engine/daemon/rename.go b/components/engine/daemon/rename.go index 14e66be1b5..fd13d898e2 100644 --- a/components/engine/daemon/rename.go +++ b/components/engine/daemon/rename.go @@ -3,8 +3,8 @@ package daemon import ( "strings" - "github.com/docker/docker/api/errdefs" dockercontainer "github.com/docker/docker/container" + "github.com/docker/docker/errdefs" "github.com/docker/libnetwork" "github.com/pkg/errors" "github.com/sirupsen/logrus" diff --git a/components/engine/daemon/start.go b/components/engine/daemon/start.go index 9509089f0f..aa080f7174 100644 --- a/components/engine/daemon/start.go +++ b/components/engine/daemon/start.go @@ -5,10 +5,10 @@ import ( "runtime" "time" - "github.com/docker/docker/api/errdefs" "github.com/docker/docker/api/types" containertypes "github.com/docker/docker/api/types/container" "github.com/docker/docker/container" + "github.com/docker/docker/errdefs" "github.com/pkg/errors" "github.com/sirupsen/logrus" ) diff --git a/components/engine/daemon/start_unix.go b/components/engine/daemon/start_unix.go index 1efd07f959..ca0183ec5c 100644 --- a/components/engine/daemon/start_unix.go +++ b/components/engine/daemon/start_unix.go @@ -8,8 +8,8 @@ import ( "path/filepath" "github.com/containerd/containerd/linux/runctypes" - "github.com/docker/docker/api/errdefs" "github.com/docker/docker/container" + "github.com/docker/docker/errdefs" "github.com/pkg/errors" ) diff --git a/components/engine/daemon/stop.go b/components/engine/daemon/stop.go index 9b0bdcd2e3..d3b5297fb2 100644 --- a/components/engine/daemon/stop.go +++ b/components/engine/daemon/stop.go @@ -4,8 +4,8 @@ import ( "context" "time" - "github.com/docker/docker/api/errdefs" containerpkg "github.com/docker/docker/container" + "github.com/docker/docker/errdefs" "github.com/pkg/errors" "github.com/sirupsen/logrus" ) diff --git a/components/engine/daemon/update.go b/components/engine/daemon/update.go index 49321934be..d2eb33a75e 100644 --- a/components/engine/daemon/update.go +++ b/components/engine/daemon/update.go @@ -4,8 +4,8 @@ import ( "context" "fmt" - "github.com/docker/docker/api/errdefs" "github.com/docker/docker/api/types/container" + "github.com/docker/docker/errdefs" "github.com/pkg/errors" ) diff --git a/components/engine/daemon/volumes.go b/components/engine/daemon/volumes.go index 2e667c873d..2e75feebda 100644 --- a/components/engine/daemon/volumes.go +++ b/components/engine/daemon/volumes.go @@ -8,11 +8,11 @@ import ( "strings" "time" - "github.com/docker/docker/api/errdefs" "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" + "github.com/docker/docker/errdefs" "github.com/docker/docker/volume" "github.com/docker/docker/volume/drivers" "github.com/pkg/errors" diff --git a/components/engine/distribution/errors.go b/components/engine/distribution/errors.go index 3edeb3717f..49e8e5c0c1 100644 --- a/components/engine/distribution/errors.go +++ b/components/engine/distribution/errors.go @@ -12,8 +12,8 @@ import ( "github.com/docker/distribution/registry/api/v2" "github.com/docker/distribution/registry/client" "github.com/docker/distribution/registry/client/auth" - "github.com/docker/docker/api/errdefs" "github.com/docker/docker/distribution/xfer" + "github.com/docker/docker/errdefs" "github.com/sirupsen/logrus" ) diff --git a/components/engine/api/errdefs/defs.go b/components/engine/errdefs/defs.go similarity index 100% rename from components/engine/api/errdefs/defs.go rename to components/engine/errdefs/defs.go diff --git a/components/engine/api/errdefs/doc.go b/components/engine/errdefs/doc.go similarity index 100% rename from components/engine/api/errdefs/doc.go rename to components/engine/errdefs/doc.go diff --git a/components/engine/api/errdefs/helpers.go b/components/engine/errdefs/helpers.go similarity index 100% rename from components/engine/api/errdefs/helpers.go rename to components/engine/errdefs/helpers.go diff --git a/components/engine/api/errdefs/helpers_test.go b/components/engine/errdefs/helpers_test.go similarity index 100% rename from components/engine/api/errdefs/helpers_test.go rename to components/engine/errdefs/helpers_test.go diff --git a/components/engine/api/errdefs/is.go b/components/engine/errdefs/is.go similarity index 100% rename from components/engine/api/errdefs/is.go rename to components/engine/errdefs/is.go diff --git a/components/engine/libcontainerd/client_daemon.go b/components/engine/libcontainerd/client_daemon.go index cc0c099c43..9e66d224c6 100644 --- a/components/engine/libcontainerd/client_daemon.go +++ b/components/engine/libcontainerd/client_daemon.go @@ -31,7 +31,7 @@ import ( "github.com/containerd/containerd/images" "github.com/containerd/containerd/linux/runctypes" "github.com/containerd/typeurl" - "github.com/docker/docker/api/errdefs" + "github.com/docker/docker/errdefs" "github.com/docker/docker/pkg/ioutils" "github.com/opencontainers/image-spec/specs-go/v1" specs "github.com/opencontainers/runtime-spec/specs-go" diff --git a/components/engine/libcontainerd/errors.go b/components/engine/libcontainerd/errors.go index 1ecec7ba9d..dcd2525312 100644 --- a/components/engine/libcontainerd/errors.go +++ b/components/engine/libcontainerd/errors.go @@ -3,7 +3,7 @@ package libcontainerd import ( "errors" - "github.com/docker/docker/api/errdefs" + "github.com/docker/docker/errdefs" ) func newNotFoundError(err string) error { return errdefs.NotFound(errors.New(err)) } diff --git a/components/engine/plugin/backend_linux.go b/components/engine/plugin/backend_linux.go index 3437a7dca2..46bdfdbb1f 100644 --- a/components/engine/plugin/backend_linux.go +++ b/components/engine/plugin/backend_linux.go @@ -14,13 +14,13 @@ import ( "github.com/docker/distribution/manifest/schema2" "github.com/docker/distribution/reference" - "github.com/docker/docker/api/errdefs" "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/filters" "github.com/docker/docker/distribution" progressutils "github.com/docker/docker/distribution/utils" "github.com/docker/docker/distribution/xfer" "github.com/docker/docker/dockerversion" + "github.com/docker/docker/errdefs" "github.com/docker/docker/image" "github.com/docker/docker/layer" "github.com/docker/docker/pkg/authorization" diff --git a/components/engine/plugin/executor/containerd/containerd.go b/components/engine/plugin/executor/containerd/containerd.go index 38dcfcd58c..7b35136a1f 100644 --- a/components/engine/plugin/executor/containerd/containerd.go +++ b/components/engine/plugin/executor/containerd/containerd.go @@ -8,7 +8,7 @@ import ( "github.com/containerd/containerd/cio" "github.com/containerd/containerd/linux/runctypes" - "github.com/docker/docker/api/errdefs" + "github.com/docker/docker/errdefs" "github.com/docker/docker/libcontainerd" "github.com/opencontainers/runtime-spec/specs-go" "github.com/pkg/errors" diff --git a/components/engine/plugin/manager_linux.go b/components/engine/plugin/manager_linux.go index 888f06dd91..65380af06f 100644 --- a/components/engine/plugin/manager_linux.go +++ b/components/engine/plugin/manager_linux.go @@ -7,9 +7,9 @@ import ( "path/filepath" "time" - "github.com/docker/docker/api/errdefs" "github.com/docker/docker/api/types" "github.com/docker/docker/daemon/initlayer" + "github.com/docker/docker/errdefs" "github.com/docker/docker/pkg/containerfs" "github.com/docker/docker/pkg/idtools" "github.com/docker/docker/pkg/mount" diff --git a/components/engine/plugin/store.go b/components/engine/plugin/store.go index 4ce817491c..9768c25068 100644 --- a/components/engine/plugin/store.go +++ b/components/engine/plugin/store.go @@ -5,7 +5,7 @@ import ( "strings" "github.com/docker/distribution/reference" - "github.com/docker/docker/api/errdefs" + "github.com/docker/docker/errdefs" "github.com/docker/docker/pkg/plugingetter" "github.com/docker/docker/pkg/plugins" "github.com/docker/docker/plugin/v2" diff --git a/components/engine/registry/auth.go b/components/engine/registry/auth.go index e91631701d..56b9c88295 100644 --- a/components/engine/registry/auth.go +++ b/components/engine/registry/auth.go @@ -10,9 +10,9 @@ import ( "github.com/docker/distribution/registry/client/auth" "github.com/docker/distribution/registry/client/auth/challenge" "github.com/docker/distribution/registry/client/transport" - "github.com/docker/docker/api/errdefs" "github.com/docker/docker/api/types" registrytypes "github.com/docker/docker/api/types/registry" + "github.com/docker/docker/errdefs" "github.com/pkg/errors" "github.com/sirupsen/logrus" ) diff --git a/components/engine/registry/errors.go b/components/engine/registry/errors.go index 1b8ea97f36..55f74d97ed 100644 --- a/components/engine/registry/errors.go +++ b/components/engine/registry/errors.go @@ -4,7 +4,7 @@ import ( "net/url" "github.com/docker/distribution/registry/api/errcode" - "github.com/docker/docker/api/errdefs" + "github.com/docker/docker/errdefs" ) type notFoundError string diff --git a/components/engine/registry/service.go b/components/engine/registry/service.go index ac240f0c69..bf4ab94d9f 100644 --- a/components/engine/registry/service.go +++ b/components/engine/registry/service.go @@ -11,9 +11,9 @@ import ( "github.com/docker/distribution/reference" "github.com/docker/distribution/registry/client/auth" - "github.com/docker/docker/api/errdefs" "github.com/docker/docker/api/types" registrytypes "github.com/docker/docker/api/types/registry" + "github.com/docker/docker/errdefs" "github.com/pkg/errors" "github.com/sirupsen/logrus" ) diff --git a/components/engine/registry/session.go b/components/engine/registry/session.go index 89c374f618..ae0ec1b4bf 100644 --- a/components/engine/registry/session.go +++ b/components/engine/registry/session.go @@ -19,9 +19,9 @@ import ( "github.com/docker/distribution/reference" "github.com/docker/distribution/registry/api/errcode" - "github.com/docker/docker/api/errdefs" "github.com/docker/docker/api/types" registrytypes "github.com/docker/docker/api/types/registry" + "github.com/docker/docker/errdefs" "github.com/docker/docker/pkg/ioutils" "github.com/docker/docker/pkg/jsonmessage" "github.com/docker/docker/pkg/stringid" diff --git a/components/engine/volume/local/local.go b/components/engine/volume/local/local.go index 49e18b761a..206d96506c 100644 --- a/components/engine/volume/local/local.go +++ b/components/engine/volume/local/local.go @@ -13,8 +13,8 @@ import ( "strings" "sync" - "github.com/docker/docker/api/errdefs" "github.com/docker/docker/daemon/names" + "github.com/docker/docker/errdefs" "github.com/docker/docker/pkg/idtools" "github.com/docker/docker/pkg/mount" "github.com/docker/docker/volume" From 2c5689d7280428a0bda148b14106918c8644719d Mon Sep 17 00:00:00 2001 From: Sebastiaan van Stijn Date: Sat, 13 Jan 2018 13:35:10 +0100 Subject: [PATCH 04/12] ineffassign: fix unused variables Signed-off-by: Sebastiaan van Stijn Upstream-commit: 63a0e88e8a61b5c0d5f698d5baf37f568ee01d50 Component: engine --- components/engine/integration-cli/docker_api_build_test.go | 2 ++ components/engine/integration-cli/docker_api_swarm_test.go | 2 +- components/engine/integration-cli/docker_cli_daemon_test.go | 5 ++--- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/components/engine/integration-cli/docker_api_build_test.go b/components/engine/integration-cli/docker_api_build_test.go index 3f43c95432..b2237c3a1f 100644 --- a/components/engine/integration-cli/docker_api_build_test.go +++ b/components/engine/integration-cli/docker_api_build_test.go @@ -460,6 +460,7 @@ COPY file /file` assert.Equal(c, http.StatusOK, res.StatusCode) out, err := request.ReadBody(body) + require.NoError(c, err) ids := getImageIDsFromBuild(c, out) return ids[len(ids)-1] @@ -498,6 +499,7 @@ ADD file /file` assert.Equal(c, http.StatusOK, res.StatusCode) out, err := request.ReadBody(body) + require.NoError(c, err) ids := getImageIDsFromBuild(c, out) return ids[len(ids)-1] diff --git a/components/engine/integration-cli/docker_api_swarm_test.go b/components/engine/integration-cli/docker_api_swarm_test.go index adb3885f35..a9b0458038 100644 --- a/components/engine/integration-cli/docker_api_swarm_test.go +++ b/components/engine/integration-cli/docker_api_swarm_test.go @@ -1031,7 +1031,7 @@ func (s *DockerSwarmSuite) TestAPINetworkInspectWithScope(c *check.C) { v := url.Values{} v.Set("scope", "local") - status, body, err = d.SockRequest("GET", "/networks/"+name+"?"+v.Encode(), nil) + status, _, err = d.SockRequest("GET", "/networks/"+name+"?"+v.Encode(), nil) c.Assert(err, checker.IsNil, check.Commentf(string(out))) c.Assert(status, checker.Equals, http.StatusNotFound, check.Commentf(string(out))) } diff --git a/components/engine/integration-cli/docker_cli_daemon_test.go b/components/engine/integration-cli/docker_cli_daemon_test.go index 5fbfac9a40..e200f2f570 100644 --- a/components/engine/integration-cli/docker_cli_daemon_test.go +++ b/components/engine/integration-cli/docker_cli_daemon_test.go @@ -467,9 +467,8 @@ func (s *DockerDaemonSuite) TestDaemonIPv6HostMode(c *check.C) { c.Assert(err, checker.IsNil, check.Commentf("Could not run container: %s, %v", out, err)) out, err = s.d.Cmd("exec", "hostcnt", "ip", "-6", "addr", "show", "docker0") - out = strings.Trim(out, " \r\n'") - - c.Assert(out, checker.Contains, "2001:db8:2::1") + c.Assert(err, checker.IsNil) + c.Assert(strings.Trim(out, " \r\n'"), checker.Contains, "2001:db8:2::1") } func (s *DockerDaemonSuite) TestDaemonLogLevelWrong(c *check.C) { From 621388138ca4d32201f4229cc2812630b7b6e536 Mon Sep 17 00:00:00 2001 From: Sebastiaan van Stijn Date: Mon, 15 Jan 2018 00:42:25 +0100 Subject: [PATCH 05/12] Golint: remove redundant ifs Signed-off-by: Sebastiaan van Stijn Upstream-commit: b4a63139696aea2c73ec361a9af8b36a118f0423 Component: engine --- components/engine/builder/fscache/fscache.go | 5 +--- components/engine/container/view.go | 11 ++----- .../cluster/executor/container/adapter.go | 6 +--- components/engine/daemon/config/config.go | 6 +--- components/engine/daemon/daemon.go | 6 +--- components/engine/daemon/daemon_unix.go | 5 +--- .../engine/daemon/graphdriver/aufs/aufs.go | 5 +--- .../engine/daemon/graphdriver/aufs/mount.go | 5 +--- .../engine/daemon/graphdriver/btrfs/btrfs.go | 13 ++------ .../engine/daemon/graphdriver/copy/copy.go | 5 +--- .../graphdriver/devmapper/device_setup.go | 7 +---- .../daemon/graphdriver/devmapper/deviceset.go | 30 ++++--------------- .../daemon/graphdriver/devmapper/driver.go | 7 +---- .../daemon/graphdriver/graphtest/testutil.go | 6 +--- .../daemon/graphdriver/overlay/overlay.go | 5 +--- components/engine/daemon/pause.go | 7 +---- components/engine/daemon/start.go | 6 +--- components/engine/daemon/unpause.go | 7 +---- components/engine/image/fs.go | 5 +--- .../engine/integration-cli/daemon/daemon.go | 12 ++------ .../docker_api_network_test.go | 3 +- components/engine/layer/layer_test.go | 5 +--- components/engine/layer/migration.go | 6 +--- components/engine/layer/ro_layer.go | 6 +--- components/engine/migrate/v1/migratev1.go | 6 +--- .../engine/migrate/v1/migratev1_test.go | 5 +--- components/engine/pkg/system/chtimes.go | 6 +--- 27 files changed, 35 insertions(+), 161 deletions(-) diff --git a/components/engine/builder/fscache/fscache.go b/components/engine/builder/fscache/fscache.go index 7cb4c5cbe9..679d5e457e 100644 --- a/components/engine/builder/fscache/fscache.go +++ b/components/engine/builder/fscache/fscache.go @@ -485,10 +485,7 @@ func (s *fsCacheStore) delete(id string) error { }); err != nil { return err } - if err := s.fs.Remove(src.BackendID); err != nil { - return err - } - return nil + return s.fs.Remove(src.BackendID) } type sourceMeta struct { diff --git a/components/engine/container/view.go b/components/engine/container/view.go index 913d9e7470..2d178e1888 100644 --- a/components/engine/container/view.go +++ b/components/engine/container/view.go @@ -14,9 +14,8 @@ import ( ) const ( - memdbContainersTable = "containers" - memdbNamesTable = "names" - + memdbContainersTable = "containers" + memdbNamesTable = "names" memdbIDIndex = "id" memdbContainerIDIndex = "containerid" ) @@ -191,11 +190,7 @@ func (db *memDB) ReserveName(name, containerID string) error { } return nil } - - if err := txn.Insert(memdbNamesTable, nameAssociation{name: name, containerID: containerID}); err != nil { - return err - } - return nil + return txn.Insert(memdbNamesTable, nameAssociation{name: name, containerID: containerID}) }) } diff --git a/components/engine/daemon/cluster/executor/container/adapter.go b/components/engine/daemon/cluster/executor/container/adapter.go index 7db47983cb..9ba64c486a 100644 --- a/components/engine/daemon/cluster/executor/container/adapter.go +++ b/components/engine/daemon/cluster/executor/container/adapter.go @@ -262,11 +262,7 @@ func (c *containerAdapter) create(ctx context.Context) error { return err } - if err := c.backend.UpdateContainerServiceConfig(cr.ID, c.container.serviceConfig()); err != nil { - return err - } - - return nil + return c.backend.UpdateContainerServiceConfig(cr.ID, c.container.serviceConfig()) } // checkMounts ensures that the provided mounts won't have any host-specific diff --git a/components/engine/daemon/config/config.go b/components/engine/daemon/config/config.go index 199fae6cf1..e3ed530028 100644 --- a/components/engine/daemon/config/config.go +++ b/components/engine/daemon/config/config.go @@ -511,11 +511,7 @@ func Validate(config *Config) error { } // validate platform-specific settings - if err := config.ValidatePlatformConfig(); err != nil { - return err - } - - return nil + return config.ValidatePlatformConfig() } // ModifiedDiscoverySettings returns whether the discovery configuration has been modified or not. diff --git a/components/engine/daemon/daemon.go b/components/engine/daemon/daemon.go index dd8c100c83..98d395d3dc 100644 --- a/components/engine/daemon/daemon.go +++ b/components/engine/daemon/daemon.go @@ -1046,11 +1046,7 @@ func (daemon *Daemon) Shutdown() error { daemon.netController.Stop() } - if err := daemon.cleanupMounts(); err != nil { - return err - } - - return nil + return daemon.cleanupMounts() } // Mount sets container.BaseFS diff --git a/components/engine/daemon/daemon_unix.go b/components/engine/daemon/daemon_unix.go index 51ea7c774f..82e721fe61 100644 --- a/components/engine/daemon/daemon_unix.go +++ b/components/engine/daemon/daemon_unix.go @@ -1501,10 +1501,7 @@ func (daemon *Daemon) initCgroupsPath(path string) error { if err := maybeCreateCPURealTimeFile(sysinfo.CPURealtimePeriod, daemon.configStore.CPURealtimePeriod, "cpu.rt_period_us", path); err != nil { return err } - if err := maybeCreateCPURealTimeFile(sysinfo.CPURealtimeRuntime, daemon.configStore.CPURealtimeRuntime, "cpu.rt_runtime_us", path); err != nil { - return err - } - return nil + return maybeCreateCPURealTimeFile(sysinfo.CPURealtimeRuntime, daemon.configStore.CPURealtimeRuntime, "cpu.rt_runtime_us", path) } func maybeCreateCPURealTimeFile(sysinfoPresent bool, configValue int64, file string, path string) error { diff --git a/components/engine/daemon/graphdriver/aufs/aufs.go b/components/engine/daemon/graphdriver/aufs/aufs.go index 248b8bf88d..f019e95558 100644 --- a/components/engine/daemon/graphdriver/aufs/aufs.go +++ b/components/engine/daemon/graphdriver/aufs/aufs.go @@ -579,10 +579,7 @@ func (a *Driver) unmount(mountPath string) error { if mounted, err := a.mounted(mountPath); err != nil || !mounted { return err } - if err := Unmount(mountPath); err != nil { - return err - } - return nil + return Unmount(mountPath) } func (a *Driver) mounted(mountpoint string) (bool, error) { diff --git a/components/engine/daemon/graphdriver/aufs/mount.go b/components/engine/daemon/graphdriver/aufs/mount.go index 100e7537a9..8198f95a89 100644 --- a/components/engine/daemon/graphdriver/aufs/mount.go +++ b/components/engine/daemon/graphdriver/aufs/mount.go @@ -14,8 +14,5 @@ func Unmount(target string) error { if err := exec.Command("auplink", target, "flush").Run(); err != nil { logrus.Warnf("Couldn't run auplink before unmount %s: %s", target, err) } - if err := unix.Unmount(target, 0); err != nil { - return err - } - return nil + return unix.Unmount(target, 0) } diff --git a/components/engine/daemon/graphdriver/btrfs/btrfs.go b/components/engine/daemon/graphdriver/btrfs/btrfs.go index 57313c94c6..d4b9b89124 100644 --- a/components/engine/daemon/graphdriver/btrfs/btrfs.go +++ b/components/engine/daemon/graphdriver/btrfs/btrfs.go @@ -598,16 +598,10 @@ func (d *Driver) setStorageSize(dir string, driver *Driver) error { if d.options.minSpace > 0 && driver.options.size < d.options.minSpace { return fmt.Errorf("btrfs: storage size cannot be less than %s", units.HumanSize(float64(d.options.minSpace))) } - if err := d.subvolEnableQuota(); err != nil { return err } - - if err := subvolLimitQgroup(dir, driver.options.size); err != nil { - return err - } - - return nil + return subvolLimitQgroup(dir, driver.options.size) } // Remove the filesystem with given id. @@ -634,10 +628,7 @@ func (d *Driver) Remove(id string) error { if err := system.EnsureRemoveAll(dir); err != nil { return err } - if err := d.subvolRescanQuota(); err != nil { - return err - } - return nil + return d.subvolRescanQuota() } // Get the requested filesystem id. diff --git a/components/engine/daemon/graphdriver/copy/copy.go b/components/engine/daemon/graphdriver/copy/copy.go index 7a98bec8ba..78518e8169 100644 --- a/components/engine/daemon/graphdriver/copy/copy.go +++ b/components/engine/daemon/graphdriver/copy/copy.go @@ -273,8 +273,5 @@ func doCopyXattrs(srcPath, dstPath string) error { // this function is used to copy those. It is set by overlay if a directory // is removed and then re-created and should not inherit anything from the // same dir in the lower dir. - if err := copyXattr(srcPath, dstPath, "trusted.overlay.opaque"); err != nil { - return err - } - return nil + return copyXattr(srcPath, dstPath, "trusted.overlay.opaque") } diff --git a/components/engine/daemon/graphdriver/devmapper/device_setup.go b/components/engine/daemon/graphdriver/devmapper/device_setup.go index 30463f23a2..ad61423651 100644 --- a/components/engine/daemon/graphdriver/devmapper/device_setup.go +++ b/components/engine/daemon/graphdriver/devmapper/device_setup.go @@ -129,15 +129,10 @@ func verifyBlockDevice(dev string, force bool) error { if err := checkDevInVG(dev); err != nil { return err } - if force { return nil } - - if err := checkDevHasFS(dev); err != nil { - return err - } - return nil + return checkDevHasFS(dev) } func readLVMConfig(root string) (directLVMConfig, error) { diff --git a/components/engine/daemon/graphdriver/devmapper/deviceset.go b/components/engine/daemon/graphdriver/devmapper/deviceset.go index 6659878bc6..4e850f0863 100644 --- a/components/engine/daemon/graphdriver/devmapper/deviceset.go +++ b/components/engine/daemon/graphdriver/devmapper/deviceset.go @@ -355,10 +355,7 @@ func (devices *DeviceSet) saveMetadata(info *devInfo) error { if err != nil { return fmt.Errorf("devmapper: Error encoding metadata to json: %s", err) } - if err := devices.writeMetaFile(jsonData, devices.metadataFile(info)); err != nil { - return err - } - return nil + return devices.writeMetaFile(jsonData, devices.metadataFile(info)) } func (devices *DeviceSet) markDeviceIDUsed(deviceID int) { @@ -889,11 +886,7 @@ func (devices *DeviceSet) takeSnapshot(hash string, baseInfo *devInfo, size uint defer devicemapper.ResumeDevice(baseInfo.Name()) } - if err = devices.createRegisterSnapDevice(hash, baseInfo, size); err != nil { - return err - } - - return nil + return devices.createRegisterSnapDevice(hash, baseInfo, size) } func (devices *DeviceSet) createRegisterSnapDevice(hash string, baseInfo *devInfo, size uint64) error { @@ -1233,12 +1226,7 @@ func (devices *DeviceSet) setupBaseImage() error { if err := devices.setupVerifyBaseImageUUIDFS(oldInfo); err != nil { return err } - - if err := devices.checkGrowBaseDeviceFS(oldInfo); err != nil { - return err - } - - return nil + return devices.checkGrowBaseDeviceFS(oldInfo) } logrus.Debug("devmapper: Removing uninitialized base image") @@ -1259,11 +1247,7 @@ func (devices *DeviceSet) setupBaseImage() error { } // Create new base image device - if err := devices.createBaseImage(); err != nil { - return err - } - - return nil + return devices.createBaseImage() } func setCloseOnExec(name string) { @@ -2082,11 +2066,7 @@ func (devices *DeviceSet) deleteDevice(info *devInfo, syncDelete bool) error { return err } - if err := devices.deleteTransaction(info, syncDelete); err != nil { - return err - } - - return nil + return devices.deleteTransaction(info, syncDelete) } // DeleteDevice will return success if device has been marked for deferred diff --git a/components/engine/daemon/graphdriver/devmapper/driver.go b/components/engine/daemon/graphdriver/devmapper/driver.go index 707094af3a..ab75974a98 100644 --- a/components/engine/daemon/graphdriver/devmapper/driver.go +++ b/components/engine/daemon/graphdriver/devmapper/driver.go @@ -146,12 +146,7 @@ func (d *Driver) Create(id, parent string, opts *graphdriver.CreateOpts) error { if opts != nil { storageOpt = opts.StorageOpt } - - if err := d.DeviceSet.AddDevice(id, parent, storageOpt); err != nil { - return err - } - - return nil + return d.DeviceSet.AddDevice(id, parent, storageOpt) } // Remove removes a device with a given id, unmounts the filesystem. diff --git a/components/engine/daemon/graphdriver/graphtest/testutil.go b/components/engine/daemon/graphdriver/graphtest/testutil.go index 946313296b..c1ef1162b8 100644 --- a/components/engine/daemon/graphdriver/graphtest/testutil.go +++ b/components/engine/daemon/graphdriver/graphtest/testutil.go @@ -263,11 +263,7 @@ func addLayerFiles(drv graphdriver.Driver, layer, parent string, i int) error { if err := driver.WriteFile(root, root.Join(layerDir, "layer-id"), []byte(layer), 0755); err != nil { return err } - if err := driver.WriteFile(root, root.Join(layerDir, "parent-id"), []byte(parent), 0755); err != nil { - return err - } - - return nil + return driver.WriteFile(root, root.Join(layerDir, "parent-id"), []byte(parent), 0755) } func addManyLayers(drv graphdriver.Driver, baseLayer string, count int) (string, error) { diff --git a/components/engine/daemon/graphdriver/overlay/overlay.go b/components/engine/daemon/graphdriver/overlay/overlay.go index bcb21d87e4..e2789aff6d 100644 --- a/components/engine/daemon/graphdriver/overlay/overlay.go +++ b/components/engine/daemon/graphdriver/overlay/overlay.go @@ -309,10 +309,7 @@ func (d *Driver) Create(id, parent string, opts *graphdriver.CreateOpts) (retErr if err := idtools.MkdirAndChown(path.Join(dir, "work"), 0700, root); err != nil { return err } - if err := ioutil.WriteFile(path.Join(dir, "lower-id"), []byte(parent), 0666); err != nil { - return err - } - return nil + return ioutil.WriteFile(path.Join(dir, "lower-id"), []byte(parent), 0666) } // Otherwise, copy the upper and the lower-id from the parent diff --git a/components/engine/daemon/pause.go b/components/engine/daemon/pause.go index b751cc4880..0b2ff1d2ed 100644 --- a/components/engine/daemon/pause.go +++ b/components/engine/daemon/pause.go @@ -14,12 +14,7 @@ func (daemon *Daemon) ContainerPause(name string) error { if err != nil { return err } - - if err := daemon.containerPause(container); err != nil { - return err - } - - return nil + return daemon.containerPause(container) } // containerPause pauses the container execution without stopping the process. diff --git a/components/engine/daemon/start.go b/components/engine/daemon/start.go index 3b9f0f9f63..7f9d682f02 100644 --- a/components/engine/daemon/start.go +++ b/components/engine/daemon/start.go @@ -90,11 +90,7 @@ func (daemon *Daemon) ContainerStart(name string, hostConfig *containertypes.Hos return validationError{err} } } - - if err := daemon.containerStart(container, checkpoint, checkpointDir, true); err != nil { - return err - } - return nil + return daemon.containerStart(container, checkpoint, checkpointDir, true) } // containerStart prepares the container to run by setting up everything the diff --git a/components/engine/daemon/unpause.go b/components/engine/daemon/unpause.go index 2e41f2070b..b29a1f68da 100644 --- a/components/engine/daemon/unpause.go +++ b/components/engine/daemon/unpause.go @@ -14,12 +14,7 @@ func (daemon *Daemon) ContainerUnpause(name string) error { if err != nil { return err } - - if err := daemon.containerUnpause(container); err != nil { - return err - } - - return nil + return daemon.containerUnpause(container) } // containerUnpause resumes the container execution after the container is paused. diff --git a/components/engine/image/fs.go b/components/engine/image/fs.go index 92cdb2662a..68e052926d 100644 --- a/components/engine/image/fs.go +++ b/components/engine/image/fs.go @@ -133,10 +133,7 @@ func (s *fs) Delete(dgst digest.Digest) error { if err := os.RemoveAll(s.metadataDir(dgst)); err != nil { return err } - if err := os.Remove(s.contentFile(dgst)); err != nil { - return err - } - return nil + return os.Remove(s.contentFile(dgst)) } // SetMetadata sets metadata for a given ID. It fails if there's no base file. diff --git a/components/engine/integration-cli/daemon/daemon.go b/components/engine/integration-cli/daemon/daemon.go index f6ad6559b2..62150a1d28 100644 --- a/components/engine/integration-cli/daemon/daemon.go +++ b/components/engine/integration-cli/daemon/daemon.go @@ -348,11 +348,7 @@ func (d *Daemon) Kill() error { return err } - if err := os.Remove(fmt.Sprintf("%s/docker.pid", d.Folder)); err != nil { - return err - } - - return nil + return os.Remove(fmt.Sprintf("%s/docker.pid", d.Folder)) } // Pid returns the pid of the daemon @@ -459,11 +455,7 @@ out2: d.cmd.Wait() - if err := os.Remove(fmt.Sprintf("%s/docker.pid", d.Folder)); err != nil { - return err - } - - return nil + return os.Remove(fmt.Sprintf("%s/docker.pid", d.Folder)) } // Restart will restart the daemon by first stopping it and the starting it. diff --git a/components/engine/integration-cli/docker_api_network_test.go b/components/engine/integration-cli/docker_api_network_test.go index 2cdd2627af..f0c26e2d94 100644 --- a/components/engine/integration-cli/docker_api_network_test.go +++ b/components/engine/integration-cli/docker_api_network_test.go @@ -328,9 +328,8 @@ func createNetwork(c *check.C, config types.NetworkCreateRequest, expectedStatus c.Assert(err, checker.IsNil) return nr.ID - } else { - return "" } + return "" } func connectNetwork(c *check.C, nid, cid string) { diff --git a/components/engine/layer/layer_test.go b/components/engine/layer/layer_test.go index f632d44b90..f682035ce1 100644 --- a/components/engine/layer/layer_test.go +++ b/components/engine/layer/layer_test.go @@ -153,10 +153,7 @@ func (tf *testFile) ApplyFile(root containerfs.ContainerFS) error { return err } } - if err := driver.WriteFile(root, fullPath, tf.content, tf.permission); err != nil { - return err - } - return nil + return driver.WriteFile(root, fullPath, tf.content, tf.permission) } func initWithFiles(files ...FileApplier) layerInit { diff --git a/components/engine/layer/migration.go b/components/engine/layer/migration.go index f4c4adec4a..9c0c2c94ed 100644 --- a/components/engine/layer/migration.go +++ b/components/engine/layer/migration.go @@ -68,11 +68,7 @@ func (ls *layerStore) CreateRWLayerByGraphID(name string, graphID string, parent m.initID = initID } - if err = ls.saveMount(m); err != nil { - return err - } - - return nil + return ls.saveMount(m) } func (ls *layerStore) ChecksumForGraphID(id, parent, oldTarDataPath, newTarDataPath string) (diffID DiffID, size int64, err error) { diff --git a/components/engine/layer/ro_layer.go b/components/engine/layer/ro_layer.go index f634194b89..ca3e1189f3 100644 --- a/components/engine/layer/ro_layer.go +++ b/components/engine/layer/ro_layer.go @@ -143,11 +143,7 @@ func storeLayer(tx MetadataTransaction, layer *roLayer) error { return err } } - if err := tx.SetOS(layer.os); err != nil { - return err - } - - return nil + return tx.SetOS(layer.os) } func newVerifiedReadCloser(rc io.ReadCloser, dgst digest.Digest) (io.ReadCloser, error) { diff --git a/components/engine/migrate/v1/migratev1.go b/components/engine/migrate/v1/migratev1.go index 60dbfe0787..02fcd2c2cb 100644 --- a/components/engine/migrate/v1/migratev1.go +++ b/components/engine/migrate/v1/migratev1.go @@ -89,11 +89,7 @@ func Migrate(root, driverName string, ls layer.Store, is image.Store, rs refstor return err } - if err := migrateRefs(root, driverName, rs, mappings); err != nil { - return err - } - - return nil + return migrateRefs(root, driverName, rs, mappings) } // CalculateLayerChecksums walks an old graph directory and calculates checksums diff --git a/components/engine/migrate/v1/migratev1_test.go b/components/engine/migrate/v1/migratev1_test.go index 122a0805a3..bab176fe3c 100644 --- a/components/engine/migrate/v1/migratev1_test.go +++ b/components/engine/migrate/v1/migratev1_test.go @@ -323,10 +323,7 @@ func addContainer(dest, jsonConfig string) error { if err := os.MkdirAll(contDir, 0700); err != nil { return err } - if err := ioutil.WriteFile(filepath.Join(contDir, "config.json"), []byte(jsonConfig), 0600); err != nil { - return err - } - return nil + return ioutil.WriteFile(filepath.Join(contDir, "config.json"), []byte(jsonConfig), 0600) } type mockTagAdder struct { diff --git a/components/engine/pkg/system/chtimes.go b/components/engine/pkg/system/chtimes.go index 056d19954d..18378f1cae 100644 --- a/components/engine/pkg/system/chtimes.go +++ b/components/engine/pkg/system/chtimes.go @@ -27,9 +27,5 @@ func Chtimes(name string, atime time.Time, mtime time.Time) error { } // Take platform specific action for setting create time. - if err := setCTime(name, mtime); err != nil { - return err - } - - return nil + return setCTime(name, mtime) } From 1240c39efc9899ede716836dd7fd716c42e46b1a Mon Sep 17 00:00:00 2001 From: Sebastiaan van Stijn Date: Mon, 15 Jan 2018 00:43:49 +0100 Subject: [PATCH 06/12] Golint: don't use basic untyped string for context key Signed-off-by: Sebastiaan van Stijn Upstream-commit: dfac74a9e48d1562ec41bc6de194f6593f0e639b Component: engine --- components/engine/api/server/httputils/httputils.go | 4 +++- components/engine/api/server/middleware/version.go | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/components/engine/api/server/httputils/httputils.go b/components/engine/api/server/httputils/httputils.go index 57eeb4beba..47b82ef1ba 100644 --- a/components/engine/api/server/httputils/httputils.go +++ b/components/engine/api/server/httputils/httputils.go @@ -11,8 +11,10 @@ import ( "golang.org/x/net/context" ) +type contextKey string + // APIVersionKey is the client's requested API version. -const APIVersionKey = "api-version" +const APIVersionKey contextKey = "api-version" // APIFunc is an adapter to allow the use of ordinary functions as Docker API endpoints. // Any function that has the appropriate signature can be registered as an API endpoint (e.g. getVersion). diff --git a/components/engine/api/server/middleware/version.go b/components/engine/api/server/middleware/version.go index 679552910f..c3e289cd49 100644 --- a/components/engine/api/server/middleware/version.go +++ b/components/engine/api/server/middleware/version.go @@ -5,6 +5,7 @@ import ( "net/http" "runtime" + "github.com/docker/docker/api/server/httputils" "github.com/docker/docker/api/types/versions" "golang.org/x/net/context" ) @@ -57,8 +58,7 @@ func (v VersionMiddleware) WrapHandler(handler func(ctx context.Context, w http. if versions.GreaterThan(apiVersion, v.defaultVersion) { return versionUnsupportedError{version: apiVersion, maxVersion: v.defaultVersion} } - // nolint: golint - ctx = context.WithValue(ctx, "api-version", apiVersion) + ctx = context.WithValue(ctx, httputils.APIVersionKey, apiVersion) return handler(ctx, w, r, vars) } From de027de052ae1a6041cc70d9b95c8135a34d5207 Mon Sep 17 00:00:00 2001 From: Sebastiaan van Stijn Date: Mon, 15 Jan 2018 15:28:10 +0100 Subject: [PATCH 07/12] Remove deprecated environment.DockerBasePath() Signed-off-by: Sebastiaan van Stijn Upstream-commit: 142b1f8bfb3a1459660a5877b48f2bd7d17ba5d6 Component: engine --- .../engine/integration-cli/docker_cli_build_test.go | 8 ++++---- .../engine/integration-cli/docker_cli_by_digest_test.go | 4 ++-- .../docker_cli_cp_to_container_unix_test.go | 2 +- .../engine/integration-cli/docker_cli_plugins_test.go | 6 +++--- components/engine/integration-cli/docker_cli_run_test.go | 2 +- .../engine/integration-cli/environment/environment.go | 7 ------- 6 files changed, 11 insertions(+), 18 deletions(-) diff --git a/components/engine/integration-cli/docker_cli_build_test.go b/components/engine/integration-cli/docker_cli_build_test.go index 8ae5e05ed8..541182c69f 100644 --- a/components/engine/integration-cli/docker_cli_build_test.go +++ b/components/engine/integration-cli/docker_cli_build_test.go @@ -1514,7 +1514,7 @@ func (s *DockerSuite) TestBuildContextCleanup(c *check.C) { testRequires(c, SameHostDaemon) name := "testbuildcontextcleanup" - entries, err := ioutil.ReadDir(filepath.Join(testEnv.DockerBasePath(), "tmp")) + entries, err := ioutil.ReadDir(filepath.Join(testEnv.DaemonInfo.DockerRootDir, "tmp")) if err != nil { c.Fatalf("failed to list contents of tmp dir: %s", err) } @@ -1522,7 +1522,7 @@ func (s *DockerSuite) TestBuildContextCleanup(c *check.C) { buildImageSuccessfully(c, name, build.WithDockerfile(`FROM `+minimalBaseImage()+` ENTRYPOINT ["/bin/echo"]`)) - entriesFinal, err := ioutil.ReadDir(filepath.Join(testEnv.DockerBasePath(), "tmp")) + entriesFinal, err := ioutil.ReadDir(filepath.Join(testEnv.DaemonInfo.DockerRootDir, "tmp")) if err != nil { c.Fatalf("failed to list contents of tmp dir: %s", err) } @@ -1536,7 +1536,7 @@ func (s *DockerSuite) TestBuildContextCleanupFailedBuild(c *check.C) { testRequires(c, SameHostDaemon) name := "testbuildcontextcleanup" - entries, err := ioutil.ReadDir(filepath.Join(testEnv.DockerBasePath(), "tmp")) + entries, err := ioutil.ReadDir(filepath.Join(testEnv.DaemonInfo.DockerRootDir, "tmp")) if err != nil { c.Fatalf("failed to list contents of tmp dir: %s", err) } @@ -1546,7 +1546,7 @@ func (s *DockerSuite) TestBuildContextCleanupFailedBuild(c *check.C) { ExitCode: 1, }) - entriesFinal, err := ioutil.ReadDir(filepath.Join(testEnv.DockerBasePath(), "tmp")) + entriesFinal, err := ioutil.ReadDir(filepath.Join(testEnv.DaemonInfo.DockerRootDir, "tmp")) if err != nil { c.Fatalf("failed to list contents of tmp dir: %s", err) } diff --git a/components/engine/integration-cli/docker_cli_by_digest_test.go b/components/engine/integration-cli/docker_cli_by_digest_test.go index 3a974cfad9..2d5dd486e7 100644 --- a/components/engine/integration-cli/docker_cli_by_digest_test.go +++ b/components/engine/integration-cli/docker_cli_by_digest_test.go @@ -635,7 +635,7 @@ func (s *DockerRegistrySuite) TestPullFailsWithAlteredLayer(c *check.C) { // digest verification for the target layer digest. // Remove distribution cache to force a re-pull of the blobs - if err := os.RemoveAll(filepath.Join(testEnv.DockerBasePath(), "image", s.d.StorageDriver(), "distribution")); err != nil { + if err := os.RemoveAll(filepath.Join(testEnv.DaemonInfo.DockerRootDir, "image", s.d.StorageDriver(), "distribution")); err != nil { c.Fatalf("error clearing distribution cache: %v", err) } @@ -678,7 +678,7 @@ func (s *DockerSchema1RegistrySuite) TestPullFailsWithAlteredLayer(c *check.C) { // digest verification for the target layer digest. // Remove distribution cache to force a re-pull of the blobs - if err := os.RemoveAll(filepath.Join(testEnv.DockerBasePath(), "image", s.d.StorageDriver(), "distribution")); err != nil { + if err := os.RemoveAll(filepath.Join(testEnv.DaemonInfo.DockerRootDir, "image", s.d.StorageDriver(), "distribution")); err != nil { c.Fatalf("error clearing distribution cache: %v", err) } diff --git a/components/engine/integration-cli/docker_cli_cp_to_container_unix_test.go b/components/engine/integration-cli/docker_cli_cp_to_container_unix_test.go index fa55b6ee24..8f830dcf9d 100644 --- a/components/engine/integration-cli/docker_cli_cp_to_container_unix_test.go +++ b/components/engine/integration-cli/docker_cli_cp_to_container_unix_test.go @@ -64,7 +64,7 @@ func (s *DockerSuite) TestCpCheckDestOwnership(c *check.C) { } func getRootUIDGID() (int, int, error) { - uidgid := strings.Split(filepath.Base(testEnv.DockerBasePath()), ".") + uidgid := strings.Split(filepath.Base(testEnv.DaemonInfo.DockerRootDir), ".") if len(uidgid) == 1 { //user namespace remapping is not turned on; return 0 return 0, 0, nil diff --git a/components/engine/integration-cli/docker_cli_plugins_test.go b/components/engine/integration-cli/docker_cli_plugins_test.go index 310067e386..e49c428490 100644 --- a/components/engine/integration-cli/docker_cli_plugins_test.go +++ b/components/engine/integration-cli/docker_cli_plugins_test.go @@ -55,7 +55,7 @@ func (ps *DockerPluginSuite) TestPluginBasicOps(c *check.C) { c.Assert(err, checker.IsNil) c.Assert(out, checker.Contains, plugin) - _, err = os.Stat(filepath.Join(testEnv.DockerBasePath(), "plugins", id)) + _, err = os.Stat(filepath.Join(testEnv.DaemonInfo.DockerRootDir, "plugins", id)) if !os.IsNotExist(err) { c.Fatal(err) } @@ -506,14 +506,14 @@ func (s *DockerSuite) TestPluginUpgrade(c *check.C) { id := strings.TrimSpace(out) // make sure "v2" does not exists - _, err = os.Stat(filepath.Join(testEnv.DockerBasePath(), "plugins", id, "rootfs", "v2")) + _, err = os.Stat(filepath.Join(testEnv.DaemonInfo.DockerRootDir, "plugins", id, "rootfs", "v2")) c.Assert(os.IsNotExist(err), checker.True, check.Commentf(out)) dockerCmd(c, "plugin", "disable", "-f", plugin) dockerCmd(c, "plugin", "upgrade", "--grant-all-permissions", "--skip-remote-check", plugin, pluginV2) // make sure "v2" file exists - _, err = os.Stat(filepath.Join(testEnv.DockerBasePath(), "plugins", id, "rootfs", "v2")) + _, err = os.Stat(filepath.Join(testEnv.DaemonInfo.DockerRootDir, "plugins", id, "rootfs", "v2")) c.Assert(err, checker.IsNil) dockerCmd(c, "plugin", "enable", plugin) diff --git a/components/engine/integration-cli/docker_cli_run_test.go b/components/engine/integration-cli/docker_cli_run_test.go index 1749df07c1..3b52e0f942 100644 --- a/components/engine/integration-cli/docker_cli_run_test.go +++ b/components/engine/integration-cli/docker_cli_run_test.go @@ -4232,7 +4232,7 @@ func (s *DockerSuite) TestRunCredentialSpecFailures(c *check.C) { func (s *DockerSuite) TestRunCredentialSpecWellFormed(c *check.C) { testRequires(c, DaemonIsWindows, SameHostDaemon) validCS := readFile(`fixtures\credentialspecs\valid.json`, c) - writeFile(filepath.Join(testEnv.DockerBasePath(), `credentialspecs\valid.json`), validCS, c) + writeFile(filepath.Join(testEnv.DaemonInfo.DockerRootDir, `credentialspecs\valid.json`), validCS, c) dockerCmd(c, "run", `--security-opt=credentialspec=file://valid.json`, "busybox", "true") } diff --git a/components/engine/integration-cli/environment/environment.go b/components/engine/integration-cli/environment/environment.go index 0decc06983..988440ce1c 100644 --- a/components/engine/integration-cli/environment/environment.go +++ b/components/engine/integration-cli/environment/environment.go @@ -49,13 +49,6 @@ func New() (*Execution, error) { }, nil } -// DockerBasePath is the base path of the docker folder (by default it is -/var/run/docker) -// TODO: remove -// Deprecated: use Execution.DaemonInfo.DockerRootDir -func (e *Execution) DockerBasePath() string { - return e.DaemonInfo.DockerRootDir -} - // ExperimentalDaemon tell whether the main daemon has // experimental features enabled or not // Deprecated: use DaemonInfo.ExperimentalBuild From d0afa0d404c172bcd5534af889a2866acef81a8a Mon Sep 17 00:00:00 2001 From: Sebastiaan van Stijn Date: Mon, 15 Jan 2018 15:30:05 +0100 Subject: [PATCH 08/12] Remove deprecated environment.ExperimentalDaemon() Signed-off-by: Sebastiaan van Stijn Upstream-commit: da8032d7d351a2073f54ec0121a796800b6b1a46 Component: engine --- components/engine/integration-cli/check_test.go | 12 ++++++------ .../engine/integration-cli/docker_cli_daemon_test.go | 10 +++++----- .../docker_cli_external_graphdriver_unix_test.go | 2 +- .../docker_cli_external_volume_driver_unix_test.go | 2 +- .../engine/integration-cli/docker_cli_info_test.go | 12 ++++++------ .../integration-cli/docker_cli_network_unix_test.go | 2 +- .../integration-cli/docker_hub_pull_suite_test.go | 2 +- .../integration-cli/environment/environment.go | 7 ------- 8 files changed, 21 insertions(+), 28 deletions(-) diff --git a/components/engine/integration-cli/check_test.go b/components/engine/integration-cli/check_test.go index 49504c6306..dd802fbc11 100644 --- a/components/engine/integration-cli/check_test.go +++ b/components/engine/integration-cli/check_test.go @@ -129,7 +129,7 @@ func (s *DockerRegistrySuite) SetUpTest(c *check.C) { testRequires(c, DaemonIsLinux, registry.Hosting, SameHostDaemon) s.reg = setupRegistry(c, false, "", "") s.d = daemon.New(c, dockerBinary, dockerdBinary, daemon.Config{ - Experimental: testEnv.ExperimentalDaemon(), + Experimental: testEnv.DaemonInfo.ExperimentalBuild, }) } @@ -163,7 +163,7 @@ func (s *DockerSchema1RegistrySuite) SetUpTest(c *check.C) { testRequires(c, DaemonIsLinux, registry.Hosting, NotArm64, SameHostDaemon) s.reg = setupRegistry(c, true, "", "") s.d = daemon.New(c, dockerBinary, dockerdBinary, daemon.Config{ - Experimental: testEnv.ExperimentalDaemon(), + Experimental: testEnv.DaemonInfo.ExperimentalBuild, }) } @@ -197,7 +197,7 @@ func (s *DockerRegistryAuthHtpasswdSuite) SetUpTest(c *check.C) { testRequires(c, DaemonIsLinux, registry.Hosting, SameHostDaemon) s.reg = setupRegistry(c, false, "htpasswd", "") s.d = daemon.New(c, dockerBinary, dockerdBinary, daemon.Config{ - Experimental: testEnv.ExperimentalDaemon(), + Experimental: testEnv.DaemonInfo.ExperimentalBuild, }) } @@ -232,7 +232,7 @@ func (s *DockerRegistryAuthTokenSuite) OnTimeout(c *check.C) { func (s *DockerRegistryAuthTokenSuite) SetUpTest(c *check.C) { testRequires(c, DaemonIsLinux, registry.Hosting, SameHostDaemon) s.d = daemon.New(c, dockerBinary, dockerdBinary, daemon.Config{ - Experimental: testEnv.ExperimentalDaemon(), + Experimental: testEnv.DaemonInfo.ExperimentalBuild, }) } @@ -273,7 +273,7 @@ func (s *DockerDaemonSuite) OnTimeout(c *check.C) { func (s *DockerDaemonSuite) SetUpTest(c *check.C) { testRequires(c, DaemonIsLinux, SameHostDaemon) s.d = daemon.New(c, dockerBinary, dockerdBinary, daemon.Config{ - Experimental: testEnv.ExperimentalDaemon(), + Experimental: testEnv.DaemonInfo.ExperimentalBuild, }) } @@ -331,7 +331,7 @@ func (s *DockerSwarmSuite) SetUpTest(c *check.C) { func (s *DockerSwarmSuite) AddDaemon(c *check.C, joinSwarm, manager bool) *daemon.Swarm { d := &daemon.Swarm{ Daemon: daemon.New(c, dockerBinary, dockerdBinary, daemon.Config{ - Experimental: testEnv.ExperimentalDaemon(), + Experimental: testEnv.DaemonInfo.ExperimentalBuild, }), Port: defaultSwarmPort + s.portIndex, } diff --git a/components/engine/integration-cli/docker_cli_daemon_test.go b/components/engine/integration-cli/docker_cli_daemon_test.go index 5fbfac9a40..40ed956b8a 100644 --- a/components/engine/integration-cli/docker_cli_daemon_test.go +++ b/components/engine/integration-cli/docker_cli_daemon_test.go @@ -1434,7 +1434,7 @@ func (s *DockerDaemonSuite) TestDaemonRestartWithSocketAsVolume(c *check.C) { // A subsequent daemon restart should clean up said mounts. func (s *DockerDaemonSuite) TestCleanupMountsAfterDaemonAndContainerKill(c *check.C) { d := daemon.New(c, dockerBinary, dockerdBinary, daemon.Config{ - Experimental: testEnv.ExperimentalDaemon(), + Experimental: testEnv.DaemonInfo.ExperimentalBuild, }) d.StartWithBusybox(c) @@ -1474,7 +1474,7 @@ func (s *DockerDaemonSuite) TestCleanupMountsAfterDaemonAndContainerKill(c *chec // os.Interrupt should perform a graceful daemon shutdown and hence cleanup mounts. func (s *DockerDaemonSuite) TestCleanupMountsAfterGracefulShutdown(c *check.C) { d := daemon.New(c, dockerBinary, dockerdBinary, daemon.Config{ - Experimental: testEnv.ExperimentalDaemon(), + Experimental: testEnv.DaemonInfo.ExperimentalBuild, }) d.StartWithBusybox(c) @@ -1695,7 +1695,7 @@ func (s *DockerDaemonSuite) TestDaemonRestartLocalVolumes(c *check.C) { // FIXME(vdemeester) should be a unit test func (s *DockerDaemonSuite) TestDaemonCorruptedLogDriverAddress(c *check.C) { d := daemon.New(c, dockerBinary, dockerdBinary, daemon.Config{ - Experimental: testEnv.ExperimentalDaemon(), + Experimental: testEnv.DaemonInfo.ExperimentalBuild, }) c.Assert(d.StartWithError("--log-driver=syslog", "--log-opt", "syslog-address=corrupted:42"), check.NotNil) expected := "Failed to set log opts: syslog-address should be in form proto://address" @@ -1705,7 +1705,7 @@ func (s *DockerDaemonSuite) TestDaemonCorruptedLogDriverAddress(c *check.C) { // FIXME(vdemeester) should be a unit test func (s *DockerDaemonSuite) TestDaemonCorruptedFluentdAddress(c *check.C) { d := daemon.New(c, dockerBinary, dockerdBinary, daemon.Config{ - Experimental: testEnv.ExperimentalDaemon(), + Experimental: testEnv.DaemonInfo.ExperimentalBuild, }) c.Assert(d.StartWithError("--log-driver=fluentd", "--log-opt", "fluentd-address=corrupted:c"), check.NotNil) expected := "Failed to set log opts: invalid fluentd-address corrupted:c: " @@ -3082,7 +3082,7 @@ func (s *DockerDaemonSuite) TestDaemonIpcModeShareableFromConfig(c *check.C) { func testDaemonStartIpcMode(c *check.C, from, mode string, valid bool) { d := daemon.New(c, dockerBinary, dockerdBinary, daemon.Config{ - Experimental: testEnv.ExperimentalDaemon(), + Experimental: testEnv.DaemonInfo.ExperimentalBuild, }) c.Logf("Checking IpcMode %s set from %s\n", mode, from) var serr error diff --git a/components/engine/integration-cli/docker_cli_external_graphdriver_unix_test.go b/components/engine/integration-cli/docker_cli_external_graphdriver_unix_test.go index 8e766bcc31..3265336d68 100644 --- a/components/engine/integration-cli/docker_cli_external_graphdriver_unix_test.go +++ b/components/engine/integration-cli/docker_cli_external_graphdriver_unix_test.go @@ -53,7 +53,7 @@ type graphEventsCounter struct { func (s *DockerExternalGraphdriverSuite) SetUpTest(c *check.C) { s.d = daemon.New(c, dockerBinary, dockerdBinary, daemon.Config{ - Experimental: testEnv.ExperimentalDaemon(), + Experimental: testEnv.DaemonInfo.ExperimentalBuild, }) } diff --git a/components/engine/integration-cli/docker_cli_external_volume_driver_unix_test.go b/components/engine/integration-cli/docker_cli_external_volume_driver_unix_test.go index 2e2de972d5..ff3d50fb03 100644 --- a/components/engine/integration-cli/docker_cli_external_volume_driver_unix_test.go +++ b/components/engine/integration-cli/docker_cli_external_volume_driver_unix_test.go @@ -52,7 +52,7 @@ type DockerExternalVolumeSuite struct { func (s *DockerExternalVolumeSuite) SetUpTest(c *check.C) { testRequires(c, SameHostDaemon) s.d = daemon.New(c, dockerBinary, dockerdBinary, daemon.Config{ - Experimental: testEnv.ExperimentalDaemon(), + Experimental: testEnv.DaemonInfo.ExperimentalBuild, }) s.ec = &eventCounter{} } diff --git a/components/engine/integration-cli/docker_cli_info_test.go b/components/engine/integration-cli/docker_cli_info_test.go index d7ce238bfd..180464888d 100644 --- a/components/engine/integration-cli/docker_cli_info_test.go +++ b/components/engine/integration-cli/docker_cli_info_test.go @@ -44,7 +44,7 @@ func (s *DockerSuite) TestInfoEnsureSucceeds(c *check.C) { stringsToCheck = append(stringsToCheck, "Runtimes:", "Default Runtime: runc") } - if testEnv.ExperimentalDaemon() { + if testEnv.DaemonInfo.ExperimentalBuild { stringsToCheck = append(stringsToCheck, "Experimental: true") } else { stringsToCheck = append(stringsToCheck, "Experimental: false") @@ -72,7 +72,7 @@ func (s *DockerSuite) TestInfoDiscoveryBackend(c *check.C) { testRequires(c, SameHostDaemon, DaemonIsLinux) d := daemon.New(c, dockerBinary, dockerdBinary, daemon.Config{ - Experimental: testEnv.ExperimentalDaemon(), + Experimental: testEnv.DaemonInfo.ExperimentalBuild, }) discoveryBackend := "consul://consuladdr:consulport/some/path" discoveryAdvertise := "1.1.1.1:2375" @@ -91,7 +91,7 @@ func (s *DockerSuite) TestInfoDiscoveryInvalidAdvertise(c *check.C) { testRequires(c, SameHostDaemon, DaemonIsLinux) d := daemon.New(c, dockerBinary, dockerdBinary, daemon.Config{ - Experimental: testEnv.ExperimentalDaemon(), + Experimental: testEnv.DaemonInfo.ExperimentalBuild, }) discoveryBackend := "consul://consuladdr:consulport/some/path" @@ -110,7 +110,7 @@ func (s *DockerSuite) TestInfoDiscoveryAdvertiseInterfaceName(c *check.C) { testRequires(c, SameHostDaemon, Network, DaemonIsLinux) d := daemon.New(c, dockerBinary, dockerdBinary, daemon.Config{ - Experimental: testEnv.ExperimentalDaemon(), + Experimental: testEnv.DaemonInfo.ExperimentalBuild, }) discoveryBackend := "consul://consuladdr:consulport/some/path" discoveryAdvertise := "eth0" @@ -183,7 +183,7 @@ func (s *DockerSuite) TestInfoDebug(c *check.C) { testRequires(c, SameHostDaemon, DaemonIsLinux) d := daemon.New(c, dockerBinary, dockerdBinary, daemon.Config{ - Experimental: testEnv.ExperimentalDaemon(), + Experimental: testEnv.DaemonInfo.ExperimentalBuild, }) d.Start(c, "--debug") defer d.Stop(c) @@ -206,7 +206,7 @@ func (s *DockerSuite) TestInsecureRegistries(c *check.C) { registryHost := "insecurehost.com:5000" d := daemon.New(c, dockerBinary, dockerdBinary, daemon.Config{ - Experimental: testEnv.ExperimentalDaemon(), + Experimental: testEnv.DaemonInfo.ExperimentalBuild, }) d.Start(c, "--insecure-registry="+registryCIDR, "--insecure-registry="+registryHost) defer d.Stop(c) diff --git a/components/engine/integration-cli/docker_cli_network_unix_test.go b/components/engine/integration-cli/docker_cli_network_unix_test.go index 4bb542386b..90e4f6c1f2 100644 --- a/components/engine/integration-cli/docker_cli_network_unix_test.go +++ b/components/engine/integration-cli/docker_cli_network_unix_test.go @@ -50,7 +50,7 @@ type DockerNetworkSuite struct { func (s *DockerNetworkSuite) SetUpTest(c *check.C) { s.d = daemon.New(c, dockerBinary, dockerdBinary, daemon.Config{ - Experimental: testEnv.ExperimentalDaemon(), + Experimental: testEnv.DaemonInfo.ExperimentalBuild, }) } diff --git a/components/engine/integration-cli/docker_hub_pull_suite_test.go b/components/engine/integration-cli/docker_hub_pull_suite_test.go index 286a3913ce..a8d6aedad3 100644 --- a/components/engine/integration-cli/docker_hub_pull_suite_test.go +++ b/components/engine/integration-cli/docker_hub_pull_suite_test.go @@ -41,7 +41,7 @@ func newDockerHubPullSuite() *DockerHubPullSuite { func (s *DockerHubPullSuite) SetUpSuite(c *check.C) { testRequires(c, DaemonIsLinux, SameHostDaemon) s.d = daemon.New(c, dockerBinary, dockerdBinary, daemon.Config{ - Experimental: testEnv.ExperimentalDaemon(), + Experimental: testEnv.DaemonInfo.ExperimentalBuild, }) s.d.Start(c) } diff --git a/components/engine/integration-cli/environment/environment.go b/components/engine/integration-cli/environment/environment.go index 988440ce1c..06fafeda0a 100644 --- a/components/engine/integration-cli/environment/environment.go +++ b/components/engine/integration-cli/environment/environment.go @@ -49,13 +49,6 @@ func New() (*Execution, error) { }, nil } -// ExperimentalDaemon tell whether the main daemon has -// experimental features enabled or not -// Deprecated: use DaemonInfo.ExperimentalBuild -func (e *Execution) ExperimentalDaemon() bool { - return e.DaemonInfo.ExperimentalBuild -} - // DaemonPlatform is held globally so that tests can make intelligent // decisions on how to configure themselves according to the platform // of the daemon. This is initialized in docker_utils by sending From 28a714b16536e833639b1242cc5e5acc548fc614 Mon Sep 17 00:00:00 2001 From: Sebastiaan van Stijn Date: Mon, 15 Jan 2018 15:31:02 +0100 Subject: [PATCH 09/12] Remove deprecated environment.MinimalBaseImage() Signed-off-by: Sebastiaan van Stijn Upstream-commit: dfedc9ef6214500526c29fbf9a46aca9cecbeb57 Component: engine --- .../docker_api_containers_windows_test.go | 2 +- .../integration-cli/docker_cli_build_test.go | 24 +++++++-------- .../integration-cli/docker_cli_create_test.go | 2 +- .../integration-cli/docker_cli_run_test.go | 30 +++++++++---------- .../integration-cli/docker_utils_test.go | 2 +- .../environment/environment.go | 6 ---- 6 files changed, 30 insertions(+), 36 deletions(-) diff --git a/components/engine/integration-cli/docker_api_containers_windows_test.go b/components/engine/integration-cli/docker_api_containers_windows_test.go index 4cbe067cd5..ae60cfec00 100644 --- a/components/engine/integration-cli/docker_api_containers_windows_test.go +++ b/components/engine/integration-cli/docker_api_containers_windows_test.go @@ -47,7 +47,7 @@ func (s *DockerSuite) TestContainersAPICreateMountsBindNamedPipe(c *check.C) { name := "test-bind-npipe" data := map[string]interface{}{ - "Image": testEnv.MinimalBaseImage(), + "Image": testEnv.PlatformDefaults.BaseImage, "Cmd": []string{"cmd", "/c", cmd}, "HostConfig": map[string]interface{}{"Mounts": []map[string]interface{}{{"Type": "npipe", "Source": hostPipeName, "Target": containerPipeName}}}, } diff --git a/components/engine/integration-cli/docker_cli_build_test.go b/components/engine/integration-cli/docker_cli_build_test.go index 541182c69f..cb3b047a46 100644 --- a/components/engine/integration-cli/docker_cli_build_test.go +++ b/components/engine/integration-cli/docker_cli_build_test.go @@ -603,7 +603,7 @@ RUN [ $(cat "/test dir/test_file6") = 'test6' ]`, command, command, command, com func (s *DockerSuite) TestBuildCopyFileWithWhitespaceOnWindows(c *check.C) { testRequires(c, DaemonIsWindows) - dockerfile := `FROM ` + testEnv.MinimalBaseImage() + ` + dockerfile := `FROM ` + testEnv.PlatformDefaults.BaseImage + ` RUN mkdir "C:/test dir" RUN mkdir "C:/test_dir" COPY [ "test file1", "/test_file1" ] @@ -5148,7 +5148,7 @@ func (s *DockerSuite) TestBuildWorkdirWindowsPath(c *check.C) { testRequires(c, DaemonIsWindows) name := "testbuildworkdirwindowspath" buildImageSuccessfully(c, name, build.WithDockerfile(` - FROM `+testEnv.MinimalBaseImage()+` + FROM `+testEnv.PlatformDefaults.BaseImage+` RUN mkdir C:\\work WORKDIR C:\\work RUN if "%CD%" NEQ "C:\work" exit -1 @@ -6143,7 +6143,7 @@ func (s *DockerTrustSuite) TestBuildMultiStageTrusted(c *check.C) { func (s *DockerSuite) TestBuildMultiStageMultipleBuildsWindows(c *check.C) { testRequires(c, DaemonIsWindows) dockerfile := ` - FROM ` + testEnv.MinimalBaseImage() + ` + FROM ` + testEnv.PlatformDefaults.BaseImage + ` COPY foo c:\\bar` ctx := fakecontext.New(c, "", fakecontext.WithDockerfile(dockerfile), @@ -6156,7 +6156,7 @@ func (s *DockerSuite) TestBuildMultiStageMultipleBuildsWindows(c *check.C) { dockerfile = ` FROM build1:latest - FROM ` + testEnv.MinimalBaseImage() + ` + FROM ` + testEnv.PlatformDefaults.BaseImage + ` COPY --from=0 c:\\bar / COPY foo /` ctx = fakecontext.New(c, "", @@ -6177,8 +6177,8 @@ func (s *DockerSuite) TestBuildMultiStageMultipleBuildsWindows(c *check.C) { func (s *DockerSuite) TestBuildCopyFromForbidWindowsSystemPaths(c *check.C) { testRequires(c, DaemonIsWindows) dockerfile := ` - FROM ` + testEnv.MinimalBaseImage() + ` - FROM ` + testEnv.MinimalBaseImage() + ` + FROM ` + testEnv.PlatformDefaults.BaseImage + ` + FROM ` + testEnv.PlatformDefaults.BaseImage + ` COPY --from=0 %s c:\\oscopy ` exp := icmd.Expected{ @@ -6194,8 +6194,8 @@ func (s *DockerSuite) TestBuildCopyFromForbidWindowsSystemPaths(c *check.C) { func (s *DockerSuite) TestBuildCopyFromForbidWindowsRelativePaths(c *check.C) { testRequires(c, DaemonIsWindows) dockerfile := ` - FROM ` + testEnv.MinimalBaseImage() + ` - FROM ` + testEnv.MinimalBaseImage() + ` + FROM ` + testEnv.PlatformDefaults.BaseImage + ` + FROM ` + testEnv.PlatformDefaults.BaseImage + ` COPY --from=0 %s c:\\oscopy ` exp := icmd.Expected{ @@ -6212,9 +6212,9 @@ func (s *DockerSuite) TestBuildCopyFromForbidWindowsRelativePaths(c *check.C) { func (s *DockerSuite) TestBuildCopyFromWindowsIsCaseInsensitive(c *check.C) { testRequires(c, DaemonIsWindows) dockerfile := ` - FROM ` + testEnv.MinimalBaseImage() + ` + FROM ` + testEnv.PlatformDefaults.BaseImage + ` COPY foo / - FROM ` + testEnv.MinimalBaseImage() + ` + FROM ` + testEnv.PlatformDefaults.BaseImage + ` COPY --from=0 c:\\fOo c:\\copied RUN type c:\\copied ` @@ -6294,7 +6294,7 @@ func (s *DockerSuite) TestBuildOpaqueDirectory(c *check.C) { func (s *DockerSuite) TestBuildWindowsUser(c *check.C) { testRequires(c, DaemonIsWindows) name := "testbuildwindowsuser" - buildImage(name, build.WithDockerfile(`FROM `+testEnv.MinimalBaseImage()+` + buildImage(name, build.WithDockerfile(`FROM `+testEnv.PlatformDefaults.BaseImage+` RUN net user user /add USER user RUN set username @@ -6325,7 +6325,7 @@ func (s *DockerSuite) TestBuildWindowsEnvCaseInsensitive(c *check.C) { testRequires(c, DaemonIsWindows) name := "testbuildwindowsenvcaseinsensitive" buildImageSuccessfully(c, name, build.WithDockerfile(` - FROM `+testEnv.MinimalBaseImage()+` + FROM `+testEnv.PlatformDefaults.BaseImage+` ENV FOO=bar foo=baz `)) res := inspectFieldJSON(c, name, "Config.Env") diff --git a/components/engine/integration-cli/docker_cli_create_test.go b/components/engine/integration-cli/docker_cli_create_test.go index 8e123142b9..67bc98ee3f 100644 --- a/components/engine/integration-cli/docker_cli_create_test.go +++ b/components/engine/integration-cli/docker_cli_create_test.go @@ -225,7 +225,7 @@ func (s *DockerSuite) TestCreateHostnameWithNumber(c *check.C) { image := "busybox" // Busybox on Windows does not implement hostname command if testEnv.DaemonPlatform() == "windows" { - image = testEnv.MinimalBaseImage() + image = testEnv.PlatformDefaults.BaseImage } out, _ := dockerCmd(c, "run", "-h", "web.0", image, "hostname") c.Assert(strings.TrimSpace(out), checker.Equals, "web.0", check.Commentf("hostname not set, expected `web.0`, got: %s", out)) diff --git a/components/engine/integration-cli/docker_cli_run_test.go b/components/engine/integration-cli/docker_cli_run_test.go index 3b52e0f942..79be835edb 100644 --- a/components/engine/integration-cli/docker_cli_run_test.go +++ b/components/engine/integration-cli/docker_cli_run_test.go @@ -75,7 +75,7 @@ func (s *DockerSuite) TestRunLookupGoogleDNS(c *check.C) { if testEnv.DaemonPlatform() == "windows" { // nslookup isn't present in Windows busybox. Is built-in. Further, // nslookup isn't present in nanoserver. Hence just use PowerShell... - dockerCmd(c, "run", testEnv.MinimalBaseImage(), "powershell", "Resolve-DNSName", "google.com") + dockerCmd(c, "run", testEnv.PlatformDefaults.BaseImage, "powershell", "Resolve-DNSName", "google.com") } else { dockerCmd(c, "run", "busybox", "nslookup", "google.com") } @@ -162,7 +162,7 @@ func (s *DockerSuite) TestRunWithoutNetworking(c *check.C) { image := "busybox" if testEnv.DaemonPlatform() == "windows" { count = "-n" - image = testEnv.MinimalBaseImage() + image = testEnv.PlatformDefaults.BaseImage } // First using the long form --net @@ -355,7 +355,7 @@ func (s *DockerSuite) TestRunWithVolumesFromExited(c *check.C) { // Create a file in a volume if testEnv.DaemonPlatform() == "windows" { - out, exitCode = dockerCmd(c, "run", "--name", "test-data", "--volume", `c:\some\dir`, testEnv.MinimalBaseImage(), "cmd", "/c", `echo hello > c:\some\dir\file`) + out, exitCode = dockerCmd(c, "run", "--name", "test-data", "--volume", `c:\some\dir`, testEnv.PlatformDefaults.BaseImage, "cmd", "/c", `echo hello > c:\some\dir\file`) } else { out, exitCode = dockerCmd(c, "run", "--name", "test-data", "--volume", "/some/dir", "busybox", "touch", "/some/dir/file") } @@ -365,7 +365,7 @@ func (s *DockerSuite) TestRunWithVolumesFromExited(c *check.C) { // Read the file from another container using --volumes-from to access the volume in the second container if testEnv.DaemonPlatform() == "windows" { - out, exitCode = dockerCmd(c, "run", "--volumes-from", "test-data", testEnv.MinimalBaseImage(), "cmd", "/c", `type c:\some\dir\file`) + out, exitCode = dockerCmd(c, "run", "--volumes-from", "test-data", testEnv.PlatformDefaults.BaseImage, "cmd", "/c", `type c:\some\dir\file`) } else { out, exitCode = dockerCmd(c, "run", "--volumes-from", "test-data", "busybox", "cat", "/some/dir/file") } @@ -407,7 +407,7 @@ func (s *DockerSuite) TestRunCreateVolumesInSymlinkDir(c *check.C) { f.Close() if testEnv.DaemonPlatform() == "windows" { - dockerFile = fmt.Sprintf("FROM %s\nRUN mkdir %s\nRUN mklink /D c:\\test %s", testEnv.MinimalBaseImage(), dir, dir) + dockerFile = fmt.Sprintf("FROM %s\nRUN mkdir %s\nRUN mklink /D c:\\test %s", testEnv.PlatformDefaults.BaseImage, dir, dir) containerPath = `c:\test\test` cmd = "tasklist" } else { @@ -432,7 +432,7 @@ func (s *DockerSuite) TestRunCreateVolumesInSymlinkDir2(c *check.C) { name := "test-volume-symlink2" if testEnv.DaemonPlatform() == "windows" { - dockerFile = fmt.Sprintf("FROM %s\nRUN mkdir c:\\%s\nRUN mklink /D c:\\test c:\\%s", testEnv.MinimalBaseImage(), name, name) + dockerFile = fmt.Sprintf("FROM %s\nRUN mkdir c:\\%s\nRUN mklink /D c:\\test c:\\%s", testEnv.PlatformDefaults.BaseImage, name, name) containerPath = `c:\test\test` cmd = "tasklist" } else { @@ -670,7 +670,7 @@ func (s *DockerSuite) TestRunVolumesFromSymlinkPath(c *check.C) { if testEnv.DaemonPlatform() == "windows" { prefix = `c:` - dfContents = `FROM ` + testEnv.MinimalBaseImage() + ` + dfContents = `FROM ` + testEnv.PlatformDefaults.BaseImage + ` RUN mkdir c:\home RUN mklink /D c:\foo c:\home VOLUME ["c:/foo/bar"] @@ -922,7 +922,7 @@ func (s *DockerSuite) TestRunEnvironmentOverride(c *check.C) { func (s *DockerSuite) TestRunContainerNetwork(c *check.C) { if testEnv.DaemonPlatform() == "windows" { // Windows busybox does not have ping. Use built in ping instead. - dockerCmd(c, "run", testEnv.MinimalBaseImage(), "ping", "-n", "1", "127.0.0.1") + dockerCmd(c, "run", testEnv.PlatformDefaults.BaseImage, "ping", "-n", "1", "127.0.0.1") } else { dockerCmd(c, "run", "busybox", "ping", "-c", "1", "127.0.0.1") } @@ -1231,7 +1231,7 @@ func (s *DockerSuite) TestRunRootWorkdir(c *check.C) { func (s *DockerSuite) TestRunAllowBindMountingRoot(c *check.C) { if testEnv.DaemonPlatform() == "windows" { // Windows busybox will fail with Permission Denied on items such as pagefile.sys - dockerCmd(c, "run", "-v", `c:\:c:\host`, testEnv.MinimalBaseImage(), "cmd", "-c", "dir", `c:\host`) + dockerCmd(c, "run", "-v", `c:\:c:\host`, testEnv.PlatformDefaults.BaseImage, "cmd", "-c", "dir", `c:\host`) } else { dockerCmd(c, "run", "-v", "/:/host", "busybox", "ls", "/host") } @@ -1705,14 +1705,14 @@ func (s *DockerSuite) TestRunCleanupCmdOnEntrypoint(c *check.C) { out = strings.TrimSpace(out) expected := "root" if testEnv.DaemonPlatform() == "windows" { - if strings.Contains(testEnv.MinimalBaseImage(), "windowsservercore") { + if strings.Contains(testEnv.PlatformDefaults.BaseImage, "windowsservercore") { expected = `user manager\containeradministrator` } else { expected = `ContainerAdministrator` // nanoserver } } if out != expected { - c.Fatalf("Expected output %s, got %q. %s", expected, out, testEnv.MinimalBaseImage()) + c.Fatalf("Expected output %s, got %q. %s", expected, out, testEnv.PlatformDefaults.BaseImage) } } @@ -1944,7 +1944,7 @@ func (s *DockerSuite) TestRunCidFileCleanupIfEmpty(c *check.C) { image := "emptyfs" if testEnv.DaemonPlatform() == "windows" { // Windows can't support an emptyfs image. Just use the regular Windows image - image = testEnv.MinimalBaseImage() + image = testEnv.PlatformDefaults.BaseImage } out, _, err := dockerCmdWithError("run", "--cidfile", tmpCidFile, image) if err == nil { @@ -2561,7 +2561,7 @@ func (s *DockerSuite) TestRunNonLocalMacAddress(c *check.C) { if testEnv.DaemonPlatform() != "windows" { args = append(args, "busybox", "ifconfig") } else { - args = append(args, testEnv.MinimalBaseImage(), "ipconfig", "/all") + args = append(args, testEnv.PlatformDefaults.BaseImage, "ipconfig", "/all") expected = strings.Replace(strings.ToUpper(addr), ":", "-", -1) } @@ -3483,7 +3483,7 @@ func (s *DockerSuite) TestRunLoopbackOnlyExistsWhenNetworkingDisabled(c *check.C // Issue #4681 func (s *DockerSuite) TestRunLoopbackWhenNetworkDisabled(c *check.C) { if testEnv.DaemonPlatform() == "windows" { - dockerCmd(c, "run", "--net=none", testEnv.MinimalBaseImage(), "ping", "-n", "1", "127.0.0.1") + dockerCmd(c, "run", "--net=none", testEnv.PlatformDefaults.BaseImage, "ping", "-n", "1", "127.0.0.1") } else { dockerCmd(c, "run", "--net=none", "busybox", "ping", "-c", "1", "127.0.0.1") } @@ -4253,7 +4253,7 @@ func (s *DockerSuite) TestRunServicingContainer(c *check.C) { c.Skip("Disabled on post-RS3 builds") } - out := cli.DockerCmd(c, "run", "-d", testEnv.MinimalBaseImage(), "cmd", "/c", "mkdir c:\\programdata\\Microsoft\\Windows\\ContainerUpdates\\000_000_d99f45d0-ffc8-4af7-bd9c-ea6a62e035c9_200 && sc control cexecsvc 255").Combined() + out := cli.DockerCmd(c, "run", "-d", testEnv.PlatformDefaults.BaseImage, "cmd", "/c", "mkdir c:\\programdata\\Microsoft\\Windows\\ContainerUpdates\\000_000_d99f45d0-ffc8-4af7-bd9c-ea6a62e035c9_200 && sc control cexecsvc 255").Combined() containerID := strings.TrimSpace(out) cli.WaitExited(c, containerID, 60*time.Second) diff --git a/components/engine/integration-cli/docker_utils_test.go b/components/engine/integration-cli/docker_utils_test.go index 1bda2c7239..6eda88c684 100644 --- a/components/engine/integration-cli/docker_utils_test.go +++ b/components/engine/integration-cli/docker_utils_test.go @@ -399,7 +399,7 @@ func runSleepingContainerInImage(c *check.C, image string, extraArgs ...string) // minimalBaseImage returns the name of the minimal base image for the current // daemon platform. func minimalBaseImage() string { - return testEnv.MinimalBaseImage() + return testEnv.PlatformDefaults.BaseImage } func getGoroutineNumber() (int, error) { diff --git a/components/engine/integration-cli/environment/environment.go b/components/engine/integration-cli/environment/environment.go index 06fafeda0a..11eca5879a 100644 --- a/components/engine/integration-cli/environment/environment.go +++ b/components/engine/integration-cli/environment/environment.go @@ -57,9 +57,3 @@ func New() (*Execution, error) { func (e *Execution) DaemonPlatform() string { return e.OSType } - -// MinimalBaseImage is the image used for minimal builds (it depends on the platform) -// Deprecated: use Execution.PlatformDefaults.BaseImage -func (e *Execution) MinimalBaseImage() string { - return e.PlatformDefaults.BaseImage -} From d1c8c580ed0cd86aacbaa99d656b46761576c010 Mon Sep 17 00:00:00 2001 From: Sebastiaan van Stijn Date: Mon, 15 Jan 2018 15:32:06 +0100 Subject: [PATCH 10/12] Remove deprecated environment.DaemonPlatform() Signed-off-by: Sebastiaan van Stijn Upstream-commit: 18a771a761654e241ae8d1e85aa0c0a6164c5d27 Component: engine --- .../integration-cli/docker_api_build_test.go | 2 +- .../docker_api_containers_test.go | 8 +- .../integration-cli/docker_api_images_test.go | 4 +- .../docker_api_inspect_test.go | 2 +- .../integration-cli/docker_api_stats_test.go | 6 +- .../engine/integration-cli/docker_api_test.go | 2 +- .../integration-cli/docker_cli_build_test.go | 44 +++++------ .../integration-cli/docker_cli_commit_test.go | 2 +- .../integration-cli/docker_cli_create_test.go | 6 +- .../integration-cli/docker_cli_diff_test.go | 2 +- .../integration-cli/docker_cli_events_test.go | 2 +- .../integration-cli/docker_cli_info_test.go | 2 +- .../docker_cli_inspect_test.go | 6 +- .../integration-cli/docker_cli_ps_test.go | 2 +- .../integration-cli/docker_cli_rename_test.go | 2 +- .../docker_cli_restart_test.go | 2 +- .../integration-cli/docker_cli_rmi_test.go | 4 +- .../integration-cli/docker_cli_run_test.go | 74 +++++++++---------- .../integration-cli/docker_cli_top_test.go | 4 +- .../integration-cli/docker_cli_update_test.go | 2 +- .../docker_deprecated_api_v124_test.go | 8 +- .../environment/environment.go | 9 --- .../fixtures_linux_daemon_test.go | 4 +- .../engine/integration-cli/test_vars_test.go | 2 +- .../engine/integration-cli/utils_test.go | 2 +- 25 files changed, 97 insertions(+), 106 deletions(-) diff --git a/components/engine/integration-cli/docker_api_build_test.go b/components/engine/integration-cli/docker_api_build_test.go index 3f43c95432..5f83394f69 100644 --- a/components/engine/integration-cli/docker_api_build_test.go +++ b/components/engine/integration-cli/docker_api_build_test.go @@ -30,7 +30,7 @@ func (s *DockerSuite) TestBuildAPIDockerFileRemote(c *check.C) { testRequires(c, NotUserNamespace) var testD string - if testEnv.DaemonPlatform() == "windows" { + if testEnv.OSType == "windows" { testD = `FROM busybox RUN find / -name ba* RUN find /tmp/` diff --git a/components/engine/integration-cli/docker_api_containers_test.go b/components/engine/integration-cli/docker_api_containers_test.go index cd3566f4b4..02e8e9f7d2 100644 --- a/components/engine/integration-cli/docker_api_containers_test.go +++ b/components/engine/integration-cli/docker_api_containers_test.go @@ -1016,7 +1016,7 @@ func (s *DockerSuite) TestContainerAPIWait(c *check.C) { name := "test-api-wait" sleepCmd := "/bin/sleep" - if testEnv.DaemonPlatform() == "windows" { + if testEnv.OSType == "windows" { sleepCmd = "sleep" } dockerCmd(c, "run", "--name", name, "busybox", sleepCmd, "2") @@ -1216,7 +1216,7 @@ func (s *DockerSuite) TestContainerAPIDeleteRemoveVolume(c *check.C) { testRequires(c, SameHostDaemon) vol := "/testvolume" - if testEnv.DaemonPlatform() == "windows" { + if testEnv.OSType == "windows" { vol = `c:\testvolume` } @@ -1890,7 +1890,7 @@ func (s *DockerSuite) TestContainersAPICreateMountsCreate(c *check.C) { var ( testImg string ) - if testEnv.DaemonPlatform() != "windows" { + if testEnv.OSType != "windows" { testImg = "test-mount-config" buildImageSuccessfully(c, testImg, build.WithDockerfile(` FROM busybox @@ -1987,7 +1987,7 @@ func (s *DockerSuite) TestContainersAPICreateMountsCreate(c *check.C) { } } - if testEnv.DaemonPlatform() != "windows" { // Windows does not support volume populate + if testEnv.OSType != "windows" { // Windows does not support volume populate cases = append(cases, []testCase{ { spec: mounttypes.Mount{Type: "volume", Target: destPath, VolumeOptions: &mounttypes.VolumeOptions{NoCopy: true}}, diff --git a/components/engine/integration-cli/docker_api_images_test.go b/components/engine/integration-cli/docker_api_images_test.go index fba69dc682..10cb52eeb0 100644 --- a/components/engine/integration-cli/docker_api_images_test.go +++ b/components/engine/integration-cli/docker_api_images_test.go @@ -80,7 +80,7 @@ func (s *DockerSuite) TestAPIImagesDelete(c *check.C) { c.Assert(err, checker.IsNil) defer cli.Close() - if testEnv.DaemonPlatform() != "windows" { + if testEnv.OSType != "windows" { testRequires(c, Network) } name := "test-api-images-delete" @@ -104,7 +104,7 @@ func (s *DockerSuite) TestAPIImagesHistory(c *check.C) { c.Assert(err, checker.IsNil) defer cli.Close() - if testEnv.DaemonPlatform() != "windows" { + if testEnv.OSType != "windows" { testRequires(c, Network) } name := "test-api-images-history" diff --git a/components/engine/integration-cli/docker_api_inspect_test.go b/components/engine/integration-cli/docker_api_inspect_test.go index 38f3f4dd83..52a889f08b 100644 --- a/components/engine/integration-cli/docker_api_inspect_test.go +++ b/components/engine/integration-cli/docker_api_inspect_test.go @@ -28,7 +28,7 @@ func (s *DockerSuite) TestInspectAPIContainerResponse(c *check.C) { var cases []acase - if testEnv.DaemonPlatform() == "windows" { + if testEnv.OSType == "windows" { cases = []acase{ {"v1.25", append(keysBase, "Mounts")}, } diff --git a/components/engine/integration-cli/docker_api_stats_test.go b/components/engine/integration-cli/docker_api_stats_test.go index 7c9de1c083..1818c3b4ea 100644 --- a/components/engine/integration-cli/docker_api_stats_test.go +++ b/components/engine/integration-cli/docker_api_stats_test.go @@ -39,7 +39,7 @@ func (s *DockerSuite) TestAPIStatsNoStreamGetCpu(c *check.C) { var cpuPercent = 0.0 - if testEnv.DaemonPlatform() != "windows" { + if testEnv.OSType != "windows" { cpuDelta := float64(v.CPUStats.CPUUsage.TotalUsage - v.PreCPUStats.CPUUsage.TotalUsage) systemDelta := float64(v.CPUStats.SystemUsage - v.PreCPUStats.SystemUsage) cpuPercent = (cpuDelta / systemDelta) * float64(len(v.CPUStats.CPUUsage.PercpuUsage)) * 100.0 @@ -105,7 +105,7 @@ func (s *DockerSuite) TestAPIStatsNetworkStats(c *check.C) { // Retrieve the container address net := "bridge" - if testEnv.DaemonPlatform() == "windows" { + if testEnv.OSType == "windows" { net = "nat" } contIP := findContainerIP(c, id, net) @@ -153,7 +153,7 @@ func (s *DockerSuite) TestAPIStatsNetworkStats(c *check.C) { // On Linux, account for ARP. expRxPkts := preRxPackets + uint64(numPings) expTxPkts := preTxPackets + uint64(numPings) - if testEnv.DaemonPlatform() != "windows" { + if testEnv.OSType != "windows" { expRxPkts++ expTxPkts++ } diff --git a/components/engine/integration-cli/docker_api_test.go b/components/engine/integration-cli/docker_api_test.go index af189b9d07..e5b454fbf2 100644 --- a/components/engine/integration-cli/docker_api_test.go +++ b/components/engine/integration-cli/docker_api_test.go @@ -33,7 +33,7 @@ func (s *DockerSuite) TestAPIGetEnabledCORS(c *check.C) { } func (s *DockerSuite) TestAPIClientVersionOldNotSupported(c *check.C) { - if testEnv.DaemonPlatform() != runtime.GOOS { + if testEnv.OSType != runtime.GOOS { c.Skip("Daemon platform doesn't match test platform") } if api.MinVersion == api.DefaultVersion { diff --git a/components/engine/integration-cli/docker_cli_build_test.go b/components/engine/integration-cli/docker_cli_build_test.go index cb3b047a46..be1f656794 100644 --- a/components/engine/integration-cli/docker_cli_build_test.go +++ b/components/engine/integration-cli/docker_cli_build_test.go @@ -40,7 +40,7 @@ func (s *DockerSuite) TestBuildJSONEmptyRun(c *check.C) { func (s *DockerSuite) TestBuildShCmdJSONEntrypoint(c *check.C) { name := "testbuildshcmdjsonentrypoint" expected := "/bin/sh -c echo test" - if testEnv.DaemonPlatform() == "windows" { + if testEnv.OSType == "windows" { expected = "cmd /S /C echo test" } @@ -78,7 +78,7 @@ func (s *DockerSuite) TestBuildEnvironmentReplacementVolume(c *check.C) { var volumePath string - if testEnv.DaemonPlatform() == "windows" { + if testEnv.OSType == "windows" { volumePath = "c:/quux" } else { volumePath = "/quux" @@ -135,7 +135,7 @@ func (s *DockerSuite) TestBuildEnvironmentReplacementWorkdir(c *check.C) { res := inspectFieldJSON(c, name, "Config.WorkingDir") expected := `"/work"` - if testEnv.DaemonPlatform() == "windows" { + if testEnv.OSType == "windows" { expected = `"C:\\work"` } if res != expected { @@ -1304,7 +1304,7 @@ func (s *DockerSuite) TestBuildRelativeWorkdir(c *check.C) { expectedFinal string ) - if testEnv.DaemonPlatform() == "windows" { + if testEnv.OSType == "windows" { expected1 = `C:/` expected2 = `C:/test1` expected3 = `C:/test2` @@ -1383,7 +1383,7 @@ func (s *DockerSuite) TestBuildWorkdirWithEnvVariables(c *check.C) { name := "testbuildworkdirwithenvvariables" var expected string - if testEnv.DaemonPlatform() == "windows" { + if testEnv.OSType == "windows" { expected = `C:\test1\test2` } else { expected = `/test1/test2` @@ -1405,7 +1405,7 @@ func (s *DockerSuite) TestBuildRelativeCopy(c *check.C) { testRequires(c, NotUserNamespace) var expected string - if testEnv.DaemonPlatform() == "windows" { + if testEnv.OSType == "windows" { expected = `C:/test1/test2` } else { expected = `/test1/test2` @@ -2189,7 +2189,7 @@ func (s *DockerSuite) TestBuildAddFileNotFound(c *check.C) { name := "testbuildaddnotfound" expected := "foo: no such file or directory" - if testEnv.DaemonPlatform() == "windows" { + if testEnv.OSType == "windows" { expected = "foo: The system cannot find the file specified" } @@ -2243,7 +2243,7 @@ func (s *DockerSuite) TestBuildOnBuild(c *check.C) { // gh #2446 func (s *DockerSuite) TestBuildAddToSymlinkDest(c *check.C) { makeLink := `ln -s /foo /bar` - if testEnv.DaemonPlatform() == "windows" { + if testEnv.OSType == "windows" { makeLink = `mklink /D C:\bar C:\foo` } name := "testbuildaddtosymlinkdest" @@ -3198,7 +3198,7 @@ func (s *DockerSuite) TestBuildCmdShDashC(c *check.C) { res := inspectFieldJSON(c, name, "Config.Cmd") expected := `["/bin/sh","-c","echo cmd"]` - if testEnv.DaemonPlatform() == "windows" { + if testEnv.OSType == "windows" { expected = `["cmd","/S","/C","echo cmd"]` } if res != expected { @@ -3271,7 +3271,7 @@ func (s *DockerSuite) TestBuildEntrypointCanBeOverriddenByChildInspect(c *check. expected = `["/bin/sh","-c","echo quux"]` ) - if testEnv.DaemonPlatform() == "windows" { + if testEnv.OSType == "windows" { expected = `["cmd","/S","/C","echo quux"]` } @@ -3328,7 +3328,7 @@ func (s *DockerSuite) TestBuildVerifySingleQuoteFails(c *check.C) { // it should barf on it. name := "testbuildsinglequotefails" expectedExitCode := 2 - if testEnv.DaemonPlatform() == "windows" { + if testEnv.OSType == "windows" { expectedExitCode = 127 } @@ -3344,7 +3344,7 @@ func (s *DockerSuite) TestBuildVerboseOut(c *check.C) { name := "testbuildverboseout" expected := "\n123\n" - if testEnv.DaemonPlatform() == "windows" { + if testEnv.OSType == "windows" { expected = "\n123\r\n" } @@ -3360,7 +3360,7 @@ func (s *DockerSuite) TestBuildWithTabs(c *check.C) { res := inspectFieldJSON(c, name, "ContainerConfig.Cmd") expected1 := `["/bin/sh","-c","echo\tone\t\ttwo"]` expected2 := `["/bin/sh","-c","echo\u0009one\u0009\u0009two"]` // syntactically equivalent, and what Go 1.3 generates - if testEnv.DaemonPlatform() == "windows" { + if testEnv.OSType == "windows" { expected1 = `["cmd","/S","/C","echo\tone\t\ttwo"]` expected2 = `["cmd","/S","/C","echo\u0009one\u0009\u0009two"]` // syntactically equivalent, and what Go 1.3 generates } @@ -3555,7 +3555,7 @@ func (s *DockerSuite) TestBuildStderr(c *check.C) { result.Assert(c, icmd.Success) // Windows to non-Windows should have a security warning - if runtime.GOOS == "windows" && testEnv.DaemonPlatform() != "windows" && !strings.Contains(result.Stdout(), "SECURITY WARNING:") { + if runtime.GOOS == "windows" && testEnv.OSType != "windows" && !strings.Contains(result.Stdout(), "SECURITY WARNING:") { c.Fatalf("Stdout contains unexpected output: %q", result.Stdout()) } @@ -3667,7 +3667,7 @@ func (s *DockerSuite) TestBuildVolumesRetainContents(c *check.C) { volName = "/foo" ) - if testEnv.DaemonPlatform() == "windows" { + if testEnv.OSType == "windows" { volName = "C:/foo" } @@ -3968,7 +3968,7 @@ RUN echo " \ expected := "\n foo \n" // Windows uses the builtin echo, which preserves quotes - if testEnv.DaemonPlatform() == "windows" { + if testEnv.OSType == "windows" { expected = "\" foo \"" } @@ -4002,7 +4002,7 @@ func (s *DockerSuite) TestBuildMissingArgs(c *check.C) { "INSERT": {}, } - if testEnv.DaemonPlatform() == "windows" { + if testEnv.OSType == "windows" { skipCmds = map[string]struct{}{ "CMD": {}, "RUN": {}, @@ -4135,7 +4135,7 @@ func (s *DockerSuite) TestBuildRUNErrMsg(c *check.C) { name := "testbuildbadrunerrmsg" shell := "/bin/sh -c" exitCode := 127 - if testEnv.DaemonPlatform() == "windows" { + if testEnv.OSType == "windows" { shell = "cmd /S /C" // architectural - Windows has to start the container to determine the exe is bad, Linux does not exitCode = 1 @@ -4287,7 +4287,7 @@ func (s *DockerTrustSuite) TestTrustedBuildTagIgnoresOtherDelegationRoles(c *che func (s *DockerSuite) TestBuildNullStringInAddCopyVolume(c *check.C) { name := "testbuildnullstringinaddcopyvolume" volName := "nullvolume" - if testEnv.DaemonPlatform() == "windows" { + if testEnv.OSType == "windows" { volName = `C:\\nullvolume` } @@ -4327,7 +4327,7 @@ func (s *DockerSuite) TestBuildBuildTimeArg(c *check.C) { envKey := "foo" envVal := "bar" var dockerfile string - if testEnv.DaemonPlatform() == "windows" { + if testEnv.OSType == "windows" { // Bugs in Windows busybox port - use the default base image and native cmd stuff dockerfile = fmt.Sprintf(`FROM `+minimalBaseImage()+` ARG %s @@ -4942,7 +4942,7 @@ func (s *DockerSuite) TestBuildMultiStageUnusedArg(c *check.C) { func (s *DockerSuite) TestBuildNoNamedVolume(c *check.C) { volName := "testname:/foo" - if testEnv.DaemonPlatform() == "windows" { + if testEnv.OSType == "windows" { volName = "testname:C:\\foo" } dockerCmd(c, "run", "-v", volName, "busybox", "sh", "-c", "touch /foo/oops") @@ -6345,7 +6345,7 @@ WORKDIR /foo/bar // The Windows busybox image has a blank `cmd` lookingFor := `["sh"]` - if testEnv.DaemonPlatform() == "windows" { + if testEnv.OSType == "windows" { lookingFor = "null" } c.Assert(strings.TrimSpace(out), checker.Equals, lookingFor) diff --git a/components/engine/integration-cli/docker_cli_commit_test.go b/components/engine/integration-cli/docker_cli_commit_test.go index 057c2d6f14..b0f21cef50 100644 --- a/components/engine/integration-cli/docker_cli_commit_test.go +++ b/components/engine/integration-cli/docker_cli_commit_test.go @@ -125,7 +125,7 @@ func (s *DockerSuite) TestCommitChange(c *check.C) { // ENV. On windows, the container doesn't have a `PATH` ENV variable so // the ordering is the same as the cli. expectedEnv := "[PATH=/foo DEBUG=true test=1]" - if testEnv.DaemonPlatform() == "windows" { + if testEnv.OSType == "windows" { expectedEnv = "[DEBUG=true test=1 PATH=/foo]" } diff --git a/components/engine/integration-cli/docker_cli_create_test.go b/components/engine/integration-cli/docker_cli_create_test.go index 67bc98ee3f..448af9f199 100644 --- a/components/engine/integration-cli/docker_cli_create_test.go +++ b/components/engine/integration-cli/docker_cli_create_test.go @@ -60,7 +60,7 @@ func (s *DockerSuite) TestCreateArgs(c *check.C) { // Make sure we can grow the container's rootfs at creation time. func (s *DockerSuite) TestCreateGrowRootfs(c *check.C) { // Windows and Devicemapper support growing the rootfs - if testEnv.DaemonPlatform() != "windows" { + if testEnv.OSType != "windows" { testRequires(c, Devicemapper) } out, _ := dockerCmd(c, "create", "--storage-opt", "size=120G", "busybox") @@ -224,7 +224,7 @@ func (s *DockerSuite) TestCreateLabelFromImage(c *check.C) { func (s *DockerSuite) TestCreateHostnameWithNumber(c *check.C) { image := "busybox" // Busybox on Windows does not implement hostname command - if testEnv.DaemonPlatform() == "windows" { + if testEnv.OSType == "windows" { image = testEnv.PlatformDefaults.BaseImage } out, _ := dockerCmd(c, "run", "-h", "web.0", image, "hostname") @@ -378,7 +378,7 @@ func (s *DockerSuite) TestCreateWithWorkdir(c *check.C) { dockerCmd(c, "create", "--name", name, "-w", dir, "busybox") // Windows does not create the workdir until the container is started - if testEnv.DaemonPlatform() == "windows" { + if testEnv.OSType == "windows" { dockerCmd(c, "start", name) } dockerCmd(c, "cp", fmt.Sprintf("%s:%s", name, dir), prefix+slash+"tmp") diff --git a/components/engine/integration-cli/docker_cli_diff_test.go b/components/engine/integration-cli/docker_cli_diff_test.go index 3e95a7378a..614beee43c 100644 --- a/components/engine/integration-cli/docker_cli_diff_test.go +++ b/components/engine/integration-cli/docker_cli_diff_test.go @@ -20,7 +20,7 @@ func (s *DockerSuite) TestDiffFilenameShownInOutput(c *check.C) { // a "Files/" prefix. containerID := strings.TrimSpace(out) lookingFor := "A /foo/bar" - if testEnv.DaemonPlatform() == "windows" { + if testEnv.OSType == "windows" { cli.WaitExited(c, containerID, 60*time.Second) lookingFor = "C Files/foo/bar" } diff --git a/components/engine/integration-cli/docker_cli_events_test.go b/components/engine/integration-cli/docker_cli_events_test.go index b75dcc1512..be91087b66 100644 --- a/components/engine/integration-cli/docker_cli_events_test.go +++ b/components/engine/integration-cli/docker_cli_events_test.go @@ -659,7 +659,7 @@ func (s *DockerSuite) TestEventsContainerRestart(c *check.C) { // wait until test2 is auto removed. waitTime := 10 * time.Second - if testEnv.DaemonPlatform() == "windows" { + if testEnv.OSType == "windows" { // Windows takes longer... waitTime = 90 * time.Second } diff --git a/components/engine/integration-cli/docker_cli_info_test.go b/components/engine/integration-cli/docker_cli_info_test.go index 180464888d..35a2532196 100644 --- a/components/engine/integration-cli/docker_cli_info_test.go +++ b/components/engine/integration-cli/docker_cli_info_test.go @@ -36,7 +36,7 @@ func (s *DockerSuite) TestInfoEnsureSucceeds(c *check.C) { "Live Restore Enabled:", } - if testEnv.DaemonPlatform() == "linux" { + if testEnv.OSType == "linux" { stringsToCheck = append(stringsToCheck, "Init Binary:", "Security Options:", "containerd version:", "runc version:", "init version:") } diff --git a/components/engine/integration-cli/docker_cli_inspect_test.go b/components/engine/integration-cli/docker_cli_inspect_test.go index 13eb2d38aa..bf2ee71e95 100644 --- a/components/engine/integration-cli/docker_cli_inspect_test.go +++ b/components/engine/integration-cli/docker_cli_inspect_test.go @@ -61,7 +61,7 @@ func (s *DockerSuite) TestInspectStatus(c *check.C) { // Windows does not support pause/unpause on Windows Server Containers. // (RS1 does for Hyper-V Containers, but production CI is not setup for that) - if testEnv.DaemonPlatform() != "windows" { + if testEnv.OSType != "windows" { dockerCmd(c, "pause", out) inspectOut = inspectField(c, out, "State.Status") c.Assert(inspectOut, checker.Equals, "paused") @@ -206,7 +206,7 @@ func (s *DockerSuite) TestInspectContainerGraphDriver(c *check.C) { func (s *DockerSuite) TestInspectBindMountPoint(c *check.C) { modifier := ",z" prefix, slash := getPrefixAndSlashFromDaemonPlatform() - if testEnv.DaemonPlatform() == "windows" { + if testEnv.OSType == "windows" { modifier = "" // Linux creates the host directory if it doesn't exist. Windows does not. os.Mkdir(`c:\data`, os.ModeDir) @@ -229,7 +229,7 @@ func (s *DockerSuite) TestInspectBindMountPoint(c *check.C) { c.Assert(m.Driver, checker.Equals, "") c.Assert(m.Source, checker.Equals, prefix+slash+"data") c.Assert(m.Destination, checker.Equals, prefix+slash+"data") - if testEnv.DaemonPlatform() != "windows" { // Windows does not set mode + if testEnv.OSType != "windows" { // Windows does not set mode c.Assert(m.Mode, checker.Equals, "ro"+modifier) } c.Assert(m.RW, checker.Equals, false) diff --git a/components/engine/integration-cli/docker_cli_ps_test.go b/components/engine/integration-cli/docker_cli_ps_test.go index bea1261202..6fe91f6565 100644 --- a/components/engine/integration-cli/docker_cli_ps_test.go +++ b/components/engine/integration-cli/docker_cli_ps_test.go @@ -216,7 +216,7 @@ func (s *DockerSuite) TestPsListContainersFilterStatus(c *check.C) { }) // Windows doesn't support pausing of containers - if testEnv.DaemonPlatform() != "windows" { + if testEnv.OSType != "windows" { // pause running container out = cli.DockerCmd(c, "run", "-itd", "busybox").Combined() pausedID := strings.TrimSpace(out) diff --git a/components/engine/integration-cli/docker_cli_rename_test.go b/components/engine/integration-cli/docker_cli_rename_test.go index de277596fe..e9d63684c8 100644 --- a/components/engine/integration-cli/docker_cli_rename_test.go +++ b/components/engine/integration-cli/docker_cli_rename_test.go @@ -93,7 +93,7 @@ func (s *DockerSuite) TestRenameAnonymousContainer(c *check.C) { dockerCmd(c, "start", "container1") count := "-c" - if testEnv.DaemonPlatform() == "windows" { + if testEnv.OSType == "windows" { count = "-n" } diff --git a/components/engine/integration-cli/docker_cli_restart_test.go b/components/engine/integration-cli/docker_cli_restart_test.go index cf6b135ede..1b4c928b9a 100644 --- a/components/engine/integration-cli/docker_cli_restart_test.go +++ b/components/engine/integration-cli/docker_cli_restart_test.go @@ -269,7 +269,7 @@ func (s *DockerSuite) TestRestartContainerwithRestartPolicy(c *check.C) { id1 := strings.TrimSpace(string(out1)) id2 := strings.TrimSpace(string(out2)) waitTimeout := 15 * time.Second - if testEnv.DaemonPlatform() == "windows" { + if testEnv.OSType == "windows" { waitTimeout = 150 * time.Second } err := waitInspect(id1, "{{ .State.Restarting }} {{ .State.Running }}", "false false", waitTimeout) diff --git a/components/engine/integration-cli/docker_cli_rmi_test.go b/components/engine/integration-cli/docker_cli_rmi_test.go index 52c8837d28..aedfa13a81 100644 --- a/components/engine/integration-cli/docker_cli_rmi_test.go +++ b/components/engine/integration-cli/docker_cli_rmi_test.go @@ -68,7 +68,7 @@ func (s *DockerSuite) TestRmiImgIDMultipleTag(c *check.C) { // Wait for it to exit as cannot commit a running container on Windows, and // it will take a few seconds to exit - if testEnv.DaemonPlatform() == "windows" { + if testEnv.OSType == "windows" { cli.WaitExited(c, containerID, 60*time.Second) } @@ -109,7 +109,7 @@ func (s *DockerSuite) TestRmiImgIDForce(c *check.C) { // Wait for it to exit as cannot commit a running container on Windows, and // it will take a few seconds to exit - if testEnv.DaemonPlatform() == "windows" { + if testEnv.OSType == "windows" { cli.WaitExited(c, containerID, 60*time.Second) } diff --git a/components/engine/integration-cli/docker_cli_run_test.go b/components/engine/integration-cli/docker_cli_run_test.go index 79be835edb..620f79e7ad 100644 --- a/components/engine/integration-cli/docker_cli_run_test.go +++ b/components/engine/integration-cli/docker_cli_run_test.go @@ -72,7 +72,7 @@ func (s *DockerSuite) TestRunLeakyFileDescriptors(c *check.C) { // this will fail when Internet access is unavailable func (s *DockerSuite) TestRunLookupGoogleDNS(c *check.C) { testRequires(c, Network, NotArm) - if testEnv.DaemonPlatform() == "windows" { + if testEnv.OSType == "windows" { // nslookup isn't present in Windows busybox. Is built-in. Further, // nslookup isn't present in nanoserver. Hence just use PowerShell... dockerCmd(c, "run", testEnv.PlatformDefaults.BaseImage, "powershell", "Resolve-DNSName", "google.com") @@ -137,7 +137,7 @@ func (s *DockerSuite) TestRunDetachedContainerIDPrinting(c *check.C) { func (s *DockerSuite) TestRunWorkingDirectory(c *check.C) { dir := "/root" image := "busybox" - if testEnv.DaemonPlatform() == "windows" { + if testEnv.OSType == "windows" { dir = `C:/Windows` } @@ -160,7 +160,7 @@ func (s *DockerSuite) TestRunWorkingDirectory(c *check.C) { func (s *DockerSuite) TestRunWithoutNetworking(c *check.C) { count := "-c" image := "busybox" - if testEnv.DaemonPlatform() == "windows" { + if testEnv.OSType == "windows" { count = "-n" image = testEnv.PlatformDefaults.BaseImage } @@ -354,7 +354,7 @@ func (s *DockerSuite) TestRunWithVolumesFromExited(c *check.C) { ) // Create a file in a volume - if testEnv.DaemonPlatform() == "windows" { + if testEnv.OSType == "windows" { out, exitCode = dockerCmd(c, "run", "--name", "test-data", "--volume", `c:\some\dir`, testEnv.PlatformDefaults.BaseImage, "cmd", "/c", `echo hello > c:\some\dir\file`) } else { out, exitCode = dockerCmd(c, "run", "--name", "test-data", "--volume", "/some/dir", "busybox", "touch", "/some/dir/file") @@ -364,7 +364,7 @@ func (s *DockerSuite) TestRunWithVolumesFromExited(c *check.C) { } // Read the file from another container using --volumes-from to access the volume in the second container - if testEnv.DaemonPlatform() == "windows" { + if testEnv.OSType == "windows" { out, exitCode = dockerCmd(c, "run", "--volumes-from", "test-data", testEnv.PlatformDefaults.BaseImage, "cmd", "/c", `type c:\some\dir\file`) } else { out, exitCode = dockerCmd(c, "run", "--volumes-from", "test-data", "busybox", "cat", "/some/dir/file") @@ -396,7 +396,7 @@ func (s *DockerSuite) TestRunCreateVolumesInSymlinkDir(c *check.C) { // In the case of Windows to Windows CI, if the machine is setup so that // the temp directory is not the C: drive, this test is invalid and will // not work. - if testEnv.DaemonPlatform() == "windows" && strings.ToLower(dir[:1]) != "c" { + if testEnv.OSType == "windows" && strings.ToLower(dir[:1]) != "c" { c.Skip("Requires TEMP to point to C: drive") } @@ -406,7 +406,7 @@ func (s *DockerSuite) TestRunCreateVolumesInSymlinkDir(c *check.C) { } f.Close() - if testEnv.DaemonPlatform() == "windows" { + if testEnv.OSType == "windows" { dockerFile = fmt.Sprintf("FROM %s\nRUN mkdir %s\nRUN mklink /D c:\\test %s", testEnv.PlatformDefaults.BaseImage, dir, dir) containerPath = `c:\test\test` cmd = "tasklist" @@ -431,7 +431,7 @@ func (s *DockerSuite) TestRunCreateVolumesInSymlinkDir2(c *check.C) { testRequires(c, SameHostDaemon, DaemonIsLinux) name := "test-volume-symlink2" - if testEnv.DaemonPlatform() == "windows" { + if testEnv.OSType == "windows" { dockerFile = fmt.Sprintf("FROM %s\nRUN mkdir c:\\%s\nRUN mklink /D c:\\test c:\\%s", testEnv.PlatformDefaults.BaseImage, name, name) containerPath = `c:\test\test` cmd = "tasklist" @@ -455,7 +455,7 @@ func (s *DockerSuite) TestRunVolumesFromInReadonlyModeFails(c *check.C) { volumeDir string fileInVol string ) - if testEnv.DaemonPlatform() == "windows" { + if testEnv.OSType == "windows" { volumeDir = `c:/test` // Forward-slash as using busybox fileInVol = `c:/test/file` } else { @@ -476,7 +476,7 @@ func (s *DockerSuite) TestRunVolumesFromInReadWriteMode(c *check.C) { volumeDir string fileInVol string ) - if testEnv.DaemonPlatform() == "windows" { + if testEnv.OSType == "windows" { volumeDir = `c:/test` // Forward-slash as using busybox fileInVol = `c:/test/file` } else { @@ -497,7 +497,7 @@ func (s *DockerSuite) TestRunVolumesFromInReadWriteMode(c *check.C) { func (s *DockerSuite) TestVolumesFromGetsProperMode(c *check.C) { testRequires(c, SameHostDaemon) prefix, slash := getPrefixAndSlashFromDaemonPlatform() - hostpath := RandomTmpDirPath("test", testEnv.DaemonPlatform()) + hostpath := RandomTmpDirPath("test", testEnv.OSType) if err := os.MkdirAll(hostpath, 0755); err != nil { c.Fatalf("Failed to create %s: %q", hostpath, err) } @@ -520,11 +520,11 @@ func (s *DockerSuite) TestVolumesFromGetsProperMode(c *check.C) { // Test for GH#10618 func (s *DockerSuite) TestRunNoDupVolumes(c *check.C) { - path1 := RandomTmpDirPath("test1", testEnv.DaemonPlatform()) - path2 := RandomTmpDirPath("test2", testEnv.DaemonPlatform()) + path1 := RandomTmpDirPath("test1", testEnv.OSType) + path2 := RandomTmpDirPath("test2", testEnv.OSType) someplace := ":/someplace" - if testEnv.DaemonPlatform() == "windows" { + if testEnv.OSType == "windows" { // Windows requires that the source directory exists before calling HCS testRequires(c, SameHostDaemon) someplace = `:c:\someplace` @@ -573,7 +573,7 @@ func (s *DockerSuite) TestRunNoDupVolumes(c *check.C) { // Test for #1351 func (s *DockerSuite) TestRunApplyVolumesFromBeforeVolumes(c *check.C) { prefix := "" - if testEnv.DaemonPlatform() == "windows" { + if testEnv.OSType == "windows" { prefix = `c:` } dockerCmd(c, "run", "--name", "parent", "-v", prefix+"/test", "busybox", "touch", prefix+"/test/foo") @@ -582,7 +582,7 @@ func (s *DockerSuite) TestRunApplyVolumesFromBeforeVolumes(c *check.C) { func (s *DockerSuite) TestRunMultipleVolumesFrom(c *check.C) { prefix := "" - if testEnv.DaemonPlatform() == "windows" { + if testEnv.OSType == "windows" { prefix = `c:` } dockerCmd(c, "run", "--name", "parent1", "-v", prefix+"/test", "busybox", "touch", prefix+"/test/foo") @@ -612,7 +612,7 @@ func (s *DockerSuite) TestRunVerifyContainerID(c *check.C) { // Test that creating a container with a volume doesn't crash. Regression test for #995. func (s *DockerSuite) TestRunCreateVolume(c *check.C) { prefix := "" - if testEnv.DaemonPlatform() == "windows" { + if testEnv.OSType == "windows" { prefix = `c:` } dockerCmd(c, "run", "-v", prefix+"/var/lib/data", "busybox", "true") @@ -668,7 +668,7 @@ func (s *DockerSuite) TestRunVolumesFromSymlinkPath(c *check.C) { RUN ln -s home /foo VOLUME ["/foo/bar"]` - if testEnv.DaemonPlatform() == "windows" { + if testEnv.OSType == "windows" { prefix = `c:` dfContents = `FROM ` + testEnv.PlatformDefaults.BaseImage + ` RUN mkdir c:\home @@ -714,7 +714,7 @@ func (s *DockerSuite) TestRunExitCode(c *check.C) { func (s *DockerSuite) TestRunUserDefaults(c *check.C) { expected := "uid=0(root) gid=0(root)" - if testEnv.DaemonPlatform() == "windows" { + if testEnv.OSType == "windows" { expected = "uid=1000(ContainerAdministrator) gid=1000(ContainerAdministrator)" } out, _ := dockerCmd(c, "run", "busybox", "id") @@ -920,7 +920,7 @@ func (s *DockerSuite) TestRunEnvironmentOverride(c *check.C) { } func (s *DockerSuite) TestRunContainerNetwork(c *check.C) { - if testEnv.DaemonPlatform() == "windows" { + if testEnv.OSType == "windows" { // Windows busybox does not have ping. Use built in ping instead. dockerCmd(c, "run", testEnv.PlatformDefaults.BaseImage, "ping", "-n", "1", "127.0.0.1") } else { @@ -1220,7 +1220,7 @@ func (s *DockerSuite) TestRunModeHostname(c *check.C) { func (s *DockerSuite) TestRunRootWorkdir(c *check.C) { out, _ := dockerCmd(c, "run", "--workdir", "/", "busybox", "pwd") expected := "/\n" - if testEnv.DaemonPlatform() == "windows" { + if testEnv.OSType == "windows" { expected = "C:" + expected } if out != expected { @@ -1229,7 +1229,7 @@ func (s *DockerSuite) TestRunRootWorkdir(c *check.C) { } func (s *DockerSuite) TestRunAllowBindMountingRoot(c *check.C) { - if testEnv.DaemonPlatform() == "windows" { + if testEnv.OSType == "windows" { // Windows busybox will fail with Permission Denied on items such as pagefile.sys dockerCmd(c, "run", "-v", `c:\:c:\host`, testEnv.PlatformDefaults.BaseImage, "cmd", "-c", "dir", `c:\host`) } else { @@ -1240,7 +1240,7 @@ func (s *DockerSuite) TestRunAllowBindMountingRoot(c *check.C) { func (s *DockerSuite) TestRunDisallowBindMountingRootToRoot(c *check.C) { mount := "/:/" targetDir := "/host" - if testEnv.DaemonPlatform() == "windows" { + if testEnv.OSType == "windows" { mount = `c:\:c\` targetDir = "c:/host" // Forward slash as using busybox } @@ -1704,7 +1704,7 @@ func (s *DockerSuite) TestRunCleanupCmdOnEntrypoint(c *check.C) { } out = strings.TrimSpace(out) expected := "root" - if testEnv.DaemonPlatform() == "windows" { + if testEnv.OSType == "windows" { if strings.Contains(testEnv.PlatformDefaults.BaseImage, "windowsservercore") { expected = `user manager\containeradministrator` } else { @@ -1720,7 +1720,7 @@ func (s *DockerSuite) TestRunCleanupCmdOnEntrypoint(c *check.C) { func (s *DockerSuite) TestRunWorkdirExistsAndIsFile(c *check.C) { existingFile := "/bin/cat" expected := "not a directory" - if testEnv.DaemonPlatform() == "windows" { + if testEnv.OSType == "windows" { existingFile = `\windows\system32\ntdll.dll` expected = `The directory name is invalid.` } @@ -1736,7 +1736,7 @@ func (s *DockerSuite) TestRunExitOnStdinClose(c *check.C) { meow := "/bin/cat" delay := 60 - if testEnv.DaemonPlatform() == "windows" { + if testEnv.OSType == "windows" { meow = "cat" } runCmd := exec.Command(dockerBinary, "run", "--name", name, "-i", "busybox", meow) @@ -1881,7 +1881,7 @@ func (s *DockerSuite) TestRunEntrypoint(c *check.C) { func (s *DockerSuite) TestRunBindMounts(c *check.C) { testRequires(c, SameHostDaemon) - if testEnv.DaemonPlatform() == "linux" { + if testEnv.OSType == "linux" { testRequires(c, DaemonIsLinux, NotUserNamespace) } @@ -1902,7 +1902,7 @@ func (s *DockerSuite) TestRunBindMounts(c *check.C) { } // test writing to bind mount - if testEnv.DaemonPlatform() == "windows" { + if testEnv.OSType == "windows" { dockerCmd(c, "run", "-v", fmt.Sprintf(`%s:c:\tmp:rw`, tmpDir), "busybox", "touch", "c:/tmp/holla") } else { dockerCmd(c, "run", "-v", fmt.Sprintf("%s:/tmp:rw", tmpDir), "busybox", "touch", "/tmp/holla") @@ -1917,7 +1917,7 @@ func (s *DockerSuite) TestRunBindMounts(c *check.C) { } // Windows does not (and likely never will) support mounting a single file - if testEnv.DaemonPlatform() != "windows" { + if testEnv.OSType != "windows" { // test mount a file dockerCmd(c, "run", "-v", fmt.Sprintf("%s/holla:/tmp/holla:rw", tmpDir), "busybox", "sh", "-c", "echo -n 'yotta' > /tmp/holla") content := readFile(path.Join(tmpDir, "holla"), c) // Will fail if the file doesn't exist @@ -1942,7 +1942,7 @@ func (s *DockerSuite) TestRunCidFileCleanupIfEmpty(c *check.C) { tmpCidFile := path.Join(tmpDir, "cid") image := "emptyfs" - if testEnv.DaemonPlatform() == "windows" { + if testEnv.OSType == "windows" { // Windows can't support an emptyfs image. Just use the regular Windows image image = testEnv.PlatformDefaults.BaseImage } @@ -1988,7 +1988,7 @@ func (s *DockerSuite) TestRunCidFileCheckIDLength(c *check.C) { func (s *DockerSuite) TestRunSetMacAddress(c *check.C) { mac := "12:34:56:78:9a:bc" var out string - if testEnv.DaemonPlatform() == "windows" { + if testEnv.OSType == "windows" { out, _ = dockerCmd(c, "run", "-i", "--rm", fmt.Sprintf("--mac-address=%s", mac), "busybox", "sh", "-c", "ipconfig /all | grep 'Physical Address' | awk '{print $12}'") mac = strings.Replace(strings.ToUpper(mac), ":", "-", -1) // To Windows-style MACs } else { @@ -2185,7 +2185,7 @@ func (s *DockerSuite) TestVolumesNoCopyData(c *check.C) { c.Fatalf("Data was copied on volumes-from but shouldn't be:\n%q", out) } - tmpDir := RandomTmpDirPath("docker_test_bind_mount_copy_data", testEnv.DaemonPlatform()) + tmpDir := RandomTmpDirPath("docker_test_bind_mount_copy_data", testEnv.OSType) if out, _, err := dockerCmdWithError("run", "-v", tmpDir+":/foo", "dataimage", "ls", "-lh", "/foo/bar"); err == nil || !strings.Contains(out, "No such file or directory") { c.Fatalf("Data was copied on bind mount but shouldn't be:\n%q", out) } @@ -2558,7 +2558,7 @@ func (s *DockerSuite) TestRunNonLocalMacAddress(c *check.C) { args := []string{"run", "--mac-address", addr} expected := addr - if testEnv.DaemonPlatform() != "windows" { + if testEnv.OSType != "windows" { args = append(args, "busybox", "ifconfig") } else { args = append(args, testEnv.PlatformDefaults.BaseImage, "ipconfig", "/all") @@ -2654,7 +2654,7 @@ func (s *DockerSuite) TestRunSetDefaultRestartPolicy(c *check.C) { func (s *DockerSuite) TestRunRestartMaxRetries(c *check.C) { out, _ := dockerCmd(c, "run", "-d", "--restart=on-failure:3", "busybox", "false") timeout := 10 * time.Second - if testEnv.DaemonPlatform() == "windows" { + if testEnv.OSType == "windows" { timeout = 120 * time.Second } @@ -3022,7 +3022,7 @@ func (s *DockerSuite) TestVolumeFromMixedRWOptions(c *check.C) { dockerCmd(c, "run", "--volumes-from", "parent:ro", "--name", "test-volumes-1", "busybox", "true") dockerCmd(c, "run", "--volumes-from", "parent:rw", "--name", "test-volumes-2", "busybox", "true") - if testEnv.DaemonPlatform() != "windows" { + if testEnv.OSType != "windows" { mRO, err := inspectMountPoint("test-volumes-1", prefix+slash+"test") c.Assert(err, checker.IsNil, check.Commentf("failed to inspect mount point")) if mRO.RW { @@ -3482,7 +3482,7 @@ func (s *DockerSuite) TestRunLoopbackOnlyExistsWhenNetworkingDisabled(c *check.C // Issue #4681 func (s *DockerSuite) TestRunLoopbackWhenNetworkDisabled(c *check.C) { - if testEnv.DaemonPlatform() == "windows" { + if testEnv.OSType == "windows" { dockerCmd(c, "run", "--net=none", testEnv.PlatformDefaults.BaseImage, "ping", "-n", "1", "127.0.0.1") } else { dockerCmd(c, "run", "--net=none", "busybox", "ping", "-c", "1", "127.0.0.1") @@ -3749,7 +3749,7 @@ func (s *DockerSuite) TestRunNonExistingCmd(c *check.C) { // as that's when the check is made (and yes, by its design...) func (s *DockerSuite) TestCmdCannotBeInvoked(c *check.C) { expected := 126 - if testEnv.DaemonPlatform() == "windows" { + if testEnv.OSType == "windows" { expected = 127 } name := "testCmdCannotBeInvoked" diff --git a/components/engine/integration-cli/docker_cli_top_test.go b/components/engine/integration-cli/docker_cli_top_test.go index f52f24014e..b8924d3b50 100644 --- a/components/engine/integration-cli/docker_cli_top_test.go +++ b/components/engine/integration-cli/docker_cli_top_test.go @@ -13,7 +13,7 @@ func (s *DockerSuite) TestTopMultipleArgs(c *check.C) { cleanedContainerID := strings.TrimSpace(out) var expected icmd.Expected - switch testEnv.DaemonPlatform() { + switch testEnv.OSType { case "windows": expected = icmd.Expected{ExitCode: 1, Err: "Windows does not support arguments to top"} default: @@ -34,7 +34,7 @@ func (s *DockerSuite) TestTopNonPrivileged(c *check.C) { // Windows will list the name of the launched executable which in this case is busybox.exe, without the parameters. // Linux will display the command executed in the container var lookingFor string - if testEnv.DaemonPlatform() == "windows" { + if testEnv.OSType == "windows" { lookingFor = "busybox.exe" } else { lookingFor = "top" diff --git a/components/engine/integration-cli/docker_cli_update_test.go b/components/engine/integration-cli/docker_cli_update_test.go index 5b9b7304c5..dce137ebf8 100644 --- a/components/engine/integration-cli/docker_cli_update_test.go +++ b/components/engine/integration-cli/docker_cli_update_test.go @@ -13,7 +13,7 @@ import ( func (s *DockerSuite) TestUpdateRestartPolicy(c *check.C) { out := cli.DockerCmd(c, "run", "-d", "--restart=on-failure:3", "busybox", "sh", "-c", "sleep 1 && false").Combined() timeout := 60 * time.Second - if testEnv.DaemonPlatform() == "windows" { + if testEnv.OSType == "windows" { timeout = 180 * time.Second } diff --git a/components/engine/integration-cli/docker_deprecated_api_v124_test.go b/components/engine/integration-cli/docker_deprecated_api_v124_test.go index 214ae08667..279efddd8e 100644 --- a/components/engine/integration-cli/docker_deprecated_api_v124_test.go +++ b/components/engine/integration-cli/docker_deprecated_api_v124_test.go @@ -36,7 +36,7 @@ func (s *DockerSuite) TestDeprecatedContainerAPIStartVolumeBinds(c *check.C) { // TODO Windows CI: Investigate further why this fails on Windows to Windows CI. testRequires(c, DaemonIsLinux) path := "/foo" - if testEnv.DaemonPlatform() == "windows" { + if testEnv.OSType == "windows" { path = `c:\foo` } name := "testing" @@ -49,7 +49,7 @@ func (s *DockerSuite) TestDeprecatedContainerAPIStartVolumeBinds(c *check.C) { c.Assert(err, checker.IsNil) c.Assert(res.StatusCode, checker.Equals, http.StatusCreated) - bindPath := RandomTmpDirPath("test", testEnv.DaemonPlatform()) + bindPath := RandomTmpDirPath("test", testEnv.OSType) config = map[string]interface{}{ "Binds": []string{bindPath + ":" + path}, } @@ -76,8 +76,8 @@ func (s *DockerSuite) TestDeprecatedContainerAPIStartDupVolumeBinds(c *check.C) c.Assert(err, checker.IsNil) c.Assert(res.StatusCode, checker.Equals, http.StatusCreated) - bindPath1 := RandomTmpDirPath("test1", testEnv.DaemonPlatform()) - bindPath2 := RandomTmpDirPath("test2", testEnv.DaemonPlatform()) + bindPath1 := RandomTmpDirPath("test1", testEnv.OSType) + bindPath2 := RandomTmpDirPath("test2", testEnv.OSType) config = map[string]interface{}{ "Binds": []string{bindPath1 + ":/tmp", bindPath2 + ":/tmp"}, diff --git a/components/engine/integration-cli/environment/environment.go b/components/engine/integration-cli/environment/environment.go index 11eca5879a..7fd6743c71 100644 --- a/components/engine/integration-cli/environment/environment.go +++ b/components/engine/integration-cli/environment/environment.go @@ -48,12 +48,3 @@ func New() (*Execution, error) { dockerBinary: dockerBinary, }, nil } - -// DaemonPlatform is held globally so that tests can make intelligent -// decisions on how to configure themselves according to the platform -// of the daemon. This is initialized in docker_utils by sending -// a version call to the daemon and examining the response header. -// Deprecated: use Execution.OSType -func (e *Execution) DaemonPlatform() string { - return e.OSType -} diff --git a/components/engine/integration-cli/fixtures_linux_daemon_test.go b/components/engine/integration-cli/fixtures_linux_daemon_test.go index 6ac4511215..e1cad449f4 100644 --- a/components/engine/integration-cli/fixtures_linux_daemon_test.go +++ b/components/engine/integration-cli/fixtures_linux_daemon_test.go @@ -38,7 +38,7 @@ func ensureSyscallTest(c *check.C) { // if no match, must build in docker, which is significantly slower // (slower mostly because of the vfs graphdriver) - if testEnv.DaemonPlatform() != runtime.GOOS { + if testEnv.OSType != runtime.GOOS { ensureSyscallTestBuild(c) return } @@ -93,7 +93,7 @@ func ensureSyscallTestBuild(c *check.C) { func ensureNNPTest(c *check.C) { defer testEnv.ProtectImage(c, "nnp-test:latest") - if testEnv.DaemonPlatform() != runtime.GOOS { + if testEnv.OSType != runtime.GOOS { ensureNNPTestBuild(c) return } diff --git a/components/engine/integration-cli/test_vars_test.go b/components/engine/integration-cli/test_vars_test.go index 139279ccd1..82ec58e9e7 100644 --- a/components/engine/integration-cli/test_vars_test.go +++ b/components/engine/integration-cli/test_vars_test.go @@ -4,7 +4,7 @@ package main // the command is for a sleeping container based on the daemon platform. // The Windows busybox image does not have a `top` command. func sleepCommandForDaemonPlatform() []string { - if testEnv.DaemonPlatform() == "windows" { + if testEnv.OSType == "windows" { return []string{"sleep", "240"} } return []string{"top"} diff --git a/components/engine/integration-cli/utils_test.go b/components/engine/integration-cli/utils_test.go index 1146e1b2fc..6c18c222d2 100644 --- a/components/engine/integration-cli/utils_test.go +++ b/components/engine/integration-cli/utils_test.go @@ -14,7 +14,7 @@ import ( ) func getPrefixAndSlashFromDaemonPlatform() (prefix, slash string) { - if testEnv.DaemonPlatform() == "windows" { + if testEnv.OSType == "windows" { return "c:", `\` } return "", "/" From 72b954bd11f060fe079b1a4b681a9d91c6b5bf88 Mon Sep 17 00:00:00 2001 From: Yong Tang Date: Mon, 15 Jan 2018 17:26:43 +0000 Subject: [PATCH 11/12] Rename FindUniqueNetwork to FindNetwork This fix is a follow up to 30397, with `FindUniqueNetwork` changed to `FindNetwork` based on the review feedback. Signed-off-by: Yong Tang Upstream-commit: ccc2ed01894a1950eaf47db2ad0860ad87cd78d1 Component: engine --- .../api/server/router/network/backend.go | 2 +- .../server/router/network/network_routes.go | 4 ++-- .../engine/daemon/cluster/executor/backend.go | 2 +- .../cluster/executor/container/container.go | 2 +- components/engine/daemon/cluster/networks.go | 2 +- .../engine/daemon/container_operations.go | 18 +++++++++--------- .../daemon/container_operations_windows.go | 2 +- components/engine/daemon/daemon_test.go | 2 +- components/engine/daemon/network.go | 4 ++-- components/engine/daemon/oci_windows.go | 2 +- 10 files changed, 20 insertions(+), 20 deletions(-) diff --git a/components/engine/api/server/router/network/backend.go b/components/engine/api/server/router/network/backend.go index 8ae6a078b7..186ae8fc71 100644 --- a/components/engine/api/server/router/network/backend.go +++ b/components/engine/api/server/router/network/backend.go @@ -12,7 +12,7 @@ import ( // Backend is all the methods that need to be implemented // to provide network specific functionality. type Backend interface { - FindUniqueNetwork(idName string) (libnetwork.Network, error) + FindNetwork(idName string) (libnetwork.Network, error) GetNetworks() []libnetwork.Network CreateNetwork(nc types.NetworkCreateRequest) (*types.NetworkCreateResponse, error) ConnectContainerToNetwork(containerName, networkName string, endpointConfig *network.EndpointSettings) error diff --git a/components/engine/api/server/router/network/network_routes.go b/components/engine/api/server/router/network/network_routes.go index f124813439..56874dc0b5 100644 --- a/components/engine/api/server/router/network/network_routes.go +++ b/components/engine/api/server/router/network/network_routes.go @@ -290,7 +290,7 @@ func (n *networkRouter) postNetworkConnect(ctx context.Context, w http.ResponseW } // Always make sure there is no ambiguity with respect to the network ID/name - nw, err := n.backend.FindUniqueNetwork(vars["id"]) + nw, err := n.backend.FindNetwork(vars["id"]) if err != nil { return err } @@ -530,7 +530,7 @@ func (n *networkRouter) postNetworksPrune(ctx context.Context, w http.ResponseWr } // findUniqueNetwork will search network across different scopes (both local and swarm). -// NOTE: This findUniqueNetwork is different from FindUniqueNetwork in the daemon. +// NOTE: This findUniqueNetwork is different from FindNetwork in the daemon. // In case multiple networks have duplicate names, return error. // First find based on full ID, return immediately once one is found. // If a network appears both in swarm and local, assume it is in local first diff --git a/components/engine/daemon/cluster/executor/backend.go b/components/engine/daemon/cluster/executor/backend.go index ed8f50467d..9a0f1cb954 100644 --- a/components/engine/daemon/cluster/executor/backend.go +++ b/components/engine/daemon/cluster/executor/backend.go @@ -28,7 +28,7 @@ import ( type Backend interface { CreateManagedNetwork(clustertypes.NetworkCreateRequest) error DeleteManagedNetwork(networkID string) error - FindUniqueNetwork(idName string) (libnetwork.Network, error) + FindNetwork(idName string) (libnetwork.Network, error) SetupIngress(clustertypes.NetworkCreateRequest, string) (<-chan struct{}, error) ReleaseIngress() (<-chan struct{}, error) PullImage(ctx context.Context, image, tag, platform string, metaHeaders map[string][]string, authConfig *types.AuthConfig, outStream io.Writer) error diff --git a/components/engine/daemon/cluster/executor/container/container.go b/components/engine/daemon/cluster/executor/container/container.go index ad4ade0713..2ebc6a2d73 100644 --- a/components/engine/daemon/cluster/executor/container/container.go +++ b/components/engine/daemon/cluster/executor/container/container.go @@ -507,7 +507,7 @@ func getEndpointConfig(na *api.NetworkAttachment, b executorpkg.Backend) *networ DriverOpts: na.DriverAttachmentOpts, } if v, ok := na.Network.Spec.Annotations.Labels["com.docker.swarm.predefined"]; ok && v == "true" { - if ln, err := b.FindUniqueNetwork(na.Network.Spec.Annotations.Name); err == nil { + if ln, err := b.FindNetwork(na.Network.Spec.Annotations.Name); err == nil { n.NetworkID = ln.ID() } } diff --git a/components/engine/daemon/cluster/networks.go b/components/engine/daemon/cluster/networks.go index 3b01ea4efb..04582eb31e 100644 --- a/components/engine/daemon/cluster/networks.go +++ b/components/engine/daemon/cluster/networks.go @@ -292,7 +292,7 @@ func (c *Cluster) populateNetworkID(ctx context.Context, client swarmapi.Control for i, n := range networks { apiNetwork, err := getNetwork(ctx, client, n.Target) if err != nil { - ln, _ := c.config.Backend.FindUniqueNetwork(n.Target) + ln, _ := c.config.Backend.FindNetwork(n.Target) if ln != nil && runconfig.IsPreDefinedNetwork(ln.Name()) { // Need to retrieve the corresponding predefined swarm network // and use its id for the request. diff --git a/components/engine/daemon/container_operations.go b/components/engine/daemon/container_operations.go index 355d5496ea..fc29740e21 100644 --- a/components/engine/daemon/container_operations.go +++ b/components/engine/daemon/container_operations.go @@ -252,7 +252,7 @@ func (daemon *Daemon) updateNetworkSettings(container *container.Container, n li } for s, v := range container.NetworkSettings.Networks { - sn, err := daemon.FindUniqueNetwork(getNetworkID(s, v.EndpointSettings)) + sn, err := daemon.FindNetwork(getNetworkID(s, v.EndpointSettings)) if err != nil { continue } @@ -309,7 +309,7 @@ func (daemon *Daemon) updateNetwork(container *container.Container) error { // Find if container is connected to the default bridge network var n libnetwork.Network for name, v := range container.NetworkSettings.Networks { - sn, err := daemon.FindUniqueNetwork(getNetworkID(name, v.EndpointSettings)) + sn, err := daemon.FindNetwork(getNetworkID(name, v.EndpointSettings)) if err != nil { continue } @@ -339,7 +339,7 @@ func (daemon *Daemon) updateNetwork(container *container.Container) error { } func (daemon *Daemon) findAndAttachNetwork(container *container.Container, idOrName string, epConfig *networktypes.EndpointSettings) (libnetwork.Network, *networktypes.NetworkingConfig, error) { - n, err := daemon.FindUniqueNetwork(getNetworkID(idOrName, epConfig)) + n, err := daemon.FindNetwork(getNetworkID(idOrName, epConfig)) if err != nil { // We should always be able to find the network for a // managed container. @@ -383,7 +383,7 @@ func (daemon *Daemon) findAndAttachNetwork(container *container.Container, idOrN } } - n, err = daemon.FindUniqueNetwork(getNetworkID(idOrName, epConfig)) + n, err = daemon.FindNetwork(getNetworkID(idOrName, epConfig)) if err != nil { if daemon.clusterProvider != nil { if err := daemon.clusterProvider.DetachNetwork(getNetworkID(idOrName, epConfig), container.ID); err != nil { @@ -437,7 +437,7 @@ func (daemon *Daemon) updateContainerNetworkSettings(container *container.Contai if mode.IsUserDefined() { var err error - n, err = daemon.FindUniqueNetwork(networkName) + n, err = daemon.FindNetwork(networkName) if err == nil { networkName = n.Name() } @@ -797,7 +797,7 @@ func (daemon *Daemon) connectToNetwork(container *container.Container, idOrName // ForceEndpointDelete deletes an endpoint from a network forcefully func (daemon *Daemon) ForceEndpointDelete(name string, networkName string) error { - n, err := daemon.FindUniqueNetwork(networkName) + n, err := daemon.FindNetwork(networkName) if err != nil { return err } @@ -949,7 +949,7 @@ func (daemon *Daemon) releaseNetwork(container *container.Container) { var networks []libnetwork.Network for n, epSettings := range settings { - if nw, err := daemon.FindUniqueNetwork(getNetworkID(n, epSettings.EndpointSettings)); err == nil { + if nw, err := daemon.FindNetwork(getNetworkID(n, epSettings.EndpointSettings)); err == nil { networks = append(networks, nw) } @@ -993,7 +993,7 @@ func (daemon *Daemon) ConnectToNetwork(container *container.Container, idOrName return errRemovalContainer(container.ID) } - n, err := daemon.FindUniqueNetwork(idOrName) + n, err := daemon.FindNetwork(idOrName) if err == nil && n != nil { if err := daemon.updateNetworkConfig(container, n, endpointConfig, true); err != nil { return err @@ -1016,7 +1016,7 @@ func (daemon *Daemon) ConnectToNetwork(container *container.Container, idOrName // DisconnectFromNetwork disconnects container from network n. func (daemon *Daemon) DisconnectFromNetwork(container *container.Container, networkName string, force bool) error { - n, err := daemon.FindUniqueNetwork(networkName) + n, err := daemon.FindNetwork(networkName) container.Lock() defer container.Unlock() diff --git a/components/engine/daemon/container_operations_windows.go b/components/engine/daemon/container_operations_windows.go index c443d2908d..51762a2441 100644 --- a/components/engine/daemon/container_operations_windows.go +++ b/components/engine/daemon/container_operations_windows.go @@ -170,7 +170,7 @@ func (daemon *Daemon) initializeNetworkingPaths(container *container.Container, if nc.NetworkSettings != nil { for n := range nc.NetworkSettings.Networks { - sn, err := daemon.FindUniqueNetwork(n) + sn, err := daemon.FindNetwork(n) if err != nil { continue } diff --git a/components/engine/daemon/daemon_test.go b/components/engine/daemon/daemon_test.go index 44bf3414c0..b70e00e7d2 100644 --- a/components/engine/daemon/daemon_test.go +++ b/components/engine/daemon/daemon_test.go @@ -317,7 +317,7 @@ func TestValidateContainerIsolation(t *testing.T) { func TestFindNetworkErrorType(t *testing.T) { d := Daemon{} - _, err := d.FindUniqueNetwork("fakeNet") + _, err := d.FindNetwork("fakeNet") _, ok := errors.Cause(err).(libnetwork.ErrNoSuchNetwork) if !errdefs.IsNotFound(err) || !ok { assert.Fail(t, "The FindNetwork method MUST always return an error that implements the NotFound interface and is ErrNoSuchNetwork") diff --git a/components/engine/daemon/network.go b/components/engine/daemon/network.go index cf3d015b80..fe2acc786d 100644 --- a/components/engine/daemon/network.go +++ b/components/engine/daemon/network.go @@ -29,12 +29,12 @@ func (daemon *Daemon) NetworkControllerEnabled() bool { return daemon.netController != nil } -// FindUniqueNetwork returns a network based on: +// FindNetwork returns a network based on: // 1. Full ID // 2. Full Name // 3. Partial ID // as long as there is no ambiguity -func (daemon *Daemon) FindUniqueNetwork(term string) (libnetwork.Network, error) { +func (daemon *Daemon) FindNetwork(term string) (libnetwork.Network, error) { listByFullName := []libnetwork.Network{} listByPartialID := []libnetwork.Network{} for _, nw := range daemon.GetNetworks() { diff --git a/components/engine/daemon/oci_windows.go b/components/engine/daemon/oci_windows.go index d85cd269d9..c7c94f327a 100644 --- a/components/engine/daemon/oci_windows.go +++ b/components/engine/daemon/oci_windows.go @@ -159,7 +159,7 @@ func (daemon *Daemon) createSpec(c *container.Container) (*specs.Spec, error) { gwHNSID := "" if c.NetworkSettings != nil { for n := range c.NetworkSettings.Networks { - sn, err := daemon.FindUniqueNetwork(n) + sn, err := daemon.FindNetwork(n) if err != nil { continue } From 69f6e83862deb5be6af3ec2d41e821f12eb870b5 Mon Sep 17 00:00:00 2001 From: Yong Tang Date: Mon, 15 Jan 2018 21:35:30 +0000 Subject: [PATCH 12/12] Fix golint error PR #36011 fixed almost all of the golint issues though there is still one golint error: https://goreportcard.com/report/github.com/docker/docker#golint ``` Golint is a linter for Go source code. docker/daemon/reload.go Line 64: warning: redundant if ...; err != nil check, just return error instead. (golint) ``` This fix fixes the last one. Signed-off-by: Yong Tang Upstream-commit: e02a3d9f5ba3bd9fa7f21596a6ee784bb58053f9 Component: engine --- components/engine/daemon/reload.go | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/components/engine/daemon/reload.go b/components/engine/daemon/reload.go index a20eb688f4..0bbda29234 100644 --- a/components/engine/daemon/reload.go +++ b/components/engine/daemon/reload.go @@ -61,10 +61,7 @@ func (daemon *Daemon) Reload(conf *config.Config) (err error) { if err := daemon.reloadLiveRestore(conf, attributes); err != nil { return err } - if err := daemon.reloadNetworkDiagnosticPort(conf, attributes); err != nil { - return err - } - return nil + return daemon.reloadNetworkDiagnosticPort(conf, attributes) } // reloadDebug updates configuration with Debug option