diff --git a/api/client/container/attach.go b/api/client/container/attach.go index a08065cc5c..fb3a715506 100644 --- a/api/client/container/attach.go +++ b/api/client/container/attach.go @@ -9,9 +9,9 @@ import ( "github.com/Sirupsen/logrus" "github.com/docker/docker/api/client" + "github.com/docker/docker/api/types" "github.com/docker/docker/cli" "github.com/docker/docker/pkg/signal" - "github.com/docker/engine-api/types" "github.com/spf13/cobra" ) diff --git a/api/client/container/commit.go b/api/client/container/commit.go index c6e5c1b582..1fad18cac9 100644 --- a/api/client/container/commit.go +++ b/api/client/container/commit.go @@ -6,9 +6,9 @@ import ( "golang.org/x/net/context" "github.com/docker/docker/api/client" + "github.com/docker/docker/api/types" "github.com/docker/docker/cli" dockeropts "github.com/docker/docker/opts" - "github.com/docker/engine-api/types" "github.com/spf13/cobra" ) diff --git a/api/client/container/cp.go b/api/client/container/cp.go index a0031c8b00..653b828f16 100644 --- a/api/client/container/cp.go +++ b/api/client/container/cp.go @@ -10,10 +10,10 @@ import ( "golang.org/x/net/context" "github.com/docker/docker/api/client" + "github.com/docker/docker/api/types" "github.com/docker/docker/cli" "github.com/docker/docker/pkg/archive" "github.com/docker/docker/pkg/system" - "github.com/docker/engine-api/types" "github.com/spf13/cobra" ) diff --git a/api/client/container/create.go b/api/client/container/create.go index ef9b8cd7f6..cbfe36b5e2 100644 --- a/api/client/container/create.go +++ b/api/client/container/create.go @@ -11,13 +11,13 @@ import ( "github.com/docker/docker/cli" "github.com/docker/docker/pkg/jsonmessage" // FIXME migrate to docker/distribution/reference + "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/container" + networktypes "github.com/docker/docker/api/types/network" "github.com/docker/docker/reference" "github.com/docker/docker/registry" runconfigopts "github.com/docker/docker/runconfig/opts" apiclient "github.com/docker/engine-api/client" - "github.com/docker/engine-api/types" - "github.com/docker/engine-api/types/container" - networktypes "github.com/docker/engine-api/types/network" "github.com/spf13/cobra" "github.com/spf13/pflag" ) diff --git a/api/client/container/exec.go b/api/client/container/exec.go index d74ae4ac38..f20b9f366e 100644 --- a/api/client/container/exec.go +++ b/api/client/container/exec.go @@ -8,9 +8,9 @@ import ( "github.com/Sirupsen/logrus" "github.com/docker/docker/api/client" + "github.com/docker/docker/api/types" "github.com/docker/docker/cli" "github.com/docker/docker/pkg/promise" - "github.com/docker/engine-api/types" "github.com/spf13/cobra" ) diff --git a/api/client/container/exec_test.go b/api/client/container/exec_test.go index 00d4e503c8..2e122e7386 100644 --- a/api/client/container/exec_test.go +++ b/api/client/container/exec_test.go @@ -3,7 +3,7 @@ package container import ( "testing" - "github.com/docker/engine-api/types" + "github.com/docker/docker/api/types" ) type arguments struct { diff --git a/api/client/container/logs.go b/api/client/container/logs.go index 593ec60d29..a7b6241c4b 100644 --- a/api/client/container/logs.go +++ b/api/client/container/logs.go @@ -7,9 +7,9 @@ import ( "golang.org/x/net/context" "github.com/docker/docker/api/client" + "github.com/docker/docker/api/types" "github.com/docker/docker/cli" "github.com/docker/docker/pkg/stdcopy" - "github.com/docker/engine-api/types" "github.com/spf13/cobra" ) diff --git a/api/client/container/ps.go b/api/client/container/ps.go index a4bd5310bb..700ba365b6 100644 --- a/api/client/container/ps.go +++ b/api/client/container/ps.go @@ -5,9 +5,9 @@ import ( "github.com/docker/docker/api/client" "github.com/docker/docker/api/client/formatter" + "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/filters" "github.com/docker/docker/cli" - "github.com/docker/engine-api/types" - "github.com/docker/engine-api/types/filters" "io/ioutil" diff --git a/api/client/container/rm.go b/api/client/container/rm.go index 2ccc6c21ff..e45994f9ef 100644 --- a/api/client/container/rm.go +++ b/api/client/container/rm.go @@ -7,8 +7,8 @@ import ( "golang.org/x/net/context" "github.com/docker/docker/api/client" + "github.com/docker/docker/api/types" "github.com/docker/docker/cli" - "github.com/docker/engine-api/types" "github.com/spf13/cobra" ) diff --git a/api/client/container/run.go b/api/client/container/run.go index 652739f5df..154683819d 100644 --- a/api/client/container/run.go +++ b/api/client/container/run.go @@ -13,12 +13,12 @@ import ( "github.com/Sirupsen/logrus" "github.com/docker/docker/api/client" + "github.com/docker/docker/api/types" "github.com/docker/docker/cli" opttypes "github.com/docker/docker/opts" "github.com/docker/docker/pkg/promise" "github.com/docker/docker/pkg/signal" runconfigopts "github.com/docker/docker/runconfig/opts" - "github.com/docker/engine-api/types" "github.com/docker/libnetwork/resolvconf/dns" "github.com/spf13/cobra" "github.com/spf13/pflag" diff --git a/api/client/container/start.go b/api/client/container/start.go index 8ff2ab27c5..db0e948128 100644 --- a/api/client/container/start.go +++ b/api/client/container/start.go @@ -9,10 +9,10 @@ import ( "golang.org/x/net/context" "github.com/docker/docker/api/client" + "github.com/docker/docker/api/types" "github.com/docker/docker/cli" "github.com/docker/docker/pkg/promise" "github.com/docker/docker/pkg/signal" - "github.com/docker/engine-api/types" "github.com/spf13/cobra" ) diff --git a/api/client/container/stats.go b/api/client/container/stats.go index 404ddfb349..093b81fcad 100644 --- a/api/client/container/stats.go +++ b/api/client/container/stats.go @@ -13,10 +13,10 @@ import ( "github.com/Sirupsen/logrus" "github.com/docker/docker/api/client" "github.com/docker/docker/api/client/system" + "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/events" + "github.com/docker/docker/api/types/filters" "github.com/docker/docker/cli" - "github.com/docker/engine-api/types" - "github.com/docker/engine-api/types/events" - "github.com/docker/engine-api/types/filters" "github.com/spf13/cobra" ) diff --git a/api/client/container/stats_helpers.go b/api/client/container/stats_helpers.go index 336ad14760..8c2fa56e37 100644 --- a/api/client/container/stats_helpers.go +++ b/api/client/container/stats_helpers.go @@ -10,8 +10,8 @@ import ( "time" "github.com/Sirupsen/logrus" + "github.com/docker/docker/api/types" "github.com/docker/engine-api/client" - "github.com/docker/engine-api/types" "github.com/docker/go-units" "golang.org/x/net/context" ) diff --git a/api/client/container/stats_unit_test.go b/api/client/container/stats_unit_test.go index 83f24bb295..6f6a468068 100644 --- a/api/client/container/stats_unit_test.go +++ b/api/client/container/stats_unit_test.go @@ -4,7 +4,7 @@ import ( "bytes" "testing" - "github.com/docker/engine-api/types" + "github.com/docker/docker/api/types" ) func TestDisplay(t *testing.T) { diff --git a/api/client/container/update.go b/api/client/container/update.go index 64c1210147..ee3426db2c 100644 --- a/api/client/container/update.go +++ b/api/client/container/update.go @@ -7,9 +7,9 @@ import ( "golang.org/x/net/context" "github.com/docker/docker/api/client" + containertypes "github.com/docker/docker/api/types/container" "github.com/docker/docker/cli" runconfigopts "github.com/docker/docker/runconfig/opts" - containertypes "github.com/docker/engine-api/types/container" "github.com/docker/go-units" "github.com/spf13/cobra" ) diff --git a/api/client/container/utils.go b/api/client/container/utils.go index 5a589ff680..4b061f7338 100644 --- a/api/client/container/utils.go +++ b/api/client/container/utils.go @@ -9,10 +9,10 @@ import ( "github.com/Sirupsen/logrus" "github.com/docker/docker/api/client" "github.com/docker/docker/api/client/system" + "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/events" + "github.com/docker/docker/api/types/filters" clientapi "github.com/docker/engine-api/client" - "github.com/docker/engine-api/types" - "github.com/docker/engine-api/types/events" - "github.com/docker/engine-api/types/filters" ) func waitExitOrRemoved(dockerCli *client.DockerCli, ctx context.Context, containerID string, waitRemove bool) (chan int, error) { diff --git a/api/client/credentials.go b/api/client/credentials.go index 9f5e80c7a9..b9aa3ebda4 100644 --- a/api/client/credentials.go +++ b/api/client/credentials.go @@ -1,9 +1,9 @@ package client import ( + "github.com/docker/docker/api/types" "github.com/docker/docker/cliconfig/configfile" "github.com/docker/docker/cliconfig/credentials" - "github.com/docker/engine-api/types" ) // GetCredentials loads the user credentials from a credentials store. diff --git a/api/client/formatter/container.go b/api/client/formatter/container.go index 5b96f607b3..f1c985791b 100644 --- a/api/client/formatter/container.go +++ b/api/client/formatter/container.go @@ -8,9 +8,9 @@ import ( "time" "github.com/docker/docker/api" + "github.com/docker/docker/api/types" "github.com/docker/docker/pkg/stringid" "github.com/docker/docker/pkg/stringutils" - "github.com/docker/engine-api/types" "github.com/docker/go-units" ) diff --git a/api/client/formatter/container_test.go b/api/client/formatter/container_test.go index 4776123be4..cc7b916242 100644 --- a/api/client/formatter/container_test.go +++ b/api/client/formatter/container_test.go @@ -7,8 +7,8 @@ import ( "testing" "time" + "github.com/docker/docker/api/types" "github.com/docker/docker/pkg/stringid" - "github.com/docker/engine-api/types" ) func TestContainerPsContext(t *testing.T) { diff --git a/api/client/formatter/image.go b/api/client/formatter/image.go index 04cd4b75fd..0ffcfaf728 100644 --- a/api/client/formatter/image.go +++ b/api/client/formatter/image.go @@ -5,9 +5,9 @@ import ( "strings" "time" + "github.com/docker/docker/api/types" "github.com/docker/docker/pkg/stringid" "github.com/docker/docker/reference" - "github.com/docker/engine-api/types" "github.com/docker/go-units" ) diff --git a/api/client/formatter/image_test.go b/api/client/formatter/image_test.go index 64fda18bf5..7c87f393fc 100644 --- a/api/client/formatter/image_test.go +++ b/api/client/formatter/image_test.go @@ -7,8 +7,8 @@ import ( "testing" "time" + "github.com/docker/docker/api/types" "github.com/docker/docker/pkg/stringid" - "github.com/docker/engine-api/types" ) func TestImageContext(t *testing.T) { diff --git a/api/client/formatter/network.go b/api/client/formatter/network.go index 9bd3d3b180..6eb820879e 100644 --- a/api/client/formatter/network.go +++ b/api/client/formatter/network.go @@ -5,8 +5,8 @@ import ( "fmt" "strings" + "github.com/docker/docker/api/types" "github.com/docker/docker/pkg/stringid" - "github.com/docker/engine-api/types" ) const ( diff --git a/api/client/formatter/network_test.go b/api/client/formatter/network_test.go index b760bfab1d..b5f826af6d 100644 --- a/api/client/formatter/network_test.go +++ b/api/client/formatter/network_test.go @@ -5,8 +5,8 @@ import ( "strings" "testing" + "github.com/docker/docker/api/types" "github.com/docker/docker/pkg/stringid" - "github.com/docker/engine-api/types" ) func TestNetworkContext(t *testing.T) { diff --git a/api/client/formatter/volume.go b/api/client/formatter/volume.go index 00ebada364..ba24b06a4f 100644 --- a/api/client/formatter/volume.go +++ b/api/client/formatter/volume.go @@ -5,7 +5,7 @@ import ( "fmt" "strings" - "github.com/docker/engine-api/types" + "github.com/docker/docker/api/types" ) const ( diff --git a/api/client/formatter/volume_test.go b/api/client/formatter/volume_test.go index 5562446a22..2295eff3ef 100644 --- a/api/client/formatter/volume_test.go +++ b/api/client/formatter/volume_test.go @@ -5,8 +5,8 @@ import ( "strings" "testing" + "github.com/docker/docker/api/types" "github.com/docker/docker/pkg/stringid" - "github.com/docker/engine-api/types" ) func TestVolumeContext(t *testing.T) { diff --git a/api/client/hijack.go b/api/client/hijack.go index 294078e44c..c7f7c3a0c0 100644 --- a/api/client/hijack.go +++ b/api/client/hijack.go @@ -7,8 +7,8 @@ import ( "golang.org/x/net/context" "github.com/Sirupsen/logrus" + "github.com/docker/docker/api/types" "github.com/docker/docker/pkg/stdcopy" - "github.com/docker/engine-api/types" ) // HoldHijackedConnection handles copying input to and output from streams to the diff --git a/api/client/idresolver/idresolver.go b/api/client/idresolver/idresolver.go index 9b38d151bb..6d39252002 100644 --- a/api/client/idresolver/idresolver.go +++ b/api/client/idresolver/idresolver.go @@ -5,8 +5,8 @@ import ( "golang.org/x/net/context" + "github.com/docker/docker/api/types/swarm" "github.com/docker/engine-api/client" - "github.com/docker/engine-api/types/swarm" ) // IDResolver provides ID to Name resolution. diff --git a/api/client/image/build.go b/api/client/image/build.go index b1a227c099..df89e7df1c 100644 --- a/api/client/image/build.go +++ b/api/client/image/build.go @@ -15,6 +15,8 @@ import ( "github.com/docker/docker/api" "github.com/docker/docker/api/client" + "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/container" "github.com/docker/docker/builder" "github.com/docker/docker/builder/dockerignore" "github.com/docker/docker/cli" @@ -27,8 +29,6 @@ import ( "github.com/docker/docker/pkg/urlutil" "github.com/docker/docker/reference" runconfigopts "github.com/docker/docker/runconfig/opts" - "github.com/docker/engine-api/types" - "github.com/docker/engine-api/types/container" "github.com/docker/go-units" "github.com/spf13/cobra" ) diff --git a/api/client/image/images.go b/api/client/image/images.go index a357123386..6b864a8acc 100644 --- a/api/client/image/images.go +++ b/api/client/image/images.go @@ -5,9 +5,9 @@ import ( "github.com/docker/docker/api/client" "github.com/docker/docker/api/client/formatter" + "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/filters" "github.com/docker/docker/cli" - "github.com/docker/engine-api/types" - "github.com/docker/engine-api/types/filters" "github.com/spf13/cobra" ) diff --git a/api/client/image/import.go b/api/client/image/import.go index 07ff49a9d2..2ca775a4ff 100644 --- a/api/client/image/import.go +++ b/api/client/image/import.go @@ -7,11 +7,11 @@ import ( "golang.org/x/net/context" "github.com/docker/docker/api/client" + "github.com/docker/docker/api/types" "github.com/docker/docker/cli" dockeropts "github.com/docker/docker/opts" "github.com/docker/docker/pkg/jsonmessage" "github.com/docker/docker/pkg/urlutil" - "github.com/docker/engine-api/types" "github.com/spf13/cobra" ) diff --git a/api/client/image/remove.go b/api/client/image/remove.go index bb2ba8a9be..04826a2d64 100644 --- a/api/client/image/remove.go +++ b/api/client/image/remove.go @@ -7,8 +7,8 @@ import ( "golang.org/x/net/context" "github.com/docker/docker/api/client" + "github.com/docker/docker/api/types" "github.com/docker/docker/cli" - "github.com/docker/engine-api/types" "github.com/spf13/cobra" ) diff --git a/api/client/image/search.go b/api/client/image/search.go index 22825b50af..b4b800ef0f 100644 --- a/api/client/image/search.go +++ b/api/client/image/search.go @@ -9,12 +9,12 @@ import ( "golang.org/x/net/context" "github.com/docker/docker/api/client" + "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/filters" + registrytypes "github.com/docker/docker/api/types/registry" "github.com/docker/docker/cli" "github.com/docker/docker/pkg/stringutils" "github.com/docker/docker/registry" - "github.com/docker/engine-api/types" - "github.com/docker/engine-api/types/filters" - registrytypes "github.com/docker/engine-api/types/registry" "github.com/spf13/cobra" ) diff --git a/api/client/network/connect.go b/api/client/network/connect.go index 57a7299c14..66f761e80d 100644 --- a/api/client/network/connect.go +++ b/api/client/network/connect.go @@ -4,10 +4,10 @@ import ( "golang.org/x/net/context" "github.com/docker/docker/api/client" + "github.com/docker/docker/api/types/network" "github.com/docker/docker/cli" "github.com/docker/docker/opts" runconfigopts "github.com/docker/docker/runconfig/opts" - "github.com/docker/engine-api/types/network" "github.com/spf13/cobra" ) diff --git a/api/client/network/create.go b/api/client/network/create.go index 29def8e66c..9bec170a7c 100644 --- a/api/client/network/create.go +++ b/api/client/network/create.go @@ -8,11 +8,11 @@ import ( "golang.org/x/net/context" "github.com/docker/docker/api/client" + "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/network" "github.com/docker/docker/cli" "github.com/docker/docker/opts" runconfigopts "github.com/docker/docker/runconfig/opts" - "github.com/docker/engine-api/types" - "github.com/docker/engine-api/types/network" "github.com/spf13/cobra" ) diff --git a/api/client/network/list.go b/api/client/network/list.go index c332a801d8..54ed879e45 100644 --- a/api/client/network/list.go +++ b/api/client/network/list.go @@ -7,9 +7,9 @@ import ( "github.com/docker/docker/api/client" "github.com/docker/docker/api/client/formatter" + "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/filters" "github.com/docker/docker/cli" - "github.com/docker/engine-api/types" - "github.com/docker/engine-api/types/filters" "github.com/spf13/cobra" ) diff --git a/api/client/node/demote.go b/api/client/node/demote.go index 6acf5c3eb2..900648cfef 100644 --- a/api/client/node/demote.go +++ b/api/client/node/demote.go @@ -4,8 +4,8 @@ import ( "fmt" "github.com/docker/docker/api/client" + "github.com/docker/docker/api/types/swarm" "github.com/docker/docker/cli" - "github.com/docker/engine-api/types/swarm" "github.com/spf13/cobra" ) diff --git a/api/client/node/inspect.go b/api/client/node/inspect.go index 6c2c82410b..2eed901ce2 100644 --- a/api/client/node/inspect.go +++ b/api/client/node/inspect.go @@ -8,9 +8,9 @@ import ( "github.com/docker/docker/api/client" "github.com/docker/docker/api/client/inspect" + "github.com/docker/docker/api/types/swarm" "github.com/docker/docker/cli" "github.com/docker/docker/pkg/ioutils" - "github.com/docker/engine-api/types/swarm" "github.com/docker/go-units" "github.com/spf13/cobra" "golang.org/x/net/context" diff --git a/api/client/node/list.go b/api/client/node/list.go index 55929adabe..02c1727606 100644 --- a/api/client/node/list.go +++ b/api/client/node/list.go @@ -8,10 +8,10 @@ import ( "golang.org/x/net/context" "github.com/docker/docker/api/client" + "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/swarm" "github.com/docker/docker/cli" "github.com/docker/docker/opts" - "github.com/docker/engine-api/types" - "github.com/docker/engine-api/types/swarm" "github.com/spf13/cobra" ) diff --git a/api/client/node/opts.go b/api/client/node/opts.go index f387bafc47..7e6c55d487 100644 --- a/api/client/node/opts.go +++ b/api/client/node/opts.go @@ -4,9 +4,9 @@ import ( "fmt" "strings" + "github.com/docker/docker/api/types/swarm" "github.com/docker/docker/opts" runconfigopts "github.com/docker/docker/runconfig/opts" - "github.com/docker/engine-api/types/swarm" ) type nodeOptions struct { diff --git a/api/client/node/promote.go b/api/client/node/promote.go index 9bfc4a277f..19c35e4c64 100644 --- a/api/client/node/promote.go +++ b/api/client/node/promote.go @@ -4,8 +4,8 @@ import ( "fmt" "github.com/docker/docker/api/client" + "github.com/docker/docker/api/types/swarm" "github.com/docker/docker/cli" - "github.com/docker/engine-api/types/swarm" "github.com/spf13/cobra" ) diff --git a/api/client/node/ps.go b/api/client/node/ps.go index 1913cbcf6d..4565ce70d7 100644 --- a/api/client/node/ps.go +++ b/api/client/node/ps.go @@ -4,9 +4,9 @@ import ( "github.com/docker/docker/api/client" "github.com/docker/docker/api/client/idresolver" "github.com/docker/docker/api/client/task" + "github.com/docker/docker/api/types" "github.com/docker/docker/cli" "github.com/docker/docker/opts" - "github.com/docker/engine-api/types" "github.com/spf13/cobra" "golang.org/x/net/context" ) diff --git a/api/client/node/remove.go b/api/client/node/remove.go index bb54a831e8..18af6a6154 100644 --- a/api/client/node/remove.go +++ b/api/client/node/remove.go @@ -6,8 +6,8 @@ import ( "golang.org/x/net/context" "github.com/docker/docker/api/client" + "github.com/docker/docker/api/types" "github.com/docker/docker/cli" - "github.com/docker/engine-api/types" "github.com/spf13/cobra" ) diff --git a/api/client/node/update.go b/api/client/node/update.go index 9437853ca4..9032250089 100644 --- a/api/client/node/update.go +++ b/api/client/node/update.go @@ -5,10 +5,10 @@ import ( "fmt" "github.com/docker/docker/api/client" + "github.com/docker/docker/api/types/swarm" "github.com/docker/docker/cli" "github.com/docker/docker/opts" runconfigopts "github.com/docker/docker/runconfig/opts" - "github.com/docker/engine-api/types/swarm" "github.com/spf13/cobra" "github.com/spf13/pflag" "golang.org/x/net/context" diff --git a/api/client/plugin/install.go b/api/client/plugin/install.go index bfa3f1f50d..05dc8e8268 100644 --- a/api/client/plugin/install.go +++ b/api/client/plugin/install.go @@ -8,10 +8,10 @@ import ( "strings" "github.com/docker/docker/api/client" + "github.com/docker/docker/api/types" "github.com/docker/docker/cli" "github.com/docker/docker/reference" "github.com/docker/docker/registry" - "github.com/docker/engine-api/types" "github.com/spf13/cobra" "golang.org/x/net/context" ) diff --git a/api/client/plugin/remove.go b/api/client/plugin/remove.go index 4a5d4785ab..3b61374009 100644 --- a/api/client/plugin/remove.go +++ b/api/client/plugin/remove.go @@ -6,9 +6,9 @@ import ( "fmt" "github.com/docker/docker/api/client" + "github.com/docker/docker/api/types" "github.com/docker/docker/cli" "github.com/docker/docker/reference" - "github.com/docker/engine-api/types" "github.com/spf13/cobra" "golang.org/x/net/context" ) diff --git a/api/client/registry.go b/api/client/registry.go index 104d68278d..2fcdf77c53 100644 --- a/api/client/registry.go +++ b/api/client/registry.go @@ -12,11 +12,11 @@ import ( "golang.org/x/net/context" + "github.com/docker/docker/api/types" + registrytypes "github.com/docker/docker/api/types/registry" "github.com/docker/docker/pkg/term" "github.com/docker/docker/reference" "github.com/docker/docker/registry" - "github.com/docker/engine-api/types" - registrytypes "github.com/docker/engine-api/types/registry" ) // ElectAuthServer returns the default registry to use (by asking the daemon) diff --git a/api/client/service/create.go b/api/client/service/create.go index e55b2a4723..740d6dfdd0 100644 --- a/api/client/service/create.go +++ b/api/client/service/create.go @@ -4,8 +4,8 @@ import ( "fmt" "github.com/docker/docker/api/client" + "github.com/docker/docker/api/types" "github.com/docker/docker/cli" - "github.com/docker/engine-api/types" "github.com/spf13/cobra" "golang.org/x/net/context" ) diff --git a/api/client/service/inspect.go b/api/client/service/inspect.go index 0abdf5adb3..5511417337 100644 --- a/api/client/service/inspect.go +++ b/api/client/service/inspect.go @@ -10,10 +10,10 @@ import ( "github.com/docker/docker/api/client" "github.com/docker/docker/api/client/inspect" + "github.com/docker/docker/api/types/swarm" "github.com/docker/docker/cli" "github.com/docker/docker/pkg/ioutils" apiclient "github.com/docker/engine-api/client" - "github.com/docker/engine-api/types/swarm" "github.com/docker/go-units" "github.com/spf13/cobra" ) diff --git a/api/client/service/inspect_test.go b/api/client/service/inspect_test.go index 7d7f03ffc9..0e0f2ae74f 100644 --- a/api/client/service/inspect_test.go +++ b/api/client/service/inspect_test.go @@ -6,7 +6,7 @@ import ( "testing" "time" - "github.com/docker/engine-api/types/swarm" + "github.com/docker/docker/api/types/swarm" ) func TestPrettyPrintWithNoUpdateConfig(t *testing.T) { diff --git a/api/client/service/list.go b/api/client/service/list.go index 95ab067055..625dfc1df0 100644 --- a/api/client/service/list.go +++ b/api/client/service/list.go @@ -7,12 +7,12 @@ import ( "text/tabwriter" "github.com/docker/docker/api/client" + "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/filters" + "github.com/docker/docker/api/types/swarm" "github.com/docker/docker/cli" "github.com/docker/docker/opts" "github.com/docker/docker/pkg/stringid" - "github.com/docker/engine-api/types" - "github.com/docker/engine-api/types/filters" - "github.com/docker/engine-api/types/swarm" "github.com/spf13/cobra" "golang.org/x/net/context" ) diff --git a/api/client/service/opts.go b/api/client/service/opts.go index 9ea334fe97..7151bca4b0 100644 --- a/api/client/service/opts.go +++ b/api/client/service/opts.go @@ -8,10 +8,10 @@ import ( "strings" "time" + mounttypes "github.com/docker/docker/api/types/mount" + "github.com/docker/docker/api/types/swarm" "github.com/docker/docker/opts" runconfigopts "github.com/docker/docker/runconfig/opts" - mounttypes "github.com/docker/engine-api/types/mount" - "github.com/docker/engine-api/types/swarm" "github.com/docker/go-connections/nat" units "github.com/docker/go-units" "github.com/spf13/cobra" diff --git a/api/client/service/opts_test.go b/api/client/service/opts_test.go index d5e2babb68..30e261b8de 100644 --- a/api/client/service/opts_test.go +++ b/api/client/service/opts_test.go @@ -4,8 +4,8 @@ import ( "testing" "time" + mounttypes "github.com/docker/docker/api/types/mount" "github.com/docker/docker/pkg/testutil/assert" - mounttypes "github.com/docker/engine-api/types/mount" ) func TestMemBytesString(t *testing.T) { diff --git a/api/client/service/ps.go b/api/client/service/ps.go index cb93e7e871..e9f3f0ba67 100644 --- a/api/client/service/ps.go +++ b/api/client/service/ps.go @@ -5,9 +5,9 @@ import ( "github.com/docker/docker/api/client/idresolver" "github.com/docker/docker/api/client/node" "github.com/docker/docker/api/client/task" + "github.com/docker/docker/api/types" "github.com/docker/docker/cli" "github.com/docker/docker/opts" - "github.com/docker/engine-api/types" "github.com/spf13/cobra" "golang.org/x/net/context" ) diff --git a/api/client/service/scale.go b/api/client/service/scale.go index 1a3ea80eaf..edd43123a3 100644 --- a/api/client/service/scale.go +++ b/api/client/service/scale.go @@ -8,8 +8,8 @@ import ( "golang.org/x/net/context" "github.com/docker/docker/api/client" + "github.com/docker/docker/api/types" "github.com/docker/docker/cli" - "github.com/docker/engine-api/types" "github.com/spf13/cobra" ) diff --git a/api/client/service/update.go b/api/client/service/update.go index e843b69427..0bc9c25f04 100644 --- a/api/client/service/update.go +++ b/api/client/service/update.go @@ -9,12 +9,12 @@ import ( "golang.org/x/net/context" "github.com/docker/docker/api/client" + "github.com/docker/docker/api/types" + mounttypes "github.com/docker/docker/api/types/mount" + "github.com/docker/docker/api/types/swarm" "github.com/docker/docker/cli" "github.com/docker/docker/opts" runconfigopts "github.com/docker/docker/runconfig/opts" - "github.com/docker/engine-api/types" - mounttypes "github.com/docker/engine-api/types/mount" - "github.com/docker/engine-api/types/swarm" "github.com/docker/go-connections/nat" shlex "github.com/flynn-archive/go-shlex" "github.com/spf13/cobra" diff --git a/api/client/service/update_test.go b/api/client/service/update_test.go index ff3a211111..6e68e977ac 100644 --- a/api/client/service/update_test.go +++ b/api/client/service/update_test.go @@ -4,9 +4,9 @@ import ( "sort" "testing" + mounttypes "github.com/docker/docker/api/types/mount" + "github.com/docker/docker/api/types/swarm" "github.com/docker/docker/pkg/testutil/assert" - mounttypes "github.com/docker/engine-api/types/mount" - "github.com/docker/engine-api/types/swarm" ) func TestUpdateServiceArgs(t *testing.T) { diff --git a/api/client/stack/common.go b/api/client/stack/common.go index 46c9957250..b55c4214fe 100644 --- a/api/client/stack/common.go +++ b/api/client/stack/common.go @@ -5,10 +5,10 @@ package stack import ( "golang.org/x/net/context" + "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/filters" + "github.com/docker/docker/api/types/swarm" "github.com/docker/engine-api/client" - "github.com/docker/engine-api/types" - "github.com/docker/engine-api/types/filters" - "github.com/docker/engine-api/types/swarm" ) const ( diff --git a/api/client/stack/deploy.go b/api/client/stack/deploy.go index 5c3ae0dc84..5c03dc3d31 100644 --- a/api/client/stack/deploy.go +++ b/api/client/stack/deploy.go @@ -10,9 +10,9 @@ import ( "github.com/docker/docker/api/client" "github.com/docker/docker/api/client/bundlefile" + "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/swarm" "github.com/docker/docker/cli" - "github.com/docker/engine-api/types" - "github.com/docker/engine-api/types/swarm" ) const ( diff --git a/api/client/stack/ps.go b/api/client/stack/ps.go index f7f66427ef..9d9458d85f 100644 --- a/api/client/stack/ps.go +++ b/api/client/stack/ps.go @@ -10,10 +10,10 @@ import ( "github.com/docker/docker/api/client" "github.com/docker/docker/api/client/idresolver" "github.com/docker/docker/api/client/task" + "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/swarm" "github.com/docker/docker/cli" "github.com/docker/docker/opts" - "github.com/docker/engine-api/types" - "github.com/docker/engine-api/types/swarm" "github.com/spf13/cobra" ) diff --git a/api/client/stack/services.go b/api/client/stack/services.go index 3da75460c3..819b1c6759 100644 --- a/api/client/stack/services.go +++ b/api/client/stack/services.go @@ -9,10 +9,10 @@ import ( "github.com/docker/docker/api/client" "github.com/docker/docker/api/client/service" + "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/filters" "github.com/docker/docker/cli" "github.com/docker/docker/opts" - "github.com/docker/engine-api/types" - "github.com/docker/engine-api/types/filters" "github.com/spf13/cobra" ) diff --git a/api/client/swarm/init.go b/api/client/swarm/init.go index 6a59019067..cb23fb6824 100644 --- a/api/client/swarm/init.go +++ b/api/client/swarm/init.go @@ -8,8 +8,8 @@ import ( "golang.org/x/net/context" "github.com/docker/docker/api/client" + "github.com/docker/docker/api/types/swarm" "github.com/docker/docker/cli" - "github.com/docker/engine-api/types/swarm" "github.com/spf13/cobra" "github.com/spf13/pflag" ) diff --git a/api/client/swarm/join.go b/api/client/swarm/join.go index de2e15ab23..fc8fb10b6c 100644 --- a/api/client/swarm/join.go +++ b/api/client/swarm/join.go @@ -5,8 +5,8 @@ import ( "strings" "github.com/docker/docker/api/client" + "github.com/docker/docker/api/types/swarm" "github.com/docker/docker/cli" - "github.com/docker/engine-api/types/swarm" "github.com/spf13/cobra" "golang.org/x/net/context" ) diff --git a/api/client/swarm/join_token.go b/api/client/swarm/join_token.go index a1e381e1b1..803f360fa2 100644 --- a/api/client/swarm/join_token.go +++ b/api/client/swarm/join_token.go @@ -7,8 +7,8 @@ import ( "github.com/spf13/cobra" "github.com/docker/docker/api/client" + "github.com/docker/docker/api/types/swarm" "github.com/docker/docker/cli" - "github.com/docker/engine-api/types/swarm" "golang.org/x/net/context" ) diff --git a/api/client/swarm/opts.go b/api/client/swarm/opts.go index 9fcfa89bbf..7fcf25d136 100644 --- a/api/client/swarm/opts.go +++ b/api/client/swarm/opts.go @@ -7,8 +7,8 @@ import ( "strings" "time" + "github.com/docker/docker/api/types/swarm" "github.com/docker/docker/opts" - "github.com/docker/engine-api/types/swarm" "github.com/spf13/pflag" ) diff --git a/api/client/swarm/update.go b/api/client/swarm/update.go index b9d6a6b521..ce9f34df37 100644 --- a/api/client/swarm/update.go +++ b/api/client/swarm/update.go @@ -6,8 +6,8 @@ import ( "golang.org/x/net/context" "github.com/docker/docker/api/client" + "github.com/docker/docker/api/types/swarm" "github.com/docker/docker/cli" - "github.com/docker/engine-api/types/swarm" "github.com/spf13/cobra" "github.com/spf13/pflag" ) diff --git a/api/client/system/events.go b/api/client/system/events.go index c29692ccd1..9258995174 100644 --- a/api/client/system/events.go +++ b/api/client/system/events.go @@ -10,11 +10,11 @@ import ( "golang.org/x/net/context" "github.com/docker/docker/api/client" + "github.com/docker/docker/api/types" + eventtypes "github.com/docker/docker/api/types/events" + "github.com/docker/docker/api/types/filters" "github.com/docker/docker/cli" "github.com/docker/docker/pkg/jsonlog" - "github.com/docker/engine-api/types" - eventtypes "github.com/docker/engine-api/types/events" - "github.com/docker/engine-api/types/filters" "github.com/spf13/cobra" ) diff --git a/api/client/system/events_utils.go b/api/client/system/events_utils.go index 685225daa6..71c1b0476b 100644 --- a/api/client/system/events_utils.go +++ b/api/client/system/events_utils.go @@ -6,7 +6,7 @@ import ( "sync" "github.com/Sirupsen/logrus" - eventtypes "github.com/docker/engine-api/types/events" + eventtypes "github.com/docker/docker/api/types/events" ) // EventHandler is abstract interface for user to customize diff --git a/api/client/system/info.go b/api/client/system/info.go index c2e314aea8..b08d14ce63 100644 --- a/api/client/system/info.go +++ b/api/client/system/info.go @@ -8,12 +8,12 @@ import ( "golang.org/x/net/context" "github.com/docker/docker/api/client" + "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/swarm" "github.com/docker/docker/cli" "github.com/docker/docker/pkg/ioutils" "github.com/docker/docker/utils" "github.com/docker/docker/utils/templates" - "github.com/docker/engine-api/types" - "github.com/docker/engine-api/types/swarm" "github.com/docker/go-units" "github.com/spf13/cobra" ) diff --git a/api/client/system/version.go b/api/client/system/version.go index cdfe1d466d..a4cabd6b76 100644 --- a/api/client/system/version.go +++ b/api/client/system/version.go @@ -7,11 +7,11 @@ import ( "golang.org/x/net/context" "github.com/docker/docker/api/client" + "github.com/docker/docker/api/types" "github.com/docker/docker/cli" "github.com/docker/docker/dockerversion" "github.com/docker/docker/utils" "github.com/docker/docker/utils/templates" - "github.com/docker/engine-api/types" "github.com/spf13/cobra" ) diff --git a/api/client/task/print.go b/api/client/task/print.go index 94e7fb050c..ef7732ccc6 100644 --- a/api/client/task/print.go +++ b/api/client/task/print.go @@ -11,7 +11,7 @@ import ( "github.com/docker/docker/api/client" "github.com/docker/docker/api/client/idresolver" - "github.com/docker/engine-api/types/swarm" + "github.com/docker/docker/api/types/swarm" "github.com/docker/go-units" ) diff --git a/api/client/trust.go b/api/client/trust.go index 12d9c5ce12..ae33528c2b 100644 --- a/api/client/trust.go +++ b/api/client/trust.go @@ -22,13 +22,13 @@ import ( "github.com/docker/distribution/digest" "github.com/docker/distribution/registry/client/auth" "github.com/docker/distribution/registry/client/transport" + "github.com/docker/docker/api/types" + registrytypes "github.com/docker/docker/api/types/registry" "github.com/docker/docker/cliconfig" "github.com/docker/docker/distribution" "github.com/docker/docker/pkg/jsonmessage" "github.com/docker/docker/reference" "github.com/docker/docker/registry" - "github.com/docker/engine-api/types" - registrytypes "github.com/docker/engine-api/types/registry" "github.com/docker/go-connections/tlsconfig" "github.com/docker/notary/client" "github.com/docker/notary/passphrase" diff --git a/api/client/trust_test.go b/api/client/trust_test.go index ec95bd9d35..86f9e61e4d 100644 --- a/api/client/trust_test.go +++ b/api/client/trust_test.go @@ -4,8 +4,8 @@ import ( "os" "testing" + registrytypes "github.com/docker/docker/api/types/registry" "github.com/docker/docker/registry" - registrytypes "github.com/docker/engine-api/types/registry" ) func unsetENV() { diff --git a/api/client/utils.go b/api/client/utils.go index a3dd3dc2e3..390a673a21 100644 --- a/api/client/utils.go +++ b/api/client/utils.go @@ -14,10 +14,10 @@ import ( "golang.org/x/net/context" "github.com/Sirupsen/logrus" + "github.com/docker/docker/api/types" "github.com/docker/docker/pkg/signal" "github.com/docker/docker/pkg/term" "github.com/docker/engine-api/client" - "github.com/docker/engine-api/types" ) func (cli *DockerCli) resizeTty(ctx context.Context, id string, isExec bool) { diff --git a/api/client/volume/create.go b/api/client/volume/create.go index 8d17a8006f..b40f51ace3 100644 --- a/api/client/volume/create.go +++ b/api/client/volume/create.go @@ -6,10 +6,10 @@ import ( "golang.org/x/net/context" "github.com/docker/docker/api/client" + "github.com/docker/docker/api/types" "github.com/docker/docker/cli" "github.com/docker/docker/opts" runconfigopts "github.com/docker/docker/runconfig/opts" - "github.com/docker/engine-api/types" "github.com/spf13/cobra" ) diff --git a/api/client/volume/list.go b/api/client/volume/list.go index f5fceec77e..e6f1fb3ae4 100644 --- a/api/client/volume/list.go +++ b/api/client/volume/list.go @@ -7,9 +7,9 @@ import ( "github.com/docker/docker/api/client" "github.com/docker/docker/api/client/formatter" + "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/filters" "github.com/docker/docker/cli" - "github.com/docker/engine-api/types" - "github.com/docker/engine-api/types/filters" "github.com/spf13/cobra" ) diff --git a/api/common.go b/api/common.go index f0a7d4834c..2cb538e3a2 100644 --- a/api/common.go +++ b/api/common.go @@ -12,9 +12,9 @@ import ( "strings" "github.com/Sirupsen/logrus" + "github.com/docker/docker/api/types" "github.com/docker/docker/pkg/ioutils" "github.com/docker/docker/pkg/system" - "github.com/docker/engine-api/types" "github.com/docker/libtrust" ) diff --git a/api/common_test.go b/api/common_test.go index c214660cc4..31d6f58253 100644 --- a/api/common_test.go +++ b/api/common_test.go @@ -7,7 +7,7 @@ import ( "os" - "github.com/docker/engine-api/types" + "github.com/docker/docker/api/types" ) type ports struct { diff --git a/api/server/httputils/decoder.go b/api/server/httputils/decoder.go index dbe469cca6..458eac5600 100644 --- a/api/server/httputils/decoder.go +++ b/api/server/httputils/decoder.go @@ -3,8 +3,8 @@ package httputils import ( "io" - "github.com/docker/engine-api/types/container" - "github.com/docker/engine-api/types/network" + "github.com/docker/docker/api/types/container" + "github.com/docker/docker/api/types/network" ) // ContainerDecoder specifies how diff --git a/api/server/httputils/errors.go b/api/server/httputils/errors.go index da4db97915..acfae85f98 100644 --- a/api/server/httputils/errors.go +++ b/api/server/httputils/errors.go @@ -5,8 +5,8 @@ import ( "strings" "github.com/Sirupsen/logrus" - "github.com/docker/engine-api/types" - "github.com/docker/engine-api/types/versions" + "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/versions" "github.com/gorilla/mux" "google.golang.org/grpc" ) diff --git a/api/server/middleware/user_agent.go b/api/server/middleware/user_agent.go index 87c8cb83e1..be1c3fb4c4 100644 --- a/api/server/middleware/user_agent.go +++ b/api/server/middleware/user_agent.go @@ -6,7 +6,7 @@ import ( "github.com/Sirupsen/logrus" "github.com/docker/docker/api/server/httputils" - "github.com/docker/engine-api/types/versions" + "github.com/docker/docker/api/types/versions" "golang.org/x/net/context" ) diff --git a/api/server/middleware/version.go b/api/server/middleware/version.go index eb7bbf3a3e..e0a4fc5f46 100644 --- a/api/server/middleware/version.go +++ b/api/server/middleware/version.go @@ -5,7 +5,7 @@ import ( "net/http" "runtime" - "github.com/docker/engine-api/types/versions" + "github.com/docker/docker/api/types/versions" "golang.org/x/net/context" ) diff --git a/api/types/auth.go b/api/types/auth.go new file mode 100644 index 0000000000..056af6b842 --- /dev/null +++ b/api/types/auth.go @@ -0,0 +1,22 @@ +package types + +// AuthConfig contains authorization information for connecting to a Registry +type AuthConfig struct { + Username string `json:"username,omitempty"` + Password string `json:"password,omitempty"` + Auth string `json:"auth,omitempty"` + + // Email is an optional value associated with the username. + // This field is deprecated and will be removed in a later + // version of docker. + Email string `json:"email,omitempty"` + + ServerAddress string `json:"serveraddress,omitempty"` + + // IdentityToken is used to authenticate the user and get + // an access token for the registry. + IdentityToken string `json:"identitytoken,omitempty"` + + // RegistryToken is a bearer token to be sent to a registry + RegistryToken string `json:"registrytoken,omitempty"` +} diff --git a/api/types/backend/backend.go b/api/types/backend/backend.go index c7b4f01757..2da92a2902 100644 --- a/api/types/backend/backend.go +++ b/api/types/backend/backend.go @@ -6,8 +6,8 @@ package backend import ( "io" + "github.com/docker/docker/api/types" "github.com/docker/docker/pkg/streamformatter" - "github.com/docker/engine-api/types" ) // ContainerAttachConfig holds the streams to use when connecting to a container to view logs. diff --git a/api/types/blkiodev/blkio.go b/api/types/blkiodev/blkio.go new file mode 100644 index 0000000000..931ae10ab1 --- /dev/null +++ b/api/types/blkiodev/blkio.go @@ -0,0 +1,23 @@ +package blkiodev + +import "fmt" + +// WeightDevice is a structure that holds device:weight pair +type WeightDevice struct { + Path string + Weight uint16 +} + +func (w *WeightDevice) String() string { + return fmt.Sprintf("%s:%d", w.Path, w.Weight) +} + +// ThrottleDevice is a structure that holds device:rate_per_second pair +type ThrottleDevice struct { + Path string + Rate uint64 +} + +func (t *ThrottleDevice) String() string { + return fmt.Sprintf("%s:%d", t.Path, t.Rate) +} diff --git a/api/types/client.go b/api/types/client.go new file mode 100644 index 0000000000..e19d16e5c4 --- /dev/null +++ b/api/types/client.go @@ -0,0 +1,300 @@ +package types + +import ( + "bufio" + "io" + "net" + + "github.com/docker/docker/api/types/container" + "github.com/docker/docker/api/types/filters" + "github.com/docker/go-units" +) + +// CheckpointCreateOptions holds parameters to create a checkpoint from a container +type CheckpointCreateOptions struct { + CheckpointID string + Exit bool +} + +// ContainerAttachOptions holds parameters to attach to a container. +type ContainerAttachOptions struct { + Stream bool + Stdin bool + Stdout bool + Stderr bool + DetachKeys string +} + +// ContainerCommitOptions holds parameters to commit changes into a container. +type ContainerCommitOptions struct { + Reference string + Comment string + Author string + Changes []string + Pause bool + Config *container.Config +} + +// ContainerExecInspect holds information returned by exec inspect. +type ContainerExecInspect struct { + ExecID string + ContainerID string + Running bool + ExitCode int +} + +// ContainerListOptions holds parameters to list containers with. +type ContainerListOptions struct { + Quiet bool + Size bool + All bool + Latest bool + Since string + Before string + Limit int + Filter filters.Args +} + +// ContainerLogsOptions holds parameters to filter logs with. +type ContainerLogsOptions struct { + ShowStdout bool + ShowStderr bool + Since string + Timestamps bool + Follow bool + Tail string + Details bool +} + +// ContainerRemoveOptions holds parameters to remove containers. +type ContainerRemoveOptions struct { + RemoveVolumes bool + RemoveLinks bool + Force bool +} + +// ContainerStartOptions holds parameters to start containers. +type ContainerStartOptions struct { + CheckpointID string +} + +// CopyToContainerOptions holds information +// about files to copy into a container +type CopyToContainerOptions struct { + AllowOverwriteDirWithFile bool +} + +// EventsOptions hold parameters to filter events with. +type EventsOptions struct { + Since string + Until string + Filters filters.Args +} + +// NetworkListOptions holds parameters to filter the list of networks with. +type NetworkListOptions struct { + Filters filters.Args +} + +// HijackedResponse holds connection information for a hijacked request. +type HijackedResponse struct { + Conn net.Conn + Reader *bufio.Reader +} + +// Close closes the hijacked connection and reader. +func (h *HijackedResponse) Close() { + h.Conn.Close() +} + +// CloseWriter is an interface that implements structs +// that close input streams to prevent from writing. +type CloseWriter interface { + CloseWrite() error +} + +// CloseWrite closes a readWriter for writing. +func (h *HijackedResponse) CloseWrite() error { + if conn, ok := h.Conn.(CloseWriter); ok { + return conn.CloseWrite() + } + return nil +} + +// ImageBuildOptions holds the information +// necessary to build images. +type ImageBuildOptions struct { + Tags []string + SuppressOutput bool + RemoteContext string + NoCache bool + Remove bool + ForceRemove bool + PullParent bool + Isolation container.Isolation + CPUSetCPUs string + CPUSetMems string + CPUShares int64 + CPUQuota int64 + CPUPeriod int64 + Memory int64 + MemorySwap int64 + CgroupParent string + ShmSize int64 + Dockerfile string + Ulimits []*units.Ulimit + BuildArgs map[string]string + AuthConfigs map[string]AuthConfig + Context io.Reader + Labels map[string]string + // squash the resulting image's layers to the parent + // preserves the original image and creates a new one from the parent with all + // the changes applied to a single layer + Squash bool +} + +// ImageBuildResponse holds information +// returned by a server after building +// an image. +type ImageBuildResponse struct { + Body io.ReadCloser + OSType string +} + +// ImageCreateOptions holds information to create images. +type ImageCreateOptions struct { + RegistryAuth string // RegistryAuth is the base64 encoded credentials for the registry +} + +// ImageImportSource holds source information for ImageImport +type ImageImportSource struct { + Source io.Reader // Source is the data to send to the server to create this image from (mutually exclusive with SourceName) + SourceName string // SourceName is the name of the image to pull (mutually exclusive with Source) +} + +// ImageImportOptions holds information to import images from the client host. +type ImageImportOptions struct { + Tag string // Tag is the name to tag this image with. This attribute is deprecated. + Message string // Message is the message to tag the image with + Changes []string // Changes are the raw changes to apply to this image +} + +// ImageListOptions holds parameters to filter the list of images with. +type ImageListOptions struct { + MatchName string + All bool + Filters filters.Args +} + +// ImageLoadResponse returns information to the client about a load process. +type ImageLoadResponse struct { + // Body must be closed to avoid a resource leak + Body io.ReadCloser + JSON bool +} + +// ImagePullOptions holds information to pull images. +type ImagePullOptions struct { + All bool + RegistryAuth string // RegistryAuth is the base64 encoded credentials for the registry + PrivilegeFunc RequestPrivilegeFunc +} + +// RequestPrivilegeFunc is a function interface that +// clients can supply to retry operations after +// getting an authorization error. +// This function returns the registry authentication +// header value in base 64 format, or an error +// if the privilege request fails. +type RequestPrivilegeFunc func() (string, error) + +//ImagePushOptions holds information to push images. +type ImagePushOptions ImagePullOptions + +// ImageRemoveOptions holds parameters to remove images. +type ImageRemoveOptions struct { + Force bool + PruneChildren bool +} + +// ImageSearchOptions holds parameters to search images with. +type ImageSearchOptions struct { + RegistryAuth string + PrivilegeFunc RequestPrivilegeFunc + Filters filters.Args + Limit int +} + +// ResizeOptions holds parameters to resize a tty. +// It can be used to resize container ttys and +// exec process ttys too. +type ResizeOptions struct { + Height int + Width int +} + +// VersionResponse holds version information for the client and the server +type VersionResponse struct { + Client *Version + Server *Version +} + +// ServerOK returns true when the client could connect to the docker server +// and parse the information received. It returns false otherwise. +func (v VersionResponse) ServerOK() bool { + return v.Server != nil +} + +// NodeListOptions holds parameters to list nodes with. +type NodeListOptions struct { + Filter filters.Args +} + +// NodeRemoveOptions holds parameters to remove nodes with. +type NodeRemoveOptions struct { + Force bool +} + +// ServiceCreateOptions contains the options to use when creating a service. +type ServiceCreateOptions struct { + // EncodedRegistryAuth is the encoded registry authorization credentials to + // use when updating the service. + // + // This field follows the format of the X-Registry-Auth header. + EncodedRegistryAuth string +} + +// ServiceCreateResponse contains the information returned to a client +// on the creation of a new service. +type ServiceCreateResponse struct { + // ID is the ID of the created service. + ID string +} + +// ServiceUpdateOptions contains the options to be used for updating services. +type ServiceUpdateOptions struct { + // EncodedRegistryAuth is the encoded registry authorization credentials to + // use when updating the service. + // + // This field follows the format of the X-Registry-Auth header. + EncodedRegistryAuth string + + // TODO(stevvooe): Consider moving the version parameter of ServiceUpdate + // into this field. While it does open API users up to racy writes, most + // users may not need that level of consistency in practice. +} + +// ServiceListOptions holds parameters to list services with. +type ServiceListOptions struct { + Filter filters.Args +} + +// TaskListOptions holds parameters to list tasks with. +type TaskListOptions struct { + Filter filters.Args +} + +// PluginRemoveOptions holds parameters to remove plugins. +type PluginRemoveOptions struct { + Force bool +} diff --git a/api/types/configs.go b/api/types/configs.go new file mode 100644 index 0000000000..177a62bb4f --- /dev/null +++ b/api/types/configs.go @@ -0,0 +1,61 @@ +package types + +import ( + "github.com/docker/docker/api/types/container" + "github.com/docker/docker/api/types/network" +) + +// configs holds structs used for internal communication between the +// frontend (such as an http server) and the backend (such as the +// docker daemon). + +// ContainerCreateConfig is the parameter set to ContainerCreate() +type ContainerCreateConfig struct { + Name string + Config *container.Config + HostConfig *container.HostConfig + NetworkingConfig *network.NetworkingConfig + AdjustCPUShares bool +} + +// ContainerRmConfig holds arguments for the container remove +// operation. This struct is used to tell the backend what operations +// to perform. +type ContainerRmConfig struct { + ForceRemove, RemoveVolume, RemoveLink bool +} + +// ContainerCommitConfig contains build configs for commit operation, +// and is used when making a commit with the current state of the container. +type ContainerCommitConfig struct { + Pause bool + Repo string + Tag string + Author string + Comment string + // merge container config into commit config before commit + MergeConfigs bool + Config *container.Config +} + +// ExecConfig is a small subset of the Config struct that holds the configuration +// for the exec feature of docker. +type ExecConfig struct { + User string // User that will run the command + Privileged bool // Is the container in privileged mode + Tty bool // Attach standard streams to a tty. + AttachStdin bool // Attach the standard input, makes possible user interaction + AttachStderr bool // Attach the standard error + AttachStdout bool // Attach the standard output + Detach bool // Execute in detach mode + DetachKeys string // Escape keys for detach + Env []string // Environment variables + Cmd []string // Execution commands and args +} + +// PluginRmConfig holds arguments for the plugin remove +// operation. This struct is used to tell the backend what operations +// to perform. +type PluginRmConfig struct { + ForceRemove bool +} diff --git a/api/types/container/config.go b/api/types/container/config.go new file mode 100644 index 0000000000..e72b065b4b --- /dev/null +++ b/api/types/container/config.go @@ -0,0 +1,62 @@ +package container + +import ( + "time" + + "github.com/docker/docker/api/types/strslice" + "github.com/docker/go-connections/nat" +) + +// HealthConfig holds configuration settings for the HEALTHCHECK feature. +type HealthConfig struct { + // Test is the test to perform to check that the container is healthy. + // An empty slice means to inherit the default. + // The options are: + // {} : inherit healthcheck + // {"NONE"} : disable healthcheck + // {"CMD", args...} : exec arguments directly + // {"CMD-SHELL", command} : run command with system's default shell + Test []string `json:",omitempty"` + + // Zero means to inherit. Durations are expressed as integer nanoseconds. + Interval time.Duration `json:",omitempty"` // Interval is the time to wait between checks. + Timeout time.Duration `json:",omitempty"` // Timeout is the time to wait before considering the check to have hung. + + // Retries is the number of consecutive failures needed to consider a container as unhealthy. + // Zero means inherit. + Retries int `json:",omitempty"` +} + +// Config contains the configuration data about a container. +// It should hold only portable information about the container. +// Here, "portable" means "independent from the host we are running on". +// Non-portable information *should* appear in HostConfig. +// All fields added to this struct must be marked `omitempty` to keep getting +// predictable hashes from the old `v1Compatibility` configuration. +type Config struct { + Hostname string // Hostname + Domainname string // Domainname + User string // User that will run the command(s) inside the container, also support user:group + AttachStdin bool // Attach the standard input, makes possible user interaction + AttachStdout bool // Attach the standard output + AttachStderr bool // Attach the standard error + ExposedPorts map[nat.Port]struct{} `json:",omitempty"` // List of exposed ports + Tty bool // Attach standard streams to a tty, including stdin if it is not closed. + OpenStdin bool // Open stdin + StdinOnce bool // If true, close stdin after the 1 attached client disconnects. + Env []string // List of environment variable to set in the container + Cmd strslice.StrSlice // Command to run when starting the container + Healthcheck *HealthConfig `json:",omitempty"` // Healthcheck describes how to check the container is healthy + ArgsEscaped bool `json:",omitempty"` // True if command is already escaped (Windows specific) + Image string // Name of the image as it was passed by the operator (eg. could be symbolic) + Volumes map[string]struct{} // List of volumes (mounts) used for the container + WorkingDir string // Current directory (PWD) in the command will be launched + Entrypoint strslice.StrSlice // Entrypoint to run when starting the container + NetworkDisabled bool `json:",omitempty"` // Is network disabled + MacAddress string `json:",omitempty"` // Mac Address of the container + OnBuild []string // ONBUILD metadata that were defined on the image Dockerfile + Labels map[string]string // List of labels set to this container + StopSignal string `json:",omitempty"` // Signal to stop a container + StopTimeout *int `json:",omitempty"` // Timeout (in seconds) to stop a container + Shell strslice.StrSlice `json:",omitempty"` // Shell for shell-form of RUN, CMD, ENTRYPOINT +} diff --git a/api/types/container/host_config.go b/api/types/container/host_config.go new file mode 100644 index 0000000000..c57470cd41 --- /dev/null +++ b/api/types/container/host_config.go @@ -0,0 +1,324 @@ +package container + +import ( + "strings" + + "github.com/docker/docker/api/types/blkiodev" + "github.com/docker/docker/api/types/mount" + "github.com/docker/docker/api/types/strslice" + "github.com/docker/go-connections/nat" + "github.com/docker/go-units" +) + +// NetworkMode represents the container network stack. +type NetworkMode string + +// Isolation represents the isolation technology of a container. The supported +// values are platform specific +type Isolation string + +// IsDefault indicates the default isolation technology of a container. On Linux this +// is the native driver. On Windows, this is a Windows Server Container. +func (i Isolation) IsDefault() bool { + return strings.ToLower(string(i)) == "default" || string(i) == "" +} + +// IpcMode represents the container ipc stack. +type IpcMode string + +// IsPrivate indicates whether the container uses its private ipc stack. +func (n IpcMode) IsPrivate() bool { + return !(n.IsHost() || n.IsContainer()) +} + +// IsHost indicates whether the container uses the host's ipc stack. +func (n IpcMode) IsHost() bool { + return n == "host" +} + +// IsContainer indicates whether the container uses a container's ipc stack. +func (n IpcMode) IsContainer() bool { + parts := strings.SplitN(string(n), ":", 2) + return len(parts) > 1 && parts[0] == "container" +} + +// Valid indicates whether the ipc stack is valid. +func (n IpcMode) Valid() bool { + parts := strings.Split(string(n), ":") + switch mode := parts[0]; mode { + case "", "host": + case "container": + if len(parts) != 2 || parts[1] == "" { + return false + } + default: + return false + } + return true +} + +// Container returns the name of the container ipc stack is going to be used. +func (n IpcMode) Container() string { + parts := strings.SplitN(string(n), ":", 2) + if len(parts) > 1 { + return parts[1] + } + return "" +} + +// UsernsMode represents userns mode in the container. +type UsernsMode string + +// IsHost indicates whether the container uses the host's userns. +func (n UsernsMode) IsHost() bool { + return n == "host" +} + +// IsPrivate indicates whether the container uses the a private userns. +func (n UsernsMode) IsPrivate() bool { + return !(n.IsHost()) +} + +// Valid indicates whether the userns is valid. +func (n UsernsMode) Valid() bool { + parts := strings.Split(string(n), ":") + switch mode := parts[0]; mode { + case "", "host": + default: + return false + } + return true +} + +// CgroupSpec represents the cgroup to use for the container. +type CgroupSpec string + +// IsContainer indicates whether the container is using another container cgroup +func (c CgroupSpec) IsContainer() bool { + parts := strings.SplitN(string(c), ":", 2) + return len(parts) > 1 && parts[0] == "container" +} + +// Valid indicates whether the cgroup spec is valid. +func (c CgroupSpec) Valid() bool { + return c.IsContainer() || c == "" +} + +// Container returns the name of the container whose cgroup will be used. +func (c CgroupSpec) Container() string { + parts := strings.SplitN(string(c), ":", 2) + if len(parts) > 1 { + return parts[1] + } + return "" +} + +// UTSMode represents the UTS namespace of the container. +type UTSMode string + +// IsPrivate indicates whether the container uses its private UTS namespace. +func (n UTSMode) IsPrivate() bool { + return !(n.IsHost()) +} + +// IsHost indicates whether the container uses the host's UTS namespace. +func (n UTSMode) IsHost() bool { + return n == "host" +} + +// Valid indicates whether the UTS namespace is valid. +func (n UTSMode) Valid() bool { + parts := strings.Split(string(n), ":") + switch mode := parts[0]; mode { + case "", "host": + default: + return false + } + return true +} + +// PidMode represents the pid namespace of the container. +type PidMode string + +// IsPrivate indicates whether the container uses its own new pid namespace. +func (n PidMode) IsPrivate() bool { + return !(n.IsHost() || n.IsContainer()) +} + +// IsHost indicates whether the container uses the host's pid namespace. +func (n PidMode) IsHost() bool { + return n == "host" +} + +// IsContainer indicates whether the container uses a container's pid namespace. +func (n PidMode) IsContainer() bool { + parts := strings.SplitN(string(n), ":", 2) + return len(parts) > 1 && parts[0] == "container" +} + +// Valid indicates whether the pid namespace is valid. +func (n PidMode) Valid() bool { + parts := strings.Split(string(n), ":") + switch mode := parts[0]; mode { + case "", "host": + case "container": + if len(parts) != 2 || parts[1] == "" { + return false + } + default: + return false + } + return true +} + +// Container returns the name of the container whose pid namespace is going to be used. +func (n PidMode) Container() string { + parts := strings.SplitN(string(n), ":", 2) + if len(parts) > 1 { + return parts[1] + } + return "" +} + +// DeviceMapping represents the device mapping between the host and the container. +type DeviceMapping struct { + PathOnHost string + PathInContainer string + CgroupPermissions string +} + +// RestartPolicy represents the restart policies of the container. +type RestartPolicy struct { + Name string + MaximumRetryCount int +} + +// IsNone indicates whether the container has the "no" restart policy. +// This means the container will not automatically restart when exiting. +func (rp *RestartPolicy) IsNone() bool { + return rp.Name == "no" || rp.Name == "" +} + +// IsAlways indicates whether the container has the "always" restart policy. +// This means the container will automatically restart regardless of the exit status. +func (rp *RestartPolicy) IsAlways() bool { + return rp.Name == "always" +} + +// IsOnFailure indicates whether the container has the "on-failure" restart policy. +// This means the container will automatically restart of exiting with a non-zero exit status. +func (rp *RestartPolicy) IsOnFailure() bool { + return rp.Name == "on-failure" +} + +// IsUnlessStopped indicates whether the container has the +// "unless-stopped" restart policy. This means the container will +// automatically restart unless user has put it to stopped state. +func (rp *RestartPolicy) IsUnlessStopped() bool { + return rp.Name == "unless-stopped" +} + +// IsSame compares two RestartPolicy to see if they are the same +func (rp *RestartPolicy) IsSame(tp *RestartPolicy) bool { + return rp.Name == tp.Name && rp.MaximumRetryCount == tp.MaximumRetryCount +} + +// LogConfig represents the logging configuration of the container. +type LogConfig struct { + Type string + Config map[string]string +} + +// Resources contains container's resources (cgroups config, ulimits...) +type Resources struct { + // Applicable to all platforms + CPUShares int64 `json:"CpuShares"` // CPU shares (relative weight vs. other containers) + Memory int64 // Memory limit (in bytes) + + // Applicable to UNIX platforms + CgroupParent string // Parent cgroup. + BlkioWeight uint16 // Block IO weight (relative weight vs. other containers) + BlkioWeightDevice []*blkiodev.WeightDevice + BlkioDeviceReadBps []*blkiodev.ThrottleDevice + BlkioDeviceWriteBps []*blkiodev.ThrottleDevice + BlkioDeviceReadIOps []*blkiodev.ThrottleDevice + BlkioDeviceWriteIOps []*blkiodev.ThrottleDevice + CPUPeriod int64 `json:"CpuPeriod"` // CPU CFS (Completely Fair Scheduler) period + CPUQuota int64 `json:"CpuQuota"` // CPU CFS (Completely Fair Scheduler) quota + CpusetCpus string // CpusetCpus 0-2, 0,1 + CpusetMems string // CpusetMems 0-2, 0,1 + Devices []DeviceMapping // List of devices to map inside the container + DiskQuota int64 // Disk limit (in bytes) + KernelMemory int64 // Kernel memory limit (in bytes) + MemoryReservation int64 // Memory soft limit (in bytes) + MemorySwap int64 // Total memory usage (memory + swap); set `-1` to enable unlimited swap + MemorySwappiness *int64 // Tuning container memory swappiness behaviour + OomKillDisable *bool // Whether to disable OOM Killer or not + PidsLimit int64 // Setting pids limit for a container + Ulimits []*units.Ulimit // List of ulimits to be set in the container + + // Applicable to Windows + CPUCount int64 `json:"CpuCount"` // CPU count + CPUPercent int64 `json:"CpuPercent"` // CPU percent + IOMaximumIOps uint64 // Maximum IOps for the container system drive + IOMaximumBandwidth uint64 // Maximum IO in bytes per second for the container system drive +} + +// UpdateConfig holds the mutable attributes of a Container. +// Those attributes can be updated at runtime. +type UpdateConfig struct { + // Contains container's resources (cgroups, ulimits) + Resources + RestartPolicy RestartPolicy +} + +// HostConfig the non-portable Config structure of a container. +// Here, "non-portable" means "dependent of the host we are running on". +// Portable information *should* appear in Config. +type HostConfig struct { + // Applicable to all platforms + Binds []string // List of volume bindings for this container + ContainerIDFile string // File (path) where the containerId is written + LogConfig LogConfig // Configuration of the logs for this container + NetworkMode NetworkMode // Network mode to use for the container + PortBindings nat.PortMap // Port mapping between the exposed port (container) and the host + RestartPolicy RestartPolicy // Restart policy to be used for the container + AutoRemove bool // Automatically remove container when it exits + VolumeDriver string // Name of the volume driver used to mount volumes + VolumesFrom []string // List of volumes to take from other container + + // Applicable to UNIX platforms + CapAdd strslice.StrSlice // List of kernel capabilities to add to the container + CapDrop strslice.StrSlice // List of kernel capabilities to remove from the container + DNS []string `json:"Dns"` // List of DNS server to lookup + DNSOptions []string `json:"DnsOptions"` // List of DNSOption to look for + DNSSearch []string `json:"DnsSearch"` // List of DNSSearch to look for + ExtraHosts []string // List of extra hosts + GroupAdd []string // List of additional groups that the container process will run as + IpcMode IpcMode // IPC namespace to use for the container + Cgroup CgroupSpec // Cgroup to use for the container + Links []string // List of links (in the name:alias form) + OomScoreAdj int // Container preference for OOM-killing + PidMode PidMode // PID namespace to use for the container + Privileged bool // Is the container in privileged mode + PublishAllPorts bool // Should docker publish all exposed port for the container + ReadonlyRootfs bool // Is the container root filesystem in read-only + SecurityOpt []string // List of string values to customize labels for MLS systems, such as SELinux. + StorageOpt map[string]string `json:",omitempty"` // Storage driver options per container. + Tmpfs map[string]string `json:",omitempty"` // List of tmpfs (mounts) used for the container + UTSMode UTSMode // UTS namespace to use for the container + UsernsMode UsernsMode // The user namespace to use for the container + ShmSize int64 // Total shm memory usage + Sysctls map[string]string `json:",omitempty"` // List of Namespaced sysctls used for the container + Runtime string `json:",omitempty"` // Runtime to use with this container + + // Applicable to Windows + ConsoleSize [2]int // Initial console size + Isolation Isolation // Isolation technology of the container (eg default, hyperv) + + // Contains container's resources (cgroups, ulimits) + Resources + + // Mounts specs used by the container + Mounts []mount.Mount `json:",omitempty"` +} diff --git a/api/types/container/hostconfig_unix.go b/api/types/container/hostconfig_unix.go new file mode 100644 index 0000000000..4171059a47 --- /dev/null +++ b/api/types/container/hostconfig_unix.go @@ -0,0 +1,81 @@ +// +build !windows + +package container + +import "strings" + +// IsValid indicates if an isolation technology is valid +func (i Isolation) IsValid() bool { + return i.IsDefault() +} + +// IsPrivate indicates whether container uses it's private network stack. +func (n NetworkMode) IsPrivate() bool { + return !(n.IsHost() || n.IsContainer()) +} + +// IsDefault indicates whether container uses the default network stack. +func (n NetworkMode) IsDefault() bool { + return n == "default" +} + +// NetworkName returns the name of the network stack. +func (n NetworkMode) NetworkName() string { + if n.IsBridge() { + return "bridge" + } else if n.IsHost() { + return "host" + } else if n.IsContainer() { + return "container" + } else if n.IsNone() { + return "none" + } else if n.IsDefault() { + return "default" + } else if n.IsUserDefined() { + return n.UserDefined() + } + return "" +} + +// IsBridge indicates whether container uses the bridge network stack +func (n NetworkMode) IsBridge() bool { + return n == "bridge" +} + +// IsHost indicates whether container uses the host network stack. +func (n NetworkMode) IsHost() bool { + return n == "host" +} + +// IsContainer indicates whether container uses a container network stack. +func (n NetworkMode) IsContainer() bool { + parts := strings.SplitN(string(n), ":", 2) + return len(parts) > 1 && parts[0] == "container" +} + +// IsNone indicates whether container isn't using a network stack. +func (n NetworkMode) IsNone() bool { + return n == "none" +} + +// ConnectedContainer is the id of the container which network this container is connected to. +func (n NetworkMode) ConnectedContainer() string { + parts := strings.SplitN(string(n), ":", 2) + if len(parts) > 1 { + return parts[1] + } + return "" +} + +// IsUserDefined indicates user-created network +func (n NetworkMode) IsUserDefined() bool { + return !n.IsDefault() && !n.IsBridge() && !n.IsHost() && !n.IsNone() && !n.IsContainer() +} + +//UserDefined indicates user-created network +func (n NetworkMode) UserDefined() string { + if n.IsUserDefined() { + return string(n) + } + return "" +} diff --git a/api/types/container/hostconfig_windows.go b/api/types/container/hostconfig_windows.go new file mode 100644 index 0000000000..0ee332ba68 --- /dev/null +++ b/api/types/container/hostconfig_windows.go @@ -0,0 +1,87 @@ +package container + +import ( + "strings" +) + +// IsDefault indicates whether container uses the default network stack. +func (n NetworkMode) IsDefault() bool { + return n == "default" +} + +// IsNone indicates whether container isn't using a network stack. +func (n NetworkMode) IsNone() bool { + return n == "none" +} + +// IsContainer indicates whether container uses a container network stack. +// Returns false as windows doesn't support this mode +func (n NetworkMode) IsContainer() bool { + return false +} + +// IsBridge indicates whether container uses the bridge network stack +// in windows it is given the name NAT +func (n NetworkMode) IsBridge() bool { + return n == "nat" +} + +// IsHost indicates whether container uses the host network stack. +// returns false as this is not supported by windows +func (n NetworkMode) IsHost() bool { + return false +} + +// IsPrivate indicates whether container uses its private network stack. +func (n NetworkMode) IsPrivate() bool { + return !(n.IsHost() || n.IsContainer()) +} + +// ConnectedContainer is the id of the container which network this container is connected to. +// Returns blank string on windows +func (n NetworkMode) ConnectedContainer() string { + return "" +} + +// IsUserDefined indicates user-created network +func (n NetworkMode) IsUserDefined() bool { + return !n.IsDefault() && !n.IsNone() && !n.IsBridge() +} + +// IsHyperV indicates the use of a Hyper-V partition for isolation +func (i Isolation) IsHyperV() bool { + return strings.ToLower(string(i)) == "hyperv" +} + +// IsProcess indicates the use of process isolation +func (i Isolation) IsProcess() bool { + return strings.ToLower(string(i)) == "process" +} + +// IsValid indicates if an isolation technology is valid +func (i Isolation) IsValid() bool { + return i.IsDefault() || i.IsHyperV() || i.IsProcess() +} + +// NetworkName returns the name of the network stack. +func (n NetworkMode) NetworkName() string { + if n.IsDefault() { + return "default" + } else if n.IsBridge() { + return "nat" + } else if n.IsNone() { + return "none" + } else if n.IsUserDefined() { + return n.UserDefined() + } + + return "" +} + +//UserDefined indicates user-created network +func (n NetworkMode) UserDefined() string { + if n.IsUserDefined() { + return string(n) + } + return "" +} diff --git a/api/types/errors.go b/api/types/errors.go new file mode 100644 index 0000000000..649ab95131 --- /dev/null +++ b/api/types/errors.go @@ -0,0 +1,6 @@ +package types + +// ErrorResponse is the response body of API errors. +type ErrorResponse struct { + Message string `json:"message"` +} diff --git a/api/types/events/events.go b/api/types/events/events.go new file mode 100644 index 0000000000..7129a65acf --- /dev/null +++ b/api/types/events/events.go @@ -0,0 +1,42 @@ +package events + +const ( + // ContainerEventType is the event type that containers generate + ContainerEventType = "container" + // DaemonEventType is the event type that daemon generate + DaemonEventType = "daemon" + // ImageEventType is the event type that images generate + ImageEventType = "image" + // NetworkEventType is the event type that networks generate + NetworkEventType = "network" + // PluginEventType is the event type that plugins generate + PluginEventType = "plugin" + // VolumeEventType is the event type that volumes generate + VolumeEventType = "volume" +) + +// Actor describes something that generates events, +// like a container, or a network, or a volume. +// It has a defined name and a set or attributes. +// The container attributes are its labels, other actors +// can generate these attributes from other properties. +type Actor struct { + ID string + Attributes map[string]string +} + +// Message represents the information an event contains +type Message struct { + // Deprecated information from JSONMessage. + // With data only in container events. + Status string `json:"status,omitempty"` + ID string `json:"id,omitempty"` + From string `json:"from,omitempty"` + + Type string + Action string + Actor Actor + + Time int64 `json:"time,omitempty"` + TimeNano int64 `json:"timeNano,omitempty"` +} diff --git a/api/types/filters/parse.go b/api/types/filters/parse.go new file mode 100644 index 0000000000..12e5a3b0d5 --- /dev/null +++ b/api/types/filters/parse.go @@ -0,0 +1,307 @@ +// Package filters provides helper function to parse and handle command line +// filter, used for example in docker ps or docker images commands. +package filters + +import ( + "encoding/json" + "errors" + "fmt" + "regexp" + "strings" + + "github.com/docker/docker/api/types/versions" +) + +// Args stores filter arguments as map key:{map key: bool}. +// It contains an aggregation of the map of arguments (which are in the form +// of -f 'key=value') based on the key, and stores values for the same key +// in a map with string keys and boolean values. +// e.g given -f 'label=label1=1' -f 'label=label2=2' -f 'image.name=ubuntu' +// the args will be {"image.name":{"ubuntu":true},"label":{"label1=1":true,"label2=2":true}} +type Args struct { + fields map[string]map[string]bool +} + +// NewArgs initializes a new Args struct. +func NewArgs() Args { + return Args{fields: map[string]map[string]bool{}} +} + +// ParseFlag parses the argument to the filter flag. Like +// +// `docker ps -f 'created=today' -f 'image.name=ubuntu*'` +// +// If prev map is provided, then it is appended to, and returned. By default a new +// map is created. +func ParseFlag(arg string, prev Args) (Args, error) { + filters := prev + if len(arg) == 0 { + return filters, nil + } + + if !strings.Contains(arg, "=") { + return filters, ErrBadFormat + } + + f := strings.SplitN(arg, "=", 2) + + name := strings.ToLower(strings.TrimSpace(f[0])) + value := strings.TrimSpace(f[1]) + + filters.Add(name, value) + + return filters, nil +} + +// ErrBadFormat is an error returned in case of bad format for a filter. +var ErrBadFormat = errors.New("bad format of filter (expected name=value)") + +// ToParam packs the Args into a string for easy transport from client to server. +func ToParam(a Args) (string, error) { + // this way we don't URL encode {}, just empty space + if a.Len() == 0 { + return "", nil + } + + buf, err := json.Marshal(a.fields) + if err != nil { + return "", err + } + return string(buf), nil +} + +// ToParamWithVersion packs the Args into a string for easy transport from client to server. +// The generated string will depend on the specified version (corresponding to the API version). +func ToParamWithVersion(version string, a Args) (string, error) { + // this way we don't URL encode {}, just empty space + if a.Len() == 0 { + return "", nil + } + + // for daemons older than v1.10, filter must be of the form map[string][]string + buf := []byte{} + err := errors.New("") + if version != "" && versions.LessThan(version, "1.22") { + buf, err = json.Marshal(convertArgsToSlice(a.fields)) + } else { + buf, err = json.Marshal(a.fields) + } + if err != nil { + return "", err + } + return string(buf), nil +} + +// FromParam unpacks the filter Args. +func FromParam(p string) (Args, error) { + if len(p) == 0 { + return NewArgs(), nil + } + + r := strings.NewReader(p) + d := json.NewDecoder(r) + + m := map[string]map[string]bool{} + if err := d.Decode(&m); err != nil { + r.Seek(0, 0) + + // Allow parsing old arguments in slice format. + // Because other libraries might be sending them in this format. + deprecated := map[string][]string{} + if deprecatedErr := d.Decode(&deprecated); deprecatedErr == nil { + m = deprecatedArgs(deprecated) + } else { + return NewArgs(), err + } + } + return Args{m}, nil +} + +// Get returns the list of values associates with a field. +// It returns a slice of strings to keep backwards compatibility with old code. +func (filters Args) Get(field string) []string { + values := filters.fields[field] + if values == nil { + return make([]string, 0) + } + slice := make([]string, 0, len(values)) + for key := range values { + slice = append(slice, key) + } + return slice +} + +// Add adds a new value to a filter field. +func (filters Args) Add(name, value string) { + if _, ok := filters.fields[name]; ok { + filters.fields[name][value] = true + } else { + filters.fields[name] = map[string]bool{value: true} + } +} + +// Del removes a value from a filter field. +func (filters Args) Del(name, value string) { + if _, ok := filters.fields[name]; ok { + delete(filters.fields[name], value) + } +} + +// Len returns the number of fields in the arguments. +func (filters Args) Len() int { + return len(filters.fields) +} + +// MatchKVList returns true if the values for the specified field matches the ones +// from the sources. +// e.g. given Args are {'label': {'label1=1','label2=1'}, 'image.name', {'ubuntu'}}, +// field is 'label' and sources are {'label1': '1', 'label2': '2'} +// it returns true. +func (filters Args) MatchKVList(field string, sources map[string]string) bool { + fieldValues := filters.fields[field] + + //do not filter if there is no filter set or cannot determine filter + if len(fieldValues) == 0 { + return true + } + + if sources == nil || len(sources) == 0 { + return false + } + + for name2match := range fieldValues { + testKV := strings.SplitN(name2match, "=", 2) + + v, ok := sources[testKV[0]] + if !ok { + return false + } + if len(testKV) == 2 && testKV[1] != v { + return false + } + } + + return true +} + +// Match returns true if the values for the specified field matches the source string +// e.g. given Args are {'label': {'label1=1','label2=1'}, 'image.name', {'ubuntu'}}, +// field is 'image.name' and source is 'ubuntu' +// it returns true. +func (filters Args) Match(field, source string) bool { + if filters.ExactMatch(field, source) { + return true + } + + fieldValues := filters.fields[field] + for name2match := range fieldValues { + match, err := regexp.MatchString(name2match, source) + if err != nil { + continue + } + if match { + return true + } + } + return false +} + +// ExactMatch returns true if the source matches exactly one of the filters. +func (filters Args) ExactMatch(field, source string) bool { + fieldValues, ok := filters.fields[field] + //do not filter if there is no filter set or cannot determine filter + if !ok || len(fieldValues) == 0 { + return true + } + + // try to match full name value to avoid O(N) regular expression matching + return fieldValues[source] +} + +// UniqueExactMatch returns true if there is only one filter and the source matches exactly this one. +func (filters Args) UniqueExactMatch(field, source string) bool { + fieldValues := filters.fields[field] + //do not filter if there is no filter set or cannot determine filter + if len(fieldValues) == 0 { + return true + } + if len(filters.fields[field]) != 1 { + return false + } + + // try to match full name value to avoid O(N) regular expression matching + return fieldValues[source] +} + +// FuzzyMatch returns true if the source matches exactly one of the filters, +// or the source has one of the filters as a prefix. +func (filters Args) FuzzyMatch(field, source string) bool { + if filters.ExactMatch(field, source) { + return true + } + + fieldValues := filters.fields[field] + for prefix := range fieldValues { + if strings.HasPrefix(source, prefix) { + return true + } + } + return false +} + +// Include returns true if the name of the field to filter is in the filters. +func (filters Args) Include(field string) bool { + _, ok := filters.fields[field] + return ok +} + +// Validate ensures that all the fields in the filter are valid. +// It returns an error as soon as it finds an invalid field. +func (filters Args) Validate(accepted map[string]bool) error { + for name := range filters.fields { + if !accepted[name] { + return fmt.Errorf("Invalid filter '%s'", name) + } + } + return nil +} + +// WalkValues iterates over the list of filtered values for a field. +// It stops the iteration if it finds an error and it returns that error. +func (filters Args) WalkValues(field string, op func(value string) error) error { + if _, ok := filters.fields[field]; !ok { + return nil + } + for v := range filters.fields[field] { + if err := op(v); err != nil { + return err + } + } + return nil +} + +func deprecatedArgs(d map[string][]string) map[string]map[string]bool { + m := map[string]map[string]bool{} + for k, v := range d { + values := map[string]bool{} + for _, vv := range v { + values[vv] = true + } + m[k] = values + } + return m +} + +func convertArgsToSlice(f map[string]map[string]bool) map[string][]string { + m := map[string][]string{} + for k, v := range f { + values := []string{} + for kk := range v { + if v[kk] { + values = append(values, kk) + } + } + m[k] = values + } + return m +} diff --git a/api/types/filters/parse_test.go b/api/types/filters/parse_test.go new file mode 100644 index 0000000000..b2ed27b9ce --- /dev/null +++ b/api/types/filters/parse_test.go @@ -0,0 +1,417 @@ +package filters + +import ( + "fmt" + "testing" +) + +func TestParseArgs(t *testing.T) { + // equivalent of `docker ps -f 'created=today' -f 'image.name=ubuntu*' -f 'image.name=*untu'` + flagArgs := []string{ + "created=today", + "image.name=ubuntu*", + "image.name=*untu", + } + var ( + args = NewArgs() + err error + ) + for i := range flagArgs { + args, err = ParseFlag(flagArgs[i], args) + if err != nil { + t.Errorf("failed to parse %s: %s", flagArgs[i], err) + } + } + if len(args.Get("created")) != 1 { + t.Errorf("failed to set this arg") + } + if len(args.Get("image.name")) != 2 { + t.Errorf("the args should have collapsed") + } +} + +func TestParseArgsEdgeCase(t *testing.T) { + var filters Args + args, err := ParseFlag("", filters) + if err != nil { + t.Fatal(err) + } + if args.Len() != 0 { + t.Fatalf("Expected an empty Args (map), got %v", args) + } + if args, err = ParseFlag("anything", args); err == nil || err != ErrBadFormat { + t.Fatalf("Expected ErrBadFormat, got %v", err) + } +} + +func TestToParam(t *testing.T) { + fields := map[string]map[string]bool{ + "created": {"today": true}, + "image.name": {"ubuntu*": true, "*untu": true}, + } + a := Args{fields: fields} + + _, err := ToParam(a) + if err != nil { + t.Errorf("failed to marshal the filters: %s", err) + } +} + +func TestToParamWithVersion(t *testing.T) { + fields := map[string]map[string]bool{ + "created": {"today": true}, + "image.name": {"ubuntu*": true, "*untu": true}, + } + a := Args{fields: fields} + + str1, err := ToParamWithVersion("1.21", a) + if err != nil { + t.Errorf("failed to marshal the filters with version < 1.22: %s", err) + } + str2, err := ToParamWithVersion("1.22", a) + if err != nil { + t.Errorf("failed to marshal the filters with version >= 1.22: %s", err) + } + if str1 != `{"created":["today"],"image.name":["*untu","ubuntu*"]}` && + str1 != `{"created":["today"],"image.name":["ubuntu*","*untu"]}` { + t.Errorf("incorrectly marshaled the filters: %s", str1) + } + if str2 != `{"created":{"today":true},"image.name":{"*untu":true,"ubuntu*":true}}` && + str2 != `{"created":{"today":true},"image.name":{"ubuntu*":true,"*untu":true}}` { + t.Errorf("incorrectly marshaled the filters: %s", str2) + } +} + +func TestFromParam(t *testing.T) { + invalids := []string{ + "anything", + "['a','list']", + "{'key': 'value'}", + `{"key": "value"}`, + } + valid := map[*Args][]string{ + &Args{fields: map[string]map[string]bool{"key": {"value": true}}}: { + `{"key": ["value"]}`, + `{"key": {"value": true}}`, + }, + &Args{fields: map[string]map[string]bool{"key": {"value1": true, "value2": true}}}: { + `{"key": ["value1", "value2"]}`, + `{"key": {"value1": true, "value2": true}}`, + }, + &Args{fields: map[string]map[string]bool{"key1": {"value1": true}, "key2": {"value2": true}}}: { + `{"key1": ["value1"], "key2": ["value2"]}`, + `{"key1": {"value1": true}, "key2": {"value2": true}}`, + }, + } + + for _, invalid := range invalids { + if _, err := FromParam(invalid); err == nil { + t.Fatalf("Expected an error with %v, got nothing", invalid) + } + } + + for expectedArgs, matchers := range valid { + for _, json := range matchers { + args, err := FromParam(json) + if err != nil { + t.Fatal(err) + } + if args.Len() != expectedArgs.Len() { + t.Fatalf("Expected %v, go %v", expectedArgs, args) + } + for key, expectedValues := range expectedArgs.fields { + values := args.Get(key) + + if len(values) != len(expectedValues) { + t.Fatalf("Expected %v, go %v", expectedArgs, args) + } + + for _, v := range values { + if !expectedValues[v] { + t.Fatalf("Expected %v, go %v", expectedArgs, args) + } + } + } + } + } +} + +func TestEmpty(t *testing.T) { + a := Args{} + v, err := ToParam(a) + if err != nil { + t.Errorf("failed to marshal the filters: %s", err) + } + v1, err := FromParam(v) + if err != nil { + t.Errorf("%s", err) + } + if a.Len() != v1.Len() { + t.Errorf("these should both be empty sets") + } +} + +func TestArgsMatchKVListEmptySources(t *testing.T) { + args := NewArgs() + if !args.MatchKVList("created", map[string]string{}) { + t.Fatalf("Expected true for (%v,created), got true", args) + } + + args = Args{map[string]map[string]bool{"created": {"today": true}}} + if args.MatchKVList("created", map[string]string{}) { + t.Fatalf("Expected false for (%v,created), got true", args) + } +} + +func TestArgsMatchKVList(t *testing.T) { + // Not empty sources + sources := map[string]string{ + "key1": "value1", + "key2": "value2", + "key3": "value3", + } + + matches := map[*Args]string{ + &Args{}: "field", + &Args{map[string]map[string]bool{ + "created": map[string]bool{"today": true}, + "labels": map[string]bool{"key1": true}}, + }: "labels", + &Args{map[string]map[string]bool{ + "created": map[string]bool{"today": true}, + "labels": map[string]bool{"key1=value1": true}}, + }: "labels", + } + + for args, field := range matches { + if args.MatchKVList(field, sources) != true { + t.Fatalf("Expected true for %v on %v, got false", sources, args) + } + } + + differs := map[*Args]string{ + &Args{map[string]map[string]bool{ + "created": map[string]bool{"today": true}}, + }: "created", + &Args{map[string]map[string]bool{ + "created": map[string]bool{"today": true}, + "labels": map[string]bool{"key4": true}}, + }: "labels", + &Args{map[string]map[string]bool{ + "created": map[string]bool{"today": true}, + "labels": map[string]bool{"key1=value3": true}}, + }: "labels", + } + + for args, field := range differs { + if args.MatchKVList(field, sources) != false { + t.Fatalf("Expected false for %v on %v, got true", sources, args) + } + } +} + +func TestArgsMatch(t *testing.T) { + source := "today" + + matches := map[*Args]string{ + &Args{}: "field", + &Args{map[string]map[string]bool{ + "created": map[string]bool{"today": true}}, + }: "today", + &Args{map[string]map[string]bool{ + "created": map[string]bool{"to*": true}}, + }: "created", + &Args{map[string]map[string]bool{ + "created": map[string]bool{"to(.*)": true}}, + }: "created", + &Args{map[string]map[string]bool{ + "created": map[string]bool{"tod": true}}, + }: "created", + &Args{map[string]map[string]bool{ + "created": map[string]bool{"anyting": true, "to*": true}}, + }: "created", + } + + for args, field := range matches { + if args.Match(field, source) != true { + t.Fatalf("Expected true for %v on %v, got false", source, args) + } + } + + differs := map[*Args]string{ + &Args{map[string]map[string]bool{ + "created": map[string]bool{"tomorrow": true}}, + }: "created", + &Args{map[string]map[string]bool{ + "created": map[string]bool{"to(day": true}}, + }: "created", + &Args{map[string]map[string]bool{ + "created": map[string]bool{"tom(.*)": true}}, + }: "created", + &Args{map[string]map[string]bool{ + "created": map[string]bool{"tom": true}}, + }: "created", + &Args{map[string]map[string]bool{ + "created": map[string]bool{"today1": true}, + "labels": map[string]bool{"today": true}}, + }: "created", + } + + for args, field := range differs { + if args.Match(field, source) != false { + t.Fatalf("Expected false for %v on %v, got true", source, args) + } + } +} + +func TestAdd(t *testing.T) { + f := NewArgs() + f.Add("status", "running") + v := f.fields["status"] + if len(v) != 1 || !v["running"] { + t.Fatalf("Expected to include a running status, got %v", v) + } + + f.Add("status", "paused") + if len(v) != 2 || !v["paused"] { + t.Fatalf("Expected to include a paused status, got %v", v) + } +} + +func TestDel(t *testing.T) { + f := NewArgs() + f.Add("status", "running") + f.Del("status", "running") + v := f.fields["status"] + if v["running"] { + t.Fatalf("Expected to not include a running status filter, got true") + } +} + +func TestLen(t *testing.T) { + f := NewArgs() + if f.Len() != 0 { + t.Fatalf("Expected to not include any field") + } + f.Add("status", "running") + if f.Len() != 1 { + t.Fatalf("Expected to include one field") + } +} + +func TestExactMatch(t *testing.T) { + f := NewArgs() + + if !f.ExactMatch("status", "running") { + t.Fatalf("Expected to match `running` when there are no filters, got false") + } + + f.Add("status", "running") + f.Add("status", "pause*") + + if !f.ExactMatch("status", "running") { + t.Fatalf("Expected to match `running` with one of the filters, got false") + } + + if f.ExactMatch("status", "paused") { + t.Fatalf("Expected to not match `paused` with one of the filters, got true") + } +} + +func TestOnlyOneExactMatch(t *testing.T) { + f := NewArgs() + + if !f.UniqueExactMatch("status", "running") { + t.Fatalf("Expected to match `running` when there are no filters, got false") + } + + f.Add("status", "running") + + if !f.UniqueExactMatch("status", "running") { + t.Fatalf("Expected to match `running` with one of the filters, got false") + } + + if f.UniqueExactMatch("status", "paused") { + t.Fatalf("Expected to not match `paused` with one of the filters, got true") + } + + f.Add("status", "pause") + if f.UniqueExactMatch("status", "running") { + t.Fatalf("Expected to not match only `running` with two filters, got true") + } +} + +func TestInclude(t *testing.T) { + f := NewArgs() + if f.Include("status") { + t.Fatalf("Expected to not include a status key, got true") + } + f.Add("status", "running") + if !f.Include("status") { + t.Fatalf("Expected to include a status key, got false") + } +} + +func TestValidate(t *testing.T) { + f := NewArgs() + f.Add("status", "running") + + valid := map[string]bool{ + "status": true, + "dangling": true, + } + + if err := f.Validate(valid); err != nil { + t.Fatal(err) + } + + f.Add("bogus", "running") + if err := f.Validate(valid); err == nil { + t.Fatalf("Expected to return an error, got nil") + } +} + +func TestWalkValues(t *testing.T) { + f := NewArgs() + f.Add("status", "running") + f.Add("status", "paused") + + f.WalkValues("status", func(value string) error { + if value != "running" && value != "paused" { + t.Fatalf("Unexpected value %s", value) + } + return nil + }) + + err := f.WalkValues("status", func(value string) error { + return fmt.Errorf("return") + }) + if err == nil { + t.Fatalf("Expected to get an error, got nil") + } + + err = f.WalkValues("foo", func(value string) error { + return fmt.Errorf("return") + }) + if err != nil { + t.Fatalf("Expected to not iterate when the field doesn't exist, got %v", err) + } +} + +func TestFuzzyMatch(t *testing.T) { + f := NewArgs() + f.Add("container", "foo") + + cases := map[string]bool{ + "foo": true, + "foobar": true, + "barfoo": false, + "bar": false, + } + for source, match := range cases { + got := f.FuzzyMatch("container", source) + if got != match { + t.Fatalf("Expected %v, got %v: %s", match, got, source) + } + } +} diff --git a/api/types/mount/mount.go b/api/types/mount/mount.go new file mode 100644 index 0000000000..5516ed09db --- /dev/null +++ b/api/types/mount/mount.go @@ -0,0 +1,58 @@ +package mount + +// Type represents the type of a mount. +type Type string + +const ( + // TypeBind BIND + TypeBind Type = "bind" + // TypeVolume VOLUME + TypeVolume Type = "volume" +) + +// Mount represents a mount (volume). +type Mount struct { + Type Type `json:",omitempty"` + Source string `json:",omitempty"` + Target string `json:",omitempty"` + ReadOnly bool `json:",omitempty"` + + BindOptions *BindOptions `json:",omitempty"` + VolumeOptions *VolumeOptions `json:",omitempty"` +} + +// Propagation represents the propagation of a mount. +type Propagation string + +const ( + // PropagationRPrivate RPRIVATE + PropagationRPrivate Propagation = "rprivate" + // PropagationPrivate PRIVATE + PropagationPrivate Propagation = "private" + // PropagationRShared RSHARED + PropagationRShared Propagation = "rshared" + // PropagationShared SHARED + PropagationShared Propagation = "shared" + // PropagationRSlave RSLAVE + PropagationRSlave Propagation = "rslave" + // PropagationSlave SLAVE + PropagationSlave Propagation = "slave" +) + +// BindOptions defines options specific to mounts of type "bind". +type BindOptions struct { + Propagation Propagation `json:",omitempty"` +} + +// VolumeOptions represents the options for a mount of type volume. +type VolumeOptions struct { + NoCopy bool `json:",omitempty"` + Labels map[string]string `json:",omitempty"` + DriverConfig *Driver `json:",omitempty"` +} + +// Driver represents a volume driver. +type Driver struct { + Name string `json:",omitempty"` + Options map[string]string `json:",omitempty"` +} diff --git a/api/types/network/network.go b/api/types/network/network.go new file mode 100644 index 0000000000..47080b652e --- /dev/null +++ b/api/types/network/network.go @@ -0,0 +1,53 @@ +package network + +// Address represents an IP address +type Address struct { + Addr string + PrefixLen int +} + +// IPAM represents IP Address Management +type IPAM struct { + Driver string + Options map[string]string //Per network IPAM driver options + Config []IPAMConfig +} + +// IPAMConfig represents IPAM configurations +type IPAMConfig struct { + Subnet string `json:",omitempty"` + IPRange string `json:",omitempty"` + Gateway string `json:",omitempty"` + AuxAddress map[string]string `json:"AuxiliaryAddresses,omitempty"` +} + +// EndpointIPAMConfig represents IPAM configurations for the endpoint +type EndpointIPAMConfig struct { + IPv4Address string `json:",omitempty"` + IPv6Address string `json:",omitempty"` + LinkLocalIPs []string `json:",omitempty"` +} + +// EndpointSettings stores the network endpoint details +type EndpointSettings struct { + // Configurations + IPAMConfig *EndpointIPAMConfig + Links []string + Aliases []string + // Operational data + NetworkID string + EndpointID string + Gateway string + IPAddress string + IPPrefixLen int + IPv6Gateway string + GlobalIPv6Address string + GlobalIPv6PrefixLen int + MacAddress string +} + +// NetworkingConfig represents the container's networking configuration for each of its interfaces +// Carries the networking configs specified in the `docker run` and `docker network connect` commands +type NetworkingConfig struct { + EndpointsConfig map[string]*EndpointSettings // Endpoint configs for each connecting network +} diff --git a/api/types/plugin.go b/api/types/plugin.go new file mode 100644 index 0000000000..601c0ac12a --- /dev/null +++ b/api/types/plugin.go @@ -0,0 +1,170 @@ +// +build experimental + +package types + +import ( + "encoding/json" + "fmt" +) + +// PluginInstallOptions holds parameters to install a plugin. +type PluginInstallOptions struct { + Disabled bool + AcceptAllPermissions bool + RegistryAuth string // RegistryAuth is the base64 encoded credentials for the registry + PrivilegeFunc RequestPrivilegeFunc + AcceptPermissionsFunc func(PluginPrivileges) (bool, error) +} + +// PluginConfig represents the values of settings potentially modifiable by a user +type PluginConfig struct { + Mounts []PluginMount + Env []string + Args []string + Devices []PluginDevice +} + +// Plugin represents a Docker plugin for the remote API +type Plugin struct { + ID string `json:"Id,omitempty"` + Name string + Tag string + // Enabled is true when the plugin is running, is false when the plugin is not running, only installed. + Enabled bool + Config PluginConfig + Manifest PluginManifest +} + +// PluginsListResponse contains the response for the remote API +type PluginsListResponse []*Plugin + +const ( + authzDriver = "AuthzDriver" + graphDriver = "GraphDriver" + ipamDriver = "IpamDriver" + networkDriver = "NetworkDriver" + volumeDriver = "VolumeDriver" +) + +// PluginInterfaceType represents a type that a plugin implements. +type PluginInterfaceType struct { + Prefix string // This is always "docker" + Capability string // Capability should be validated against the above list. + Version string // Plugin API version. Depends on the capability +} + +// UnmarshalJSON implements json.Unmarshaler for PluginInterfaceType +func (t *PluginInterfaceType) UnmarshalJSON(p []byte) error { + versionIndex := len(p) + prefixIndex := 0 + if len(p) < 2 || p[0] != '"' || p[len(p)-1] != '"' { + return fmt.Errorf("%q is not a plugin interface type", p) + } + p = p[1 : len(p)-1] +loop: + for i, b := range p { + switch b { + case '.': + prefixIndex = i + case '/': + versionIndex = i + break loop + } + } + t.Prefix = string(p[:prefixIndex]) + t.Capability = string(p[prefixIndex+1 : versionIndex]) + if versionIndex < len(p) { + t.Version = string(p[versionIndex+1:]) + } + return nil +} + +// MarshalJSON implements json.Marshaler for PluginInterfaceType +func (t *PluginInterfaceType) MarshalJSON() ([]byte, error) { + return json.Marshal(t.String()) +} + +// String implements fmt.Stringer for PluginInterfaceType +func (t PluginInterfaceType) String() string { + return fmt.Sprintf("%s.%s/%s", t.Prefix, t.Capability, t.Version) +} + +// PluginInterface describes the interface between Docker and plugin +type PluginInterface struct { + Types []PluginInterfaceType + Socket string +} + +// PluginSetting is to be embedded in other structs, if they are supposed to be +// modifiable by the user. +type PluginSetting struct { + Name string + Description string + Settable []string +} + +// PluginNetwork represents the network configuration for a plugin +type PluginNetwork struct { + Type string +} + +// PluginMount represents the mount configuration for a plugin +type PluginMount struct { + PluginSetting + Source *string + Destination string + Type string + Options []string +} + +// PluginEnv represents an environment variable for a plugin +type PluginEnv struct { + PluginSetting + Value *string +} + +// PluginArgs represents the command line arguments for a plugin +type PluginArgs struct { + PluginSetting + Value []string +} + +// PluginDevice represents a device for a plugin +type PluginDevice struct { + PluginSetting + Path *string +} + +// PluginUser represents the user for the plugin's process +type PluginUser struct { + UID uint32 `json:"Uid,omitempty"` + GID uint32 `json:"Gid,omitempty"` +} + +// PluginManifest represents the manifest of a plugin +type PluginManifest struct { + ManifestVersion string + Description string + Documentation string + Interface PluginInterface + Entrypoint []string + Workdir string + User PluginUser `json:",omitempty"` + Network PluginNetwork + Capabilities []string + Mounts []PluginMount + Devices []PluginDevice + Env []PluginEnv + Args PluginArgs +} + +// PluginPrivilege describes a permission the user has to accept +// upon installing a plugin. +type PluginPrivilege struct { + Name string + Description string + Value []string +} + +// PluginPrivileges is a list of PluginPrivilege +type PluginPrivileges []PluginPrivilege diff --git a/api/types/reference/image_reference.go b/api/types/reference/image_reference.go new file mode 100644 index 0000000000..be9cf8ebed --- /dev/null +++ b/api/types/reference/image_reference.go @@ -0,0 +1,34 @@ +package reference + +import ( + distreference "github.com/docker/distribution/reference" +) + +// Parse parses the given references and returns the repository and +// tag (if present) from it. If there is an error during parsing, it will +// return an error. +func Parse(ref string) (string, string, error) { + distributionRef, err := distreference.ParseNamed(ref) + if err != nil { + return "", "", err + } + + tag := GetTagFromNamedRef(distributionRef) + return distributionRef.Name(), tag, nil +} + +// GetTagFromNamedRef returns a tag from the specified reference. +// This function is necessary as long as the docker "server" api makes the distinction between repository +// and tags. +func GetTagFromNamedRef(ref distreference.Named) string { + var tag string + switch x := ref.(type) { + case distreference.Digested: + tag = x.Digest().String() + case distreference.NamedTagged: + tag = x.Tag() + default: + tag = "latest" + } + return tag +} diff --git a/api/types/reference/image_reference_test.go b/api/types/reference/image_reference_test.go new file mode 100644 index 0000000000..61fb676b6c --- /dev/null +++ b/api/types/reference/image_reference_test.go @@ -0,0 +1,72 @@ +package reference + +import ( + "testing" +) + +func TestParse(t *testing.T) { + testCases := []struct { + ref string + expectedName string + expectedTag string + expectedError bool + }{ + { + ref: "", + expectedName: "", + expectedTag: "", + expectedError: true, + }, + { + ref: "repository", + expectedName: "repository", + expectedTag: "latest", + expectedError: false, + }, + { + ref: "repository:tag", + expectedName: "repository", + expectedTag: "tag", + expectedError: false, + }, + { + ref: "test.com/repository", + expectedName: "test.com/repository", + expectedTag: "latest", + expectedError: false, + }, + { + ref: "test.com:5000/test/repository", + expectedName: "test.com:5000/test/repository", + expectedTag: "latest", + expectedError: false, + }, + { + ref: "test.com:5000/repo@sha256:ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + expectedName: "test.com:5000/repo", + expectedTag: "sha256:ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + expectedError: false, + }, + { + ref: "test.com:5000/repo:tag@sha256:ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + expectedName: "test.com:5000/repo", + expectedTag: "sha256:ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff", + expectedError: false, + }, + } + + for _, c := range testCases { + name, tag, err := Parse(c.ref) + if err != nil && c.expectedError { + continue + } else if err != nil { + t.Fatalf("error with %s: %s", c.ref, err.Error()) + } + if name != c.expectedName { + t.Fatalf("expected name %s, got %s", c.expectedName, name) + } + if tag != c.expectedTag { + t.Fatalf("expected tag %s, got %s", c.expectedTag, tag) + } + } +} diff --git a/api/types/registry/registry.go b/api/types/registry/registry.go new file mode 100644 index 0000000000..28fafab901 --- /dev/null +++ b/api/types/registry/registry.go @@ -0,0 +1,104 @@ +package registry + +import ( + "encoding/json" + "net" +) + +// ServiceConfig stores daemon registry services configuration. +type ServiceConfig struct { + InsecureRegistryCIDRs []*NetIPNet `json:"InsecureRegistryCIDRs"` + IndexConfigs map[string]*IndexInfo `json:"IndexConfigs"` + Mirrors []string +} + +// NetIPNet is the net.IPNet type, which can be marshalled and +// unmarshalled to JSON +type NetIPNet net.IPNet + +// String returns the CIDR notation of ipnet +func (ipnet *NetIPNet) String() string { + return (*net.IPNet)(ipnet).String() +} + +// MarshalJSON returns the JSON representation of the IPNet +func (ipnet *NetIPNet) MarshalJSON() ([]byte, error) { + return json.Marshal((*net.IPNet)(ipnet).String()) +} + +// UnmarshalJSON sets the IPNet from a byte array of JSON +func (ipnet *NetIPNet) UnmarshalJSON(b []byte) (err error) { + var ipnetStr string + if err = json.Unmarshal(b, &ipnetStr); err == nil { + var cidr *net.IPNet + if _, cidr, err = net.ParseCIDR(ipnetStr); err == nil { + *ipnet = NetIPNet(*cidr) + } + } + return +} + +// IndexInfo contains information about a registry +// +// RepositoryInfo Examples: +// { +// "Index" : { +// "Name" : "docker.io", +// "Mirrors" : ["https://registry-2.docker.io/v1/", "https://registry-3.docker.io/v1/"], +// "Secure" : true, +// "Official" : true, +// }, +// "RemoteName" : "library/debian", +// "LocalName" : "debian", +// "CanonicalName" : "docker.io/debian" +// "Official" : true, +// } +// +// { +// "Index" : { +// "Name" : "127.0.0.1:5000", +// "Mirrors" : [], +// "Secure" : false, +// "Official" : false, +// }, +// "RemoteName" : "user/repo", +// "LocalName" : "127.0.0.1:5000/user/repo", +// "CanonicalName" : "127.0.0.1:5000/user/repo", +// "Official" : false, +// } +type IndexInfo struct { + // Name is the name of the registry, such as "docker.io" + Name string + // Mirrors is a list of mirrors, expressed as URIs + Mirrors []string + // Secure is set to false if the registry is part of the list of + // insecure registries. Insecure registries accept HTTP and/or accept + // HTTPS with certificates from unknown CAs. + Secure bool + // Official indicates whether this is an official registry + Official bool +} + +// SearchResult describes a search result returned from a registry +type SearchResult struct { + // StarCount indicates the number of stars this repository has + StarCount int `json:"star_count"` + // IsOfficial is true if the result is from an official repository. + IsOfficial bool `json:"is_official"` + // Name is the name of the repository + Name string `json:"name"` + // IsAutomated indicates whether the result is automated + IsAutomated bool `json:"is_automated"` + // Description is a textual description of the repository + Description string `json:"description"` +} + +// SearchResults lists a collection search results returned from a registry +type SearchResults struct { + // Query contains the query string that generated the search results + Query string `json:"query"` + // NumResults indicates the number of results the query returned + NumResults int `json:"num_results"` + // Results is a slice containing the actual results for the search + Results []SearchResult `json:"results"` +} diff --git a/api/types/seccomp.go b/api/types/seccomp.go new file mode 100644 index 0000000000..4f02ef36b8 --- /dev/null +++ b/api/types/seccomp.go @@ -0,0 +1,93 @@ +package types + +// Seccomp represents the config for a seccomp profile for syscall restriction. +type Seccomp struct { + DefaultAction Action `json:"defaultAction"` + // Architectures is kept to maintain backward compatibility with the old + // seccomp profile. + Architectures []Arch `json:"architectures,omitempty"` + ArchMap []Architecture `json:"archMap,omitempty"` + Syscalls []*Syscall `json:"syscalls"` +} + +// Architecture is used to represent an specific architecture +// and its sub-architectures +type Architecture struct { + Arch Arch `json:"architecture"` + SubArches []Arch `json:"subArchitectures"` +} + +// Arch used for architectures +type Arch string + +// Additional architectures permitted to be used for system calls +// By default only the native architecture of the kernel is permitted +const ( + ArchX86 Arch = "SCMP_ARCH_X86" + ArchX86_64 Arch = "SCMP_ARCH_X86_64" + ArchX32 Arch = "SCMP_ARCH_X32" + ArchARM Arch = "SCMP_ARCH_ARM" + ArchAARCH64 Arch = "SCMP_ARCH_AARCH64" + ArchMIPS Arch = "SCMP_ARCH_MIPS" + ArchMIPS64 Arch = "SCMP_ARCH_MIPS64" + ArchMIPS64N32 Arch = "SCMP_ARCH_MIPS64N32" + ArchMIPSEL Arch = "SCMP_ARCH_MIPSEL" + ArchMIPSEL64 Arch = "SCMP_ARCH_MIPSEL64" + ArchMIPSEL64N32 Arch = "SCMP_ARCH_MIPSEL64N32" + ArchPPC Arch = "SCMP_ARCH_PPC" + ArchPPC64 Arch = "SCMP_ARCH_PPC64" + ArchPPC64LE Arch = "SCMP_ARCH_PPC64LE" + ArchS390 Arch = "SCMP_ARCH_S390" + ArchS390X Arch = "SCMP_ARCH_S390X" +) + +// Action taken upon Seccomp rule match +type Action string + +// Define actions for Seccomp rules +const ( + ActKill Action = "SCMP_ACT_KILL" + ActTrap Action = "SCMP_ACT_TRAP" + ActErrno Action = "SCMP_ACT_ERRNO" + ActTrace Action = "SCMP_ACT_TRACE" + ActAllow Action = "SCMP_ACT_ALLOW" +) + +// Operator used to match syscall arguments in Seccomp +type Operator string + +// Define operators for syscall arguments in Seccomp +const ( + OpNotEqual Operator = "SCMP_CMP_NE" + OpLessThan Operator = "SCMP_CMP_LT" + OpLessEqual Operator = "SCMP_CMP_LE" + OpEqualTo Operator = "SCMP_CMP_EQ" + OpGreaterEqual Operator = "SCMP_CMP_GE" + OpGreaterThan Operator = "SCMP_CMP_GT" + OpMaskedEqual Operator = "SCMP_CMP_MASKED_EQ" +) + +// Arg used for matching specific syscall arguments in Seccomp +type Arg struct { + Index uint `json:"index"` + Value uint64 `json:"value"` + ValueTwo uint64 `json:"valueTwo"` + Op Operator `json:"op"` +} + +// Filter is used to conditionally apply Seccomp rules +type Filter struct { + Caps []string `json:"caps,omitempty"` + Arches []string `json:"arches,omitempty"` +} + +// Syscall is used to match a group of syscalls in Seccomp +type Syscall struct { + Name string `json:"name,omitempty"` + Names []string `json:"names,omitempty"` + Action Action `json:"action"` + Args []*Arg `json:"args"` + Comment string `json:"comment"` + Includes Filter `json:"includes"` + Excludes Filter `json:"excludes"` +} diff --git a/api/types/stats.go b/api/types/stats.go new file mode 100644 index 0000000000..b420ebe7f6 --- /dev/null +++ b/api/types/stats.go @@ -0,0 +1,115 @@ +// Package types is used for API stability in the types and response to the +// consumers of the API stats endpoint. +package types + +import "time" + +// ThrottlingData stores CPU throttling stats of one running container +type ThrottlingData struct { + // Number of periods with throttling active + Periods uint64 `json:"periods"` + // Number of periods when the container hits its throttling limit. + ThrottledPeriods uint64 `json:"throttled_periods"` + // Aggregate time the container was throttled for in nanoseconds. + ThrottledTime uint64 `json:"throttled_time"` +} + +// CPUUsage stores All CPU stats aggregated since container inception. +type CPUUsage struct { + // Total CPU time consumed. + // Units: nanoseconds. + TotalUsage uint64 `json:"total_usage"` + // Total CPU time consumed per core. + // Units: nanoseconds. + PercpuUsage []uint64 `json:"percpu_usage"` + // Time spent by tasks of the cgroup in kernel mode. + // Units: nanoseconds. + UsageInKernelmode uint64 `json:"usage_in_kernelmode"` + // Time spent by tasks of the cgroup in user mode. + // Units: nanoseconds. + UsageInUsermode uint64 `json:"usage_in_usermode"` +} + +// CPUStats aggregates and wraps all CPU related info of container +type CPUStats struct { + CPUUsage CPUUsage `json:"cpu_usage"` + SystemUsage uint64 `json:"system_cpu_usage"` + ThrottlingData ThrottlingData `json:"throttling_data,omitempty"` +} + +// MemoryStats aggregates All memory stats since container inception +type MemoryStats struct { + // current res_counter usage for memory + Usage uint64 `json:"usage"` + // maximum usage ever recorded. + MaxUsage uint64 `json:"max_usage"` + // TODO(vishh): Export these as stronger types. + // all the stats exported via memory.stat. + Stats map[string]uint64 `json:"stats"` + // number of times memory usage hits limits. + Failcnt uint64 `json:"failcnt"` + Limit uint64 `json:"limit"` +} + +// BlkioStatEntry is one small entity to store a piece of Blkio stats +// TODO Windows: This can be factored out +type BlkioStatEntry struct { + Major uint64 `json:"major"` + Minor uint64 `json:"minor"` + Op string `json:"op"` + Value uint64 `json:"value"` +} + +// BlkioStats stores All IO service stats for data read and write +// TODO Windows: This can be factored out +type BlkioStats struct { + // number of bytes transferred to and from the block device + IoServiceBytesRecursive []BlkioStatEntry `json:"io_service_bytes_recursive"` + IoServicedRecursive []BlkioStatEntry `json:"io_serviced_recursive"` + IoQueuedRecursive []BlkioStatEntry `json:"io_queue_recursive"` + IoServiceTimeRecursive []BlkioStatEntry `json:"io_service_time_recursive"` + IoWaitTimeRecursive []BlkioStatEntry `json:"io_wait_time_recursive"` + IoMergedRecursive []BlkioStatEntry `json:"io_merged_recursive"` + IoTimeRecursive []BlkioStatEntry `json:"io_time_recursive"` + SectorsRecursive []BlkioStatEntry `json:"sectors_recursive"` +} + +// NetworkStats aggregates All network stats of one container +// TODO Windows: This will require refactoring +type NetworkStats struct { + RxBytes uint64 `json:"rx_bytes"` + RxPackets uint64 `json:"rx_packets"` + RxErrors uint64 `json:"rx_errors"` + RxDropped uint64 `json:"rx_dropped"` + TxBytes uint64 `json:"tx_bytes"` + TxPackets uint64 `json:"tx_packets"` + TxErrors uint64 `json:"tx_errors"` + TxDropped uint64 `json:"tx_dropped"` +} + +// PidsStats contains the stats of a container's pids +type PidsStats struct { + // Current is the number of pids in the cgroup + Current uint64 `json:"current,omitempty"` + // Limit is the hard limit on the number of pids in the cgroup. + // A "Limit" of 0 means that there is no limit. + Limit uint64 `json:"limit,omitempty"` +} + +// Stats is Ultimate struct aggregating all types of stats of one container +type Stats struct { + Read time.Time `json:"read"` + PreCPUStats CPUStats `json:"precpu_stats,omitempty"` + CPUStats CPUStats `json:"cpu_stats,omitempty"` + MemoryStats MemoryStats `json:"memory_stats,omitempty"` + BlkioStats BlkioStats `json:"blkio_stats,omitempty"` + PidsStats PidsStats `json:"pids_stats,omitempty"` +} + +// StatsJSON is newly used Networks +type StatsJSON struct { + Stats + + // Networks request version >=1.21 + Networks map[string]NetworkStats `json:"networks,omitempty"` +} diff --git a/api/types/strslice/strslice.go b/api/types/strslice/strslice.go new file mode 100644 index 0000000000..bad493fb89 --- /dev/null +++ b/api/types/strslice/strslice.go @@ -0,0 +1,30 @@ +package strslice + +import "encoding/json" + +// StrSlice represents a string or an array of strings. +// We need to override the json decoder to accept both options. +type StrSlice []string + +// UnmarshalJSON decodes the byte slice whether it's a string or an array of +// strings. This method is needed to implement json.Unmarshaler. +func (e *StrSlice) UnmarshalJSON(b []byte) error { + if len(b) == 0 { + // With no input, we preserve the existing value by returning nil and + // leaving the target alone. This allows defining default values for + // the type. + return nil + } + + p := make([]string, 0, 1) + if err := json.Unmarshal(b, &p); err != nil { + var s string + if err := json.Unmarshal(b, &s); err != nil { + return err + } + p = append(p, s) + } + + *e = p + return nil +} diff --git a/api/types/strslice/strslice_test.go b/api/types/strslice/strslice_test.go new file mode 100644 index 0000000000..1163b3652c --- /dev/null +++ b/api/types/strslice/strslice_test.go @@ -0,0 +1,86 @@ +package strslice + +import ( + "encoding/json" + "reflect" + "testing" +) + +func TestStrSliceMarshalJSON(t *testing.T) { + for _, testcase := range []struct { + input StrSlice + expected string + }{ + // MADNESS(stevvooe): No clue why nil would be "" but empty would be + // "null". Had to make a change here that may affect compatibility. + {input: nil, expected: "null"}, + {StrSlice{}, "[]"}, + {StrSlice{"/bin/sh", "-c", "echo"}, `["/bin/sh","-c","echo"]`}, + } { + data, err := json.Marshal(testcase.input) + if err != nil { + t.Fatal(err) + } + if string(data) != testcase.expected { + t.Fatalf("%#v: expected %v, got %v", testcase.input, testcase.expected, string(data)) + } + } +} + +func TestStrSliceUnmarshalJSON(t *testing.T) { + parts := map[string][]string{ + "": {"default", "values"}, + "[]": {}, + `["/bin/sh","-c","echo"]`: {"/bin/sh", "-c", "echo"}, + } + for json, expectedParts := range parts { + strs := StrSlice{"default", "values"} + if err := strs.UnmarshalJSON([]byte(json)); err != nil { + t.Fatal(err) + } + + actualParts := []string(strs) + if !reflect.DeepEqual(actualParts, expectedParts) { + t.Fatalf("%#v: expected %v, got %v", json, expectedParts, actualParts) + } + + } +} + +func TestStrSliceUnmarshalString(t *testing.T) { + var e StrSlice + echo, err := json.Marshal("echo") + if err != nil { + t.Fatal(err) + } + if err := json.Unmarshal(echo, &e); err != nil { + t.Fatal(err) + } + + if len(e) != 1 { + t.Fatalf("expected 1 element after unmarshal: %q", e) + } + + if e[0] != "echo" { + t.Fatalf("expected `echo`, got: %q", e[0]) + } +} + +func TestStrSliceUnmarshalSlice(t *testing.T) { + var e StrSlice + echo, err := json.Marshal([]string{"echo"}) + if err != nil { + t.Fatal(err) + } + if err := json.Unmarshal(echo, &e); err != nil { + t.Fatal(err) + } + + if len(e) != 1 { + t.Fatalf("expected 1 element after unmarshal: %q", e) + } + + if e[0] != "echo" { + t.Fatalf("expected `echo`, got: %q", e[0]) + } +} diff --git a/api/types/swarm/common.go b/api/types/swarm/common.go new file mode 100644 index 0000000000..b87f545369 --- /dev/null +++ b/api/types/swarm/common.go @@ -0,0 +1,21 @@ +package swarm + +import "time" + +// Version represent the internal object version. +type Version struct { + Index uint64 `json:",omitempty"` +} + +// Meta is base object inherited by most of the other once. +type Meta struct { + Version Version `json:",omitempty"` + CreatedAt time.Time `json:",omitempty"` + UpdatedAt time.Time `json:",omitempty"` +} + +// Annotations represents how to describe an object. +type Annotations struct { + Name string `json:",omitempty"` + Labels map[string]string `json:",omitempty"` +} diff --git a/api/types/swarm/container.go b/api/types/swarm/container.go new file mode 100644 index 0000000000..4a84f2e53f --- /dev/null +++ b/api/types/swarm/container.go @@ -0,0 +1,22 @@ +package swarm + +import ( + "time" + + "github.com/docker/docker/api/types/mount" +) + +// ContainerSpec represents the spec of a container. +type ContainerSpec struct { + Image string `json:",omitempty"` + Labels map[string]string `json:",omitempty"` + Command []string `json:",omitempty"` + Args []string `json:",omitempty"` + Env []string `json:",omitempty"` + Dir string `json:",omitempty"` + User string `json:",omitempty"` + Groups []string `json:",omitempty"` + TTY bool `json:",omitempty"` + Mounts []mount.Mount `json:",omitempty"` + StopGracePeriod *time.Duration `json:",omitempty"` +} diff --git a/api/types/swarm/network.go b/api/types/swarm/network.go new file mode 100644 index 0000000000..0af0ce1daa --- /dev/null +++ b/api/types/swarm/network.go @@ -0,0 +1,100 @@ +package swarm + +// Endpoint represents an endpoint. +type Endpoint struct { + Spec EndpointSpec `json:",omitempty"` + Ports []PortConfig `json:",omitempty"` + VirtualIPs []EndpointVirtualIP `json:",omitempty"` +} + +// EndpointSpec represents the spec of an endpoint. +type EndpointSpec struct { + Mode ResolutionMode `json:",omitempty"` + Ports []PortConfig `json:",omitempty"` +} + +// ResolutionMode represents a resolution mode. +type ResolutionMode string + +const ( + // ResolutionModeVIP VIP + ResolutionModeVIP ResolutionMode = "vip" + // ResolutionModeDNSRR DNSRR + ResolutionModeDNSRR ResolutionMode = "dnsrr" +) + +// PortConfig represents the config of a port. +type PortConfig struct { + Name string `json:",omitempty"` + Protocol PortConfigProtocol `json:",omitempty"` + TargetPort uint32 `json:",omitempty"` + PublishedPort uint32 `json:",omitempty"` +} + +// PortConfigProtocol represents the protocol of a port. +type PortConfigProtocol string + +const ( + // TODO(stevvooe): These should be used generally, not just for PortConfig. + + // PortConfigProtocolTCP TCP + PortConfigProtocolTCP PortConfigProtocol = "tcp" + // PortConfigProtocolUDP UDP + PortConfigProtocolUDP PortConfigProtocol = "udp" +) + +// EndpointVirtualIP represents the virtual ip of a port. +type EndpointVirtualIP struct { + NetworkID string `json:",omitempty"` + Addr string `json:",omitempty"` +} + +// Network represents a network. +type Network struct { + ID string + Meta + Spec NetworkSpec `json:",omitempty"` + DriverState Driver `json:",omitempty"` + IPAMOptions *IPAMOptions `json:",omitempty"` +} + +// NetworkSpec represents the spec of a network. +type NetworkSpec struct { + Annotations + DriverConfiguration *Driver `json:",omitempty"` + IPv6Enabled bool `json:",omitempty"` + Internal bool `json:",omitempty"` + Attachable bool `json:",omitempty"` + IPAMOptions *IPAMOptions `json:",omitempty"` +} + +// NetworkAttachmentConfig represents the configuration of a network attachment. +type NetworkAttachmentConfig struct { + Target string `json:",omitempty"` + Aliases []string `json:",omitempty"` +} + +// NetworkAttachment represents a network attachment. +type NetworkAttachment struct { + Network Network `json:",omitempty"` + Addresses []string `json:",omitempty"` +} + +// IPAMOptions represents ipam options. +type IPAMOptions struct { + Driver Driver `json:",omitempty"` + Configs []IPAMConfig `json:",omitempty"` +} + +// IPAMConfig represents ipam configuration. +type IPAMConfig struct { + Subnet string `json:",omitempty"` + Range string `json:",omitempty"` + Gateway string `json:",omitempty"` +} + +// Driver represents a network driver. +type Driver struct { + Name string `json:",omitempty"` + Options map[string]string `json:",omitempty"` +} diff --git a/api/types/swarm/node.go b/api/types/swarm/node.go new file mode 100644 index 0000000000..9987662a58 --- /dev/null +++ b/api/types/swarm/node.go @@ -0,0 +1,107 @@ +package swarm + +// Node represents a node. +type Node struct { + ID string + Meta + + Spec NodeSpec `json:",omitempty"` + Description NodeDescription `json:",omitempty"` + Status NodeStatus `json:",omitempty"` + ManagerStatus *ManagerStatus `json:",omitempty"` +} + +// NodeSpec represents the spec of a node. +type NodeSpec struct { + Annotations + Role NodeRole `json:",omitempty"` + Availability NodeAvailability `json:",omitempty"` +} + +// NodeRole represents the role of a node. +type NodeRole string + +const ( + // NodeRoleWorker WORKER + NodeRoleWorker NodeRole = "worker" + // NodeRoleManager MANAGER + NodeRoleManager NodeRole = "manager" +) + +// NodeAvailability represents the availability of a node. +type NodeAvailability string + +const ( + // NodeAvailabilityActive ACTIVE + NodeAvailabilityActive NodeAvailability = "active" + // NodeAvailabilityPause PAUSE + NodeAvailabilityPause NodeAvailability = "pause" + // NodeAvailabilityDrain DRAIN + NodeAvailabilityDrain NodeAvailability = "drain" +) + +// NodeDescription represents the description of a node. +type NodeDescription struct { + Hostname string `json:",omitempty"` + Platform Platform `json:",omitempty"` + Resources Resources `json:",omitempty"` + Engine EngineDescription `json:",omitempty"` +} + +// Platform represents the platfrom (Arch/OS). +type Platform struct { + Architecture string `json:",omitempty"` + OS string `json:",omitempty"` +} + +// EngineDescription represents the description of an engine. +type EngineDescription struct { + EngineVersion string `json:",omitempty"` + Labels map[string]string `json:",omitempty"` + Plugins []PluginDescription `json:",omitempty"` +} + +// PluginDescription represents the description of an engine plugin. +type PluginDescription struct { + Type string `json:",omitempty"` + Name string `json:",omitempty"` +} + +// NodeStatus represents the status of a node. +type NodeStatus struct { + State NodeState `json:",omitempty"` + Message string `json:",omitempty"` +} + +// Reachability represents the reachability of a node. +type Reachability string + +const ( + // ReachabilityUnknown UNKNOWN + ReachabilityUnknown Reachability = "unknown" + // ReachabilityUnreachable UNREACHABLE + ReachabilityUnreachable Reachability = "unreachable" + // ReachabilityReachable REACHABLE + ReachabilityReachable Reachability = "reachable" +) + +// ManagerStatus represents the status of a manager. +type ManagerStatus struct { + Leader bool `json:",omitempty"` + Reachability Reachability `json:",omitempty"` + Addr string `json:",omitempty"` +} + +// NodeState represents the state of a node. +type NodeState string + +const ( + // NodeStateUnknown UNKNOWN + NodeStateUnknown NodeState = "unknown" + // NodeStateDown DOWN + NodeStateDown NodeState = "down" + // NodeStateReady READY + NodeStateReady NodeState = "ready" + // NodeStateDisconnected DISCONNECTED + NodeStateDisconnected NodeState = "disconnected" +) diff --git a/api/types/swarm/service.go b/api/types/swarm/service.go new file mode 100644 index 0000000000..d679c45406 --- /dev/null +++ b/api/types/swarm/service.go @@ -0,0 +1,77 @@ +package swarm + +import "time" + +// Service represents a service. +type Service struct { + ID string + Meta + Spec ServiceSpec `json:",omitempty"` + Endpoint Endpoint `json:",omitempty"` + UpdateStatus UpdateStatus `json:",omitempty"` +} + +// ServiceSpec represents the spec of a service. +type ServiceSpec struct { + Annotations + + // TaskTemplate defines how the service should construct new tasks when + // orchestrating this service. + TaskTemplate TaskSpec `json:",omitempty"` + Mode ServiceMode `json:",omitempty"` + UpdateConfig *UpdateConfig `json:",omitempty"` + + // Networks field in ServiceSpec is being deprecated. Users of + // engine-api should start using the same field in + // TaskSpec. This field will be removed in future releases. + Networks []NetworkAttachmentConfig `json:",omitempty"` + EndpointSpec *EndpointSpec `json:",omitempty"` +} + +// ServiceMode represents the mode of a service. +type ServiceMode struct { + Replicated *ReplicatedService `json:",omitempty"` + Global *GlobalService `json:",omitempty"` +} + +// UpdateState is the state of a service update. +type UpdateState string + +const ( + // UpdateStateUpdating is the updating state. + UpdateStateUpdating UpdateState = "updating" + // UpdateStatePaused is the paused state. + UpdateStatePaused UpdateState = "paused" + // UpdateStateCompleted is the completed state. + UpdateStateCompleted UpdateState = "completed" +) + +// UpdateStatus reports the status of a service update. +type UpdateStatus struct { + State UpdateState `json:",omitempty"` + StartedAt time.Time `json:",omitempty"` + CompletedAt time.Time `json:",omitempty"` + Message string `json:",omitempty"` +} + +// ReplicatedService is a kind of ServiceMode. +type ReplicatedService struct { + Replicas *uint64 `json:",omitempty"` +} + +// GlobalService is a kind of ServiceMode. +type GlobalService struct{} + +const ( + // UpdateFailureActionPause PAUSE + UpdateFailureActionPause = "pause" + // UpdateFailureActionContinue CONTINUE + UpdateFailureActionContinue = "continue" +) + +// UpdateConfig represents the update configuration. +type UpdateConfig struct { + Parallelism uint64 `json:",omitempty"` + Delay time.Duration `json:",omitempty"` + FailureAction string `json:",omitempty"` +} diff --git a/api/types/swarm/swarm.go b/api/types/swarm/swarm.go new file mode 100644 index 0000000000..23b2e6affe --- /dev/null +++ b/api/types/swarm/swarm.go @@ -0,0 +1,155 @@ +package swarm + +import "time" + +// ClusterInfo represents info about the cluster for outputing in "info" +// it contains the same information as "Swarm", but without the JoinTokens +type ClusterInfo struct { + ID string + Meta + Spec Spec +} + +// Swarm represents a swarm. +type Swarm struct { + ClusterInfo + JoinTokens JoinTokens +} + +// JoinTokens contains the tokens workers and managers need to join the swarm. +type JoinTokens struct { + Worker string + Manager string +} + +// Spec represents the spec of a swarm. +type Spec struct { + Annotations + + Orchestration OrchestrationConfig `json:",omitempty"` + Raft RaftConfig `json:",omitempty"` + Dispatcher DispatcherConfig `json:",omitempty"` + CAConfig CAConfig `json:",omitempty"` + TaskDefaults TaskDefaults `json:",omitempty"` +} + +// OrchestrationConfig represents orchestration configuration. +type OrchestrationConfig struct { + TaskHistoryRetentionLimit int64 `json:",omitempty"` +} + +// TaskDefaults parameterizes cluster-level task creation with default values. +type TaskDefaults struct { + // LogDriver selects the log driver to use for tasks created in the + // orchestrator if unspecified by a service. + // + // Updating this value will only have an affect on new tasks. Old tasks + // will continue use their previously configured log driver until + // recreated. + LogDriver *Driver `json:",omitempty"` +} + +// RaftConfig represents raft configuration. +type RaftConfig struct { + SnapshotInterval uint64 `json:",omitempty"` + KeepOldSnapshots uint64 `json:",omitempty"` + LogEntriesForSlowFollowers uint64 `json:",omitempty"` + + // ElectionTick is the number of ticks that a follower will wait for a message + // from the leader before becoming a candidate and starting an election. + // ElectionTick must be greater than HeartbeatTick. + // + // A tick currently defaults to one second, so these translate directly to + // seconds currently, but this is NOT guaranteed. + ElectionTick int + + // HeartbeatTick is the number of ticks between heartbeats. Every + // HeartbeatTick ticks, the leader will send a heartbeat to the + // followers. + // + // A tick currently defaults to one second, so these translate directly to + // seconds currently, but this is NOT guaranteed. + HeartbeatTick int +} + +// DispatcherConfig represents dispatcher configuration. +type DispatcherConfig struct { + HeartbeatPeriod time.Duration `json:",omitempty"` +} + +// CAConfig represents CA configuration. +type CAConfig struct { + NodeCertExpiry time.Duration `json:",omitempty"` + ExternalCAs []*ExternalCA `json:",omitempty"` +} + +// ExternalCAProtocol represents type of external CA. +type ExternalCAProtocol string + +// ExternalCAProtocolCFSSL CFSSL +const ExternalCAProtocolCFSSL ExternalCAProtocol = "cfssl" + +// ExternalCA defines external CA to be used by the cluster. +type ExternalCA struct { + Protocol ExternalCAProtocol + URL string + Options map[string]string `json:",omitempty"` +} + +// InitRequest is the request used to init a swarm. +type InitRequest struct { + ListenAddr string + AdvertiseAddr string + ForceNewCluster bool + Spec Spec +} + +// JoinRequest is the request used to join a swarm. +type JoinRequest struct { + ListenAddr string + AdvertiseAddr string + RemoteAddrs []string + JoinToken string // accept by secret +} + +// LocalNodeState represents the state of the local node. +type LocalNodeState string + +const ( + // LocalNodeStateInactive INACTIVE + LocalNodeStateInactive LocalNodeState = "inactive" + // LocalNodeStatePending PENDING + LocalNodeStatePending LocalNodeState = "pending" + // LocalNodeStateActive ACTIVE + LocalNodeStateActive LocalNodeState = "active" + // LocalNodeStateError ERROR + LocalNodeStateError LocalNodeState = "error" +) + +// Info represents generic information about swarm. +type Info struct { + NodeID string + NodeAddr string + + LocalNodeState LocalNodeState + ControlAvailable bool + Error string + + RemoteManagers []Peer + Nodes int + Managers int + + Cluster ClusterInfo +} + +// Peer represents a peer. +type Peer struct { + NodeID string + Addr string +} + +// UpdateFlags contains flags for SwarmUpdate. +type UpdateFlags struct { + RotateWorkerToken bool + RotateManagerToken bool +} diff --git a/api/types/swarm/task.go b/api/types/swarm/task.go new file mode 100644 index 0000000000..591e07ba41 --- /dev/null +++ b/api/types/swarm/task.go @@ -0,0 +1,117 @@ +package swarm + +import "time" + +// TaskState represents the state of a task. +type TaskState string + +const ( + // TaskStateNew NEW + TaskStateNew TaskState = "new" + // TaskStateAllocated ALLOCATED + TaskStateAllocated TaskState = "allocated" + // TaskStatePending PENDING + TaskStatePending TaskState = "pending" + // TaskStateAssigned ASSIGNED + TaskStateAssigned TaskState = "assigned" + // TaskStateAccepted ACCEPTED + TaskStateAccepted TaskState = "accepted" + // TaskStatePreparing PREPARING + TaskStatePreparing TaskState = "preparing" + // TaskStateReady READY + TaskStateReady TaskState = "ready" + // TaskStateStarting STARTING + TaskStateStarting TaskState = "starting" + // TaskStateRunning RUNNING + TaskStateRunning TaskState = "running" + // TaskStateComplete COMPLETE + TaskStateComplete TaskState = "complete" + // TaskStateShutdown SHUTDOWN + TaskStateShutdown TaskState = "shutdown" + // TaskStateFailed FAILED + TaskStateFailed TaskState = "failed" + // TaskStateRejected REJECTED + TaskStateRejected TaskState = "rejected" +) + +// Task represents a task. +type Task struct { + ID string + Meta + Annotations + + Spec TaskSpec `json:",omitempty"` + ServiceID string `json:",omitempty"` + Slot int `json:",omitempty"` + NodeID string `json:",omitempty"` + Status TaskStatus `json:",omitempty"` + DesiredState TaskState `json:",omitempty"` + NetworksAttachments []NetworkAttachment `json:",omitempty"` +} + +// TaskSpec represents the spec of a task. +type TaskSpec struct { + ContainerSpec ContainerSpec `json:",omitempty"` + Resources *ResourceRequirements `json:",omitempty"` + RestartPolicy *RestartPolicy `json:",omitempty"` + Placement *Placement `json:",omitempty"` + Networks []NetworkAttachmentConfig `json:",omitempty"` + + // LogDriver specifies the LogDriver to use for tasks created from this + // spec. If not present, the one on cluster default on swarm.Spec will be + // used, finally falling back to the engine default if not specified. + LogDriver *Driver `json:",omitempty"` +} + +// Resources represents resources (CPU/Memory). +type Resources struct { + NanoCPUs int64 `json:",omitempty"` + MemoryBytes int64 `json:",omitempty"` +} + +// ResourceRequirements represents resources requirements. +type ResourceRequirements struct { + Limits *Resources `json:",omitempty"` + Reservations *Resources `json:",omitempty"` +} + +// Placement represents orchestration parameters. +type Placement struct { + Constraints []string `json:",omitempty"` +} + +// RestartPolicy represents the restart policy. +type RestartPolicy struct { + Condition RestartPolicyCondition `json:",omitempty"` + Delay *time.Duration `json:",omitempty"` + MaxAttempts *uint64 `json:",omitempty"` + Window *time.Duration `json:",omitempty"` +} + +// RestartPolicyCondition represents when to restart. +type RestartPolicyCondition string + +const ( + // RestartPolicyConditionNone NONE + RestartPolicyConditionNone RestartPolicyCondition = "none" + // RestartPolicyConditionOnFailure ON_FAILURE + RestartPolicyConditionOnFailure RestartPolicyCondition = "on-failure" + // RestartPolicyConditionAny ANY + RestartPolicyConditionAny RestartPolicyCondition = "any" +) + +// TaskStatus represents the status of a task. +type TaskStatus struct { + Timestamp time.Time `json:",omitempty"` + State TaskState `json:",omitempty"` + Message string `json:",omitempty"` + Err string `json:",omitempty"` + ContainerStatus ContainerStatus `json:",omitempty"` +} + +// ContainerStatus represents the status of a container. +type ContainerStatus struct { + ContainerID string `json:",omitempty"` + PID int `json:",omitempty"` + ExitCode int `json:",omitempty"` +} diff --git a/api/types/time/duration_convert.go b/api/types/time/duration_convert.go new file mode 100644 index 0000000000..63e1eec19e --- /dev/null +++ b/api/types/time/duration_convert.go @@ -0,0 +1,12 @@ +package time + +import ( + "strconv" + "time" +) + +// DurationToSecondsString converts the specified duration to the number +// seconds it represents, formatted as a string. +func DurationToSecondsString(duration time.Duration) string { + return strconv.FormatFloat(duration.Seconds(), 'f', 0, 64) +} diff --git a/api/types/time/duration_convert_test.go b/api/types/time/duration_convert_test.go new file mode 100644 index 0000000000..869c08f863 --- /dev/null +++ b/api/types/time/duration_convert_test.go @@ -0,0 +1,26 @@ +package time + +import ( + "testing" + "time" +) + +func TestDurationToSecondsString(t *testing.T) { + cases := []struct { + in time.Duration + expected string + }{ + {0 * time.Second, "0"}, + {1 * time.Second, "1"}, + {1 * time.Minute, "60"}, + {24 * time.Hour, "86400"}, + } + + for _, c := range cases { + s := DurationToSecondsString(c.in) + if s != c.expected { + t.Errorf("wrong value for input `%v`: expected `%s`, got `%s`", c.in, c.expected, s) + t.Fail() + } + } +} diff --git a/api/types/time/timestamp.go b/api/types/time/timestamp.go new file mode 100644 index 0000000000..d3695ba723 --- /dev/null +++ b/api/types/time/timestamp.go @@ -0,0 +1,124 @@ +package time + +import ( + "fmt" + "math" + "strconv" + "strings" + "time" +) + +// These are additional predefined layouts for use in Time.Format and Time.Parse +// with --since and --until parameters for `docker logs` and `docker events` +const ( + rFC3339Local = "2006-01-02T15:04:05" // RFC3339 with local timezone + rFC3339NanoLocal = "2006-01-02T15:04:05.999999999" // RFC3339Nano with local timezone + dateWithZone = "2006-01-02Z07:00" // RFC3339 with time at 00:00:00 + dateLocal = "2006-01-02" // RFC3339 with local timezone and time at 00:00:00 +) + +// GetTimestamp tries to parse given string as golang duration, +// then RFC3339 time and finally as a Unix timestamp. If +// any of these were successful, it returns a Unix timestamp +// as string otherwise returns the given value back. +// In case of duration input, the returned timestamp is computed +// as the given reference time minus the amount of the duration. +func GetTimestamp(value string, reference time.Time) (string, error) { + if d, err := time.ParseDuration(value); value != "0" && err == nil { + return strconv.FormatInt(reference.Add(-d).Unix(), 10), nil + } + + var format string + var parseInLocation bool + + // if the string has a Z or a + or three dashes use parse otherwise use parseinlocation + parseInLocation = !(strings.ContainsAny(value, "zZ+") || strings.Count(value, "-") == 3) + + if strings.Contains(value, ".") { + if parseInLocation { + format = rFC3339NanoLocal + } else { + format = time.RFC3339Nano + } + } else if strings.Contains(value, "T") { + // we want the number of colons in the T portion of the timestamp + tcolons := strings.Count(value, ":") + // if parseInLocation is off and we have a +/- zone offset (not Z) then + // there will be an extra colon in the input for the tz offset subtract that + // colon from the tcolons count + if !parseInLocation && !strings.ContainsAny(value, "zZ") && tcolons > 0 { + tcolons-- + } + if parseInLocation { + switch tcolons { + case 0: + format = "2006-01-02T15" + case 1: + format = "2006-01-02T15:04" + default: + format = rFC3339Local + } + } else { + switch tcolons { + case 0: + format = "2006-01-02T15Z07:00" + case 1: + format = "2006-01-02T15:04Z07:00" + default: + format = time.RFC3339 + } + } + } else if parseInLocation { + format = dateLocal + } else { + format = dateWithZone + } + + var t time.Time + var err error + + if parseInLocation { + t, err = time.ParseInLocation(format, value, time.FixedZone(reference.Zone())) + } else { + t, err = time.Parse(format, value) + } + + if err != nil { + // if there is a `-` then its an RFC3339 like timestamp otherwise assume unixtimestamp + if strings.Contains(value, "-") { + return "", err // was probably an RFC3339 like timestamp but the parser failed with an error + } + return value, nil // unixtimestamp in and out case (meaning: the value passed at the command line is already in the right format for passing to the server) + } + + return fmt.Sprintf("%d.%09d", t.Unix(), int64(t.Nanosecond())), nil +} + +// ParseTimestamps returns seconds and nanoseconds from a timestamp that has the +// format "%d.%09d", time.Unix(), int64(time.Nanosecond())) +// if the incoming nanosecond portion is longer or shorter than 9 digits it is +// converted to nanoseconds. The expectation is that the seconds and +// seconds will be used to create a time variable. For example: +// seconds, nanoseconds, err := ParseTimestamp("1136073600.000000001",0) +// if err == nil since := time.Unix(seconds, nanoseconds) +// returns seconds as def(aultSeconds) if value == "" +func ParseTimestamps(value string, def int64) (int64, int64, error) { + if value == "" { + return def, 0, nil + } + sa := strings.SplitN(value, ".", 2) + s, err := strconv.ParseInt(sa[0], 10, 64) + if err != nil { + return s, 0, err + } + if len(sa) != 2 { + return s, 0, nil + } + n, err := strconv.ParseInt(sa[1], 10, 64) + if err != nil { + return s, n, err + } + // should already be in nanoseconds but just in case convert n to nanoseonds + n = int64(float64(n) * math.Pow(float64(10), float64(9-len(sa[1])))) + return s, n, nil +} diff --git a/api/types/time/timestamp_test.go b/api/types/time/timestamp_test.go new file mode 100644 index 0000000000..a1651309d7 --- /dev/null +++ b/api/types/time/timestamp_test.go @@ -0,0 +1,93 @@ +package time + +import ( + "fmt" + "testing" + "time" +) + +func TestGetTimestamp(t *testing.T) { + now := time.Now().In(time.UTC) + cases := []struct { + in, expected string + expectedErr bool + }{ + // Partial RFC3339 strings get parsed with second precision + {"2006-01-02T15:04:05.999999999+07:00", "1136189045.999999999", false}, + {"2006-01-02T15:04:05.999999999Z", "1136214245.999999999", false}, + {"2006-01-02T15:04:05.999999999", "1136214245.999999999", false}, + {"2006-01-02T15:04:05Z", "1136214245.000000000", false}, + {"2006-01-02T15:04:05", "1136214245.000000000", false}, + {"2006-01-02T15:04:0Z", "", true}, + {"2006-01-02T15:04:0", "", true}, + {"2006-01-02T15:04Z", "1136214240.000000000", false}, + {"2006-01-02T15:04+00:00", "1136214240.000000000", false}, + {"2006-01-02T15:04-00:00", "1136214240.000000000", false}, + {"2006-01-02T15:04", "1136214240.000000000", false}, + {"2006-01-02T15:0Z", "", true}, + {"2006-01-02T15:0", "", true}, + {"2006-01-02T15Z", "1136214000.000000000", false}, + {"2006-01-02T15+00:00", "1136214000.000000000", false}, + {"2006-01-02T15-00:00", "1136214000.000000000", false}, + {"2006-01-02T15", "1136214000.000000000", false}, + {"2006-01-02T1Z", "1136163600.000000000", false}, + {"2006-01-02T1", "1136163600.000000000", false}, + {"2006-01-02TZ", "", true}, + {"2006-01-02T", "", true}, + {"2006-01-02+00:00", "1136160000.000000000", false}, + {"2006-01-02-00:00", "1136160000.000000000", false}, + {"2006-01-02-00:01", "1136160060.000000000", false}, + {"2006-01-02Z", "1136160000.000000000", false}, + {"2006-01-02", "1136160000.000000000", false}, + {"2015-05-13T20:39:09Z", "1431549549.000000000", false}, + + // unix timestamps returned as is + {"1136073600", "1136073600", false}, + {"1136073600.000000001", "1136073600.000000001", false}, + // Durations + {"1m", fmt.Sprintf("%d", now.Add(-1*time.Minute).Unix()), false}, + {"1.5h", fmt.Sprintf("%d", now.Add(-90*time.Minute).Unix()), false}, + {"1h30m", fmt.Sprintf("%d", now.Add(-90*time.Minute).Unix()), false}, + + // String fallback + {"invalid", "invalid", false}, + } + + for _, c := range cases { + o, err := GetTimestamp(c.in, now) + if o != c.expected || + (err == nil && c.expectedErr) || + (err != nil && !c.expectedErr) { + t.Errorf("wrong value for '%s'. expected:'%s' got:'%s' with error: `%s`", c.in, c.expected, o, err) + t.Fail() + } + } +} + +func TestParseTimestamps(t *testing.T) { + cases := []struct { + in string + def, expectedS, expectedN int64 + expectedErr bool + }{ + // unix timestamps + {"1136073600", 0, 1136073600, 0, false}, + {"1136073600.000000001", 0, 1136073600, 1, false}, + {"1136073600.0000000010", 0, 1136073600, 1, false}, + {"1136073600.00000001", 0, 1136073600, 10, false}, + {"foo.bar", 0, 0, 0, true}, + {"1136073600.bar", 0, 1136073600, 0, true}, + {"", -1, -1, 0, false}, + } + + for _, c := range cases { + s, n, err := ParseTimestamps(c.in, c.def) + if s != c.expectedS || + n != c.expectedN || + (err == nil && c.expectedErr) || + (err != nil && !c.expectedErr) { + t.Errorf("wrong values for input `%s` with default `%d` expected:'%d'seconds and `%d`nanosecond got:'%d'seconds and `%d`nanoseconds with error: `%s`", c.in, c.def, c.expectedS, c.expectedN, s, n, err) + t.Fail() + } + } +} diff --git a/api/types/types.go b/api/types/types.go new file mode 100644 index 0000000000..ea3582ebcf --- /dev/null +++ b/api/types/types.go @@ -0,0 +1,519 @@ +package types + +import ( + "os" + "time" + + "github.com/docker/docker/api/types/container" + "github.com/docker/docker/api/types/mount" + "github.com/docker/docker/api/types/network" + "github.com/docker/docker/api/types/registry" + "github.com/docker/docker/api/types/swarm" + "github.com/docker/go-connections/nat" +) + +// ContainerCreateResponse contains the information returned to a client on the +// creation of a new container. +type ContainerCreateResponse struct { + // ID is the ID of the created container. + ID string `json:"Id"` + + // Warnings are any warnings encountered during the creation of the container. + Warnings []string `json:"Warnings"` +} + +// ContainerExecCreateResponse contains response of Remote API: +// POST "/containers/{name:.*}/exec" +type ContainerExecCreateResponse struct { + // ID is the exec ID. + ID string `json:"Id"` +} + +// ContainerUpdateResponse contains response of Remote API: +// POST "/containers/{name:.*}/update" +type ContainerUpdateResponse struct { + // Warnings are any warnings encountered during the updating of the container. + Warnings []string `json:"Warnings"` +} + +// AuthResponse contains response of Remote API: +// POST "/auth" +type AuthResponse struct { + // Status is the authentication status + Status string `json:"Status"` + + // IdentityToken is an opaque token used for authenticating + // a user after a successful login. + IdentityToken string `json:"IdentityToken,omitempty"` +} + +// ContainerWaitResponse contains response of Remote API: +// POST "/containers/"+containerID+"/wait" +type ContainerWaitResponse struct { + // StatusCode is the status code of the wait job + StatusCode int `json:"StatusCode"` +} + +// ContainerCommitResponse contains response of Remote API: +// POST "/commit?container="+containerID +type ContainerCommitResponse struct { + ID string `json:"Id"` +} + +// ContainerChange contains response of Remote API: +// GET "/containers/{name:.*}/changes" +type ContainerChange struct { + Kind int + Path string +} + +// ImageHistory contains response of Remote API: +// GET "/images/{name:.*}/history" +type ImageHistory struct { + ID string `json:"Id"` + Created int64 + CreatedBy string + Tags []string + Size int64 + Comment string +} + +// ImageDelete contains response of Remote API: +// DELETE "/images/{name:.*}" +type ImageDelete struct { + Untagged string `json:",omitempty"` + Deleted string `json:",omitempty"` +} + +// Image contains response of Remote API: +// GET "/images/json" +type Image struct { + ID string `json:"Id"` + ParentID string `json:"ParentId"` + RepoTags []string + RepoDigests []string + Created int64 + Size int64 + VirtualSize int64 + Labels map[string]string +} + +// GraphDriverData returns Image's graph driver config info +// when calling inspect command +type GraphDriverData struct { + Name string + Data map[string]string +} + +// RootFS returns Image's RootFS description including the layer IDs. +type RootFS struct { + Type string + Layers []string `json:",omitempty"` + BaseLayer string `json:",omitempty"` +} + +// ImageInspect contains response of Remote API: +// GET "/images/{name:.*}/json" +type ImageInspect struct { + ID string `json:"Id"` + RepoTags []string + RepoDigests []string + Parent string + Comment string + Created string + Container string + ContainerConfig *container.Config + DockerVersion string + Author string + Config *container.Config + Architecture string + Os string + Size int64 + VirtualSize int64 + GraphDriver GraphDriverData + RootFS RootFS +} + +// Port stores open ports info of container +// e.g. {"PrivatePort": 8080, "PublicPort": 80, "Type": "tcp"} +type Port struct { + IP string `json:",omitempty"` + PrivatePort int + PublicPort int `json:",omitempty"` + Type string +} + +// Container contains response of Remote API: +// GET "/containers/json" +type Container struct { + ID string `json:"Id"` + Names []string + Image string + ImageID string + Command string + Created int64 + Ports []Port + SizeRw int64 `json:",omitempty"` + SizeRootFs int64 `json:",omitempty"` + Labels map[string]string + State string + Status string + HostConfig struct { + NetworkMode string `json:",omitempty"` + } + NetworkSettings *SummaryNetworkSettings + Mounts []MountPoint +} + +// CopyConfig contains request body of Remote API: +// POST "/containers/"+containerID+"/copy" +type CopyConfig struct { + Resource string +} + +// ContainerPathStat is used to encode the header from +// GET "/containers/{name:.*}/archive" +// "Name" is the file or directory name. +type ContainerPathStat struct { + Name string `json:"name"` + Size int64 `json:"size"` + Mode os.FileMode `json:"mode"` + Mtime time.Time `json:"mtime"` + LinkTarget string `json:"linkTarget"` +} + +// ContainerProcessList contains response of Remote API: +// GET "/containers/{name:.*}/top" +type ContainerProcessList struct { + Processes [][]string + Titles []string +} + +// Version contains response of Remote API: +// GET "/version" +type Version struct { + Version string + APIVersion string `json:"ApiVersion"` + GitCommit string + GoVersion string + Os string + Arch string + KernelVersion string `json:",omitempty"` + Experimental bool `json:",omitempty"` + BuildTime string `json:",omitempty"` +} + +// Info contains response of Remote API: +// GET "/info" +type Info struct { + ID string + Containers int + ContainersRunning int + ContainersPaused int + ContainersStopped int + Images int + Driver string + DriverStatus [][2]string + SystemStatus [][2]string + Plugins PluginsInfo + MemoryLimit bool + SwapLimit bool + KernelMemory bool + CPUCfsPeriod bool `json:"CpuCfsPeriod"` + CPUCfsQuota bool `json:"CpuCfsQuota"` + CPUShares bool + CPUSet bool + IPv4Forwarding bool + BridgeNfIptables bool + BridgeNfIP6tables bool `json:"BridgeNfIp6tables"` + Debug bool + NFd int + OomKillDisable bool + NGoroutines int + SystemTime string + LoggingDriver string + CgroupDriver string + NEventsListener int + KernelVersion string + OperatingSystem string + OSType string + Architecture string + IndexServerAddress string + RegistryConfig *registry.ServiceConfig + NCPU int + MemTotal int64 + DockerRootDir string + HTTPProxy string `json:"HttpProxy"` + HTTPSProxy string `json:"HttpsProxy"` + NoProxy string + Name string + Labels []string + ExperimentalBuild bool + ServerVersion string + ClusterStore string + ClusterAdvertise string + SecurityOptions []string + Runtimes map[string]Runtime + DefaultRuntime string + Swarm swarm.Info + // LiveRestoreEnabled determines whether containers should be kept + // running when the daemon is shutdown or upon daemon start if + // running containers are detected + LiveRestoreEnabled bool +} + +// PluginsInfo is a temp struct holding Plugins name +// registered with docker daemon. It is used by Info struct +type PluginsInfo struct { + // List of Volume plugins registered + Volume []string + // List of Network plugins registered + Network []string + // List of Authorization plugins registered + Authorization []string +} + +// ExecStartCheck is a temp struct used by execStart +// Config fields is part of ExecConfig in runconfig package +type ExecStartCheck struct { + // ExecStart will first check if it's detached + Detach bool + // Check if there's a tty + Tty bool +} + +// HealthcheckResult stores information about a single run of a healthcheck probe +type HealthcheckResult struct { + Start time.Time // Start is the time this check started + End time.Time // End is the time this check ended + ExitCode int // ExitCode meanings: 0=healthy, 1=unhealthy, 2=reserved (considered unhealthy), else=error running probe + Output string // Output from last check +} + +// Health states +const ( + Starting = "starting" // Starting indicates that the container is not yet ready + Healthy = "healthy" // Healthy indicates that the container is running correctly + Unhealthy = "unhealthy" // Unhealthy indicates that the container has a problem +) + +// Health stores information about the container's healthcheck results +type Health struct { + Status string // Status is one of Starting, Healthy or Unhealthy + FailingStreak int // FailingStreak is the number of consecutive failures + Log []*HealthcheckResult // Log contains the last few results (oldest first) +} + +// ContainerState stores container's running state +// it's part of ContainerJSONBase and will return by "inspect" command +type ContainerState struct { + Status string + Running bool + Paused bool + Restarting bool + OOMKilled bool + Dead bool + Pid int + ExitCode int + Error string + StartedAt string + FinishedAt string + Health *Health `json:",omitempty"` +} + +// ContainerNode stores information about the node that a container +// is running on. It's only available in Docker Swarm +type ContainerNode struct { + ID string + IPAddress string `json:"IP"` + Addr string + Name string + Cpus int + Memory int64 + Labels map[string]string +} + +// ContainerJSONBase contains response of Remote API: +// GET "/containers/{name:.*}/json" +type ContainerJSONBase struct { + ID string `json:"Id"` + Created string + Path string + Args []string + State *ContainerState + Image string + ResolvConfPath string + HostnamePath string + HostsPath string + LogPath string + Node *ContainerNode `json:",omitempty"` + Name string + RestartCount int + Driver string + MountLabel string + ProcessLabel string + AppArmorProfile string + ExecIDs []string + HostConfig *container.HostConfig + GraphDriver GraphDriverData + SizeRw *int64 `json:",omitempty"` + SizeRootFs *int64 `json:",omitempty"` +} + +// ContainerJSON is newly used struct along with MountPoint +type ContainerJSON struct { + *ContainerJSONBase + Mounts []MountPoint + Config *container.Config + NetworkSettings *NetworkSettings +} + +// NetworkSettings exposes the network settings in the api +type NetworkSettings struct { + NetworkSettingsBase + DefaultNetworkSettings + Networks map[string]*network.EndpointSettings +} + +// SummaryNetworkSettings provides a summary of container's networks +// in /containers/json +type SummaryNetworkSettings struct { + Networks map[string]*network.EndpointSettings +} + +// NetworkSettingsBase holds basic information about networks +type NetworkSettingsBase struct { + Bridge string // Bridge is the Bridge name the network uses(e.g. `docker0`) + SandboxID string // SandboxID uniquely represents a container's network stack + HairpinMode bool // HairpinMode specifies if hairpin NAT should be enabled on the virtual interface + LinkLocalIPv6Address string // LinkLocalIPv6Address is an IPv6 unicast address using the link-local prefix + LinkLocalIPv6PrefixLen int // LinkLocalIPv6PrefixLen is the prefix length of an IPv6 unicast address + Ports nat.PortMap // Ports is a collection of PortBinding indexed by Port + SandboxKey string // SandboxKey identifies the sandbox + SecondaryIPAddresses []network.Address + SecondaryIPv6Addresses []network.Address +} + +// DefaultNetworkSettings holds network information +// during the 2 release deprecation period. +// It will be removed in Docker 1.11. +type DefaultNetworkSettings struct { + EndpointID string // EndpointID uniquely represents a service endpoint in a Sandbox + Gateway string // Gateway holds the gateway address for the network + GlobalIPv6Address string // GlobalIPv6Address holds network's global IPv6 address + GlobalIPv6PrefixLen int // GlobalIPv6PrefixLen represents mask length of network's global IPv6 address + IPAddress string // IPAddress holds the IPv4 address for the network + IPPrefixLen int // IPPrefixLen represents mask length of network's IPv4 address + IPv6Gateway string // IPv6Gateway holds gateway address specific for IPv6 + MacAddress string // MacAddress holds the MAC address for the network +} + +// MountPoint represents a mount point configuration inside the container. +// This is used for reporting the mountpoints in use by a container. +type MountPoint struct { + Type mount.Type `json:",omitempty"` + Name string `json:",omitempty"` + Source string + Destination string + Driver string `json:",omitempty"` + Mode string + RW bool + Propagation mount.Propagation +} + +// Volume represents the configuration of a volume for the remote API +type Volume struct { + Name string // Name is the name of the volume + Driver string // Driver is the Driver name used to create the volume + Mountpoint string // Mountpoint is the location on disk of the volume + Status map[string]interface{} `json:",omitempty"` // Status provides low-level status information about the volume + Labels map[string]string // Labels is metadata specific to the volume + Scope string // Scope describes the level at which the volume exists (e.g. `global` for cluster-wide or `local` for machine level) +} + +// VolumesListResponse contains the response for the remote API: +// GET "/volumes" +type VolumesListResponse struct { + Volumes []*Volume // Volumes is the list of volumes being returned + Warnings []string // Warnings is a list of warnings that occurred when getting the list from the volume drivers +} + +// VolumeCreateRequest contains the response for the remote API: +// POST "/volumes/create" +type VolumeCreateRequest struct { + Name string // Name is the requested name of the volume + Driver string // Driver is the name of the driver that should be used to create the volume + DriverOpts map[string]string // DriverOpts holds the driver specific options to use for when creating the volume. + Labels map[string]string // Labels holds metadata specific to the volume being created. +} + +// NetworkResource is the body of the "get network" http response message +type NetworkResource struct { + Name string // Name is the requested name of the network + ID string `json:"Id"` // ID uniquely identifies a network on a single machine + Scope string // Scope describes the level at which the network exists (e.g. `global` for cluster-wide or `local` for machine level) + Driver string // Driver is the Driver name used to create the network (e.g. `bridge`, `overlay`) + EnableIPv6 bool // EnableIPv6 represents whether to enable IPv6 + IPAM network.IPAM // IPAM is the network's IP Address Management + Internal bool // Internal represents if the network is used internal only + Attachable bool // Attachable represents if the global scope is manually attachable by regular containers from workers in swarm mode. + Containers map[string]EndpointResource // Containers contains endpoints belonging to the network + Options map[string]string // Options holds the network specific options to use for when creating the network + Labels map[string]string // Labels holds metadata specific to the network being created +} + +// EndpointResource contains network resources allocated and used for a container in a network +type EndpointResource struct { + Name string + EndpointID string + MacAddress string + IPv4Address string + IPv6Address string +} + +// NetworkCreate is the expected body of the "create network" http request message +type NetworkCreate struct { + CheckDuplicate bool + Driver string + EnableIPv6 bool + IPAM *network.IPAM + Internal bool + Attachable bool + Options map[string]string + Labels map[string]string +} + +// NetworkCreateRequest is the request message sent to the server for network create call. +type NetworkCreateRequest struct { + NetworkCreate + Name string +} + +// NetworkCreateResponse is the response message sent by the server for network create call +type NetworkCreateResponse struct { + ID string `json:"Id"` + Warning string +} + +// NetworkConnect represents the data to be used to connect a container to the network +type NetworkConnect struct { + Container string + EndpointConfig *network.EndpointSettings `json:",omitempty"` +} + +// NetworkDisconnect represents the data to be used to disconnect a container from the network +type NetworkDisconnect struct { + Container string + Force bool +} + +// Checkpoint represents the details of a checkpoint +type Checkpoint struct { + Name string // Name is the name of the checkpoint +} + +// Runtime describes an OCI runtime +type Runtime struct { + Path string `json:"path"` + Args []string `json:"runtimeArgs,omitempty"` +} diff --git a/api/types/versions/README.md b/api/types/versions/README.md new file mode 100644 index 0000000000..cdac50a53c --- /dev/null +++ b/api/types/versions/README.md @@ -0,0 +1,14 @@ +## Legacy API type versions + +This package includes types for legacy API versions. The stable version of the API types live in `api/types/*.go`. + +Consider moving a type here when you need to keep backwards compatibility in the API. This legacy types are organized by the latest API version they appear in. For instance, types in the `v1p19` package are valid for API versions below or equal `1.19`. Types in the `v1p20` package are valid for the API version `1.20`, since the versions below that will use the legacy types in `v1p19`. + +### Package name conventions + +The package name convention is to use `v` as a prefix for the version number and `p`(patch) as a separator. We use this nomenclature due to a few restrictions in the Go package name convention: + +1. We cannot use `.` because it's interpreted by the language, think of `v1.20.CallFunction`. +2. We cannot use `_` because golint complains about it. The code is actually valid, but it looks probably more weird: `v1_20.CallFunction`. + +For instance, if you want to modify a type that was available in the version `1.21` of the API but it will have different fields in the version `1.22`, you want to create a new package under `api/types/versions/v1p21`. diff --git a/api/types/versions/compare.go b/api/types/versions/compare.go new file mode 100644 index 0000000000..611d4fed66 --- /dev/null +++ b/api/types/versions/compare.go @@ -0,0 +1,62 @@ +package versions + +import ( + "strconv" + "strings" +) + +// compare compares two version strings +// returns -1 if v1 < v2, 1 if v1 > v2, 0 otherwise. +func compare(v1, v2 string) int { + var ( + currTab = strings.Split(v1, ".") + otherTab = strings.Split(v2, ".") + ) + + max := len(currTab) + if len(otherTab) > max { + max = len(otherTab) + } + for i := 0; i < max; i++ { + var currInt, otherInt int + + if len(currTab) > i { + currInt, _ = strconv.Atoi(currTab[i]) + } + if len(otherTab) > i { + otherInt, _ = strconv.Atoi(otherTab[i]) + } + if currInt > otherInt { + return 1 + } + if otherInt > currInt { + return -1 + } + } + return 0 +} + +// LessThan checks if a version is less than another +func LessThan(v, other string) bool { + return compare(v, other) == -1 +} + +// LessThanOrEqualTo checks if a version is less than or equal to another +func LessThanOrEqualTo(v, other string) bool { + return compare(v, other) <= 0 +} + +// GreaterThan checks if a version is greater than another +func GreaterThan(v, other string) bool { + return compare(v, other) == 1 +} + +// GreaterThanOrEqualTo checks if a version is greater than or equal to another +func GreaterThanOrEqualTo(v, other string) bool { + return compare(v, other) >= 0 +} + +// Equal checks if a version is equal to another +func Equal(v, other string) bool { + return compare(v, other) == 0 +} diff --git a/api/types/versions/compare_test.go b/api/types/versions/compare_test.go new file mode 100644 index 0000000000..c2b96869f7 --- /dev/null +++ b/api/types/versions/compare_test.go @@ -0,0 +1,26 @@ +package versions + +import ( + "testing" +) + +func assertVersion(t *testing.T, a, b string, result int) { + if r := compare(a, b); r != result { + t.Fatalf("Unexpected version comparison result. Found %d, expected %d", r, result) + } +} + +func TestCompareVersion(t *testing.T) { + assertVersion(t, "1.12", "1.12", 0) + assertVersion(t, "1.0.0", "1", 0) + assertVersion(t, "1", "1.0.0", 0) + assertVersion(t, "1.05.00.0156", "1.0.221.9289", 1) + assertVersion(t, "1", "1.0.1", -1) + assertVersion(t, "1.0.1", "1", 1) + assertVersion(t, "1.0.1", "1.0.2", -1) + assertVersion(t, "1.0.2", "1.0.3", -1) + assertVersion(t, "1.0.3", "1.1", -1) + assertVersion(t, "1.1", "1.1.1", -1) + assertVersion(t, "1.1.1", "1.1.2", -1) + assertVersion(t, "1.1.2", "1.2", -1) +} diff --git a/api/types/versions/v1p19/types.go b/api/types/versions/v1p19/types.go new file mode 100644 index 0000000000..4ed4335881 --- /dev/null +++ b/api/types/versions/v1p19/types.go @@ -0,0 +1,35 @@ +// Package v1p19 provides specific API types for the API version 1, patch 19. +package v1p19 + +import ( + "github.com/docker/engine-api/types" + "github.com/docker/engine-api/types/container" + "github.com/docker/engine-api/types/versions/v1p20" + "github.com/docker/go-connections/nat" +) + +// ContainerJSON is a backcompatibility struct for APIs prior to 1.20. +// Note this is not used by the Windows daemon. +type ContainerJSON struct { + *types.ContainerJSONBase + Volumes map[string]string + VolumesRW map[string]bool + Config *ContainerConfig + NetworkSettings *v1p20.NetworkSettings +} + +// ContainerConfig is a backcompatibility struct for APIs prior to 1.20. +type ContainerConfig struct { + *container.Config + + MacAddress string + NetworkDisabled bool + ExposedPorts map[nat.Port]struct{} + + // backward compatibility, they now live in HostConfig + VolumeDriver string + Memory int64 + MemorySwap int64 + CPUShares int64 `json:"CpuShares"` + CPUSet string `json:"Cpuset"` +} diff --git a/api/types/versions/v1p20/types.go b/api/types/versions/v1p20/types.go new file mode 100644 index 0000000000..5736efad00 --- /dev/null +++ b/api/types/versions/v1p20/types.go @@ -0,0 +1,40 @@ +// Package v1p20 provides specific API types for the API version 1, patch 20. +package v1p20 + +import ( + "github.com/docker/engine-api/types" + "github.com/docker/engine-api/types/container" + "github.com/docker/go-connections/nat" +) + +// ContainerJSON is a backcompatibility struct for the API 1.20 +type ContainerJSON struct { + *types.ContainerJSONBase + Mounts []types.MountPoint + Config *ContainerConfig + NetworkSettings *NetworkSettings +} + +// ContainerConfig is a backcompatibility struct used in ContainerJSON for the API 1.20 +type ContainerConfig struct { + *container.Config + + MacAddress string + NetworkDisabled bool + ExposedPorts map[nat.Port]struct{} + + // backward compatibility, they now live in HostConfig + VolumeDriver string +} + +// StatsJSON is a backcompatibility struct used in Stats for APIs prior to 1.21 +type StatsJSON struct { + types.Stats + Network types.NetworkStats `json:"network,omitempty"` +} + +// NetworkSettings is a backward compatible struct for APIs prior to 1.21 +type NetworkSettings struct { + types.NetworkSettingsBase + types.DefaultNetworkSettings +} diff --git a/builder/builder.go b/builder/builder.go index 125e56ab22..e592877e7d 100644 --- a/builder/builder.go +++ b/builder/builder.go @@ -9,11 +9,11 @@ import ( "os" "time" + "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/backend" + "github.com/docker/docker/api/types/container" "github.com/docker/docker/image" "github.com/docker/docker/reference" - "github.com/docker/engine-api/types" - "github.com/docker/engine-api/types/container" "golang.org/x/net/context" ) diff --git a/builder/dockerfile/builder.go b/builder/dockerfile/builder.go index c48c67d046..c206aa90c2 100644 --- a/builder/dockerfile/builder.go +++ b/builder/dockerfile/builder.go @@ -10,14 +10,14 @@ import ( "strings" "github.com/Sirupsen/logrus" + "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/backend" + "github.com/docker/docker/api/types/container" "github.com/docker/docker/builder" "github.com/docker/docker/builder/dockerfile/parser" "github.com/docker/docker/image" "github.com/docker/docker/pkg/stringid" "github.com/docker/docker/reference" - "github.com/docker/engine-api/types" - "github.com/docker/engine-api/types/container" "golang.org/x/net/context" ) diff --git a/builder/dockerfile/dispatchers.go b/builder/dockerfile/dispatchers.go index d54299ff40..06dc622682 100644 --- a/builder/dockerfile/dispatchers.go +++ b/builder/dockerfile/dispatchers.go @@ -18,11 +18,11 @@ import ( "github.com/Sirupsen/logrus" "github.com/docker/docker/api" + "github.com/docker/docker/api/types/container" + "github.com/docker/docker/api/types/strslice" "github.com/docker/docker/builder" "github.com/docker/docker/pkg/signal" runconfigopts "github.com/docker/docker/runconfig/opts" - "github.com/docker/engine-api/types/container" - "github.com/docker/engine-api/types/strslice" "github.com/docker/go-connections/nat" ) diff --git a/builder/dockerfile/dispatchers_test.go b/builder/dockerfile/dispatchers_test.go index e5746f7454..a57f78a0e1 100644 --- a/builder/dockerfile/dispatchers_test.go +++ b/builder/dockerfile/dispatchers_test.go @@ -6,9 +6,9 @@ import ( "strings" "testing" - "github.com/docker/engine-api/types" - "github.com/docker/engine-api/types/container" - "github.com/docker/engine-api/types/strslice" + "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/container" + "github.com/docker/docker/api/types/strslice" "github.com/docker/go-connections/nat" ) diff --git a/builder/dockerfile/evaluator_test.go b/builder/dockerfile/evaluator_test.go index ac066d7f64..4340a2f8ac 100644 --- a/builder/dockerfile/evaluator_test.go +++ b/builder/dockerfile/evaluator_test.go @@ -5,12 +5,12 @@ import ( "strings" "testing" + "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/container" "github.com/docker/docker/builder" "github.com/docker/docker/builder/dockerfile/parser" "github.com/docker/docker/pkg/archive" "github.com/docker/docker/pkg/reexec" - "github.com/docker/engine-api/types" - "github.com/docker/engine-api/types/container" ) type dispatchTestCase struct { diff --git a/builder/dockerfile/internals.go b/builder/dockerfile/internals.go index 73e80b1a1d..267d8e4e72 100644 --- a/builder/dockerfile/internals.go +++ b/builder/dockerfile/internals.go @@ -20,7 +20,10 @@ import ( "time" "github.com/Sirupsen/logrus" + "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/strslice" "github.com/docker/docker/builder" "github.com/docker/docker/builder/dockerfile/parser" "github.com/docker/docker/pkg/archive" @@ -34,9 +37,6 @@ import ( "github.com/docker/docker/pkg/tarsum" "github.com/docker/docker/pkg/urlutil" "github.com/docker/docker/runconfig/opts" - "github.com/docker/engine-api/types" - "github.com/docker/engine-api/types/container" - "github.com/docker/engine-api/types/strslice" ) func (b *Builder) commit(id string, autoCmd strslice.StrSlice, comment string) error { diff --git a/builder/dockerfile/internals_test.go b/builder/dockerfile/internals_test.go index 279a6f8912..d170d8e25a 100644 --- a/builder/dockerfile/internals_test.go +++ b/builder/dockerfile/internals_test.go @@ -5,9 +5,9 @@ import ( "strings" "testing" + "github.com/docker/docker/api/types" "github.com/docker/docker/builder" "github.com/docker/docker/pkg/archive" - "github.com/docker/engine-api/types" ) func TestEmptyDockerfile(t *testing.T) { diff --git a/cliconfig/config.go b/cliconfig/config.go index 9d5df0ac4b..d81bf86b7a 100644 --- a/cliconfig/config.go +++ b/cliconfig/config.go @@ -6,9 +6,9 @@ import ( "os" "path/filepath" + "github.com/docker/docker/api/types" "github.com/docker/docker/cliconfig/configfile" "github.com/docker/docker/pkg/homedir" - "github.com/docker/engine-api/types" ) const ( diff --git a/cliconfig/configfile/file.go b/cliconfig/configfile/file.go index 9ac952042a..c0f5ce2d9a 100644 --- a/cliconfig/configfile/file.go +++ b/cliconfig/configfile/file.go @@ -10,7 +10,7 @@ import ( "path/filepath" "strings" - "github.com/docker/engine-api/types" + "github.com/docker/docker/api/types" ) const ( diff --git a/cliconfig/configfile/file_test.go b/cliconfig/configfile/file_test.go index 15eecb73e2..435797f681 100644 --- a/cliconfig/configfile/file_test.go +++ b/cliconfig/configfile/file_test.go @@ -3,7 +3,7 @@ package configfile import ( "testing" - "github.com/docker/engine-api/types" + "github.com/docker/docker/api/types" ) func TestEncodeAuth(t *testing.T) { diff --git a/cliconfig/credentials/credentials.go b/cliconfig/credentials/credentials.go index 510cf8cf0e..ca874cac51 100644 --- a/cliconfig/credentials/credentials.go +++ b/cliconfig/credentials/credentials.go @@ -1,7 +1,7 @@ package credentials import ( - "github.com/docker/engine-api/types" + "github.com/docker/docker/api/types" ) // Store is the interface that any credentials store must implement. diff --git a/cliconfig/credentials/file_store.go b/cliconfig/credentials/file_store.go index 55fa4f8dac..8da8c91434 100644 --- a/cliconfig/credentials/file_store.go +++ b/cliconfig/credentials/file_store.go @@ -3,7 +3,9 @@ package credentials import ( "github.com/docker/docker/cliconfig/configfile" "github.com/docker/docker/registry" - "github.com/docker/engine-api/types" + + "github.com/docker/docker/api/types" + "github.com/docker/docker/cliconfig/configfile" ) // fileStore implements a credentials store using diff --git a/cliconfig/credentials/file_store_test.go b/cliconfig/credentials/file_store_test.go index f087f04e75..efed4e9040 100644 --- a/cliconfig/credentials/file_store_test.go +++ b/cliconfig/credentials/file_store_test.go @@ -4,9 +4,9 @@ import ( "io/ioutil" "testing" + "github.com/docker/docker/api/types" "github.com/docker/docker/cliconfig" "github.com/docker/docker/cliconfig/configfile" - "github.com/docker/engine-api/types" ) func newConfigFile(auths map[string]types.AuthConfig) *configfile.ConfigFile { diff --git a/cliconfig/credentials/native_store.go b/cliconfig/credentials/native_store.go index 1717ce7b39..6539497bef 100644 --- a/cliconfig/credentials/native_store.go +++ b/cliconfig/credentials/native_store.go @@ -3,8 +3,8 @@ package credentials import ( "github.com/docker/docker-credential-helpers/client" "github.com/docker/docker-credential-helpers/credentials" + "github.com/docker/docker/api/types" "github.com/docker/docker/cliconfig/configfile" - "github.com/docker/engine-api/types" ) const ( diff --git a/cliconfig/credentials/native_store_test.go b/cliconfig/credentials/native_store_test.go index 952e447dfe..9da06f3d68 100644 --- a/cliconfig/credentials/native_store_test.go +++ b/cliconfig/credentials/native_store_test.go @@ -10,7 +10,7 @@ import ( "github.com/docker/docker-credential-helpers/client" "github.com/docker/docker-credential-helpers/credentials" - "github.com/docker/engine-api/types" + "github.com/docker/docker/api/types" ) const ( diff --git a/container/archive.go b/container/archive.go index e22a001c59..56e6598b9c 100644 --- a/container/archive.go +++ b/container/archive.go @@ -4,9 +4,9 @@ import ( "os" "path/filepath" + "github.com/docker/docker/api/types" "github.com/docker/docker/pkg/archive" "github.com/docker/docker/pkg/system" - "github.com/docker/engine-api/types" ) // ResolvePath resolves the given path in the container to a resource on the diff --git a/container/container.go b/container/container.go index d34226922a..b4c59f4ab7 100644 --- a/container/container.go +++ b/container/container.go @@ -16,6 +16,8 @@ import ( "golang.org/x/net/context" "github.com/Sirupsen/logrus" + containertypes "github.com/docker/docker/api/types/container" + networktypes "github.com/docker/docker/api/types/network" "github.com/docker/docker/daemon/exec" "github.com/docker/docker/daemon/logger" "github.com/docker/docker/daemon/logger/jsonfilelog" @@ -31,8 +33,6 @@ import ( "github.com/docker/docker/runconfig" runconfigopts "github.com/docker/docker/runconfig/opts" "github.com/docker/docker/volume" - containertypes "github.com/docker/engine-api/types/container" - networktypes "github.com/docker/engine-api/types/network" "github.com/docker/go-connections/nat" "github.com/docker/libnetwork" "github.com/docker/libnetwork/netlabel" diff --git a/container/container_solaris.go b/container/container_solaris.go index ca02d8ea89..5c5b66e022 100644 --- a/container/container_solaris.go +++ b/container/container_solaris.go @@ -6,8 +6,8 @@ import ( "os" "path/filepath" + "github.com/docker/docker/api/types/container" "github.com/docker/docker/volume" - "github.com/docker/engine-api/types/container" ) // Container holds fields specific to the Solaris implementation. See diff --git a/container/container_unit_test.go b/container/container_unit_test.go index 67b829f9f9..f14dc12e97 100644 --- a/container/container_unit_test.go +++ b/container/container_unit_test.go @@ -3,8 +3,8 @@ package container import ( "testing" + "github.com/docker/docker/api/types/container" "github.com/docker/docker/pkg/signal" - "github.com/docker/engine-api/types/container" ) func TestContainerStopSignal(t *testing.T) { diff --git a/container/container_unix.go b/container/container_unix.go index 63f2ff9a65..22c07c2652 100644 --- a/container/container_unix.go +++ b/container/container_unix.go @@ -11,13 +11,13 @@ import ( "syscall" "github.com/Sirupsen/logrus" + containertypes "github.com/docker/docker/api/types/container" "github.com/docker/docker/pkg/chrootarchive" "github.com/docker/docker/pkg/stringid" "github.com/docker/docker/pkg/symlink" "github.com/docker/docker/pkg/system" "github.com/docker/docker/utils" "github.com/docker/docker/volume" - containertypes "github.com/docker/engine-api/types/container" "github.com/opencontainers/runc/libcontainer/label" ) diff --git a/container/container_windows.go b/container/container_windows.go index 14f90c5f68..c775809fe2 100644 --- a/container/container_windows.go +++ b/container/container_windows.go @@ -7,9 +7,9 @@ import ( "os" "path/filepath" + containertypes "github.com/docker/docker/api/types/container" "github.com/docker/docker/utils" "github.com/docker/docker/volume" - containertypes "github.com/docker/engine-api/types/container" ) // Container holds fields specific to the Windows implementation. See diff --git a/container/health.go b/container/health.go index 7a459d8182..81fae50456 100644 --- a/container/health.go +++ b/container/health.go @@ -2,7 +2,7 @@ package container import ( "github.com/Sirupsen/logrus" - "github.com/docker/engine-api/types" + "github.com/docker/docker/api/types" ) // Health holds the current container health-check state diff --git a/daemon/archive.go b/daemon/archive.go index b2221560a3..955e7b9b36 100644 --- a/daemon/archive.go +++ b/daemon/archive.go @@ -7,6 +7,7 @@ import ( "path/filepath" "strings" + "github.com/docker/docker/api/types" "github.com/docker/docker/builder" "github.com/docker/docker/container" "github.com/docker/docker/pkg/archive" @@ -14,7 +15,6 @@ import ( "github.com/docker/docker/pkg/idtools" "github.com/docker/docker/pkg/ioutils" "github.com/docker/docker/pkg/system" - "github.com/docker/engine-api/types" ) // ErrExtractPointNotDirectory is used to convey that the operation to extract diff --git a/daemon/auth.go b/daemon/auth.go index a1400d88ae..f5f4d7bf24 100644 --- a/daemon/auth.go +++ b/daemon/auth.go @@ -3,8 +3,8 @@ package daemon import ( "golang.org/x/net/context" + "github.com/docker/docker/api/types" "github.com/docker/docker/dockerversion" - "github.com/docker/engine-api/types" ) // AuthenticateToRegistry checks the validity of credentials in authConfig diff --git a/daemon/cluster/cluster.go b/daemon/cluster/cluster.go index b63d8050ce..5b84cef1d1 100644 --- a/daemon/cluster/cluster.go +++ b/daemon/cluster/cluster.go @@ -14,6 +14,9 @@ import ( "google.golang.org/grpc" "github.com/Sirupsen/logrus" + 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" executorpkg "github.com/docker/docker/daemon/cluster/executor" "github.com/docker/docker/daemon/cluster/executor/container" @@ -22,9 +25,6 @@ import ( "github.com/docker/docker/pkg/ioutils" "github.com/docker/docker/pkg/signal" "github.com/docker/docker/runconfig" - apitypes "github.com/docker/engine-api/types" - "github.com/docker/engine-api/types/filters" - types "github.com/docker/engine-api/types/swarm" swarmagent "github.com/docker/swarmkit/agent" swarmapi "github.com/docker/swarmkit/api" "golang.org/x/net/context" diff --git a/daemon/cluster/convert/container.go b/daemon/cluster/convert/container.go index 1c44f99ae1..7cac7960b6 100644 --- a/daemon/cluster/convert/container.go +++ b/daemon/cluster/convert/container.go @@ -4,8 +4,8 @@ import ( "fmt" "strings" - mounttypes "github.com/docker/engine-api/types/mount" - types "github.com/docker/engine-api/types/swarm" + mounttypes "github.com/docker/docker/api/types/mount" + types "github.com/docker/docker/api/types/swarm" swarmapi "github.com/docker/swarmkit/api" "github.com/docker/swarmkit/protobuf/ptypes" ) diff --git a/daemon/cluster/convert/network.go b/daemon/cluster/convert/network.go index bd060b363d..decc320151 100644 --- a/daemon/cluster/convert/network.go +++ b/daemon/cluster/convert/network.go @@ -3,9 +3,9 @@ package convert import ( "strings" - basictypes "github.com/docker/engine-api/types" - networktypes "github.com/docker/engine-api/types/network" - types "github.com/docker/engine-api/types/swarm" + basictypes "github.com/docker/docker/api/types" + networktypes "github.com/docker/docker/api/types/network" + types "github.com/docker/docker/api/types/swarm" swarmapi "github.com/docker/swarmkit/api" "github.com/docker/swarmkit/protobuf/ptypes" ) diff --git a/daemon/cluster/convert/node.go b/daemon/cluster/convert/node.go index 53d7efa428..8422b7a36c 100644 --- a/daemon/cluster/convert/node.go +++ b/daemon/cluster/convert/node.go @@ -4,7 +4,7 @@ import ( "fmt" "strings" - types "github.com/docker/engine-api/types/swarm" + types "github.com/docker/docker/api/types/swarm" swarmapi "github.com/docker/swarmkit/api" "github.com/docker/swarmkit/protobuf/ptypes" ) diff --git a/daemon/cluster/convert/service.go b/daemon/cluster/convert/service.go index 75e7c3bcfa..5c20bf6c4f 100644 --- a/daemon/cluster/convert/service.go +++ b/daemon/cluster/convert/service.go @@ -4,8 +4,8 @@ import ( "fmt" "strings" + types "github.com/docker/docker/api/types/swarm" "github.com/docker/docker/pkg/namesgenerator" - types "github.com/docker/engine-api/types/swarm" swarmapi "github.com/docker/swarmkit/api" "github.com/docker/swarmkit/protobuf/ptypes" ) diff --git a/daemon/cluster/convert/swarm.go b/daemon/cluster/convert/swarm.go index bd92c7eeba..54dde3efa5 100644 --- a/daemon/cluster/convert/swarm.go +++ b/daemon/cluster/convert/swarm.go @@ -5,7 +5,7 @@ import ( "strings" "time" - types "github.com/docker/engine-api/types/swarm" + types "github.com/docker/docker/api/types/swarm" swarmapi "github.com/docker/swarmkit/api" "github.com/docker/swarmkit/protobuf/ptypes" ) diff --git a/daemon/cluster/convert/task.go b/daemon/cluster/convert/task.go index 4ba85b726a..f23bccb545 100644 --- a/daemon/cluster/convert/task.go +++ b/daemon/cluster/convert/task.go @@ -3,7 +3,7 @@ package convert import ( "strings" - types "github.com/docker/engine-api/types/swarm" + types "github.com/docker/docker/api/types/swarm" swarmapi "github.com/docker/swarmkit/api" "github.com/docker/swarmkit/protobuf/ptypes" ) diff --git a/daemon/cluster/executor/backend.go b/daemon/cluster/executor/backend.go index 4576b106bf..af09be55d4 100644 --- a/daemon/cluster/executor/backend.go +++ b/daemon/cluster/executor/backend.go @@ -4,12 +4,12 @@ import ( "io" "time" + "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/container" + "github.com/docker/docker/api/types/events" + "github.com/docker/docker/api/types/filters" + "github.com/docker/docker/api/types/network" clustertypes "github.com/docker/docker/daemon/cluster/provider" - "github.com/docker/engine-api/types" - "github.com/docker/engine-api/types/container" - "github.com/docker/engine-api/types/events" - "github.com/docker/engine-api/types/filters" - "github.com/docker/engine-api/types/network" "github.com/docker/libnetwork" "github.com/docker/libnetwork/cluster" networktypes "github.com/docker/libnetwork/types" diff --git a/daemon/cluster/filters.go b/daemon/cluster/filters.go index c49ea7b39b..a1d800e56c 100644 --- a/daemon/cluster/filters.go +++ b/daemon/cluster/filters.go @@ -4,8 +4,8 @@ import ( "fmt" "strings" + "github.com/docker/docker/api/types/filters" runconfigopts "github.com/docker/docker/runconfig/opts" - "github.com/docker/engine-api/types/filters" swarmapi "github.com/docker/swarmkit/api" ) diff --git a/daemon/cluster/provider/network.go b/daemon/cluster/provider/network.go index d99c2f7294..f4c72ae13b 100644 --- a/daemon/cluster/provider/network.go +++ b/daemon/cluster/provider/network.go @@ -1,6 +1,6 @@ package provider -import "github.com/docker/engine-api/types" +import "github.com/docker/docker/api/types" // NetworkCreateRequest is a request when creating a network. type NetworkCreateRequest struct { diff --git a/daemon/commit.go b/daemon/commit.go index 507a311233..3db3ea0070 100644 --- a/daemon/commit.go +++ b/daemon/commit.go @@ -8,6 +8,7 @@ import ( "time" "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/dockerversion" @@ -16,7 +17,6 @@ import ( "github.com/docker/docker/pkg/archive" "github.com/docker/docker/pkg/ioutils" "github.com/docker/docker/reference" - containertypes "github.com/docker/engine-api/types/container" "github.com/docker/go-connections/nat" ) diff --git a/daemon/config_unix.go b/daemon/config_unix.go index 10b5a0da28..74c3ae4f8e 100644 --- a/daemon/config_unix.go +++ b/daemon/config_unix.go @@ -6,9 +6,9 @@ import ( "fmt" "net" + "github.com/docker/docker/api/types" "github.com/docker/docker/opts" runconfigopts "github.com/docker/docker/runconfig/opts" - "github.com/docker/engine-api/types" units "github.com/docker/go-units" "github.com/spf13/pflag" ) diff --git a/daemon/config_windows.go b/daemon/config_windows.go index 6740743a59..90c2a1dc0a 100644 --- a/daemon/config_windows.go +++ b/daemon/config_windows.go @@ -3,7 +3,7 @@ package daemon import ( "os" - "github.com/docker/engine-api/types" + "github.com/docker/docker/api/types" "github.com/spf13/pflag" ) diff --git a/daemon/container.go b/daemon/container.go index fd68add7fc..bd9a307c12 100644 --- a/daemon/container.go +++ b/daemon/container.go @@ -6,6 +6,8 @@ import ( "regexp" "time" + containertypes "github.com/docker/docker/api/types/container" + "github.com/docker/docker/api/types/strslice" "github.com/docker/docker/container" "github.com/docker/docker/daemon/network" "github.com/docker/docker/errors" @@ -13,8 +15,6 @@ import ( "github.com/docker/docker/pkg/signal" "github.com/docker/docker/pkg/system" "github.com/docker/docker/pkg/truncindex" - containertypes "github.com/docker/engine-api/types/container" - "github.com/docker/engine-api/types/strslice" "github.com/docker/go-connections/nat" ) diff --git a/daemon/container_operations.go b/daemon/container_operations.go index 83a6001cf2..68bd1b458a 100644 --- a/daemon/container_operations.go +++ b/daemon/container_operations.go @@ -9,13 +9,13 @@ import ( "strings" "github.com/Sirupsen/logrus" + containertypes "github.com/docker/docker/api/types/container" + networktypes "github.com/docker/docker/api/types/network" "github.com/docker/docker/container" "github.com/docker/docker/daemon/network" derr "github.com/docker/docker/errors" "github.com/docker/docker/pkg/stringid" "github.com/docker/docker/runconfig" - containertypes "github.com/docker/engine-api/types/container" - networktypes "github.com/docker/engine-api/types/network" "github.com/docker/go-connections/nat" "github.com/docker/libnetwork" "github.com/docker/libnetwork/netlabel" diff --git a/daemon/container_operations_solaris.go b/daemon/container_operations_solaris.go index 511fc3a39e..4294cd7b4f 100644 --- a/daemon/container_operations_solaris.go +++ b/daemon/container_operations_solaris.go @@ -5,8 +5,8 @@ package daemon import ( "fmt" + networktypes "github.com/docker/docker/api/types/network" "github.com/docker/docker/container" - networktypes "github.com/docker/engine-api/types/network" ) func (daemon *Daemon) setupLinkedContainers(container *container.Container) ([]string, error) { diff --git a/daemon/container_operations_unix.go b/daemon/container_operations_unix.go index 5c048d1281..fc44932d4e 100644 --- a/daemon/container_operations_unix.go +++ b/daemon/container_operations_unix.go @@ -12,6 +12,8 @@ import ( "time" "github.com/Sirupsen/logrus" + 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/links" "github.com/docker/docker/pkg/fileutils" @@ -19,8 +21,6 @@ import ( "github.com/docker/docker/pkg/mount" "github.com/docker/docker/pkg/stringid" "github.com/docker/docker/runconfig" - containertypes "github.com/docker/engine-api/types/container" - networktypes "github.com/docker/engine-api/types/network" "github.com/opencontainers/runc/libcontainer/configs" "github.com/opencontainers/runc/libcontainer/devices" "github.com/opencontainers/runc/libcontainer/label" diff --git a/daemon/container_operations_windows.go b/daemon/container_operations_windows.go index f85caa8d2c..817f1a07f9 100644 --- a/daemon/container_operations_windows.go +++ b/daemon/container_operations_windows.go @@ -5,8 +5,8 @@ package daemon import ( "fmt" + networktypes "github.com/docker/docker/api/types/network" "github.com/docker/docker/container" - networktypes "github.com/docker/engine-api/types/network" ) func (daemon *Daemon) setupLinkedContainers(container *container.Container) ([]string, error) { diff --git a/daemon/create.go b/daemon/create.go index 7bebcb77a1..b9dbc8e83d 100644 --- a/daemon/create.go +++ b/daemon/create.go @@ -6,6 +6,9 @@ import ( "strings" "github.com/Sirupsen/logrus" + "github.com/docker/docker/api/types" + containertypes "github.com/docker/docker/api/types/container" + networktypes "github.com/docker/docker/api/types/network" "github.com/docker/docker/container" "github.com/docker/docker/errors" "github.com/docker/docker/image" @@ -14,9 +17,6 @@ import ( "github.com/docker/docker/pkg/stringid" "github.com/docker/docker/runconfig" volumestore "github.com/docker/docker/volume/store" - "github.com/docker/engine-api/types" - containertypes "github.com/docker/engine-api/types/container" - networktypes "github.com/docker/engine-api/types/network" "github.com/opencontainers/runc/libcontainer/label" ) diff --git a/daemon/create_unix.go b/daemon/create_unix.go index 37c4a911f0..eecf27e1f4 100644 --- a/daemon/create_unix.go +++ b/daemon/create_unix.go @@ -8,9 +8,9 @@ import ( "path/filepath" "github.com/Sirupsen/logrus" + containertypes "github.com/docker/docker/api/types/container" "github.com/docker/docker/container" "github.com/docker/docker/pkg/stringid" - containertypes "github.com/docker/engine-api/types/container" "github.com/opencontainers/runc/libcontainer/label" ) diff --git a/daemon/create_windows.go b/daemon/create_windows.go index d4da759fd3..06e284feb0 100644 --- a/daemon/create_windows.go +++ b/daemon/create_windows.go @@ -3,10 +3,10 @@ package daemon import ( "fmt" + containertypes "github.com/docker/docker/api/types/container" "github.com/docker/docker/container" "github.com/docker/docker/pkg/stringid" "github.com/docker/docker/volume" - containertypes "github.com/docker/engine-api/types/container" ) // createContainerPlatformSpecificSettings performs platform specific container create functionality diff --git a/daemon/daemon.go b/daemon/daemon.go index 04aeeb2c66..52e587eb43 100644 --- a/daemon/daemon.go +++ b/daemon/daemon.go @@ -23,11 +23,11 @@ import ( "github.com/Sirupsen/logrus" containerd "github.com/docker/containerd/api/grpc/types" "github.com/docker/docker/api" + "github.com/docker/docker/api/types" + containertypes "github.com/docker/docker/api/types/container" "github.com/docker/docker/container" "github.com/docker/docker/daemon/events" "github.com/docker/docker/daemon/exec" - "github.com/docker/engine-api/types" - containertypes "github.com/docker/engine-api/types/container" "github.com/docker/libnetwork/cluster" // register graph drivers _ "github.com/docker/docker/daemon/graphdriver/register" diff --git a/daemon/daemon_experimental.go b/daemon/daemon_experimental.go index a09aeb7062..149e4c71bc 100644 --- a/daemon/daemon_experimental.go +++ b/daemon/daemon_experimental.go @@ -3,9 +3,9 @@ package daemon import ( + "github.com/docker/docker/api/types/container" "github.com/docker/docker/libcontainerd" "github.com/docker/docker/plugin" - "github.com/docker/engine-api/types/container" ) func (daemon *Daemon) verifyExperimentalContainerSettings(hostConfig *container.HostConfig, config *container.Config) ([]string, error) { diff --git a/daemon/daemon_solaris.go b/daemon/daemon_solaris.go index 8eb7872635..7578bc5b5b 100644 --- a/daemon/daemon_solaris.go +++ b/daemon/daemon_solaris.go @@ -5,14 +5,14 @@ package daemon import ( "fmt" + "github.com/docker/docker/api/types" + containertypes "github.com/docker/docker/api/types/container" "github.com/docker/docker/container" "github.com/docker/docker/image" "github.com/docker/docker/layer" "github.com/docker/docker/pkg/idtools" "github.com/docker/docker/pkg/parsers/kernel" "github.com/docker/docker/reference" - "github.com/docker/engine-api/types" - containertypes "github.com/docker/engine-api/types/container" "github.com/docker/libnetwork" nwconfig "github.com/docker/libnetwork/config" ) diff --git a/daemon/daemon_stub.go b/daemon/daemon_stub.go index a5f534964d..5c72f82b3c 100644 --- a/daemon/daemon_stub.go +++ b/daemon/daemon_stub.go @@ -3,8 +3,8 @@ package daemon import ( + "github.com/docker/docker/api/types/container" "github.com/docker/docker/libcontainerd" - "github.com/docker/engine-api/types/container" ) func (daemon *Daemon) verifyExperimentalContainerSettings(hostConfig *container.HostConfig, config *container.Config) ([]string, error) { diff --git a/daemon/daemon_test.go b/daemon/daemon_test.go index d799823970..223b3cd6ac 100644 --- a/daemon/daemon_test.go +++ b/daemon/daemon_test.go @@ -8,6 +8,7 @@ import ( "testing" "time" + containertypes "github.com/docker/docker/api/types/container" "github.com/docker/docker/container" "github.com/docker/docker/pkg/discovery" _ "github.com/docker/docker/pkg/discovery/memory" @@ -17,7 +18,6 @@ import ( volumedrivers "github.com/docker/docker/volume/drivers" "github.com/docker/docker/volume/local" "github.com/docker/docker/volume/store" - containertypes "github.com/docker/engine-api/types/container" "github.com/docker/go-connections/nat" ) diff --git a/daemon/daemon_unix.go b/daemon/daemon_unix.go index ee64089dfb..ecd9a8b0f8 100644 --- a/daemon/daemon_unix.go +++ b/daemon/daemon_unix.go @@ -16,6 +16,10 @@ import ( "syscall" "github.com/Sirupsen/logrus" + "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/blkiodev" + pblkiodev "github.com/docker/docker/api/types/blkiodev" + containertypes "github.com/docker/docker/api/types/container" "github.com/docker/docker/container" "github.com/docker/docker/image" "github.com/docker/docker/pkg/idtools" @@ -24,10 +28,6 @@ import ( "github.com/docker/docker/pkg/sysinfo" "github.com/docker/docker/runconfig" runconfigopts "github.com/docker/docker/runconfig/opts" - "github.com/docker/engine-api/types" - "github.com/docker/engine-api/types/blkiodev" - pblkiodev "github.com/docker/engine-api/types/blkiodev" - containertypes "github.com/docker/engine-api/types/container" "github.com/docker/libnetwork" nwconfig "github.com/docker/libnetwork/config" "github.com/docker/libnetwork/drivers/bridge" diff --git a/daemon/daemon_unix_test.go b/daemon/daemon_unix_test.go index 98d94ff23d..3b15547b9a 100644 --- a/daemon/daemon_unix_test.go +++ b/daemon/daemon_unix_test.go @@ -8,12 +8,12 @@ import ( "path/filepath" "testing" + containertypes "github.com/docker/docker/api/types/container" "github.com/docker/docker/container" "github.com/docker/docker/volume" "github.com/docker/docker/volume/drivers" "github.com/docker/docker/volume/local" "github.com/docker/docker/volume/store" - containertypes "github.com/docker/engine-api/types/container" ) // Unix test as uses settings which are not available on Windows diff --git a/daemon/daemon_windows.go b/daemon/daemon_windows.go index 8151c42c59..ad65fab4ce 100644 --- a/daemon/daemon_windows.go +++ b/daemon/daemon_windows.go @@ -7,6 +7,9 @@ import ( "github.com/Microsoft/hcsshim" "github.com/Sirupsen/logrus" + "github.com/docker/docker/api/types" + pblkiodev "github.com/docker/docker/api/types/blkiodev" + containertypes "github.com/docker/docker/api/types/container" "github.com/docker/docker/container" "github.com/docker/docker/image" "github.com/docker/docker/pkg/idtools" @@ -14,9 +17,6 @@ import ( "github.com/docker/docker/pkg/sysinfo" "github.com/docker/docker/pkg/system" "github.com/docker/docker/runconfig" - "github.com/docker/engine-api/types" - pblkiodev "github.com/docker/engine-api/types/blkiodev" - containertypes "github.com/docker/engine-api/types/container" "github.com/docker/libnetwork" nwconfig "github.com/docker/libnetwork/config" winlibnetwork "github.com/docker/libnetwork/drivers/windows" diff --git a/daemon/delete.go b/daemon/delete.go index 4aa1e2cc08..9658a40325 100644 --- a/daemon/delete.go +++ b/daemon/delete.go @@ -7,11 +7,11 @@ import ( "strings" "github.com/Sirupsen/logrus" + "github.com/docker/docker/api/types" "github.com/docker/docker/container" "github.com/docker/docker/errors" "github.com/docker/docker/layer" volumestore "github.com/docker/docker/volume/store" - "github.com/docker/engine-api/types" ) // ContainerRm removes the container id from the filesystem. An error diff --git a/daemon/delete_test.go b/daemon/delete_test.go index 9db83b0685..2e3c0a26ec 100644 --- a/daemon/delete_test.go +++ b/daemon/delete_test.go @@ -5,9 +5,9 @@ import ( "os" "testing" + "github.com/docker/docker/api/types" + containertypes "github.com/docker/docker/api/types/container" "github.com/docker/docker/container" - "github.com/docker/engine-api/types" - containertypes "github.com/docker/engine-api/types/container" ) func TestContainerDoubleDelete(t *testing.T) { diff --git a/daemon/events.go b/daemon/events.go index e01015777e..8fe8e1b640 100644 --- a/daemon/events.go +++ b/daemon/events.go @@ -4,10 +4,10 @@ import ( "strings" "time" + "github.com/docker/docker/api/types/events" + "github.com/docker/docker/api/types/filters" "github.com/docker/docker/container" daemonevents "github.com/docker/docker/daemon/events" - "github.com/docker/engine-api/types/events" - "github.com/docker/engine-api/types/filters" "github.com/docker/libnetwork" ) diff --git a/daemon/events/events.go b/daemon/events/events.go index df2181fb09..1c08fb05b5 100644 --- a/daemon/events/events.go +++ b/daemon/events/events.go @@ -4,8 +4,8 @@ import ( "sync" "time" + eventtypes "github.com/docker/docker/api/types/events" "github.com/docker/docker/pkg/pubsub" - eventtypes "github.com/docker/engine-api/types/events" ) const ( diff --git a/daemon/events/events_test.go b/daemon/events/events_test.go index 0c8ee6b920..2c19f1832a 100644 --- a/daemon/events/events_test.go +++ b/daemon/events/events_test.go @@ -5,9 +5,9 @@ import ( "testing" "time" + "github.com/docker/docker/api/types/events" + timetypes "github.com/docker/docker/api/types/time" "github.com/docker/docker/daemon/events/testutils" - "github.com/docker/engine-api/types/events" - timetypes "github.com/docker/engine-api/types/time" ) func TestEventsLog(t *testing.T) { diff --git a/daemon/events/filter.go b/daemon/events/filter.go index 525431c915..78da87de30 100644 --- a/daemon/events/filter.go +++ b/daemon/events/filter.go @@ -1,9 +1,9 @@ package events import ( + "github.com/docker/docker/api/types/events" + "github.com/docker/docker/api/types/filters" "github.com/docker/docker/reference" - "github.com/docker/engine-api/types/events" - "github.com/docker/engine-api/types/filters" ) // Filter can filter out docker events from a stream diff --git a/daemon/events/testutils/testutils.go b/daemon/events/testutils/testutils.go index c84418a9e7..56db396bbf 100644 --- a/daemon/events/testutils/testutils.go +++ b/daemon/events/testutils/testutils.go @@ -6,8 +6,8 @@ import ( "strings" "time" - "github.com/docker/engine-api/types/events" - timetypes "github.com/docker/engine-api/types/time" + "github.com/docker/docker/api/types/events" + timetypes "github.com/docker/docker/api/types/time" ) var ( diff --git a/daemon/events_test.go b/daemon/events_test.go index 8ee14a3144..2dbcc27dfc 100644 --- a/daemon/events_test.go +++ b/daemon/events_test.go @@ -4,10 +4,10 @@ import ( "testing" "time" + containertypes "github.com/docker/docker/api/types/container" + eventtypes "github.com/docker/docker/api/types/events" "github.com/docker/docker/container" "github.com/docker/docker/daemon/events" - containertypes "github.com/docker/engine-api/types/container" - eventtypes "github.com/docker/engine-api/types/events" ) func TestLogContainerEventCopyLabels(t *testing.T) { diff --git a/daemon/exec.go b/daemon/exec.go index d57b6875d8..b535cf851b 100644 --- a/daemon/exec.go +++ b/daemon/exec.go @@ -9,6 +9,8 @@ import ( "golang.org/x/net/context" "github.com/Sirupsen/logrus" + "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/strslice" "github.com/docker/docker/container" "github.com/docker/docker/daemon/exec" "github.com/docker/docker/errors" @@ -16,8 +18,6 @@ import ( "github.com/docker/docker/pkg/pools" "github.com/docker/docker/pkg/signal" "github.com/docker/docker/pkg/term" - "github.com/docker/engine-api/types" - "github.com/docker/engine-api/types/strslice" ) // Seconds to wait after sending TERM before trying KILL diff --git a/daemon/health.go b/daemon/health.go index db4ee6f6c8..9f7c76ee14 100644 --- a/daemon/health.go +++ b/daemon/health.go @@ -10,10 +10,10 @@ import ( "golang.org/x/net/context" "github.com/Sirupsen/logrus" + "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/strslice" "github.com/docker/docker/container" "github.com/docker/docker/daemon/exec" - "github.com/docker/engine-api/types" - "github.com/docker/engine-api/types/strslice" ) const ( diff --git a/daemon/health_test.go b/daemon/health_test.go index caa91da335..d4f0348a89 100644 --- a/daemon/health_test.go +++ b/daemon/health_test.go @@ -4,11 +4,11 @@ import ( "testing" "time" + "github.com/docker/docker/api/types" + containertypes "github.com/docker/docker/api/types/container" + eventtypes "github.com/docker/docker/api/types/events" "github.com/docker/docker/container" "github.com/docker/docker/daemon/events" - "github.com/docker/engine-api/types" - containertypes "github.com/docker/engine-api/types/container" - eventtypes "github.com/docker/engine-api/types/events" ) func reset(c *container.Container) { diff --git a/daemon/image.go b/daemon/image.go index 9a3fa1aeaa..6faeea954a 100644 --- a/daemon/image.go +++ b/daemon/image.go @@ -3,11 +3,11 @@ package daemon import ( "fmt" + containertypes "github.com/docker/docker/api/types/container" "github.com/docker/docker/builder" "github.com/docker/docker/image" "github.com/docker/docker/reference" "github.com/docker/docker/runconfig" - containertypes "github.com/docker/engine-api/types/container" ) // ErrImageDoesNotExist is error returned when no image can be found for a reference. diff --git a/daemon/image_delete.go b/daemon/image_delete.go index 7c61f4e016..b071fca769 100644 --- a/daemon/image_delete.go +++ b/daemon/image_delete.go @@ -4,12 +4,12 @@ import ( "fmt" "strings" + "github.com/docker/docker/api/types" "github.com/docker/docker/container" "github.com/docker/docker/errors" "github.com/docker/docker/image" "github.com/docker/docker/pkg/stringid" "github.com/docker/docker/reference" - "github.com/docker/engine-api/types" ) type conflictType int diff --git a/daemon/image_history.go b/daemon/image_history.go index 05140d3685..3696146ea0 100644 --- a/daemon/image_history.go +++ b/daemon/image_history.go @@ -3,9 +3,9 @@ package daemon import ( "fmt" + "github.com/docker/docker/api/types" "github.com/docker/docker/layer" "github.com/docker/docker/reference" - "github.com/docker/engine-api/types" ) // ImageHistory returns a slice of ImageHistory structures for the specified image diff --git a/daemon/image_inspect.go b/daemon/image_inspect.go index 5b0022688e..5831471d3c 100644 --- a/daemon/image_inspect.go +++ b/daemon/image_inspect.go @@ -4,9 +4,9 @@ import ( "fmt" "time" + "github.com/docker/docker/api/types" "github.com/docker/docker/layer" "github.com/docker/docker/reference" - "github.com/docker/engine-api/types" ) // LookupImage looks up an image by name and returns it as an ImageInspect diff --git a/daemon/image_pull.go b/daemon/image_pull.go index 06ffa06fbe..984bdf63e6 100644 --- a/daemon/image_pull.go +++ b/daemon/image_pull.go @@ -5,12 +5,12 @@ import ( "strings" "github.com/docker/distribution/digest" + "github.com/docker/docker/api/types" "github.com/docker/docker/builder" "github.com/docker/docker/distribution" "github.com/docker/docker/pkg/progress" "github.com/docker/docker/reference" "github.com/docker/docker/registry" - "github.com/docker/engine-api/types" "golang.org/x/net/context" ) diff --git a/daemon/image_push.go b/daemon/image_push.go index 11c89709f1..42d27e02ad 100644 --- a/daemon/image_push.go +++ b/daemon/image_push.go @@ -3,10 +3,10 @@ package daemon import ( "io" + "github.com/docker/docker/api/types" "github.com/docker/docker/distribution" "github.com/docker/docker/pkg/progress" "github.com/docker/docker/reference" - "github.com/docker/engine-api/types" "golang.org/x/net/context" ) diff --git a/daemon/images.go b/daemon/images.go index 0060cdafb2..089b3997fd 100644 --- a/daemon/images.go +++ b/daemon/images.go @@ -5,11 +5,11 @@ import ( "path" "sort" + "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/filters" "github.com/docker/docker/image" "github.com/docker/docker/layer" "github.com/docker/docker/reference" - "github.com/docker/engine-api/types" - "github.com/docker/engine-api/types/filters" ) var acceptedImageFilterTags = map[string]bool{ diff --git a/daemon/import.go b/daemon/import.go index b980f210f5..c93322b92e 100644 --- a/daemon/import.go +++ b/daemon/import.go @@ -9,6 +9,7 @@ import ( "runtime" "time" + "github.com/docker/docker/api/types/container" "github.com/docker/docker/builder/dockerfile" "github.com/docker/docker/dockerversion" "github.com/docker/docker/image" @@ -18,7 +19,6 @@ import ( "github.com/docker/docker/pkg/progress" "github.com/docker/docker/pkg/streamformatter" "github.com/docker/docker/reference" - "github.com/docker/engine-api/types/container" ) // ImportImage imports an image, getting the archived layer data either from diff --git a/daemon/info.go b/daemon/info.go index 517d33c5d4..a7a918f3a0 100644 --- a/daemon/info.go +++ b/daemon/info.go @@ -7,6 +7,7 @@ import ( "time" "github.com/Sirupsen/logrus" + "github.com/docker/docker/api/types" "github.com/docker/docker/container" "github.com/docker/docker/dockerversion" "github.com/docker/docker/pkg/fileutils" @@ -18,7 +19,6 @@ import ( "github.com/docker/docker/registry" "github.com/docker/docker/utils" "github.com/docker/docker/volume/drivers" - "github.com/docker/engine-api/types" "github.com/docker/go-connections/sockets" ) diff --git a/daemon/inspect.go b/daemon/inspect.go index 75ca253a85..3577beaaea 100644 --- a/daemon/inspect.go +++ b/daemon/inspect.go @@ -4,13 +4,13 @@ import ( "fmt" "time" + "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/backend" + networktypes "github.com/docker/docker/api/types/network" + "github.com/docker/docker/api/types/versions" + "github.com/docker/docker/api/types/versions/v1p20" "github.com/docker/docker/container" "github.com/docker/docker/daemon/network" - "github.com/docker/engine-api/types" - networktypes "github.com/docker/engine-api/types/network" - "github.com/docker/engine-api/types/versions" - "github.com/docker/engine-api/types/versions/v1p20" ) // ContainerInspect returns low-level information about a diff --git a/daemon/inspect_solaris.go b/daemon/inspect_solaris.go index 2e49bef3a3..72e61d92c4 100644 --- a/daemon/inspect_solaris.go +++ b/daemon/inspect_solaris.go @@ -1,10 +1,10 @@ package daemon import ( + "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/backend" "github.com/docker/docker/container" "github.com/docker/docker/daemon/exec" - "github.com/docker/engine-api/types" ) // This sets platform-specific fields diff --git a/daemon/inspect_unix.go b/daemon/inspect_unix.go index 9d72d145df..532ebbad2e 100644 --- a/daemon/inspect_unix.go +++ b/daemon/inspect_unix.go @@ -3,11 +3,11 @@ package daemon import ( + "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/backend" + "github.com/docker/docker/api/types/versions/v1p19" "github.com/docker/docker/container" "github.com/docker/docker/daemon/exec" - "github.com/docker/engine-api/types" - "github.com/docker/engine-api/types/versions/v1p19" ) // This sets platform-specific fields diff --git a/daemon/inspect_windows.go b/daemon/inspect_windows.go index a23f703e09..c8d8c795f8 100644 --- a/daemon/inspect_windows.go +++ b/daemon/inspect_windows.go @@ -1,10 +1,10 @@ package daemon import ( + "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/backend" "github.com/docker/docker/container" "github.com/docker/docker/daemon/exec" - "github.com/docker/engine-api/types" ) // This sets platform-specific fields diff --git a/daemon/links_test.go b/daemon/links_test.go index d7a3c2aea9..e2dbff2d25 100644 --- a/daemon/links_test.go +++ b/daemon/links_test.go @@ -8,10 +8,10 @@ import ( "path/filepath" "testing" + containertypes "github.com/docker/docker/api/types/container" "github.com/docker/docker/container" "github.com/docker/docker/pkg/graphdb" "github.com/docker/docker/pkg/stringid" - containertypes "github.com/docker/engine-api/types/container" ) func TestMigrateLegacySqliteLinks(t *testing.T) { diff --git a/daemon/list.go b/daemon/list.go index 59524d7545..91ccdd9adc 100644 --- a/daemon/list.go +++ b/daemon/list.go @@ -8,12 +8,12 @@ import ( "strings" "github.com/Sirupsen/logrus" + "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/filters" + networktypes "github.com/docker/docker/api/types/network" "github.com/docker/docker/container" "github.com/docker/docker/image" "github.com/docker/docker/volume" - "github.com/docker/engine-api/types" - "github.com/docker/engine-api/types/filters" - networktypes "github.com/docker/engine-api/types/network" "github.com/docker/go-connections/nat" ) diff --git a/daemon/logs.go b/daemon/logs.go index 1b285c691d..55ef1bac48 100644 --- a/daemon/logs.go +++ b/daemon/logs.go @@ -10,13 +10,13 @@ import ( "github.com/Sirupsen/logrus" "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/daemon/logger/jsonfilelog" "github.com/docker/docker/pkg/ioutils" "github.com/docker/docker/pkg/stdcopy" - containertypes "github.com/docker/engine-api/types/container" - timetypes "github.com/docker/engine-api/types/time" ) // ContainerLogs hooks up a container's stdout and stderr streams diff --git a/daemon/logs_test.go b/daemon/logs_test.go index f0c6f6e1e9..0c36299e09 100644 --- a/daemon/logs_test.go +++ b/daemon/logs_test.go @@ -3,7 +3,7 @@ package daemon import ( "testing" - containertypes "github.com/docker/engine-api/types/container" + containertypes "github.com/docker/docker/api/types/container" ) func TestMergeAndVerifyLogConfigNilConfig(t *testing.T) { diff --git a/daemon/monitor.go b/daemon/monitor.go index 60cd11ec2c..b88dff6890 100644 --- a/daemon/monitor.go +++ b/daemon/monitor.go @@ -8,10 +8,10 @@ import ( "strconv" "github.com/Sirupsen/logrus" + "github.com/docker/docker/api/types" "github.com/docker/docker/daemon/exec" "github.com/docker/docker/libcontainerd" "github.com/docker/docker/runconfig" - "github.com/docker/engine-api/types" ) // StateChanged updates daemon state changes from containerd diff --git a/daemon/network.go b/daemon/network.go index 06f2af5df4..48015c00a8 100644 --- a/daemon/network.go +++ b/daemon/network.go @@ -7,11 +7,11 @@ import ( "strings" "github.com/Sirupsen/logrus" + "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/network" clustertypes "github.com/docker/docker/daemon/cluster/provider" "github.com/docker/docker/errors" "github.com/docker/docker/runconfig" - "github.com/docker/engine-api/types" - "github.com/docker/engine-api/types/network" "github.com/docker/libnetwork" networktypes "github.com/docker/libnetwork/types" ) diff --git a/daemon/network/settings.go b/daemon/network/settings.go index ff27cb0bbc..4320573c9a 100644 --- a/daemon/network/settings.go +++ b/daemon/network/settings.go @@ -1,8 +1,8 @@ package network import ( + networktypes "github.com/docker/docker/api/types/network" clustertypes "github.com/docker/docker/daemon/cluster/provider" - networktypes "github.com/docker/engine-api/types/network" "github.com/docker/go-connections/nat" ) diff --git a/daemon/oci_linux.go b/daemon/oci_linux.go index 8e161af72c..49d9e1c8aa 100644 --- a/daemon/oci_linux.go +++ b/daemon/oci_linux.go @@ -10,6 +10,7 @@ import ( "strings" "github.com/Sirupsen/logrus" + containertypes "github.com/docker/docker/api/types/container" "github.com/docker/docker/container" "github.com/docker/docker/daemon/caps" "github.com/docker/docker/libcontainerd" @@ -19,7 +20,6 @@ import ( "github.com/docker/docker/pkg/stringutils" "github.com/docker/docker/pkg/symlink" "github.com/docker/docker/volume" - containertypes "github.com/docker/engine-api/types/container" "github.com/opencontainers/runc/libcontainer/apparmor" "github.com/opencontainers/runc/libcontainer/devices" "github.com/opencontainers/runc/libcontainer/user" diff --git a/daemon/search.go b/daemon/search.go index 09c6ae49b7..5d2ac5d222 100644 --- a/daemon/search.go +++ b/daemon/search.go @@ -6,10 +6,10 @@ import ( "golang.org/x/net/context" + "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/filters" + registrytypes "github.com/docker/docker/api/types/registry" "github.com/docker/docker/dockerversion" - "github.com/docker/engine-api/types" - "github.com/docker/engine-api/types/filters" - registrytypes "github.com/docker/engine-api/types/registry" ) var acceptedSearchFilterTags = map[string]bool{ diff --git a/daemon/search_test.go b/daemon/search_test.go index 8a98a52623..f5aa85a61e 100644 --- a/daemon/search_test.go +++ b/daemon/search_test.go @@ -7,9 +7,9 @@ import ( "golang.org/x/net/context" + "github.com/docker/docker/api/types" + registrytypes "github.com/docker/docker/api/types/registry" "github.com/docker/docker/registry" - "github.com/docker/engine-api/types" - registrytypes "github.com/docker/engine-api/types/registry" ) type FakeService struct { diff --git a/daemon/start.go b/daemon/start.go index c1e6c7983e..561f0a09c3 100644 --- a/daemon/start.go +++ b/daemon/start.go @@ -10,12 +10,12 @@ import ( "google.golang.org/grpc" "github.com/Sirupsen/logrus" + "github.com/docker/docker/api/types" + containertypes "github.com/docker/docker/api/types/container" "github.com/docker/docker/container" "github.com/docker/docker/errors" "github.com/docker/docker/libcontainerd" "github.com/docker/docker/runconfig" - "github.com/docker/engine-api/types" - containertypes "github.com/docker/engine-api/types/container" ) // ContainerStart starts a container. diff --git a/daemon/stats.go b/daemon/stats.go index 3eafecc256..f7d4afbb95 100644 --- a/daemon/stats.go +++ b/daemon/stats.go @@ -8,12 +8,12 @@ import ( "golang.org/x/net/context" + "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/backend" + "github.com/docker/docker/api/types/versions" + "github.com/docker/docker/api/types/versions/v1p20" "github.com/docker/docker/container" "github.com/docker/docker/pkg/ioutils" - "github.com/docker/engine-api/types" - "github.com/docker/engine-api/types/versions" - "github.com/docker/engine-api/types/versions/v1p20" ) // ContainerStats writes information about the container to the stream diff --git a/daemon/stats_collector_unix.go b/daemon/stats_collector_unix.go index f66dc2c3c7..fa34d97ce0 100644 --- a/daemon/stats_collector_unix.go +++ b/daemon/stats_collector_unix.go @@ -12,10 +12,10 @@ import ( "time" "github.com/Sirupsen/logrus" + "github.com/docker/docker/api/types" "github.com/docker/docker/container" "github.com/docker/docker/pkg/pubsub" sysinfo "github.com/docker/docker/pkg/system" - "github.com/docker/engine-api/types" "github.com/opencontainers/runc/libcontainer/system" ) diff --git a/daemon/top_unix.go b/daemon/top_unix.go index 935f38f29e..7fb81d0148 100644 --- a/daemon/top_unix.go +++ b/daemon/top_unix.go @@ -9,7 +9,7 @@ import ( "strconv" "strings" - "github.com/docker/engine-api/types" + "github.com/docker/docker/api/types" ) func validatePSArgs(psArgs string) error { diff --git a/daemon/top_windows.go b/daemon/top_windows.go index ea79ac86ac..123eb29862 100644 --- a/daemon/top_windows.go +++ b/daemon/top_windows.go @@ -4,7 +4,7 @@ import ( "errors" "strconv" - "github.com/docker/engine-api/types" + "github.com/docker/docker/api/types" ) // ContainerTop is a minimal implementation on Windows currently. diff --git a/daemon/update.go b/daemon/update.go index e79dfa9a61..46a3d35e5f 100644 --- a/daemon/update.go +++ b/daemon/update.go @@ -3,8 +3,8 @@ package daemon import ( "fmt" - "github.com/docker/engine-api/types" - "github.com/docker/engine-api/types/container" + "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/container" ) // ContainerUpdate updates configuration of the container diff --git a/daemon/update_linux.go b/daemon/update_linux.go index 69cc0840ab..f422325272 100644 --- a/daemon/update_linux.go +++ b/daemon/update_linux.go @@ -3,8 +3,8 @@ package daemon import ( + "github.com/docker/docker/api/types/container" "github.com/docker/docker/libcontainerd" - "github.com/docker/engine-api/types/container" ) func toContainerdResources(resources container.Resources) libcontainerd.Resources { diff --git a/daemon/update_solaris.go b/daemon/update_solaris.go index 848adae9d2..f3b545c5f0 100644 --- a/daemon/update_solaris.go +++ b/daemon/update_solaris.go @@ -1,8 +1,8 @@ package daemon import ( + "github.com/docker/docker/api/types/container" "github.com/docker/docker/libcontainerd" - "github.com/docker/engine-api/types/container" ) func toContainerdResources(resources container.Resources) libcontainerd.Resources { diff --git a/daemon/update_windows.go b/daemon/update_windows.go index 2cd0ff2618..01466260bb 100644 --- a/daemon/update_windows.go +++ b/daemon/update_windows.go @@ -3,8 +3,8 @@ package daemon import ( + "github.com/docker/docker/api/types/container" "github.com/docker/docker/libcontainerd" - "github.com/docker/engine-api/types/container" ) func toContainerdResources(resources container.Resources) libcontainerd.Resources { diff --git a/daemon/volumes.go b/daemon/volumes.go index d178d410ab..4166b09d95 100644 --- a/daemon/volumes.go +++ b/daemon/volumes.go @@ -7,10 +7,10 @@ import ( "path/filepath" "strings" + "github.com/docker/docker/api/types" + containertypes "github.com/docker/docker/api/types/container" "github.com/docker/docker/container" "github.com/docker/docker/volume" - "github.com/docker/engine-api/types" - containertypes "github.com/docker/engine-api/types/container" ) var ( diff --git a/distribution/pull.go b/distribution/pull.go index dad93b656d..f1d362e5cc 100644 --- a/distribution/pull.go +++ b/distribution/pull.go @@ -6,13 +6,13 @@ import ( "github.com/Sirupsen/logrus" "github.com/docker/distribution/digest" "github.com/docker/docker/api" + "github.com/docker/docker/api/types" "github.com/docker/docker/distribution/metadata" "github.com/docker/docker/distribution/xfer" "github.com/docker/docker/image" "github.com/docker/docker/pkg/progress" "github.com/docker/docker/reference" "github.com/docker/docker/registry" - "github.com/docker/engine-api/types" "golang.org/x/net/context" ) diff --git a/distribution/push.go b/distribution/push.go index f3b54b7cf7..e696a4e109 100644 --- a/distribution/push.go +++ b/distribution/push.go @@ -7,6 +7,7 @@ import ( "io" "github.com/Sirupsen/logrus" + "github.com/docker/docker/api/types" "github.com/docker/docker/distribution/metadata" "github.com/docker/docker/distribution/xfer" "github.com/docker/docker/image" @@ -14,7 +15,6 @@ import ( "github.com/docker/docker/pkg/progress" "github.com/docker/docker/reference" "github.com/docker/docker/registry" - "github.com/docker/engine-api/types" "github.com/docker/libtrust" "golang.org/x/net/context" ) diff --git a/distribution/registry.go b/distribution/registry.go index 98b82fbaeb..d3c991e875 100644 --- a/distribution/registry.go +++ b/distribution/registry.go @@ -11,9 +11,9 @@ import ( "github.com/docker/distribution/registry/client" "github.com/docker/distribution/registry/client/auth" "github.com/docker/distribution/registry/client/transport" + "github.com/docker/docker/api/types" "github.com/docker/docker/dockerversion" "github.com/docker/docker/registry" - "github.com/docker/engine-api/types" "github.com/docker/go-connections/sockets" "golang.org/x/net/context" ) diff --git a/distribution/registry_unit_test.go b/distribution/registry_unit_test.go index b60a465d78..23edc095e1 100644 --- a/distribution/registry_unit_test.go +++ b/distribution/registry_unit_test.go @@ -9,11 +9,11 @@ import ( "testing" "github.com/Sirupsen/logrus" + "github.com/docker/docker/api/types" + registrytypes "github.com/docker/docker/api/types/registry" "github.com/docker/docker/reference" "github.com/docker/docker/registry" "github.com/docker/docker/utils" - "github.com/docker/engine-api/types" - registrytypes "github.com/docker/engine-api/types/registry" "golang.org/x/net/context" ) diff --git a/image/image.go b/image/image.go index 7a05e649fb..d3034cc10d 100644 --- a/image/image.go +++ b/image/image.go @@ -7,7 +7,7 @@ import ( "time" "github.com/docker/distribution/digest" - "github.com/docker/engine-api/types/container" + "github.com/docker/docker/api/types/container" ) // ID is the content-addressable ID of an image. diff --git a/image/v1/imagev1.go b/image/v1/imagev1.go index b7a9529ed8..d498ddbc00 100644 --- a/image/v1/imagev1.go +++ b/image/v1/imagev1.go @@ -9,9 +9,9 @@ import ( "github.com/Sirupsen/logrus" "github.com/docker/distribution/digest" + "github.com/docker/docker/api/types/versions" "github.com/docker/docker/image" "github.com/docker/docker/layer" - "github.com/docker/engine-api/types/versions" ) var validHex = regexp.MustCompile(`^([a-f0-9]{64})$`) diff --git a/integration-cli/check_test.go b/integration-cli/check_test.go index 5b79054e91..3b5965e571 100644 --- a/integration-cli/check_test.go +++ b/integration-cli/check_test.go @@ -8,9 +8,9 @@ import ( "syscall" "testing" + "github.com/docker/docker/api/types/swarm" "github.com/docker/docker/cliconfig" "github.com/docker/docker/pkg/reexec" - "github.com/docker/engine-api/types/swarm" "github.com/go-check/check" ) diff --git a/integration-cli/daemon.go b/integration-cli/daemon.go index a16798c0ee..38c96684d5 100644 --- a/integration-cli/daemon.go +++ b/integration-cli/daemon.go @@ -14,11 +14,11 @@ import ( "strings" "time" + "github.com/docker/docker/api/types/events" "github.com/docker/docker/opts" "github.com/docker/docker/pkg/integration/checker" "github.com/docker/docker/pkg/ioutils" "github.com/docker/docker/pkg/stringid" - "github.com/docker/engine-api/types/events" "github.com/docker/go-connections/sockets" "github.com/docker/go-connections/tlsconfig" "github.com/go-check/check" diff --git a/integration-cli/daemon_swarm.go b/integration-cli/daemon_swarm.go index efb59991f7..f7f2424e5e 100644 --- a/integration-cli/daemon_swarm.go +++ b/integration-cli/daemon_swarm.go @@ -7,10 +7,10 @@ import ( "strings" "time" + "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/filters" + "github.com/docker/docker/api/types/swarm" "github.com/docker/docker/pkg/integration/checker" - "github.com/docker/engine-api/types" - "github.com/docker/engine-api/types/filters" - "github.com/docker/engine-api/types/swarm" "github.com/go-check/check" ) diff --git a/integration-cli/docker_api_auth_test.go b/integration-cli/docker_api_auth_test.go index d73c61d411..1002b06998 100644 --- a/integration-cli/docker_api_auth_test.go +++ b/integration-cli/docker_api_auth_test.go @@ -3,8 +3,8 @@ package main import ( "net/http" + "github.com/docker/docker/api/types" "github.com/docker/docker/pkg/integration/checker" - "github.com/docker/engine-api/types" "github.com/go-check/check" ) diff --git a/integration-cli/docker_api_containers_test.go b/integration-cli/docker_api_containers_test.go index c72d5556b9..567413e1bd 100644 --- a/integration-cli/docker_api_containers_test.go +++ b/integration-cli/docker_api_containers_test.go @@ -15,12 +15,12 @@ import ( "strings" "time" + "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/pkg/integration" "github.com/docker/docker/pkg/integration/checker" "github.com/docker/docker/pkg/stringid" - "github.com/docker/engine-api/types" - containertypes "github.com/docker/engine-api/types/container" - networktypes "github.com/docker/engine-api/types/network" "github.com/go-check/check" ) diff --git a/integration-cli/docker_api_images_test.go b/integration-cli/docker_api_images_test.go index 9d35b0c9ed..2edf8589a1 100644 --- a/integration-cli/docker_api_images_test.go +++ b/integration-cli/docker_api_images_test.go @@ -6,8 +6,8 @@ import ( "net/url" "strings" + "github.com/docker/docker/api/types" "github.com/docker/docker/pkg/integration/checker" - "github.com/docker/engine-api/types" "github.com/go-check/check" ) diff --git a/integration-cli/docker_api_inspect_test.go b/integration-cli/docker_api_inspect_test.go index 2477d5a49e..8507b94b2d 100644 --- a/integration-cli/docker_api_inspect_test.go +++ b/integration-cli/docker_api_inspect_test.go @@ -5,10 +5,10 @@ import ( "net/http" "strings" + "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/versions/v1p20" "github.com/docker/docker/pkg/integration/checker" "github.com/docker/docker/pkg/stringutils" - "github.com/docker/engine-api/types" - "github.com/docker/engine-api/types/versions/v1p20" "github.com/go-check/check" ) diff --git a/integration-cli/docker_api_network_test.go b/integration-cli/docker_api_network_test.go index 40c77cbd9e..dd83579e07 100644 --- a/integration-cli/docker_api_network_test.go +++ b/integration-cli/docker_api_network_test.go @@ -8,10 +8,10 @@ import ( "net/url" "strings" + "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/filters" + "github.com/docker/docker/api/types/network" "github.com/docker/docker/pkg/integration/checker" - "github.com/docker/engine-api/types" - "github.com/docker/engine-api/types/filters" - "github.com/docker/engine-api/types/network" "github.com/go-check/check" ) diff --git a/integration-cli/docker_api_service_update_test.go b/integration-cli/docker_api_service_update_test.go index 7fdef97121..a0c795b248 100644 --- a/integration-cli/docker_api_service_update_test.go +++ b/integration-cli/docker_api_service_update_test.go @@ -3,8 +3,8 @@ package main import ( + "github.com/docker/docker/api/types/swarm" "github.com/docker/docker/pkg/integration/checker" - "github.com/docker/engine-api/types/swarm" "github.com/go-check/check" ) diff --git a/integration-cli/docker_api_stats_test.go b/integration-cli/docker_api_stats_test.go index 93d18f70df..4ed2aacaa3 100644 --- a/integration-cli/docker_api_stats_test.go +++ b/integration-cli/docker_api_stats_test.go @@ -11,9 +11,9 @@ import ( "sync" "time" + "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/versions" "github.com/docker/docker/pkg/integration/checker" - "github.com/docker/engine-api/types" - "github.com/docker/engine-api/types/versions" "github.com/go-check/check" ) diff --git a/integration-cli/docker_api_stats_unix_test.go b/integration-cli/docker_api_stats_unix_test.go index 5409a0dbca..31547a29c6 100644 --- a/integration-cli/docker_api_stats_unix_test.go +++ b/integration-cli/docker_api_stats_unix_test.go @@ -7,8 +7,8 @@ import ( "fmt" "net/http" + "github.com/docker/docker/api/types" "github.com/docker/docker/pkg/integration/checker" - "github.com/docker/engine-api/types" "github.com/go-check/check" ) diff --git a/integration-cli/docker_api_swarm_test.go b/integration-cli/docker_api_swarm_test.go index d8d01d10fe..e49c79a193 100644 --- a/integration-cli/docker_api_swarm_test.go +++ b/integration-cli/docker_api_swarm_test.go @@ -13,8 +13,8 @@ import ( "syscall" "time" + "github.com/docker/docker/api/types/swarm" "github.com/docker/docker/pkg/integration/checker" - "github.com/docker/engine-api/types/swarm" "github.com/go-check/check" ) diff --git a/integration-cli/docker_api_version_test.go b/integration-cli/docker_api_version_test.go index ccb1484190..eb2de5904a 100644 --- a/integration-cli/docker_api_version_test.go +++ b/integration-cli/docker_api_version_test.go @@ -4,9 +4,9 @@ import ( "encoding/json" "net/http" + "github.com/docker/docker/api/types" "github.com/docker/docker/dockerversion" "github.com/docker/docker/pkg/integration/checker" - "github.com/docker/engine-api/types" "github.com/go-check/check" ) diff --git a/integration-cli/docker_api_volumes_test.go b/integration-cli/docker_api_volumes_test.go index 732271d02d..26fb864c21 100644 --- a/integration-cli/docker_api_volumes_test.go +++ b/integration-cli/docker_api_volumes_test.go @@ -5,8 +5,8 @@ import ( "net/http" "path/filepath" + "github.com/docker/docker/api/types" "github.com/docker/docker/pkg/integration/checker" - "github.com/docker/engine-api/types" "github.com/go-check/check" ) diff --git a/integration-cli/docker_cli_by_digest_test.go b/integration-cli/docker_cli_by_digest_test.go index edfed8e04d..8cce0c8ec2 100644 --- a/integration-cli/docker_cli_by_digest_test.go +++ b/integration-cli/docker_cli_by_digest_test.go @@ -11,9 +11,9 @@ import ( "github.com/docker/distribution/digest" "github.com/docker/distribution/manifest/schema1" "github.com/docker/distribution/manifest/schema2" + "github.com/docker/docker/api/types" "github.com/docker/docker/pkg/integration/checker" "github.com/docker/docker/pkg/stringutils" - "github.com/docker/engine-api/types" "github.com/go-check/check" ) diff --git a/integration-cli/docker_cli_external_volume_driver_unix_test.go b/integration-cli/docker_cli_external_volume_driver_unix_test.go index 2be42775b5..375b73a77b 100644 --- a/integration-cli/docker_cli_external_volume_driver_unix_test.go +++ b/integration-cli/docker_cli_external_volume_driver_unix_test.go @@ -15,9 +15,9 @@ import ( "strings" "time" + "github.com/docker/docker/api/types" "github.com/docker/docker/pkg/integration/checker" "github.com/docker/docker/volume" - "github.com/docker/engine-api/types" "github.com/go-check/check" ) diff --git a/integration-cli/docker_cli_health_test.go b/integration-cli/docker_cli_health_test.go index 6894efba6c..5cfbfdf32b 100644 --- a/integration-cli/docker_cli_health_test.go +++ b/integration-cli/docker_cli_health_test.go @@ -2,8 +2,8 @@ package main import ( "encoding/json" + "github.com/docker/docker/api/types" "github.com/docker/docker/pkg/integration/checker" - "github.com/docker/engine-api/types" "github.com/go-check/check" "strconv" "strings" diff --git a/integration-cli/docker_cli_inspect_test.go b/integration-cli/docker_cli_inspect_test.go index 21117878c4..d28bb074ba 100644 --- a/integration-cli/docker_cli_inspect_test.go +++ b/integration-cli/docker_cli_inspect_test.go @@ -9,9 +9,9 @@ import ( "strings" "time" + "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/container" "github.com/docker/docker/pkg/integration/checker" - "github.com/docker/engine-api/types" - "github.com/docker/engine-api/types/container" "github.com/go-check/check" ) diff --git a/integration-cli/docker_cli_network_unix_test.go b/integration-cli/docker_cli_network_unix_test.go index 7797ee57ad..b86e086b62 100644 --- a/integration-cli/docker_cli_network_unix_test.go +++ b/integration-cli/docker_cli_network_unix_test.go @@ -14,12 +14,12 @@ import ( "strings" "time" + "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/versions/v1p20" "github.com/docker/docker/pkg/integration/checker" icmd "github.com/docker/docker/pkg/integration/cmd" "github.com/docker/docker/pkg/stringid" "github.com/docker/docker/runconfig" - "github.com/docker/engine-api/types" - "github.com/docker/engine-api/types/versions/v1p20" "github.com/docker/libnetwork/driverapi" remoteapi "github.com/docker/libnetwork/drivers/remote/api" "github.com/docker/libnetwork/ipamapi" diff --git a/integration-cli/docker_cli_service_create_test.go b/integration-cli/docker_cli_service_create_test.go index 4814ddee59..4b71a18b8d 100644 --- a/integration-cli/docker_cli_service_create_test.go +++ b/integration-cli/docker_cli_service_create_test.go @@ -6,9 +6,9 @@ import ( "encoding/json" "strings" + "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/swarm" "github.com/docker/docker/pkg/integration/checker" - "github.com/docker/engine-api/types" - "github.com/docker/engine-api/types/swarm" "github.com/go-check/check" ) diff --git a/integration-cli/docker_cli_service_health_test.go b/integration-cli/docker_cli_service_health_test.go index fb32070827..4782317765 100644 --- a/integration-cli/docker_cli_service_health_test.go +++ b/integration-cli/docker_cli_service_health_test.go @@ -6,9 +6,9 @@ import ( "strconv" "strings" + "github.com/docker/docker/api/types/swarm" "github.com/docker/docker/daemon/cluster/executor/container" "github.com/docker/docker/pkg/integration/checker" - "github.com/docker/engine-api/types/swarm" "github.com/go-check/check" ) diff --git a/integration-cli/docker_cli_service_update_test.go b/integration-cli/docker_cli_service_update_test.go index cf017dcaa8..e99a176bcf 100644 --- a/integration-cli/docker_cli_service_update_test.go +++ b/integration-cli/docker_cli_service_update_test.go @@ -5,8 +5,8 @@ package main import ( "encoding/json" + "github.com/docker/docker/api/types/swarm" "github.com/docker/docker/pkg/integration/checker" - "github.com/docker/engine-api/types/swarm" "github.com/go-check/check" ) diff --git a/integration-cli/docker_cli_swarm_test.go b/integration-cli/docker_cli_swarm_test.go index 9fc3f40069..a1ffcd9027 100644 --- a/integration-cli/docker_cli_swarm_test.go +++ b/integration-cli/docker_cli_swarm_test.go @@ -7,8 +7,8 @@ import ( "strings" "time" + "github.com/docker/docker/api/types/swarm" "github.com/docker/docker/pkg/integration/checker" - "github.com/docker/engine-api/types/swarm" "github.com/go-check/check" ) diff --git a/integration-cli/docker_cli_update_unix_test.go b/integration-cli/docker_cli_update_unix_test.go index 21fa9991bb..fb695372f1 100644 --- a/integration-cli/docker_cli_update_unix_test.go +++ b/integration-cli/docker_cli_update_unix_test.go @@ -7,9 +7,9 @@ import ( "fmt" "strings" + "github.com/docker/docker/api/types" "github.com/docker/docker/pkg/integration/checker" "github.com/docker/docker/pkg/parsers/kernel" - "github.com/docker/engine-api/types" "github.com/go-check/check" ) diff --git a/integration-cli/docker_utils.go b/integration-cli/docker_utils.go index edcfc88a3b..e56b9f2949 100644 --- a/integration-cli/docker_utils.go +++ b/integration-cli/docker_utils.go @@ -22,12 +22,12 @@ import ( "strings" "time" + "github.com/docker/docker/api/types" "github.com/docker/docker/opts" "github.com/docker/docker/pkg/httputils" icmd "github.com/docker/docker/pkg/integration/cmd" "github.com/docker/docker/pkg/ioutils" "github.com/docker/docker/pkg/stringutils" - "github.com/docker/engine-api/types" "github.com/docker/go-connections/tlsconfig" "github.com/docker/go-units" "github.com/go-check/check" diff --git a/opts/opts.go b/opts/opts.go index 20f4c655a1..f8bb3ba745 100644 --- a/opts/opts.go +++ b/opts/opts.go @@ -6,7 +6,7 @@ import ( "regexp" "strings" - "github.com/docker/engine-api/types/filters" + "github.com/docker/docker/api/types/filters" ) var ( diff --git a/plugin/backend.go b/plugin/backend.go index 089efdb4e6..4c57325412 100644 --- a/plugin/backend.go +++ b/plugin/backend.go @@ -12,12 +12,12 @@ import ( "path/filepath" "github.com/Sirupsen/logrus" + "github.com/docker/docker/api/types" "github.com/docker/docker/pkg/archive" "github.com/docker/docker/pkg/stringid" "github.com/docker/docker/plugin/distribution" "github.com/docker/docker/plugin/v2" "github.com/docker/docker/reference" - "github.com/docker/engine-api/types" ) // Disable deactivates a plugin, which implies that they cannot be used by containers. diff --git a/plugin/distribution/pull.go b/plugin/distribution/pull.go index c60865340c..d061744558 100644 --- a/plugin/distribution/pull.go +++ b/plugin/distribution/pull.go @@ -14,11 +14,11 @@ import ( "github.com/Sirupsen/logrus" "github.com/docker/distribution" "github.com/docker/distribution/manifest/schema2" + "github.com/docker/docker/api/types" dockerdist "github.com/docker/docker/distribution" archive "github.com/docker/docker/pkg/chrootarchive" "github.com/docker/docker/reference" "github.com/docker/docker/registry" - "github.com/docker/engine-api/types" "golang.org/x/net/context" ) diff --git a/plugin/distribution/push.go b/plugin/distribution/push.go index 5a9f689492..131738976f 100644 --- a/plugin/distribution/push.go +++ b/plugin/distribution/push.go @@ -11,10 +11,10 @@ import ( "github.com/docker/distribution" "github.com/docker/distribution/digest" "github.com/docker/distribution/manifest/schema2" + "github.com/docker/docker/api/types" dockerdist "github.com/docker/docker/distribution" "github.com/docker/docker/reference" "github.com/docker/docker/registry" - "github.com/docker/engine-api/types" "golang.org/x/net/context" ) diff --git a/plugin/manager_linux.go b/plugin/manager_linux.go index 4535212283..301b522149 100644 --- a/plugin/manager_linux.go +++ b/plugin/manager_linux.go @@ -9,12 +9,12 @@ import ( "time" "github.com/Sirupsen/logrus" + "github.com/docker/docker/api/types/container" "github.com/docker/docker/libcontainerd" "github.com/docker/docker/oci" "github.com/docker/docker/pkg/plugins" "github.com/docker/docker/plugin/v2" "github.com/docker/docker/restartmanager" - "github.com/docker/engine-api/types/container" ) func (pm *Manager) enable(p *v2.Plugin, force bool) error { diff --git a/plugin/v2/plugin.go b/plugin/v2/plugin.go index 5e6d643136..48e1be576c 100644 --- a/plugin/v2/plugin.go +++ b/plugin/v2/plugin.go @@ -11,10 +11,10 @@ import ( "strings" "sync" + "github.com/docker/docker/api/types" "github.com/docker/docker/pkg/plugins" "github.com/docker/docker/pkg/system" "github.com/docker/docker/restartmanager" - "github.com/docker/engine-api/types" "github.com/opencontainers/runtime-spec/specs-go" ) diff --git a/profiles/seccomp/seccomp.go b/profiles/seccomp/seccomp.go index ac7496ced9..a54ef50a8b 100644 --- a/profiles/seccomp/seccomp.go +++ b/profiles/seccomp/seccomp.go @@ -7,8 +7,8 @@ import ( "errors" "fmt" + "github.com/docker/docker/api/types" "github.com/docker/docker/pkg/stringutils" - "github.com/docker/engine-api/types" "github.com/opencontainers/runtime-spec/specs-go" libseccomp "github.com/seccomp/libseccomp-golang" ) diff --git a/profiles/seccomp/seccomp_default.go b/profiles/seccomp/seccomp_default.go index f6f84daf94..b392640c92 100644 --- a/profiles/seccomp/seccomp_default.go +++ b/profiles/seccomp/seccomp_default.go @@ -5,7 +5,7 @@ package seccomp import ( "syscall" - "github.com/docker/engine-api/types" + "github.com/docker/docker/api/types" ) func arches() []types.Architecture { diff --git a/profiles/seccomp/seccomp_unsupported.go b/profiles/seccomp/seccomp_unsupported.go index b3906f916f..f84b20b6d9 100644 --- a/profiles/seccomp/seccomp_unsupported.go +++ b/profiles/seccomp/seccomp_unsupported.go @@ -3,7 +3,7 @@ package seccomp import ( - "github.com/docker/engine-api/types" + "github.com/docker/docker/api/types" "github.com/opencontainers/runtime-spec/specs-go" ) diff --git a/registry/auth.go b/registry/auth.go index 045c8deac1..0bf0450b2c 100644 --- a/registry/auth.go +++ b/registry/auth.go @@ -11,8 +11,8 @@ import ( "github.com/Sirupsen/logrus" "github.com/docker/distribution/registry/client/auth" "github.com/docker/distribution/registry/client/transport" - "github.com/docker/engine-api/types" - registrytypes "github.com/docker/engine-api/types/registry" + "github.com/docker/docker/api/types" + registrytypes "github.com/docker/docker/api/types/registry" ) const ( diff --git a/registry/auth_test.go b/registry/auth_test.go index eedee44ef7..f5f213bf94 100644 --- a/registry/auth_test.go +++ b/registry/auth_test.go @@ -3,8 +3,8 @@ package registry import ( "testing" - "github.com/docker/engine-api/types" - registrytypes "github.com/docker/engine-api/types/registry" + "github.com/docker/docker/api/types" + registrytypes "github.com/docker/docker/api/types/registry" ) func buildAuthConfigs() map[string]types.AuthConfig { diff --git a/registry/config.go b/registry/config.go index 0adcc9c122..588720475c 100644 --- a/registry/config.go +++ b/registry/config.go @@ -7,9 +7,9 @@ import ( "net/url" "strings" + registrytypes "github.com/docker/docker/api/types/registry" "github.com/docker/docker/opts" "github.com/docker/docker/reference" - registrytypes "github.com/docker/engine-api/types/registry" "github.com/spf13/pflag" ) diff --git a/registry/endpoint_v1.go b/registry/endpoint_v1.go index fd81972c72..6bcf8c935d 100644 --- a/registry/endpoint_v1.go +++ b/registry/endpoint_v1.go @@ -11,7 +11,7 @@ import ( "github.com/Sirupsen/logrus" "github.com/docker/distribution/registry/client/transport" - registrytypes "github.com/docker/engine-api/types/registry" + registrytypes "github.com/docker/docker/api/types/registry" ) // V1Endpoint stores basic information about a V1 registry endpoint. diff --git a/registry/registry_mock_test.go b/registry/registry_mock_test.go index 828f48fc92..ea2719fe55 100644 --- a/registry/registry_mock_test.go +++ b/registry/registry_mock_test.go @@ -15,8 +15,8 @@ import ( "testing" "time" + registrytypes "github.com/docker/docker/api/types/registry" "github.com/docker/docker/reference" - registrytypes "github.com/docker/engine-api/types/registry" "github.com/gorilla/mux" "github.com/Sirupsen/logrus" diff --git a/registry/registry_test.go b/registry/registry_test.go index 9927af32d8..4eb312a998 100644 --- a/registry/registry_test.go +++ b/registry/registry_test.go @@ -9,9 +9,9 @@ import ( "testing" "github.com/docker/distribution/registry/client/transport" + "github.com/docker/docker/api/types" + registrytypes "github.com/docker/docker/api/types/registry" "github.com/docker/docker/reference" - "github.com/docker/engine-api/types" - registrytypes "github.com/docker/engine-api/types/registry" ) var ( diff --git a/registry/service.go b/registry/service.go index dbc16284f0..808d4555cf 100644 --- a/registry/service.go +++ b/registry/service.go @@ -11,9 +11,9 @@ import ( "github.com/Sirupsen/logrus" "github.com/docker/distribution/registry/client/auth" + "github.com/docker/docker/api/types" + registrytypes "github.com/docker/docker/api/types/registry" "github.com/docker/docker/reference" - "github.com/docker/engine-api/types" - registrytypes "github.com/docker/engine-api/types/registry" ) const ( diff --git a/registry/session.go b/registry/session.go index d48b9e8d20..72e286ab44 100644 --- a/registry/session.go +++ b/registry/session.go @@ -20,13 +20,13 @@ import ( "github.com/Sirupsen/logrus" "github.com/docker/distribution/registry/api/errcode" + "github.com/docker/docker/api/types" + registrytypes "github.com/docker/docker/api/types/registry" "github.com/docker/docker/pkg/httputils" "github.com/docker/docker/pkg/ioutils" "github.com/docker/docker/pkg/stringid" "github.com/docker/docker/pkg/tarsum" "github.com/docker/docker/reference" - "github.com/docker/engine-api/types" - registrytypes "github.com/docker/engine-api/types/registry" ) var ( diff --git a/registry/types.go b/registry/types.go index 601fa09ed7..479d22a7a6 100644 --- a/registry/types.go +++ b/registry/types.go @@ -1,8 +1,8 @@ package registry import ( + registrytypes "github.com/docker/docker/api/types/registry" "github.com/docker/docker/reference" - registrytypes "github.com/docker/engine-api/types/registry" ) // RepositoryData tracks the image list, list of endpoints, and list of tokens diff --git a/restartmanager/restartmanager.go b/restartmanager/restartmanager.go index 9893183a2a..570fc93802 100644 --- a/restartmanager/restartmanager.go +++ b/restartmanager/restartmanager.go @@ -6,7 +6,7 @@ import ( "sync" "time" - "github.com/docker/engine-api/types/container" + "github.com/docker/docker/api/types/container" ) const ( diff --git a/restartmanager/restartmanager_test.go b/restartmanager/restartmanager_test.go index 95a36b426b..20eced54d3 100644 --- a/restartmanager/restartmanager_test.go +++ b/restartmanager/restartmanager_test.go @@ -4,7 +4,7 @@ import ( "testing" "time" - "github.com/docker/engine-api/types/container" + "github.com/docker/docker/api/types/container" ) func TestRestartManagerTimeout(t *testing.T) { diff --git a/runconfig/compare.go b/runconfig/compare.go index 61346aabf4..708922f986 100644 --- a/runconfig/compare.go +++ b/runconfig/compare.go @@ -1,6 +1,6 @@ package runconfig -import "github.com/docker/engine-api/types/container" +import "github.com/docker/docker/api/types/container" // Compare two Config struct. Do not compare the "Image" nor "Hostname" fields // If OpenStdin is set, then it differs diff --git a/runconfig/compare_test.go b/runconfig/compare_test.go index 9c17c553f3..6370d7a887 100644 --- a/runconfig/compare_test.go +++ b/runconfig/compare_test.go @@ -3,8 +3,8 @@ package runconfig import ( "testing" - "github.com/docker/engine-api/types/container" - "github.com/docker/engine-api/types/strslice" + "github.com/docker/docker/api/types/container" + "github.com/docker/docker/api/types/strslice" "github.com/docker/go-connections/nat" ) diff --git a/runconfig/config.go b/runconfig/config.go index 8145e4b1da..e55b9589c7 100644 --- a/runconfig/config.go +++ b/runconfig/config.go @@ -5,9 +5,9 @@ import ( "fmt" "io" + "github.com/docker/docker/api/types/container" + networktypes "github.com/docker/docker/api/types/network" "github.com/docker/docker/volume" - "github.com/docker/engine-api/types/container" - networktypes "github.com/docker/engine-api/types/network" ) // ContainerDecoder implements httputils.ContainerDecoder diff --git a/runconfig/config_test.go b/runconfig/config_test.go index 5804b12d0e..47a58f4f3e 100644 --- a/runconfig/config_test.go +++ b/runconfig/config_test.go @@ -9,9 +9,9 @@ import ( "strings" "testing" - "github.com/docker/engine-api/types/container" - networktypes "github.com/docker/engine-api/types/network" - "github.com/docker/engine-api/types/strslice" + "github.com/docker/docker/api/types/container" + networktypes "github.com/docker/docker/api/types/network" + "github.com/docker/docker/api/types/strslice" ) type f struct { diff --git a/runconfig/config_unix.go b/runconfig/config_unix.go index e5902fb024..4ccfc73be2 100644 --- a/runconfig/config_unix.go +++ b/runconfig/config_unix.go @@ -3,8 +3,8 @@ package runconfig import ( - "github.com/docker/engine-api/types/container" - networktypes "github.com/docker/engine-api/types/network" + "github.com/docker/docker/api/types/container" + networktypes "github.com/docker/docker/api/types/network" ) // ContainerConfigWrapper is a Config wrapper that holds the container Config (portable) diff --git a/runconfig/config_windows.go b/runconfig/config_windows.go index 50a5238000..f2361b554b 100644 --- a/runconfig/config_windows.go +++ b/runconfig/config_windows.go @@ -1,8 +1,8 @@ package runconfig import ( - "github.com/docker/engine-api/types/container" - networktypes "github.com/docker/engine-api/types/network" + "github.com/docker/docker/api/types/container" + networktypes "github.com/docker/docker/api/types/network" ) // ContainerConfigWrapper is a Config wrapper that holds the container Config (portable) diff --git a/runconfig/hostconfig.go b/runconfig/hostconfig.go index 769cc9f5da..2b81d02c20 100644 --- a/runconfig/hostconfig.go +++ b/runconfig/hostconfig.go @@ -4,7 +4,7 @@ import ( "encoding/json" "io" - "github.com/docker/engine-api/types/container" + "github.com/docker/docker/api/types/container" ) // DecodeHostConfig creates a HostConfig based on the specified Reader. diff --git a/runconfig/hostconfig_solaris.go b/runconfig/hostconfig_solaris.go index 5c2e861202..97b66480c7 100644 --- a/runconfig/hostconfig_solaris.go +++ b/runconfig/hostconfig_solaris.go @@ -4,7 +4,7 @@ import ( "fmt" "strings" - "github.com/docker/engine-api/types/container" + "github.com/docker/docker/api/types/container" ) // DefaultDaemonNetworkMode returns the default network stack the daemon should diff --git a/runconfig/hostconfig_test.go b/runconfig/hostconfig_test.go index 1fbc90a4cf..8fdc567636 100644 --- a/runconfig/hostconfig_test.go +++ b/runconfig/hostconfig_test.go @@ -8,7 +8,7 @@ import ( "io/ioutil" "testing" - "github.com/docker/engine-api/types/container" + "github.com/docker/docker/api/types/container" ) // TODO Windows: This will need addressing for a Windows daemon. diff --git a/runconfig/hostconfig_unix.go b/runconfig/hostconfig_unix.go index c06b6ebfa1..c43718fc28 100644 --- a/runconfig/hostconfig_unix.go +++ b/runconfig/hostconfig_unix.go @@ -7,7 +7,7 @@ import ( "runtime" "strings" - "github.com/docker/engine-api/types/container" + "github.com/docker/docker/api/types/container" ) // DefaultDaemonNetworkMode returns the default network stack the daemon should diff --git a/runconfig/hostconfig_windows.go b/runconfig/hostconfig_windows.go index d06452db18..edfd0b1e79 100644 --- a/runconfig/hostconfig_windows.go +++ b/runconfig/hostconfig_windows.go @@ -4,7 +4,7 @@ import ( "fmt" "strings" - "github.com/docker/engine-api/types/container" + "github.com/docker/docker/api/types/container" ) // DefaultDaemonNetworkMode returns the default network stack the daemon should diff --git a/runconfig/opts/parse.go b/runconfig/opts/parse.go index 83ad27f8ed..106109202f 100644 --- a/runconfig/opts/parse.go +++ b/runconfig/opts/parse.go @@ -10,12 +10,12 @@ import ( "strings" "time" + "github.com/docker/docker/api/types/container" + networktypes "github.com/docker/docker/api/types/network" + "github.com/docker/docker/api/types/strslice" "github.com/docker/docker/opts" "github.com/docker/docker/pkg/mount" "github.com/docker/docker/pkg/signal" - "github.com/docker/engine-api/types/container" - networktypes "github.com/docker/engine-api/types/network" - "github.com/docker/engine-api/types/strslice" "github.com/docker/go-connections/nat" units "github.com/docker/go-units" "github.com/spf13/pflag" diff --git a/runconfig/opts/parse_test.go b/runconfig/opts/parse_test.go index 100b5d93a1..67f4c40e37 100644 --- a/runconfig/opts/parse_test.go +++ b/runconfig/opts/parse_test.go @@ -11,9 +11,9 @@ import ( "testing" "time" + "github.com/docker/docker/api/types/container" + networktypes "github.com/docker/docker/api/types/network" "github.com/docker/docker/runconfig" - "github.com/docker/engine-api/types/container" - networktypes "github.com/docker/engine-api/types/network" "github.com/docker/go-connections/nat" "github.com/spf13/pflag" ) diff --git a/runconfig/opts/runtime.go b/runconfig/opts/runtime.go index 541fda017a..4361b3ce09 100644 --- a/runconfig/opts/runtime.go +++ b/runconfig/opts/runtime.go @@ -4,7 +4,7 @@ import ( "fmt" "strings" - "github.com/docker/engine-api/types" + "github.com/docker/docker/api/types" ) // RuntimeOpt defines a map of Runtimes diff --git a/runconfig/opts/throttledevice.go b/runconfig/opts/throttledevice.go index f69e74ecc7..3a104b86f8 100644 --- a/runconfig/opts/throttledevice.go +++ b/runconfig/opts/throttledevice.go @@ -5,7 +5,7 @@ import ( "strconv" "strings" - "github.com/docker/engine-api/types/blkiodev" + "github.com/docker/docker/api/types/blkiodev" "github.com/docker/go-units" ) diff --git a/runconfig/opts/weightdevice.go b/runconfig/opts/weightdevice.go index b3afd2213c..2a5da6da08 100644 --- a/runconfig/opts/weightdevice.go +++ b/runconfig/opts/weightdevice.go @@ -5,7 +5,7 @@ import ( "strconv" "strings" - "github.com/docker/engine-api/types/blkiodev" + "github.com/docker/docker/api/types/blkiodev" ) // ValidatorWeightFctType defines a validator function that returns a validated struct and/or an error. diff --git a/volume/volume.go b/volume/volume.go index f6e28a4840..5385a94545 100644 --- a/volume/volume.go +++ b/volume/volume.go @@ -6,9 +6,9 @@ import ( "strings" "syscall" + mounttypes "github.com/docker/docker/api/types/mount" "github.com/docker/docker/pkg/idtools" "github.com/docker/docker/pkg/stringid" - mounttypes "github.com/docker/engine-api/types/mount" "github.com/opencontainers/runc/libcontainer/label" ) diff --git a/volume/volume_propagation_linux.go b/volume/volume_propagation_linux.go index 47dd357fca..77e863555f 100644 --- a/volume/volume_propagation_linux.go +++ b/volume/volume_propagation_linux.go @@ -5,7 +5,7 @@ package volume import ( "strings" - mounttypes "github.com/docker/engine-api/types/mount" + mounttypes "github.com/docker/docker/api/types/mount" ) // DefaultPropagationMode defines what propagation mode should be used by diff --git a/volume/volume_propagation_unsupported.go b/volume/volume_propagation_unsupported.go index b58f3d5a11..3eb61f2226 100644 --- a/volume/volume_propagation_unsupported.go +++ b/volume/volume_propagation_unsupported.go @@ -2,7 +2,7 @@ package volume -import mounttypes "github.com/docker/engine-api/types/mount" +import mounttypes "github.com/docker/docker/api/types/mount" // DefaultPropagationMode is used only in linux. In other cases it returns // empty string. diff --git a/volume/volume_unix.go b/volume/volume_unix.go index 5fe1fdd596..0803ef9cf6 100644 --- a/volume/volume_unix.go +++ b/volume/volume_unix.go @@ -7,7 +7,7 @@ import ( "path/filepath" "strings" - mounttypes "github.com/docker/engine-api/types/mount" + mounttypes "github.com/docker/docker/api/types/mount" ) // read-write modes