From 4cac8efb56e552c122be34c0f149181bb92b4e9d Mon Sep 17 00:00:00 2001 From: Sebastiaan van Stijn Date: Wed, 3 Jul 2024 15:03:43 +0200 Subject: [PATCH 1/2] vendor: github.com/docker/docker 508cc7c61226 (master) full diff: https://github.com/docker/docker/v27.0.3..508cc7c6122651c4dfeeec2e626568704cfaf0f9 Signed-off-by: Sebastiaan van Stijn --- vendor.mod | 2 +- vendor.sum | 4 +- .../github.com/docker/docker/api/swagger.yaml | 8 +- .../docker/api/types/container/container.go | 130 ++++++++ .../docker/api/types/container/health.go | 26 ++ .../api/types/container/network_settings.go | 56 ++++ .../docker/api/types/{ => container}/port.go | 2 +- .../docker/api/types/image/image_inspect.go | 122 +++++++ .../driver_data.go} | 8 +- .../docker/docker/api/types/system/info.go | 7 - .../docker/docker/api/types/types.go | 314 +----------------- .../docker/api/types/types_deprecated.go | 235 ++++--------- .../docker/docker/client/container_inspect.go | 20 +- .../docker/docker/client/container_list.go | 5 +- .../docker/docker/client/image_inspect.go | 12 +- .../docker/docker/client/interface.go | 8 +- .../docker/docker/errdefs/http_helpers.go | 29 +- vendor/modules.txt | 3 +- 18 files changed, 448 insertions(+), 543 deletions(-) create mode 100644 vendor/github.com/docker/docker/api/types/container/health.go create mode 100644 vendor/github.com/docker/docker/api/types/container/network_settings.go rename vendor/github.com/docker/docker/api/types/{ => container}/port.go (96%) create mode 100644 vendor/github.com/docker/docker/api/types/image/image_inspect.go rename vendor/github.com/docker/docker/api/types/{graph_driver_data.go => storage/driver_data.go} (75%) diff --git a/vendor.mod b/vendor.mod index d7bcbe49f9..81662cdc9a 100644 --- a/vendor.mod +++ b/vendor.mod @@ -13,7 +13,7 @@ require ( github.com/distribution/reference v0.6.0 github.com/docker/cli-docs-tool v0.7.0 github.com/docker/distribution v2.8.3+incompatible - github.com/docker/docker v27.0.3+incompatible + github.com/docker/docker v27.0.2-0.20240703234935-508cc7c61226+incompatible // master (v-next) github.com/docker/docker-credential-helpers v0.8.2 github.com/docker/go-connections v0.5.0 github.com/docker/go-units v0.5.0 diff --git a/vendor.sum b/vendor.sum index f4505a465f..e4513876af 100644 --- a/vendor.sum +++ b/vendor.sum @@ -59,8 +59,8 @@ github.com/docker/cli-docs-tool v0.7.0/go.mod h1:zMjqTFCU361PRh8apiXzeAZ1Q/xupbI github.com/docker/distribution v2.7.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= github.com/docker/distribution v2.8.3+incompatible h1:AtKxIZ36LoNK51+Z6RpzLpddBirtxJnzDrHLEKxTAYk= github.com/docker/distribution v2.8.3+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v27.0.3+incompatible h1:aBGI9TeQ4MPlhquTQKq9XbK79rKFVwXNUAYz9aXyEBE= -github.com/docker/docker v27.0.3+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v27.0.2-0.20240703234935-508cc7c61226+incompatible h1:Fx3TVBPjkrFXwUwklYcmm91iIP2SKYpOJ12UpzXAddo= +github.com/docker/docker v27.0.2-0.20240703234935-508cc7c61226+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker-credential-helpers v0.8.2 h1:bX3YxiGzFP5sOXWc3bTPEXdEaZSeVMrFgOr3T+zrFAo= github.com/docker/docker-credential-helpers v0.8.2/go.mod h1:P3ci7E3lwkZg6XiHdRKft1KckHiO9a2rNtyFbZ/ry9M= github.com/docker/go v1.5.1-1.0.20160303222718-d30aec9fd63c h1:lzqkGL9b3znc+ZUgi7FlLnqjQhcXxkNM/quxIjBVMD0= diff --git a/vendor/github.com/docker/docker/api/swagger.yaml b/vendor/github.com/docker/docker/api/swagger.yaml index cc754bf1fd..3289669f93 100644 --- a/vendor/github.com/docker/docker/api/swagger.yaml +++ b/vendor/github.com/docker/docker/api/swagger.yaml @@ -1917,7 +1917,7 @@ definitions: type: "string" example: "4443" - GraphDriverData: + DriverData: description: | Information about the storage driver used to store the container's and image's filesystem. @@ -2107,7 +2107,7 @@ definitions: format: "int64" example: 1239828 GraphDriver: - $ref: "#/definitions/GraphDriverData" + $ref: "#/definitions/DriverData" RootFS: description: | Information about the image's RootFS, including the layer IDs. @@ -5334,7 +5334,7 @@ definitions: The version Go used to compile the daemon, and the version of the Go runtime in use. type: "string" - example: "go1.21.11" + example: "go1.21.12" Os: description: | The operating system that the daemon is running on ("linux" or "windows") @@ -7123,7 +7123,7 @@ paths: HostConfig: $ref: "#/definitions/HostConfig" GraphDriver: - $ref: "#/definitions/GraphDriverData" + $ref: "#/definitions/DriverData" SizeRw: description: | The size of files that have been created or changed by this diff --git a/vendor/github.com/docker/docker/api/types/container/container.go b/vendor/github.com/docker/docker/api/types/container/container.go index 711af12c99..398fd6e886 100644 --- a/vendor/github.com/docker/docker/api/types/container/container.go +++ b/vendor/github.com/docker/docker/api/types/container/container.go @@ -4,6 +4,9 @@ import ( "io" "os" "time" + + "github.com/docker/docker/api/types/mount" + "github.com/docker/docker/api/types/storage" ) // PruneReport contains the response for Engine API: @@ -42,3 +45,130 @@ type StatsResponseReader struct { Body io.ReadCloser `json:"body"` OSType string `json:"ostype"` } + +// 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 is the type of mount, see `Type` definitions in + // github.com/docker/docker/api/types/mount.Type + Type mount.Type `json:",omitempty"` + + // Name is the name reference to the underlying data defined by `Source` + // e.g., the volume name. + Name string `json:",omitempty"` + + // Source is the source location of the mount. + // + // For volumes, this contains the storage location of the volume (within + // `/var/lib/docker/volumes/`). For bind-mounts, and `npipe`, this contains + // the source (host) part of the bind-mount. For `tmpfs` mount points, this + // field is empty. + Source string + + // Destination is the path relative to the container root (`/`) where the + // Source is mounted inside the container. + Destination string + + // Driver is the volume driver used to create the volume (if it is a volume). + Driver string `json:",omitempty"` + + // Mode is a comma separated list of options supplied by the user when + // creating the bind/volume mount. + // + // The default is platform-specific (`"z"` on Linux, empty on Windows). + Mode string + + // RW indicates whether the mount is mounted writable (read-write). + RW bool + + // Propagation describes how mounts are propagated from the host into the + // mount point, and vice-versa. Refer to the Linux kernel documentation + // for details: + // https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt + // + // This field is not used on Windows. + Propagation mount.Propagation +} + +// State stores container's running state +// it's part of ContainerJSONBase and returned by "inspect" command +type State struct { + Status string // String representation of the container state. Can be one of "created", "running", "paused", "restarting", "removing", "exited", or "dead" + Running bool + Paused bool + Restarting bool + OOMKilled bool + Dead bool + Pid int + ExitCode int + Error string + StartedAt string + FinishedAt string + Health *Health `json:",omitempty"` +} + +// Summary contains response of Engine API: +// GET "/containers/json" +type Summary 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"` + Annotations map[string]string `json:",omitempty"` + } + NetworkSettings *NetworkSettingsSummary + Mounts []MountPoint +} + +// ContainerJSONBase contains response of Engine API GET "/containers/{name:.*}/json" +// for API version 1.18 and older. +// +// TODO(thaJeztah): combine ContainerJSONBase and InspectResponse into a single struct. +// The split between ContainerJSONBase (ContainerJSONBase) and InspectResponse (InspectResponse) +// was done in commit 6deaa58ba5f051039643cedceee97c8695e2af74 (https://github.com/moby/moby/pull/13675). +// ContainerJSONBase contained all fields for API < 1.19, and InspectResponse +// held fields that were added in API 1.19 and up. Given that the minimum +// supported API version is now 1.24, we no longer use the separate type. +type ContainerJSONBase struct { + ID string `json:"Id"` + Created string + Path string + Args []string + State *State + Image string + ResolvConfPath string + HostnamePath string + HostsPath string + LogPath string + Name string + RestartCount int + Driver string + Platform string + MountLabel string + ProcessLabel string + AppArmorProfile string + ExecIDs []string + HostConfig *HostConfig + GraphDriver storage.DriverData + SizeRw *int64 `json:",omitempty"` + SizeRootFs *int64 `json:",omitempty"` +} + +// InspectResponse is the response for the GET "/containers/{name:.*}/json" +// endpoint. +type InspectResponse struct { + *ContainerJSONBase + Mounts []MountPoint + Config *Config + NetworkSettings *NetworkSettings +} diff --git a/vendor/github.com/docker/docker/api/types/container/health.go b/vendor/github.com/docker/docker/api/types/container/health.go new file mode 100644 index 0000000000..93663746f6 --- /dev/null +++ b/vendor/github.com/docker/docker/api/types/container/health.go @@ -0,0 +1,26 @@ +package container + +import "time" + +// Health states +const ( + NoHealthcheck = "none" // Indicates there is no healthcheck + 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) +} + +// 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 +} diff --git a/vendor/github.com/docker/docker/api/types/container/network_settings.go b/vendor/github.com/docker/docker/api/types/container/network_settings.go new file mode 100644 index 0000000000..afec0e5432 --- /dev/null +++ b/vendor/github.com/docker/docker/api/types/container/network_settings.go @@ -0,0 +1,56 @@ +package container + +import ( + "github.com/docker/docker/api/types/network" + "github.com/docker/go-connections/nat" +) + +// NetworkSettings exposes the network settings in the api +type NetworkSettings struct { + NetworkSettingsBase + DefaultNetworkSettings + Networks map[string]*network.EndpointSettings +} + +// NetworkSettingsBase holds networking state for a container when inspecting it. +type NetworkSettingsBase struct { + Bridge string // Bridge contains the name of the default bridge interface iff it was set through the daemon --bridge flag. + SandboxID string // SandboxID uniquely represents a container's network stack + SandboxKey string // SandboxKey identifies the sandbox + Ports nat.PortMap // Ports is a collection of PortBinding indexed by Port + + // HairpinMode specifies if hairpin NAT should be enabled on the virtual interface + // + // Deprecated: This field is never set and will be removed in a future release. + HairpinMode bool + // LinkLocalIPv6Address is an IPv6 unicast address using the link-local prefix + // + // Deprecated: This field is never set and will be removed in a future release. + LinkLocalIPv6Address string + // LinkLocalIPv6PrefixLen is the prefix length of an IPv6 unicast address + // + // Deprecated: This field is never set and will be removed in a future release. + LinkLocalIPv6PrefixLen int + SecondaryIPAddresses []network.Address // Deprecated: This field is never set and will be removed in a future release. + SecondaryIPv6Addresses []network.Address // Deprecated: This field is never set and will be removed in a future release. +} + +// 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 +} + +// NetworkSettingsSummary provides a summary of container's networks +// in /containers/json +type NetworkSettingsSummary struct { + Networks map[string]*network.EndpointSettings +} diff --git a/vendor/github.com/docker/docker/api/types/port.go b/vendor/github.com/docker/docker/api/types/container/port.go similarity index 96% rename from vendor/github.com/docker/docker/api/types/port.go rename to vendor/github.com/docker/docker/api/types/container/port.go index d91234744c..895043cfe9 100644 --- a/vendor/github.com/docker/docker/api/types/port.go +++ b/vendor/github.com/docker/docker/api/types/container/port.go @@ -1,4 +1,4 @@ -package types +package container // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the swagger generate command diff --git a/vendor/github.com/docker/docker/api/types/image/image_inspect.go b/vendor/github.com/docker/docker/api/types/image/image_inspect.go new file mode 100644 index 0000000000..f47730ac4b --- /dev/null +++ b/vendor/github.com/docker/docker/api/types/image/image_inspect.go @@ -0,0 +1,122 @@ +package image + +import ( + "github.com/docker/docker/api/types/container" + "github.com/docker/docker/api/types/storage" +) + +// RootFS returns Image's RootFS description including the layer IDs. +type RootFS struct { + Type string `json:",omitempty"` + Layers []string `json:",omitempty"` +} + +// InspectResponse contains response of Engine API: +// GET "/images/{name:.*}/json" +type InspectResponse struct { + // ID is the content-addressable ID of an image. + // + // This identifier is a content-addressable digest calculated from the + // image's configuration (which includes the digests of layers used by + // the image). + // + // Note that this digest differs from the `RepoDigests` below, which + // holds digests of image manifests that reference the image. + ID string `json:"Id"` + + // RepoTags is a list of image names/tags in the local image cache that + // reference this image. + // + // Multiple image tags can refer to the same image, and this list may be + // empty if no tags reference the image, in which case the image is + // "untagged", in which case it can still be referenced by its ID. + RepoTags []string + + // RepoDigests is a list of content-addressable digests of locally available + // image manifests that the image is referenced from. Multiple manifests can + // refer to the same image. + // + // These digests are usually only available if the image was either pulled + // from a registry, or if the image was pushed to a registry, which is when + // the manifest is generated and its digest calculated. + RepoDigests []string + + // Parent is the ID of the parent image. + // + // Depending on how the image was created, this field may be empty and + // is only set for images that were built/created locally. This field + // is empty if the image was pulled from an image registry. + Parent string + + // Comment is an optional message that can be set when committing or + // importing the image. + Comment string + + // Created is the date and time at which the image was created, formatted in + // RFC 3339 nano-seconds (time.RFC3339Nano). + // + // This information is only available if present in the image, + // and omitted otherwise. + Created string `json:",omitempty"` + + // Container is the ID of the container that was used to create the image. + // + // Depending on how the image was created, this field may be empty. + // + // Deprecated: this field is omitted in API v1.45, but kept for backward compatibility. + Container string `json:",omitempty"` + + // ContainerConfig is an optional field containing the configuration of the + // container that was last committed when creating the image. + // + // Previous versions of Docker builder used this field to store build cache, + // and it is not in active use anymore. + // + // Deprecated: this field is omitted in API v1.45, but kept for backward compatibility. + ContainerConfig *container.Config `json:",omitempty"` + + // DockerVersion is the version of Docker that was used to build the image. + // + // Depending on how the image was created, this field may be empty. + DockerVersion string + + // Author is the name of the author that was specified when committing the + // image, or as specified through MAINTAINER (deprecated) in the Dockerfile. + Author string + Config *container.Config + + // Architecture is the hardware CPU architecture that the image runs on. + Architecture string + + // Variant is the CPU architecture variant (presently ARM-only). + Variant string `json:",omitempty"` + + // OS is the Operating System the image is built to run on. + Os string + + // OsVersion is the version of the Operating System the image is built to + // run on (especially for Windows). + OsVersion string `json:",omitempty"` + + // Size is the total size of the image including all layers it is composed of. + Size int64 + + // VirtualSize is the total size of the image including all layers it is + // composed of. + // + // Deprecated: this field is omitted in API v1.44, but kept for backward compatibility. Use Size instead. + VirtualSize int64 `json:"VirtualSize,omitempty"` + + // GraphDriver holds information about the storage driver used to store the + // container's and image's filesystem. + GraphDriver storage.DriverData + + // RootFS contains information about the image's RootFS, including the + // layer IDs. + RootFS RootFS + + // Metadata of the image in the local cache. + // + // This information is local to the daemon, and not part of the image itself. + Metadata Metadata +} diff --git a/vendor/github.com/docker/docker/api/types/graph_driver_data.go b/vendor/github.com/docker/docker/api/types/storage/driver_data.go similarity index 75% rename from vendor/github.com/docker/docker/api/types/graph_driver_data.go rename to vendor/github.com/docker/docker/api/types/storage/driver_data.go index ce3deb331c..009e213095 100644 --- a/vendor/github.com/docker/docker/api/types/graph_driver_data.go +++ b/vendor/github.com/docker/docker/api/types/storage/driver_data.go @@ -1,13 +1,13 @@ -package types +package storage // This file was generated by the swagger tool. // Editing this file might prove futile when you re-run the swagger generate command -// GraphDriverData Information about the storage driver used to store the container's and +// DriverData Information about the storage driver used to store the container's and // image's filesystem. // -// swagger:model GraphDriverData -type GraphDriverData struct { +// swagger:model DriverData +type DriverData struct { // Low-level storage metadata, provided as key/value pairs. // diff --git a/vendor/github.com/docker/docker/api/types/system/info.go b/vendor/github.com/docker/docker/api/types/system/info.go index 6791cf3284..c66a2afb8b 100644 --- a/vendor/github.com/docker/docker/api/types/system/info.go +++ b/vendor/github.com/docker/docker/api/types/system/info.go @@ -77,9 +77,6 @@ type Info struct { Containerd *ContainerdInfo `json:",omitempty"` - // Legacy API fields for older API versions. - legacyFields - // Warnings contains a slice of warnings that occurred while collecting // system information. These warnings are intended to be informational // messages for the user, and are not intended to be parsed / used for @@ -124,10 +121,6 @@ type ContainerdNamespaces struct { Plugins string } -type legacyFields struct { - ExecutionDriver string `json:",omitempty"` // Deprecated: deprecated since API v1.25, but returned for older versions. -} - // PluginsInfo is a temp struct holding Plugins name // registered with docker daemon. It is used by [Info] struct type PluginsInfo struct { diff --git a/vendor/github.com/docker/docker/api/types/types.go b/vendor/github.com/docker/docker/api/types/types.go index fe99b74392..822b8aa201 100644 --- a/vendor/github.com/docker/docker/api/types/types.go +++ b/vendor/github.com/docker/docker/api/types/types.go @@ -6,11 +6,8 @@ import ( "github.com/docker/docker/api/types/container" "github.com/docker/docker/api/types/filters" "github.com/docker/docker/api/types/image" - "github.com/docker/docker/api/types/mount" - "github.com/docker/docker/api/types/network" "github.com/docker/docker/api/types/swarm" "github.com/docker/docker/api/types/volume" - "github.com/docker/go-connections/nat" ) const ( @@ -21,145 +18,6 @@ const ( MediaTypeMultiplexedStream = "application/vnd.docker.multiplexed-stream" ) -// RootFS returns Image's RootFS description including the layer IDs. -type RootFS struct { - Type string `json:",omitempty"` - Layers []string `json:",omitempty"` -} - -// ImageInspect contains response of Engine API: -// GET "/images/{name:.*}/json" -type ImageInspect struct { - // ID is the content-addressable ID of an image. - // - // This identifier is a content-addressable digest calculated from the - // image's configuration (which includes the digests of layers used by - // the image). - // - // Note that this digest differs from the `RepoDigests` below, which - // holds digests of image manifests that reference the image. - ID string `json:"Id"` - - // RepoTags is a list of image names/tags in the local image cache that - // reference this image. - // - // Multiple image tags can refer to the same image, and this list may be - // empty if no tags reference the image, in which case the image is - // "untagged", in which case it can still be referenced by its ID. - RepoTags []string - - // RepoDigests is a list of content-addressable digests of locally available - // image manifests that the image is referenced from. Multiple manifests can - // refer to the same image. - // - // These digests are usually only available if the image was either pulled - // from a registry, or if the image was pushed to a registry, which is when - // the manifest is generated and its digest calculated. - RepoDigests []string - - // Parent is the ID of the parent image. - // - // Depending on how the image was created, this field may be empty and - // is only set for images that were built/created locally. This field - // is empty if the image was pulled from an image registry. - Parent string - - // Comment is an optional message that can be set when committing or - // importing the image. - Comment string - - // Created is the date and time at which the image was created, formatted in - // RFC 3339 nano-seconds (time.RFC3339Nano). - // - // This information is only available if present in the image, - // and omitted otherwise. - Created string `json:",omitempty"` - - // Container is the ID of the container that was used to create the image. - // - // Depending on how the image was created, this field may be empty. - // - // Deprecated: this field is omitted in API v1.45, but kept for backward compatibility. - Container string `json:",omitempty"` - - // ContainerConfig is an optional field containing the configuration of the - // container that was last committed when creating the image. - // - // Previous versions of Docker builder used this field to store build cache, - // and it is not in active use anymore. - // - // Deprecated: this field is omitted in API v1.45, but kept for backward compatibility. - ContainerConfig *container.Config `json:",omitempty"` - - // DockerVersion is the version of Docker that was used to build the image. - // - // Depending on how the image was created, this field may be empty. - DockerVersion string - - // Author is the name of the author that was specified when committing the - // image, or as specified through MAINTAINER (deprecated) in the Dockerfile. - Author string - Config *container.Config - - // Architecture is the hardware CPU architecture that the image runs on. - Architecture string - - // Variant is the CPU architecture variant (presently ARM-only). - Variant string `json:",omitempty"` - - // OS is the Operating System the image is built to run on. - Os string - - // OsVersion is the version of the Operating System the image is built to - // run on (especially for Windows). - OsVersion string `json:",omitempty"` - - // Size is the total size of the image including all layers it is composed of. - Size int64 - - // VirtualSize is the total size of the image including all layers it is - // composed of. - // - // Deprecated: this field is omitted in API v1.44, but kept for backward compatibility. Use Size instead. - VirtualSize int64 `json:"VirtualSize,omitempty"` - - // GraphDriver holds information about the storage driver used to store the - // container's and image's filesystem. - GraphDriver GraphDriverData - - // RootFS contains information about the image's RootFS, including the - // layer IDs. - RootFS RootFS - - // Metadata of the image in the local cache. - // - // This information is local to the daemon, and not part of the image itself. - Metadata image.Metadata -} - -// Container contains response of Engine 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"` - Annotations map[string]string `json:",omitempty"` - } - NetworkSettings *SummaryNetworkSettings - Mounts []MountPoint -} - // Ping contains response of Engine API: // GET "/_ping" type Ping struct { @@ -205,176 +63,6 @@ type Version struct { BuildTime string `json:",omitempty"` } -// 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 ( - NoHealthcheck = "none" // Indicates there is no healthcheck - 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 // String representation of the container state. Can be one of "created", "running", "paused", "restarting", "removing", "exited", or "dead" - Running bool - Paused bool - Restarting bool - OOMKilled bool - Dead bool - Pid int - ExitCode int - Error string - StartedAt string - FinishedAt string - Health *Health `json:",omitempty"` -} - -// ContainerJSONBase contains response of Engine 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"` // Deprecated: Node was only propagated by Docker Swarm standalone API. It sill be removed in the next release. - Name string - RestartCount int - Driver string - Platform 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 networking state for a container when inspecting it. -type NetworkSettingsBase struct { - Bridge string // Bridge contains the name of the default bridge interface iff it was set through the daemon --bridge flag. - SandboxID string // SandboxID uniquely represents a container's network stack - SandboxKey string // SandboxKey identifies the sandbox - Ports nat.PortMap // Ports is a collection of PortBinding indexed by Port - - // HairpinMode specifies if hairpin NAT should be enabled on the virtual interface - // - // Deprecated: This field is never set and will be removed in a future release. - HairpinMode bool - // LinkLocalIPv6Address is an IPv6 unicast address using the link-local prefix - // - // Deprecated: This field is never set and will be removed in a future release. - LinkLocalIPv6Address string - // LinkLocalIPv6PrefixLen is the prefix length of an IPv6 unicast address - // - // Deprecated: This field is never set and will be removed in a future release. - LinkLocalIPv6PrefixLen int - SecondaryIPAddresses []network.Address // Deprecated: This field is never set and will be removed in a future release. - SecondaryIPv6Addresses []network.Address // Deprecated: This field is never set and will be removed in a future release. -} - -// 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 is the type of mount, see `Type` definitions in - // github.com/docker/docker/api/types/mount.Type - Type mount.Type `json:",omitempty"` - - // Name is the name reference to the underlying data defined by `Source` - // e.g., the volume name. - Name string `json:",omitempty"` - - // Source is the source location of the mount. - // - // For volumes, this contains the storage location of the volume (within - // `/var/lib/docker/volumes/`). For bind-mounts, and `npipe`, this contains - // the source (host) part of the bind-mount. For `tmpfs` mount points, this - // field is empty. - Source string - - // Destination is the path relative to the container root (`/`) where the - // Source is mounted inside the container. - Destination string - - // Driver is the volume driver used to create the volume (if it is a volume). - Driver string `json:",omitempty"` - - // Mode is a comma separated list of options supplied by the user when - // creating the bind/volume mount. - // - // The default is platform-specific (`"z"` on Linux, empty on Windows). - Mode string - - // RW indicates whether the mount is mounted writable (read-write). - RW bool - - // Propagation describes how mounts are propagated from the host into the - // mount point, and vice-versa. Refer to the Linux kernel documentation - // for details: - // https://www.kernel.org/doc/Documentation/filesystems/sharedsubtree.txt - // - // This field is not used on Windows. - Propagation mount.Propagation -} - // DiskUsageObject represents an object type used for disk usage query filtering. type DiskUsageObject string @@ -401,7 +89,7 @@ type DiskUsageOptions struct { type DiskUsage struct { LayersSize int64 Images []*image.Summary - Containers []*Container + Containers []*container.Summary Volumes []*volume.Volume BuildCache []*BuildCache BuilderSize int64 `json:",omitempty"` // Deprecated: deprecated in API 1.38, and no longer used since API 1.40. diff --git a/vendor/github.com/docker/docker/api/types/types_deprecated.go b/vendor/github.com/docker/docker/api/types/types_deprecated.go index 43ffe104aa..a8f7e23569 100644 --- a/vendor/github.com/docker/docker/api/types/types_deprecated.go +++ b/vendor/github.com/docker/docker/api/types/types_deprecated.go @@ -2,209 +2,98 @@ package types import ( "github.com/docker/docker/api/types/container" - "github.com/docker/docker/api/types/events" "github.com/docker/docker/api/types/image" - "github.com/docker/docker/api/types/network" - "github.com/docker/docker/api/types/registry" - "github.com/docker/docker/api/types/volume" + "github.com/docker/docker/api/types/storage" ) -// ImagesPruneReport contains the response for Engine API: -// POST "/images/prune" +// ContainerJSONBase contains response of Engine API GET "/containers/{name:.*}/json" +// for API version 1.18 and older. // -// Deprecated: use [image.PruneReport]. -type ImagesPruneReport = image.PruneReport +// Deprecated: use [container.InspectResponse] or [container.ContainerJSONBase]. It will be removed in the next release. +type ContainerJSONBase = container.ContainerJSONBase -// VolumesPruneReport contains the response for Engine API: -// POST "/volumes/prune". +// ContainerJSON is the response for the GET "/containers/{name:.*}/json" +// endpoint. // -// Deprecated: use [volume.PruneReport]. -type VolumesPruneReport = volume.PruneReport +// Deprecated: use [container.InspectResponse]. It will be removed in the next release. +type ContainerJSON = container.InspectResponse -// NetworkCreateRequest is the request message sent to the server for network create call. +// Container contains response of Engine API: +// GET "/containers/json" // -// Deprecated: use [network.CreateRequest]. -type NetworkCreateRequest = network.CreateRequest +// Deprecated: use [container.Summary]. +type Container = container.Summary -// NetworkCreate is the expected body of the "create network" http request message +// ContainerState stores container's running state // -// Deprecated: use [network.CreateOptions]. -type NetworkCreate = network.CreateOptions +// Deprecated: use [container.State]. +type ContainerState = container.State -// NetworkListOptions holds parameters to filter the list of networks with. +// NetworkSettings exposes the network settings in the api. // -// Deprecated: use [network.ListOptions]. -type NetworkListOptions = network.ListOptions +// Deprecated: use [container.NetworkSettings]. +type NetworkSettings = container.NetworkSettings -// NetworkCreateResponse is the response message sent by the server for network create call. +// NetworkSettingsBase holds networking state for a container when inspecting it. // -// Deprecated: use [network.CreateResponse]. -type NetworkCreateResponse = network.CreateResponse +// Deprecated: use [container.NetworkSettingsBase]. +type NetworkSettingsBase = container.NetworkSettingsBase -// NetworkInspectOptions holds parameters to inspect network. +// DefaultNetworkSettings holds network information +// during the 2 release deprecation period. +// It will be removed in Docker 1.11. // -// Deprecated: use [network.InspectOptions]. -type NetworkInspectOptions = network.InspectOptions +// Deprecated: use [container.DefaultNetworkSettings]. +type DefaultNetworkSettings = container.DefaultNetworkSettings -// NetworkConnect represents the data to be used to connect a container to the network +// SummaryNetworkSettings provides a summary of container's networks +// in /containers/json. // -// Deprecated: use [network.ConnectOptions]. -type NetworkConnect = network.ConnectOptions +// Deprecated: use [container.NetworkSettingsSummary]. +type SummaryNetworkSettings = container.NetworkSettingsSummary -// NetworkDisconnect represents the data to be used to disconnect a container from the network -// -// Deprecated: use [network.DisconnectOptions]. -type NetworkDisconnect = network.DisconnectOptions +// Health states +const ( + NoHealthcheck = container.NoHealthcheck // Deprecated: use [container.NoHealthcheck]. + Starting = container.Starting // Deprecated: use [container.Starting]. + Healthy = container.Healthy // Deprecated: use [container.Healthy]. + Unhealthy = container.Unhealthy // Deprecated: use [container.Unhealthy]. +) -// EndpointResource contains network resources allocated and used for a container in a network. +// Health stores information about the container's healthcheck results. // -// Deprecated: use [network.EndpointResource]. -type EndpointResource = network.EndpointResource +// Deprecated: use [container.Health]. +type Health = container.Health -// NetworkResource is the body of the "get network" http response message/ +// HealthcheckResult stores information about a single run of a healthcheck probe. // -// Deprecated: use [network.Inspect] or [network.Summary] (for list operations). -type NetworkResource = network.Inspect +// Deprecated: use [container.HealthcheckResult]. +type HealthcheckResult = container.HealthcheckResult -// NetworksPruneReport contains the response for Engine API: -// POST "/networks/prune" +// MountPoint represents a mount point configuration inside the container. +// This is used for reporting the mountpoints in use by a container. // -// Deprecated: use [network.PruneReport]. -type NetworksPruneReport = network.PruneReport +// Deprecated: use [container.MountPoint]. +type MountPoint = container.MountPoint -// ExecConfig is a small subset of the Config struct that holds the configuration -// for the exec feature of docker. +// Port An open port on a container // -// Deprecated: use [container.ExecOptions]. -type ExecConfig = container.ExecOptions +// Deprecated: use [container.Port]. +type Port = container.Port -// ExecStartCheck is a temp struct used by execStart -// Config fields is part of ExecConfig in runconfig package +// GraphDriverData Information about the storage driver used to store the container's and +// image's filesystem. // -// Deprecated: use [container.ExecStartOptions] or [container.ExecAttachOptions]. -type ExecStartCheck = container.ExecStartOptions +// Deprecated: use [storage.DriverData]. +type GraphDriverData = storage.DriverData -// ContainerExecInspect holds information returned by exec inspect. +// RootFS returns Image's RootFS description including the layer IDs. // -// Deprecated: use [container.ExecInspect]. -type ContainerExecInspect = container.ExecInspect +// Deprecated: use [image.RootFS]. +type RootFS = image.RootFS -// ContainersPruneReport contains the response for Engine API: -// POST "/containers/prune" +// ImageInspect contains response of Engine API: +// GET "/images/{name:.*}/json" // -// Deprecated: use [container.PruneReport]. -type ContainersPruneReport = container.PruneReport - -// ContainerPathStat is used to encode the header from -// GET "/containers/{name:.*}/archive" -// "Name" is the file or directory name. -// -// Deprecated: use [container.PathStat]. -type ContainerPathStat = container.PathStat - -// CopyToContainerOptions holds information -// about files to copy into a container. -// -// Deprecated: use [container.CopyToContainerOptions], -type CopyToContainerOptions = container.CopyToContainerOptions - -// ContainerStats contains response of Engine API: -// GET "/stats" -// -// Deprecated: use [container.StatsResponseReader]. -type ContainerStats = container.StatsResponseReader - -// ThrottlingData stores CPU throttling stats of one running container. -// Not used on Windows. -// -// Deprecated: use [container.ThrottlingData]. -type ThrottlingData = container.ThrottlingData - -// CPUUsage stores All CPU stats aggregated since container inception. -// -// Deprecated: use [container.CPUUsage]. -type CPUUsage = container.CPUUsage - -// CPUStats aggregates and wraps all CPU related info of container -// -// Deprecated: use [container.CPUStats]. -type CPUStats = container.CPUStats - -// MemoryStats aggregates all memory stats since container inception on Linux. -// Windows returns stats for commit and private working set only. -// -// Deprecated: use [container.MemoryStats]. -type MemoryStats = container.MemoryStats - -// BlkioStatEntry is one small entity to store a piece of Blkio stats -// Not used on Windows. -// -// Deprecated: use [container.BlkioStatEntry]. -type BlkioStatEntry = container.BlkioStatEntry - -// BlkioStats stores All IO service stats for data read and write. -// This is a Linux specific structure as the differences between expressing -// block I/O on Windows and Linux are sufficiently significant to make -// little sense attempting to morph into a combined structure. -// -// Deprecated: use [container.BlkioStats]. -type BlkioStats = container.BlkioStats - -// StorageStats is the disk I/O stats for read/write on Windows. -// -// Deprecated: use [container.StorageStats]. -type StorageStats = container.StorageStats - -// NetworkStats aggregates the network stats of one container -// -// Deprecated: use [container.NetworkStats]. -type NetworkStats = container.NetworkStats - -// PidsStats contains the stats of a container's pids -// -// Deprecated: use [container.PidsStats]. -type PidsStats = container.PidsStats - -// Stats is Ultimate struct aggregating all types of stats of one container -// -// Deprecated: use [container.Stats]. -type Stats = container.Stats - -// StatsJSON is newly used Networks -// -// Deprecated: use [container.StatsResponse]. -type StatsJSON = container.StatsResponse - -// EventsOptions holds parameters to filter events with. -// -// Deprecated: use [events.ListOptions]. -type EventsOptions = events.ListOptions - -// ImageSearchOptions holds parameters to search images with. -// -// Deprecated: use [registry.SearchOptions]. -type ImageSearchOptions = registry.SearchOptions - -// ImageImportSource holds source information for ImageImport -// -// Deprecated: use [image.ImportSource]. -type ImageImportSource image.ImportSource - -// ImageLoadResponse returns information to the client about a load process. -// -// Deprecated: use [image.LoadResponse]. -type ImageLoadResponse = image.LoadResponse - -// ContainerNode stores information about the node that a container -// is running on. It's only used by the Docker Swarm standalone API. -// -// Deprecated: ContainerNode was used for the classic Docker Swarm standalone API. It will be removed in the next release. -type ContainerNode struct { - ID string - IPAddress string `json:"IP"` - Addr string - Name string - Cpus int - Memory int64 - Labels map[string]string -} +// Deprecated: use [image.InspectResponse]. +type ImageInspect = image.InspectResponse diff --git a/vendor/github.com/docker/docker/client/container_inspect.go b/vendor/github.com/docker/docker/client/container_inspect.go index d48f0d3a68..fa342e16b5 100644 --- a/vendor/github.com/docker/docker/client/container_inspect.go +++ b/vendor/github.com/docker/docker/client/container_inspect.go @@ -7,29 +7,29 @@ import ( "io" "net/url" - "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/container" ) // ContainerInspect returns the container information. -func (cli *Client) ContainerInspect(ctx context.Context, containerID string) (types.ContainerJSON, error) { +func (cli *Client) ContainerInspect(ctx context.Context, containerID string) (container.InspectResponse, error) { if containerID == "" { - return types.ContainerJSON{}, objectNotFoundError{object: "container", id: containerID} + return container.InspectResponse{}, objectNotFoundError{object: "container", id: containerID} } serverResp, err := cli.get(ctx, "/containers/"+containerID+"/json", nil, nil) defer ensureReaderClosed(serverResp) if err != nil { - return types.ContainerJSON{}, err + return container.InspectResponse{}, err } - var response types.ContainerJSON + var response container.InspectResponse err = json.NewDecoder(serverResp.body).Decode(&response) return response, err } // ContainerInspectWithRaw returns the container information and its raw representation. -func (cli *Client) ContainerInspectWithRaw(ctx context.Context, containerID string, getSize bool) (types.ContainerJSON, []byte, error) { +func (cli *Client) ContainerInspectWithRaw(ctx context.Context, containerID string, getSize bool) (container.InspectResponse, []byte, error) { if containerID == "" { - return types.ContainerJSON{}, nil, objectNotFoundError{object: "container", id: containerID} + return container.InspectResponse{}, nil, objectNotFoundError{object: "container", id: containerID} } query := url.Values{} if getSize { @@ -38,15 +38,15 @@ func (cli *Client) ContainerInspectWithRaw(ctx context.Context, containerID stri serverResp, err := cli.get(ctx, "/containers/"+containerID+"/json", query, nil) defer ensureReaderClosed(serverResp) if err != nil { - return types.ContainerJSON{}, nil, err + return container.InspectResponse{}, nil, err } body, err := io.ReadAll(serverResp.body) if err != nil { - return types.ContainerJSON{}, nil, err + return container.InspectResponse{}, nil, err } - var response types.ContainerJSON + var response container.InspectResponse rdr := bytes.NewReader(body) err = json.NewDecoder(rdr).Decode(&response) return response, body, err diff --git a/vendor/github.com/docker/docker/client/container_list.go b/vendor/github.com/docker/docker/client/container_list.go index 782e1b3c62..46c6950cd3 100644 --- a/vendor/github.com/docker/docker/client/container_list.go +++ b/vendor/github.com/docker/docker/client/container_list.go @@ -6,13 +6,12 @@ import ( "net/url" "strconv" - "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/container" "github.com/docker/docker/api/types/filters" ) // ContainerList returns the list of containers in the docker host. -func (cli *Client) ContainerList(ctx context.Context, options container.ListOptions) ([]types.Container, error) { +func (cli *Client) ContainerList(ctx context.Context, options container.ListOptions) ([]container.Summary, error) { query := url.Values{} if options.All { @@ -51,7 +50,7 @@ func (cli *Client) ContainerList(ctx context.Context, options container.ListOpti return nil, err } - var containers []types.Container + var containers []container.Summary err = json.NewDecoder(resp.body).Decode(&containers) return containers, err } diff --git a/vendor/github.com/docker/docker/client/image_inspect.go b/vendor/github.com/docker/docker/client/image_inspect.go index 1de10e5a08..69949f3e8b 100644 --- a/vendor/github.com/docker/docker/client/image_inspect.go +++ b/vendor/github.com/docker/docker/client/image_inspect.go @@ -6,26 +6,26 @@ import ( "encoding/json" "io" - "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/image" ) // ImageInspectWithRaw returns the image information and its raw representation. -func (cli *Client) ImageInspectWithRaw(ctx context.Context, imageID string) (types.ImageInspect, []byte, error) { +func (cli *Client) ImageInspectWithRaw(ctx context.Context, imageID string) (image.InspectResponse, []byte, error) { if imageID == "" { - return types.ImageInspect{}, nil, objectNotFoundError{object: "image", id: imageID} + return image.InspectResponse{}, nil, objectNotFoundError{object: "image", id: imageID} } serverResp, err := cli.get(ctx, "/images/"+imageID+"/json", nil, nil) defer ensureReaderClosed(serverResp) if err != nil { - return types.ImageInspect{}, nil, err + return image.InspectResponse{}, nil, err } body, err := io.ReadAll(serverResp.body) if err != nil { - return types.ImageInspect{}, nil, err + return image.InspectResponse{}, nil, err } - var response types.ImageInspect + var response image.InspectResponse rdr := bytes.NewReader(body) err = json.NewDecoder(rdr).Decode(&response) return response, body, err diff --git a/vendor/github.com/docker/docker/client/interface.go b/vendor/github.com/docker/docker/client/interface.go index cc60a5d13b..f96ca98e4a 100644 --- a/vendor/github.com/docker/docker/client/interface.go +++ b/vendor/github.com/docker/docker/client/interface.go @@ -56,10 +56,10 @@ type ContainerAPIClient interface { ContainerExecResize(ctx context.Context, execID string, options container.ResizeOptions) error ContainerExecStart(ctx context.Context, execID string, options container.ExecStartOptions) error ContainerExport(ctx context.Context, container string) (io.ReadCloser, error) - ContainerInspect(ctx context.Context, container string) (types.ContainerJSON, error) - ContainerInspectWithRaw(ctx context.Context, container string, getSize bool) (types.ContainerJSON, []byte, error) + ContainerInspect(ctx context.Context, container string) (container.InspectResponse, error) + ContainerInspectWithRaw(ctx context.Context, container string, getSize bool) (container.InspectResponse, []byte, error) ContainerKill(ctx context.Context, container, signal string) error - ContainerList(ctx context.Context, options container.ListOptions) ([]types.Container, error) + ContainerList(ctx context.Context, options container.ListOptions) ([]container.Summary, error) ContainerLogs(ctx context.Context, container string, options container.LogsOptions) (io.ReadCloser, error) ContainerPause(ctx context.Context, container string) error ContainerRemove(ctx context.Context, container string, options container.RemoveOptions) error @@ -93,7 +93,7 @@ type ImageAPIClient interface { ImageCreate(ctx context.Context, parentReference string, options image.CreateOptions) (io.ReadCloser, error) ImageHistory(ctx context.Context, image string) ([]image.HistoryResponseItem, error) ImageImport(ctx context.Context, source image.ImportSource, ref string, options image.ImportOptions) (io.ReadCloser, error) - ImageInspectWithRaw(ctx context.Context, image string) (types.ImageInspect, []byte, error) + ImageInspectWithRaw(ctx context.Context, image string) (image.InspectResponse, []byte, error) ImageList(ctx context.Context, options image.ListOptions) ([]image.Summary, error) ImageLoad(ctx context.Context, input io.Reader, quiet bool) (image.LoadResponse, error) ImagePull(ctx context.Context, ref string, options image.PullOptions) (io.ReadCloser, error) diff --git a/vendor/github.com/docker/docker/errdefs/http_helpers.go b/vendor/github.com/docker/docker/errdefs/http_helpers.go index ebcd789302..0a8fadd48f 100644 --- a/vendor/github.com/docker/docker/errdefs/http_helpers.go +++ b/vendor/github.com/docker/docker/errdefs/http_helpers.go @@ -11,36 +11,37 @@ func FromStatusCode(err error, statusCode int) error { } switch statusCode { case http.StatusNotFound: - err = NotFound(err) + return NotFound(err) case http.StatusBadRequest: - err = InvalidParameter(err) + return InvalidParameter(err) case http.StatusConflict: - err = Conflict(err) + return Conflict(err) case http.StatusUnauthorized: - err = Unauthorized(err) + return Unauthorized(err) case http.StatusServiceUnavailable: - err = Unavailable(err) + return Unavailable(err) case http.StatusForbidden: - err = Forbidden(err) + return Forbidden(err) case http.StatusNotModified: - err = NotModified(err) + return NotModified(err) case http.StatusNotImplemented: - err = NotImplemented(err) + return NotImplemented(err) case http.StatusInternalServerError: - if !IsSystem(err) && !IsUnknown(err) && !IsDataLoss(err) && !IsDeadline(err) && !IsCancelled(err) { - err = System(err) + if IsCancelled(err) || IsSystem(err) || IsUnknown(err) || IsDataLoss(err) || IsDeadline(err) { + return err } + return System(err) default: switch { case statusCode >= 200 && statusCode < 400: // it's a client error + return err case statusCode >= 400 && statusCode < 500: - err = InvalidParameter(err) + return InvalidParameter(err) case statusCode >= 500 && statusCode < 600: - err = System(err) + return System(err) default: - err = Unknown(err) + return Unknown(err) } } - return err } diff --git a/vendor/modules.txt b/vendor/modules.txt index 10f21fc92d..aebd1999bc 100644 --- a/vendor/modules.txt +++ b/vendor/modules.txt @@ -56,7 +56,7 @@ github.com/docker/distribution/registry/client/transport github.com/docker/distribution/registry/storage/cache github.com/docker/distribution/registry/storage/cache/memory github.com/docker/distribution/uuid -# github.com/docker/docker v27.0.3+incompatible +# github.com/docker/docker v27.0.2-0.20240703234935-508cc7c61226+incompatible ## explicit github.com/docker/docker/api github.com/docker/docker/api/types @@ -70,6 +70,7 @@ github.com/docker/docker/api/types/image 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/storage github.com/docker/docker/api/types/strslice github.com/docker/docker/api/types/swarm github.com/docker/docker/api/types/swarm/runtime From b194274bebb91eb52ac0fe2ece16c5eef3c922f4 Mon Sep 17 00:00:00 2001 From: Sebastiaan van Stijn Date: Wed, 3 Jul 2024 15:35:44 +0200 Subject: [PATCH 2/2] replace uses of deprecated API types Signed-off-by: Sebastiaan van Stijn --- cli/command/completion/functions.go | 3 +- cli/command/container/attach.go | 5 +- cli/command/container/attach_test.go | 31 ++++---- cli/command/container/client_test.go | 12 +-- cli/command/container/exec.go | 3 +- cli/command/container/exec_test.go | 10 +-- cli/command/container/list_test.go | 33 ++++---- cli/command/container/logs_test.go | 7 +- cli/command/container/pause.go | 4 +- cli/command/container/port_test.go | 6 +- cli/command/container/start.go | 3 +- cli/command/container/unpause.go | 4 +- cli/command/formatter/container.go | 10 +-- cli/command/formatter/container_test.go | 96 ++++++++++++------------ cli/command/formatter/disk_usage.go | 15 ++-- cli/command/image/client_test.go | 6 +- cli/command/image/inspect_test.go | 16 ++-- cli/command/network/disconnect.go | 10 +-- cli/command/trust/inspect_pretty_test.go | 5 +- internal/test/builders/container.go | 34 ++++----- 20 files changed, 153 insertions(+), 160 deletions(-) diff --git a/cli/command/completion/functions.go b/cli/command/completion/functions.go index 6026ef7692..ac2335d9ac 100644 --- a/cli/command/completion/functions.go +++ b/cli/command/completion/functions.go @@ -4,7 +4,6 @@ import ( "os" "github.com/docker/cli/cli/command/formatter" - "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/container" "github.com/docker/docker/api/types/image" "github.com/docker/docker/api/types/network" @@ -44,7 +43,7 @@ func ImageNames(dockerCLI APIClientProvider) ValidArgsFn { // ContainerNames offers completion for container names and IDs // By default, only names are returned. // Set DOCKER_COMPLETION_SHOW_CONTAINER_IDS=yes to also complete IDs. -func ContainerNames(dockerCLI APIClientProvider, all bool, filters ...func(types.Container) bool) ValidArgsFn { +func ContainerNames(dockerCLI APIClientProvider, all bool, filters ...func(container.Summary) bool) ValidArgsFn { return func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { list, err := dockerCLI.Client().ContainerList(cmd.Context(), container.ListOptions{ All: all, diff --git a/cli/command/container/attach.go b/cli/command/container/attach.go index a2d9838683..a54e8fb530 100644 --- a/cli/command/container/attach.go +++ b/cli/command/container/attach.go @@ -7,7 +7,6 @@ import ( "github.com/docker/cli/cli" "github.com/docker/cli/cli/command" "github.com/docker/cli/cli/command/completion" - "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/container" "github.com/docker/docker/client" "github.com/moby/sys/signal" @@ -23,7 +22,7 @@ type AttachOptions struct { DetachKeys string } -func inspectContainerAndCheckState(ctx context.Context, apiClient client.APIClient, args string) (*types.ContainerJSON, error) { +func inspectContainerAndCheckState(ctx context.Context, apiClient client.APIClient, args string) (*container.InspectResponse, error) { c, err := apiClient.ContainerInspect(ctx, args) if err != nil { return nil, err @@ -56,7 +55,7 @@ func NewAttachCommand(dockerCLI command.Cli) *cobra.Command { Annotations: map[string]string{ "aliases": "docker container attach, docker attach", }, - ValidArgsFunction: completion.ContainerNames(dockerCLI, false, func(ctr types.Container) bool { + ValidArgsFunction: completion.ContainerNames(dockerCLI, false, func(ctr container.Summary) bool { return ctr.State != "paused" }), } diff --git a/cli/command/container/attach_test.go b/cli/command/container/attach_test.go index 69332fc6bc..33aa4f93e3 100644 --- a/cli/command/container/attach_test.go +++ b/cli/command/container/attach_test.go @@ -6,7 +6,6 @@ import ( "github.com/docker/cli/cli" "github.com/docker/cli/internal/test" - "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/container" "github.com/pkg/errors" "gotest.tools/v3/assert" @@ -17,24 +16,24 @@ func TestNewAttachCommandErrors(t *testing.T) { name string args []string expectedError string - containerInspectFunc func(img string) (types.ContainerJSON, error) + containerInspectFunc func(img string) (container.InspectResponse, error) }{ { name: "client-error", args: []string{"5cb5bb5e4a3b"}, expectedError: "something went wrong", - containerInspectFunc: func(containerID string) (types.ContainerJSON, error) { - return types.ContainerJSON{}, errors.Errorf("something went wrong") + containerInspectFunc: func(containerID string) (container.InspectResponse, error) { + return container.InspectResponse{}, errors.Errorf("something went wrong") }, }, { name: "client-stopped", args: []string{"5cb5bb5e4a3b"}, expectedError: "You cannot attach to a stopped container", - containerInspectFunc: func(containerID string) (types.ContainerJSON, error) { - return types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{ - State: &types.ContainerState{ + containerInspectFunc: func(containerID string) (container.InspectResponse, error) { + return container.InspectResponse{ + ContainerJSONBase: &container.ContainerJSONBase{ + State: &container.State{ Running: false, }, }, @@ -45,10 +44,10 @@ func TestNewAttachCommandErrors(t *testing.T) { name: "client-paused", args: []string{"5cb5bb5e4a3b"}, expectedError: "You cannot attach to a paused container", - containerInspectFunc: func(containerID string) (types.ContainerJSON, error) { - return types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{ - State: &types.ContainerState{ + containerInspectFunc: func(containerID string) (container.InspectResponse, error) { + return container.InspectResponse{ + ContainerJSONBase: &container.ContainerJSONBase{ + State: &container.State{ Running: true, Paused: true, }, @@ -60,10 +59,10 @@ func TestNewAttachCommandErrors(t *testing.T) { name: "client-restarting", args: []string{"5cb5bb5e4a3b"}, expectedError: "You cannot attach to a restarting container", - containerInspectFunc: func(containerID string) (types.ContainerJSON, error) { - return types.ContainerJSON{ - ContainerJSONBase: &types.ContainerJSONBase{ - State: &types.ContainerState{ + containerInspectFunc: func(containerID string) (container.InspectResponse, error) { + return container.InspectResponse{ + ContainerJSONBase: &container.ContainerJSONBase{ + State: &container.State{ Running: true, Paused: false, Restarting: true, diff --git a/cli/command/container/client_test.go b/cli/command/container/client_test.go index 621acbcdd0..deae11a73b 100644 --- a/cli/command/container/client_test.go +++ b/cli/command/container/client_test.go @@ -16,7 +16,7 @@ import ( type fakeClient struct { client.Client - inspectFunc func(string) (types.ContainerJSON, error) + inspectFunc func(string) (container.InspectResponse, error) execInspectFunc func(execID string) (container.ExecInspect, error) execCreateFunc func(containerID string, options container.ExecOptions) (types.IDResponse, error) createContainerFunc func(config *container.Config, @@ -31,7 +31,7 @@ type fakeClient struct { containerCopyFromFunc func(containerID, srcPath string) (io.ReadCloser, container.PathStat, error) logFunc func(string, container.LogsOptions) (io.ReadCloser, error) waitFunc func(string) (<-chan container.WaitResponse, <-chan error) - containerListFunc func(container.ListOptions) ([]types.Container, error) + containerListFunc func(container.ListOptions) ([]container.Summary, error) containerExportFunc func(string) (io.ReadCloser, error) containerExecResizeFunc func(id string, options container.ResizeOptions) error containerRemoveFunc func(ctx context.Context, containerID string, options container.RemoveOptions) error @@ -41,18 +41,18 @@ type fakeClient struct { Version string } -func (f *fakeClient) ContainerList(_ context.Context, options container.ListOptions) ([]types.Container, error) { +func (f *fakeClient) ContainerList(_ context.Context, options container.ListOptions) ([]container.Summary, error) { if f.containerListFunc != nil { return f.containerListFunc(options) } - return []types.Container{}, nil + return []container.Summary{}, nil } -func (f *fakeClient) ContainerInspect(_ context.Context, containerID string) (types.ContainerJSON, error) { +func (f *fakeClient) ContainerInspect(_ context.Context, containerID string) (container.InspectResponse, error) { if f.inspectFunc != nil { return f.inspectFunc(containerID) } - return types.ContainerJSON{}, nil + return container.InspectResponse{}, nil } func (f *fakeClient) ContainerExecCreate(_ context.Context, containerID string, config container.ExecOptions) (types.IDResponse, error) { diff --git a/cli/command/container/exec.go b/cli/command/container/exec.go index 1c0a741263..a459c01388 100644 --- a/cli/command/container/exec.go +++ b/cli/command/container/exec.go @@ -11,7 +11,6 @@ import ( "github.com/docker/cli/cli/command/completion" "github.com/docker/cli/cli/config/configfile" "github.com/docker/cli/opts" - "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/container" "github.com/docker/docker/client" "github.com/pkg/errors" @@ -54,7 +53,7 @@ func NewExecCommand(dockerCli command.Cli) *cobra.Command { options.Command = args[1:] return RunExec(cmd.Context(), dockerCli, containerIDorName, options) }, - ValidArgsFunction: completion.ContainerNames(dockerCli, false, func(ctr types.Container) bool { + ValidArgsFunction: completion.ContainerNames(dockerCli, false, func(ctr container.Summary) bool { return ctr.State != "paused" }), Annotations: map[string]string{ diff --git a/cli/command/container/exec_test.go b/cli/command/container/exec_test.go index ed34e4777f..89193b29f4 100644 --- a/cli/command/container/exec_test.go +++ b/cli/command/container/exec_test.go @@ -178,8 +178,8 @@ func TestRunExec(t *testing.T) { doc: "inspect error", options: NewExecOptions(), client: &fakeClient{ - inspectFunc: func(string) (types.ContainerJSON, error) { - return types.ContainerJSON{}, errors.New("failed inspect") + inspectFunc: func(string) (container.InspectResponse, error) { + return container.InspectResponse{}, errors.New("failed inspect") }, }, expectedError: "failed inspect", @@ -252,14 +252,14 @@ func TestNewExecCommandErrors(t *testing.T) { name string args []string expectedError string - containerInspectFunc func(img string) (types.ContainerJSON, error) + containerInspectFunc func(img string) (container.InspectResponse, error) }{ { name: "client-error", args: []string{"5cb5bb5e4a3b", "-t", "-i", "bash"}, expectedError: "something went wrong", - containerInspectFunc: func(containerID string) (types.ContainerJSON, error) { - return types.ContainerJSON{}, errors.Errorf("something went wrong") + containerInspectFunc: func(containerID string) (container.InspectResponse, error) { + return container.InspectResponse{}, errors.Errorf("something went wrong") }, }, } diff --git a/cli/command/container/list_test.go b/cli/command/container/list_test.go index 6bc63b57a6..6d72fbcf7e 100644 --- a/cli/command/container/list_test.go +++ b/cli/command/container/list_test.go @@ -9,7 +9,6 @@ import ( "github.com/docker/cli/internal/test" "github.com/docker/cli/internal/test/builders" "github.com/docker/cli/opts" - "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/container" "gotest.tools/v3/assert" is "gotest.tools/v3/assert/cmp" @@ -130,7 +129,7 @@ func TestContainerListErrors(t *testing.T) { testCases := []struct { args []string flags map[string]string - containerListFunc func(container.ListOptions) ([]types.Container, error) + containerListFunc func(container.ListOptions) ([]container.Summary, error) expectedError string }{ { @@ -146,7 +145,7 @@ func TestContainerListErrors(t *testing.T) { expectedError: `wrong number of args for join`, }, { - containerListFunc: func(_ container.ListOptions) ([]types.Container, error) { + containerListFunc: func(_ container.ListOptions) ([]container.Summary, error) { return nil, errors.New("error listing containers") }, expectedError: "error listing containers", @@ -170,8 +169,8 @@ func TestContainerListErrors(t *testing.T) { func TestContainerListWithoutFormat(t *testing.T) { cli := test.NewFakeCli(&fakeClient{ - containerListFunc: func(_ container.ListOptions) ([]types.Container, error) { - return []types.Container{ + containerListFunc: func(_ container.ListOptions) ([]container.Summary, error) { + return []container.Summary{ *builders.Container("c1"), *builders.Container("c2", builders.WithName("foo")), *builders.Container("c3", builders.WithPort(80, 80, builders.TCP), builders.WithPort(81, 81, builders.TCP), builders.WithPort(82, 82, builders.TCP)), @@ -187,8 +186,8 @@ func TestContainerListWithoutFormat(t *testing.T) { func TestContainerListNoTrunc(t *testing.T) { cli := test.NewFakeCli(&fakeClient{ - containerListFunc: func(_ container.ListOptions) ([]types.Container, error) { - return []types.Container{ + containerListFunc: func(_ container.ListOptions) ([]container.Summary, error) { + return []container.Summary{ *builders.Container("c1"), *builders.Container("c2", builders.WithName("foo/bar")), }, nil @@ -203,8 +202,8 @@ func TestContainerListNoTrunc(t *testing.T) { // Test for GitHub issue docker/docker#21772 func TestContainerListNamesMultipleTime(t *testing.T) { cli := test.NewFakeCli(&fakeClient{ - containerListFunc: func(_ container.ListOptions) ([]types.Container, error) { - return []types.Container{ + containerListFunc: func(_ container.ListOptions) ([]container.Summary, error) { + return []container.Summary{ *builders.Container("c1"), *builders.Container("c2", builders.WithName("foo/bar")), }, nil @@ -219,8 +218,8 @@ func TestContainerListNamesMultipleTime(t *testing.T) { // Test for GitHub issue docker/docker#30291 func TestContainerListFormatTemplateWithArg(t *testing.T) { cli := test.NewFakeCli(&fakeClient{ - containerListFunc: func(_ container.ListOptions) ([]types.Container, error) { - return []types.Container{ + containerListFunc: func(_ container.ListOptions) ([]container.Summary, error) { + return []container.Summary{ *builders.Container("c1", builders.WithLabel("some.label", "value")), *builders.Container("c2", builders.WithName("foo/bar"), builders.WithLabel("foo", "bar")), }, nil @@ -270,9 +269,9 @@ func TestContainerListFormatSizeSetsOption(t *testing.T) { tc := tc t.Run(tc.doc, func(t *testing.T) { cli := test.NewFakeCli(&fakeClient{ - containerListFunc: func(options container.ListOptions) ([]types.Container, error) { + containerListFunc: func(options container.ListOptions) ([]container.Summary, error) { assert.Check(t, is.Equal(options.Size, tc.sizeExpected)) - return []types.Container{}, nil + return []container.Summary{}, nil }, }) cmd := newListCommand(cli) @@ -287,8 +286,8 @@ func TestContainerListFormatSizeSetsOption(t *testing.T) { func TestContainerListWithConfigFormat(t *testing.T) { cli := test.NewFakeCli(&fakeClient{ - containerListFunc: func(_ container.ListOptions) ([]types.Container, error) { - return []types.Container{ + containerListFunc: func(_ container.ListOptions) ([]container.Summary, error) { + return []container.Summary{ *builders.Container("c1", builders.WithLabel("some.label", "value"), builders.WithSize(10700000)), *builders.Container("c2", builders.WithName("foo/bar"), builders.WithLabel("foo", "bar"), builders.WithSize(3200000)), }, nil @@ -304,8 +303,8 @@ func TestContainerListWithConfigFormat(t *testing.T) { func TestContainerListWithFormat(t *testing.T) { cli := test.NewFakeCli(&fakeClient{ - containerListFunc: func(_ container.ListOptions) ([]types.Container, error) { - return []types.Container{ + containerListFunc: func(_ container.ListOptions) ([]container.Summary, error) { + return []container.Summary{ *builders.Container("c1", builders.WithLabel("some.label", "value")), *builders.Container("c2", builders.WithName("foo/bar"), builders.WithLabel("foo", "bar")), }, nil diff --git a/cli/command/container/logs_test.go b/cli/command/container/logs_test.go index 4a27cfaf5d..452f097b00 100644 --- a/cli/command/container/logs_test.go +++ b/cli/command/container/logs_test.go @@ -7,7 +7,6 @@ import ( "testing" "github.com/docker/cli/internal/test" - "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/container" "gotest.tools/v3/assert" is "gotest.tools/v3/assert/cmp" @@ -20,10 +19,10 @@ var logFn = func(expectedOut string) func(string, container.LogsOptions) (io.Rea } func TestRunLogs(t *testing.T) { - inspectFn := func(containerID string) (types.ContainerJSON, error) { - return types.ContainerJSON{ + inspectFn := func(containerID string) (container.InspectResponse, error) { + return container.InspectResponse{ Config: &container.Config{Tty: true}, - ContainerJSONBase: &types.ContainerJSONBase{State: &types.ContainerState{Running: false}}, + ContainerJSONBase: &container.ContainerJSONBase{State: &container.State{Running: false}}, }, nil } diff --git a/cli/command/container/pause.go b/cli/command/container/pause.go index 495c1c9f9a..87fb0e10c5 100644 --- a/cli/command/container/pause.go +++ b/cli/command/container/pause.go @@ -8,7 +8,7 @@ import ( "github.com/docker/cli/cli" "github.com/docker/cli/cli/command" "github.com/docker/cli/cli/command/completion" - "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/container" "github.com/pkg/errors" "github.com/spf13/cobra" ) @@ -32,7 +32,7 @@ func NewPauseCommand(dockerCli command.Cli) *cobra.Command { Annotations: map[string]string{ "aliases": "docker container pause, docker pause", }, - ValidArgsFunction: completion.ContainerNames(dockerCli, false, func(ctr types.Container) bool { + ValidArgsFunction: completion.ContainerNames(dockerCli, false, func(ctr container.Summary) bool { return ctr.State != "paused" }), } diff --git a/cli/command/container/port_test.go b/cli/command/container/port_test.go index 66e601c543..8502cf761d 100644 --- a/cli/command/container/port_test.go +++ b/cli/command/container/port_test.go @@ -5,7 +5,7 @@ import ( "testing" "github.com/docker/cli/internal/test" - "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/container" "github.com/docker/go-connections/nat" "gotest.tools/v3/assert" "gotest.tools/v3/golden" @@ -46,8 +46,8 @@ func TestNewPortCommandOutput(t *testing.T) { tc := tc t.Run(tc.name, func(t *testing.T) { cli := test.NewFakeCli(&fakeClient{ - inspectFunc: func(string) (types.ContainerJSON, error) { - ci := types.ContainerJSON{NetworkSettings: &types.NetworkSettings{}} + inspectFunc: func(string) (container.InspectResponse, error) { + ci := container.InspectResponse{NetworkSettings: &container.NetworkSettings{}} ci.NetworkSettings.Ports = nat.PortMap{ "80/tcp": make([]nat.PortBinding, len(tc.ips)), "443/tcp": make([]nat.PortBinding, len(tc.ips)), diff --git a/cli/command/container/start.go b/cli/command/container/start.go index 7cd6d0e7ce..29aaa988d6 100644 --- a/cli/command/container/start.go +++ b/cli/command/container/start.go @@ -9,7 +9,6 @@ import ( "github.com/docker/cli/cli" "github.com/docker/cli/cli/command" "github.com/docker/cli/cli/command/completion" - "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/container" "github.com/moby/sys/signal" "github.com/moby/term" @@ -43,7 +42,7 @@ func NewStartCommand(dockerCli command.Cli) *cobra.Command { Annotations: map[string]string{ "aliases": "docker container start, docker start", }, - ValidArgsFunction: completion.ContainerNames(dockerCli, true, func(ctr types.Container) bool { + ValidArgsFunction: completion.ContainerNames(dockerCli, true, func(ctr container.Summary) bool { return ctr.State == "exited" || ctr.State == "created" }), } diff --git a/cli/command/container/unpause.go b/cli/command/container/unpause.go index 3190d75790..cffd94d4c2 100644 --- a/cli/command/container/unpause.go +++ b/cli/command/container/unpause.go @@ -8,7 +8,7 @@ import ( "github.com/docker/cli/cli" "github.com/docker/cli/cli/command" "github.com/docker/cli/cli/command/completion" - "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/container" "github.com/pkg/errors" "github.com/spf13/cobra" ) @@ -32,7 +32,7 @@ func NewUnpauseCommand(dockerCli command.Cli) *cobra.Command { Annotations: map[string]string{ "aliases": "docker container unpause, docker unpause", }, - ValidArgsFunction: completion.ContainerNames(dockerCli, false, func(ctr types.Container) bool { + ValidArgsFunction: completion.ContainerNames(dockerCli, false, func(ctr container.Summary) bool { return ctr.State == "paused" }), } diff --git a/cli/command/formatter/container.go b/cli/command/formatter/container.go index 17afec1b4b..2407e9c81f 100644 --- a/cli/command/formatter/container.go +++ b/cli/command/formatter/container.go @@ -11,7 +11,7 @@ import ( "time" "github.com/distribution/reference" - "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/container" "github.com/docker/docker/pkg/stringid" "github.com/docker/go-units" ) @@ -66,7 +66,7 @@ ports: {{- pad .Ports 1 0}} } // ContainerWrite renders the context for a list of containers -func ContainerWrite(ctx Context, containers []types.Container) error { +func ContainerWrite(ctx Context, containers []container.Summary) error { render := func(format func(subContext SubContext) error) error { for _, ctr := range containers { err := format(&ContainerContext{trunc: ctx.Trunc, c: ctr}) @@ -83,7 +83,7 @@ func ContainerWrite(ctx Context, containers []types.Container) error { type ContainerContext struct { HeaderContext trunc bool - c types.Container + c container.Summary // FieldsUsed is used in the pre-processing step to detect which fields are // used in the template. It's currently only used to detect use of the .Size @@ -313,7 +313,7 @@ func (c *ContainerContext) Networks() string { // DisplayablePorts returns formatted string representing open ports of container // e.g. "0.0.0.0:80->9090/tcp, 9988/tcp" // it's used by command 'docker ps' -func DisplayablePorts(ports []types.Port) string { +func DisplayablePorts(ports []container.Port) string { type portGroup struct { first uint16 last uint16 @@ -378,7 +378,7 @@ func formGroup(key string, start, last uint16) string { return group + "/" + groupType } -func comparePorts(i, j types.Port) bool { +func comparePorts(i, j container.Port) bool { if i.PrivatePort != j.PrivatePort { return i.PrivatePort < j.PrivatePort } diff --git a/cli/command/formatter/container_test.go b/cli/command/formatter/container_test.go index 1185e07141..379927a36a 100644 --- a/cli/command/formatter/container_test.go +++ b/cli/command/formatter/container_test.go @@ -12,7 +12,7 @@ import ( "time" "github.com/docker/cli/internal/test" - "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/container" "github.com/docker/docker/pkg/stringid" "gotest.tools/v3/assert" is "gotest.tools/v3/assert/cmp" @@ -25,47 +25,47 @@ func TestContainerPsContext(t *testing.T) { var ctx ContainerContext cases := []struct { - container types.Container + container container.Summary trunc bool expValue string call func() string }{ { - container: types.Container{ID: containerID}, + container: container.Summary{ID: containerID}, trunc: true, expValue: stringid.TruncateID(containerID), call: ctx.ID, }, { - container: types.Container{ID: containerID}, + container: container.Summary{ID: containerID}, expValue: containerID, call: ctx.ID, }, { - container: types.Container{Names: []string{"/foobar_baz"}}, + container: container.Summary{Names: []string{"/foobar_baz"}}, trunc: true, expValue: "foobar_baz", call: ctx.Names, }, { - container: types.Container{Image: "ubuntu"}, + container: container.Summary{Image: "ubuntu"}, trunc: true, expValue: "ubuntu", call: ctx.Image, }, { - container: types.Container{Image: "verylongimagename"}, + container: container.Summary{Image: "verylongimagename"}, trunc: true, expValue: "verylongimagename", call: ctx.Image, }, { - container: types.Container{Image: "verylongimagename"}, + container: container.Summary{Image: "verylongimagename"}, expValue: "verylongimagename", call: ctx.Image, }, { - container: types.Container{ + container: container.Summary{ Image: "a5a665ff33eced1e0803148700880edab4", ImageID: "a5a665ff33eced1e0803148700880edab4269067ed77e27737a708d0d293fbf5", }, @@ -74,7 +74,7 @@ func TestContainerPsContext(t *testing.T) { call: ctx.Image, }, { - container: types.Container{ + container: container.Summary{ Image: "a5a665ff33eced1e0803148700880edab4", ImageID: "a5a665ff33eced1e0803148700880edab4269067ed77e27737a708d0d293fbf5", }, @@ -82,67 +82,67 @@ func TestContainerPsContext(t *testing.T) { call: ctx.Image, }, { - container: types.Container{Image: ""}, + container: container.Summary{Image: ""}, trunc: true, expValue: "", call: ctx.Image, }, { - container: types.Container{Command: "sh -c 'ls -la'"}, + container: container.Summary{Command: "sh -c 'ls -la'"}, trunc: true, expValue: `"sh -c 'ls -la'"`, call: ctx.Command, }, { - container: types.Container{Created: unix}, + container: container.Summary{Created: unix}, trunc: true, expValue: time.Unix(unix, 0).String(), call: ctx.CreatedAt, }, { - container: types.Container{Ports: []types.Port{{PrivatePort: 8080, PublicPort: 8080, Type: "tcp"}}}, + container: container.Summary{Ports: []container.Port{{PrivatePort: 8080, PublicPort: 8080, Type: "tcp"}}}, trunc: true, expValue: "8080/tcp", call: ctx.Ports, }, { - container: types.Container{Status: "RUNNING"}, + container: container.Summary{Status: "RUNNING"}, trunc: true, expValue: "RUNNING", call: ctx.Status, }, { - container: types.Container{SizeRw: 10}, + container: container.Summary{SizeRw: 10}, trunc: true, expValue: "10B", call: ctx.Size, }, { - container: types.Container{SizeRw: 10, SizeRootFs: 20}, + container: container.Summary{SizeRw: 10, SizeRootFs: 20}, trunc: true, expValue: "10B (virtual 20B)", call: ctx.Size, }, { - container: types.Container{}, + container: container.Summary{}, trunc: true, call: ctx.Labels, }, { - container: types.Container{Labels: map[string]string{"cpu": "6", "storage": "ssd"}}, + container: container.Summary{Labels: map[string]string{"cpu": "6", "storage": "ssd"}}, trunc: true, expValue: "cpu=6,storage=ssd", call: ctx.Labels, }, { - container: types.Container{Created: unix}, + container: container.Summary{Created: unix}, trunc: true, expValue: "About a minute ago", call: ctx.RunningFor, }, { - container: types.Container{ - Mounts: []types.MountPoint{ + container: container.Summary{ + Mounts: []container.MountPoint{ { Name: "this-is-a-long-volume-name-and-will-be-truncated-if-trunc-is-set", Driver: "local", @@ -155,8 +155,8 @@ func TestContainerPsContext(t *testing.T) { call: ctx.Mounts, }, { - container: types.Container{ - Mounts: []types.MountPoint{ + container: container.Summary{ + Mounts: []container.MountPoint{ { Driver: "local", Source: "/a/path", @@ -167,8 +167,8 @@ func TestContainerPsContext(t *testing.T) { call: ctx.Mounts, }, { - container: types.Container{ - Mounts: []types.MountPoint{ + container: container.Summary{ + Mounts: []container.MountPoint{ { Name: "733908409c91817de8e92b0096373245f329f19a88e2c849f02460e9b3d1c203", Driver: "local", @@ -191,7 +191,7 @@ func TestContainerPsContext(t *testing.T) { } } - c1 := types.Container{Labels: map[string]string{"com.docker.swarm.swarm-id": "33", "com.docker.swarm.node_name": "ubuntu"}} + c1 := container.Summary{Labels: map[string]string{"com.docker.swarm.swarm-id": "33", "com.docker.swarm.node_name": "ubuntu"}} ctx = ContainerContext{c: c1, trunc: true} sid := ctx.Label("com.docker.swarm.swarm-id") @@ -204,7 +204,7 @@ func TestContainerPsContext(t *testing.T) { t.Fatalf("Expected ubuntu, was %s\n", node) } - c2 := types.Container{} + c2 := container.Summary{} ctx = ContainerContext{c: c2, trunc: true} label := ctx.Label("anything.really") @@ -340,7 +340,7 @@ size: 0B }, } - containers := []types.Container{ + containers := []container.Summary{ {ID: "containerID1", Names: []string{"/foobar_baz"}, Image: "ubuntu", Created: unixTime, State: "running"}, {ID: "containerID2", Names: []string{"/foobar_bar"}, Image: "ubuntu", Created: unixTime, State: "running"}, } @@ -362,7 +362,7 @@ size: 0B func TestContainerContextWriteWithNoContainers(t *testing.T) { out := bytes.NewBufferString("") - containers := []types.Container{} + containers := []container.Summary{} cases := []struct { context Context @@ -424,7 +424,7 @@ func TestContainerContextWriteWithNoContainers(t *testing.T) { func TestContainerContextWriteJSON(t *testing.T) { unix := time.Now().Add(-65 * time.Second).Unix() - containers := []types.Container{ + containers := []container.Summary{ {ID: "containerID1", Names: []string{"/foobar_baz"}, Image: "ubuntu", Created: unix, State: "running"}, {ID: "containerID2", Names: []string{"/foobar_bar"}, Image: "ubuntu", Created: unix, State: "running"}, } @@ -478,7 +478,7 @@ func TestContainerContextWriteJSON(t *testing.T) { } func TestContainerContextWriteJSONField(t *testing.T) { - containers := []types.Container{ + containers := []container.Summary{ {ID: "containerID1", Names: []string{"/foobar_baz"}, Image: "ubuntu"}, {ID: "containerID2", Names: []string{"/foobar_bar"}, Image: "ubuntu"}, } @@ -497,7 +497,7 @@ func TestContainerContextWriteJSONField(t *testing.T) { } func TestContainerBackCompat(t *testing.T) { - containers := []types.Container{{ID: "brewhaha"}} + containers := []container.Summary{{ID: "brewhaha"}} cases := []string{ "ID", "Names", @@ -523,7 +523,7 @@ func TestContainerBackCompat(t *testing.T) { } type ports struct { - ports []types.Port + ports []container.Port expected string } @@ -531,7 +531,7 @@ type ports struct { func TestDisplayablePorts(t *testing.T) { cases := []ports{ { - ports: []types.Port{ + ports: []container.Port{ { PrivatePort: 9988, Type: "tcp", @@ -540,7 +540,7 @@ func TestDisplayablePorts(t *testing.T) { expected: "9988/tcp", }, { - ports: []types.Port{ + ports: []container.Port{ { PrivatePort: 9988, Type: "udp", @@ -549,7 +549,7 @@ func TestDisplayablePorts(t *testing.T) { expected: "9988/udp", }, { - ports: []types.Port{ + ports: []container.Port{ { IP: "0.0.0.0", PrivatePort: 9988, @@ -559,7 +559,7 @@ func TestDisplayablePorts(t *testing.T) { expected: "0.0.0.0:0->9988/tcp", }, { - ports: []types.Port{ + ports: []container.Port{ { PrivatePort: 9988, PublicPort: 8899, @@ -569,7 +569,7 @@ func TestDisplayablePorts(t *testing.T) { expected: "9988/tcp", }, { - ports: []types.Port{ + ports: []container.Port{ { IP: "4.3.2.1", PrivatePort: 9988, @@ -580,7 +580,7 @@ func TestDisplayablePorts(t *testing.T) { expected: "4.3.2.1:8899->9988/tcp", }, { - ports: []types.Port{ + ports: []container.Port{ { IP: "4.3.2.1", PrivatePort: 9988, @@ -591,7 +591,7 @@ func TestDisplayablePorts(t *testing.T) { expected: "4.3.2.1:9988->9988/tcp", }, { - ports: []types.Port{ + ports: []container.Port{ { PrivatePort: 9988, Type: "udp", @@ -603,7 +603,7 @@ func TestDisplayablePorts(t *testing.T) { expected: "9988/udp, 9988/udp", }, { - ports: []types.Port{ + ports: []container.Port{ { IP: "1.2.3.4", PublicPort: 9998, @@ -619,7 +619,7 @@ func TestDisplayablePorts(t *testing.T) { expected: "1.2.3.4:9998-9999->9998-9999/udp", }, { - ports: []types.Port{ + ports: []container.Port{ { IP: "1.2.3.4", PublicPort: 8887, @@ -635,7 +635,7 @@ func TestDisplayablePorts(t *testing.T) { expected: "1.2.3.4:8887->9998/udp, 1.2.3.4:8888->9999/udp", }, { - ports: []types.Port{ + ports: []container.Port{ { PrivatePort: 9998, Type: "udp", @@ -647,7 +647,7 @@ func TestDisplayablePorts(t *testing.T) { expected: "9998-9999/udp", }, { - ports: []types.Port{ + ports: []container.Port{ { IP: "1.2.3.4", PrivatePort: 6677, @@ -662,7 +662,7 @@ func TestDisplayablePorts(t *testing.T) { expected: "9988/udp, 1.2.3.4:7766->6677/tcp", }, { - ports: []types.Port{ + ports: []container.Port{ { IP: "1.2.3.4", PrivatePort: 9988, @@ -683,7 +683,7 @@ func TestDisplayablePorts(t *testing.T) { expected: "4.3.2.1:3322->2233/tcp, 1.2.3.4:8899->9988/tcp, 1.2.3.4:8899->9988/udp", }, { - ports: []types.Port{ + ports: []container.Port{ { PrivatePort: 9988, PublicPort: 8899, @@ -703,7 +703,7 @@ func TestDisplayablePorts(t *testing.T) { expected: "9988/udp, 4.3.2.1:3322->2233/tcp, 1.2.3.4:7766->6677/tcp", }, { - ports: []types.Port{ + ports: []container.Port{ { PrivatePort: 80, Type: "tcp", diff --git a/cli/command/formatter/disk_usage.go b/cli/command/formatter/disk_usage.go index cd1d75bef3..01edd2b042 100644 --- a/cli/command/formatter/disk_usage.go +++ b/cli/command/formatter/disk_usage.go @@ -9,6 +9,7 @@ import ( "github.com/distribution/reference" "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/container" "github.com/docker/docker/api/types/image" "github.com/docker/docker/api/types/volume" units "github.com/docker/go-units" @@ -36,7 +37,7 @@ type DiskUsageContext struct { Verbose bool LayersSize int64 Images []*image.Summary - Containers []*types.Container + Containers []*container.Summary Volumes []*volume.Volume BuildCache []*types.BuildCache BuilderSize int64 @@ -124,7 +125,7 @@ func (ctx *DiskUsageContext) Write() (err error) { return err } - diskUsageContainersCtx := diskUsageContainersContext{containers: []*types.Container{}} + diskUsageContainersCtx := diskUsageContainersContext{containers: []*container.Summary{}} diskUsageContainersCtx.Header = SubHeaderContext{ "Type": typeHeader, "TotalCount": totalHeader, @@ -313,7 +314,7 @@ func (c *diskUsageImagesContext) Reclaimable() string { type diskUsageContainersContext struct { HeaderContext - containers []*types.Container + containers []*container.Summary } func (c *diskUsageContainersContext) MarshalJSON() ([]byte, error) { @@ -328,10 +329,10 @@ func (c *diskUsageContainersContext) TotalCount() string { return strconv.Itoa(len(c.containers)) } -func (c *diskUsageContainersContext) isActive(container types.Container) bool { - return strings.Contains(container.State, "running") || - strings.Contains(container.State, "paused") || - strings.Contains(container.State, "restarting") +func (c *diskUsageContainersContext) isActive(ctr container.Summary) bool { + return strings.Contains(ctr.State, "running") || + strings.Contains(ctr.State, "paused") || + strings.Contains(ctr.State, "restarting") } func (c *diskUsageContainersContext) Active() string { diff --git a/cli/command/image/client_test.go b/cli/command/image/client_test.go index 8789a34789..4e14bcf7ab 100644 --- a/cli/command/image/client_test.go +++ b/cli/command/image/client_test.go @@ -24,7 +24,7 @@ type fakeClient struct { imagesPruneFunc func(pruneFilter filters.Args) (image.PruneReport, error) imageLoadFunc func(input io.Reader, quiet bool) (image.LoadResponse, error) imageListFunc func(options image.ListOptions) ([]image.Summary, error) - imageInspectFunc func(img string) (types.ImageInspect, []byte, error) + imageInspectFunc func(img string) (image.InspectResponse, []byte, error) imageImportFunc func(source image.ImportSource, ref string, options image.ImportOptions) (io.ReadCloser, error) imageHistoryFunc func(img string) ([]image.HistoryResponseItem, error) imageBuildFunc func(context.Context, io.Reader, types.ImageBuildOptions) (types.ImageBuildResponse, error) @@ -95,11 +95,11 @@ func (cli *fakeClient) ImageList(_ context.Context, options image.ListOptions) ( return []image.Summary{}, nil } -func (cli *fakeClient) ImageInspectWithRaw(_ context.Context, img string) (types.ImageInspect, []byte, error) { +func (cli *fakeClient) ImageInspectWithRaw(_ context.Context, img string) (image.InspectResponse, []byte, error) { if cli.imageInspectFunc != nil { return cli.imageInspectFunc(img) } - return types.ImageInspect{}, nil, nil + return image.InspectResponse{}, nil, nil } func (cli *fakeClient) ImageImport(_ context.Context, source image.ImportSource, ref string, diff --git a/cli/command/image/inspect_test.go b/cli/command/image/inspect_test.go index c7c2f3f249..61ea36012e 100644 --- a/cli/command/image/inspect_test.go +++ b/cli/command/image/inspect_test.go @@ -6,7 +6,7 @@ import ( "testing" "github.com/docker/cli/internal/test" - "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/image" "gotest.tools/v3/assert" is "gotest.tools/v3/assert/cmp" "gotest.tools/v3/golden" @@ -42,39 +42,39 @@ func TestNewInspectCommandSuccess(t *testing.T) { name string args []string imageCount int - imageInspectFunc func(img string) (types.ImageInspect, []byte, error) + imageInspectFunc func(img string) (image.InspectResponse, []byte, error) }{ { name: "simple", args: []string{"image"}, imageCount: 1, - imageInspectFunc: func(img string) (types.ImageInspect, []byte, error) { + imageInspectFunc: func(img string) (image.InspectResponse, []byte, error) { imageInspectInvocationCount++ assert.Check(t, is.Equal("image", img)) - return types.ImageInspect{}, nil, nil + return image.InspectResponse{}, nil, nil }, }, { name: "format", imageCount: 1, args: []string{"--format='{{.ID}}'", "image"}, - imageInspectFunc: func(img string) (types.ImageInspect, []byte, error) { + imageInspectFunc: func(img string) (image.InspectResponse, []byte, error) { imageInspectInvocationCount++ - return types.ImageInspect{ID: img}, nil, nil + return image.InspectResponse{ID: img}, nil, nil }, }, { name: "simple-many", args: []string{"image1", "image2"}, imageCount: 2, - imageInspectFunc: func(img string) (types.ImageInspect, []byte, error) { + imageInspectFunc: func(img string) (image.InspectResponse, []byte, error) { imageInspectInvocationCount++ if imageInspectInvocationCount == 1 { assert.Check(t, is.Equal("image1", img)) } else { assert.Check(t, is.Equal("image2", img)) } - return types.ImageInspect{}, nil, nil + return image.InspectResponse{}, nil, nil }, }, } diff --git a/cli/command/network/disconnect.go b/cli/command/network/disconnect.go index 80c7745373..521aee33f5 100644 --- a/cli/command/network/disconnect.go +++ b/cli/command/network/disconnect.go @@ -6,7 +6,7 @@ import ( "github.com/docker/cli/cli" "github.com/docker/cli/cli/command" "github.com/docker/cli/cli/command/completion" - "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/container" "github.com/docker/docker/client" "github.com/spf13/cobra" ) @@ -48,8 +48,8 @@ func runDisconnect(ctx context.Context, apiClient client.NetworkAPIClient, opts return apiClient.NetworkDisconnect(ctx, opts.network, opts.container, opts.force) } -func isConnected(network string) func(types.Container) bool { - return func(ctr types.Container) bool { +func isConnected(network string) func(container.Summary) bool { + return func(ctr container.Summary) bool { if ctr.NetworkSettings == nil { return false } @@ -58,8 +58,8 @@ func isConnected(network string) func(types.Container) bool { } } -func not(fn func(types.Container) bool) func(types.Container) bool { - return func(ctr types.Container) bool { +func not(fn func(container.Summary) bool) func(container.Summary) bool { + return func(ctr container.Summary) bool { ok := fn(ctr) return !ok } diff --git a/cli/command/trust/inspect_pretty_test.go b/cli/command/trust/inspect_pretty_test.go index e64c00c06f..d123e14878 100644 --- a/cli/command/trust/inspect_pretty_test.go +++ b/cli/command/trust/inspect_pretty_test.go @@ -10,7 +10,6 @@ import ( "github.com/docker/cli/cli/trust" "github.com/docker/cli/internal/test" notaryfake "github.com/docker/cli/internal/test/notary" - "github.com/docker/docker/api/types" "github.com/docker/docker/api/types/image" "github.com/docker/docker/api/types/system" "github.com/docker/docker/client" @@ -33,8 +32,8 @@ func (c *fakeClient) Info(context.Context) (system.Info, error) { return system.Info{}, nil } -func (c *fakeClient) ImageInspectWithRaw(context.Context, string) (types.ImageInspect, []byte, error) { - return types.ImageInspect{}, []byte{}, nil +func (c *fakeClient) ImageInspectWithRaw(context.Context, string) (image.InspectResponse, []byte, error) { + return image.InspectResponse{}, []byte{}, nil } func (c *fakeClient) ImagePush(context.Context, string, image.PushOptions) (io.ReadCloser, error) { diff --git a/internal/test/builders/container.go b/internal/test/builders/container.go index 359b14e76a..df67f60a07 100644 --- a/internal/test/builders/container.go +++ b/internal/test/builders/container.go @@ -3,15 +3,15 @@ package builders import ( "time" - "github.com/docker/docker/api/types" + "github.com/docker/docker/api/types/container" ) // Container creates a container with default values. // Any number of container function builder can be passed to augment it. -func Container(name string, builders ...func(c *types.Container)) *types.Container { +func Container(name string, builders ...func(c *container.Summary)) *container.Summary { // now := time.Now() // onehourago := now.Add(-120 * time.Minute) - ctr := &types.Container{ + ctr := &container.Summary{ ID: "container_id", Names: []string{"/" + name}, Command: "top", @@ -28,8 +28,8 @@ func Container(name string, builders ...func(c *types.Container)) *types.Contain } // WithLabel adds a label to the container -func WithLabel(key, value string) func(*types.Container) { - return func(c *types.Container) { +func WithLabel(key, value string) func(*container.Summary) { + return func(c *container.Summary) { if c.Labels == nil { c.Labels = map[string]string{} } @@ -38,19 +38,19 @@ func WithLabel(key, value string) func(*types.Container) { } // WithName adds a name to the container -func WithName(name string) func(*types.Container) { - return func(c *types.Container) { +func WithName(name string) func(*container.Summary) { + return func(c *container.Summary) { c.Names = append(c.Names, "/"+name) } } // WithPort adds a port mapping to the container -func WithPort(privatePort, publicPort uint16, builders ...func(*types.Port)) func(*types.Container) { - return func(c *types.Container) { +func WithPort(privatePort, publicPort uint16, builders ...func(*container.Port)) func(*container.Summary) { + return func(c *container.Summary) { if c.Ports == nil { - c.Ports = []types.Port{} + c.Ports = []container.Port{} } - port := &types.Port{ + port := &container.Port{ PrivatePort: privatePort, PublicPort: publicPort, } @@ -62,8 +62,8 @@ func WithPort(privatePort, publicPort uint16, builders ...func(*types.Port)) fun } // WithSize adds size in bytes to the container -func WithSize(size int64) func(*types.Container) { - return func(c *types.Container) { +func WithSize(size int64) func(*container.Summary) { + return func(c *container.Summary) { if size >= 0 { c.SizeRw = size } @@ -71,18 +71,18 @@ func WithSize(size int64) func(*types.Container) { } // IP sets the ip of the port -func IP(ip string) func(*types.Port) { - return func(p *types.Port) { +func IP(ip string) func(*container.Port) { + return func(p *container.Port) { p.IP = ip } } // TCP sets the port to tcp -func TCP(p *types.Port) { +func TCP(p *container.Port) { p.Type = "tcp" } // UDP sets the port to udp -func UDP(p *types.Port) { +func UDP(p *container.Port) { p.Type = "udp" }