mirror of
https://github.com/moby/moby.git
synced 2026-01-11 18:51:37 +00:00
client: refactor ContainerList to wrap result
Signed-off-by: Austin Vazquez <austin.vazquez@docker.com>
This commit is contained in:
@@ -62,7 +62,7 @@ type ContainerAPIClient interface {
|
|||||||
ContainerExport(ctx context.Context, container string) (io.ReadCloser, error)
|
ContainerExport(ctx context.Context, container string) (io.ReadCloser, error)
|
||||||
ContainerInspect(ctx context.Context, container string, options ContainerInspectOptions) (ContainerInspectResult, error)
|
ContainerInspect(ctx context.Context, container string, options ContainerInspectOptions) (ContainerInspectResult, error)
|
||||||
ContainerKill(ctx context.Context, container string, options ContainerKillOptions) (ContainerKillResult, error)
|
ContainerKill(ctx context.Context, container string, options ContainerKillOptions) (ContainerKillResult, error)
|
||||||
ContainerList(ctx context.Context, options ContainerListOptions) ([]container.Summary, error)
|
ContainerList(ctx context.Context, options ContainerListOptions) (ContainerListResult, error)
|
||||||
ContainerLogs(ctx context.Context, container string, options ContainerLogsOptions) (io.ReadCloser, error)
|
ContainerLogs(ctx context.Context, container string, options ContainerLogsOptions) (io.ReadCloser, error)
|
||||||
ContainerPause(ctx context.Context, container string, options ContainerPauseOptions) (ContainerPauseResult, error)
|
ContainerPause(ctx context.Context, container string, options ContainerPauseOptions) (ContainerPauseResult, error)
|
||||||
ContainerRemove(ctx context.Context, container string, options ContainerRemoveOptions) (ContainerRemoveResult, error)
|
ContainerRemove(ctx context.Context, container string, options ContainerRemoveOptions) (ContainerRemoveResult, error)
|
||||||
|
|||||||
@@ -20,8 +20,12 @@ type ContainerListOptions struct {
|
|||||||
Filters Filters
|
Filters Filters
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type ContainerListResult struct {
|
||||||
|
Items []container.Summary
|
||||||
|
}
|
||||||
|
|
||||||
// ContainerList returns the list of containers in the docker host.
|
// ContainerList returns the list of containers in the docker host.
|
||||||
func (cli *Client) ContainerList(ctx context.Context, options ContainerListOptions) ([]container.Summary, error) {
|
func (cli *Client) ContainerList(ctx context.Context, options ContainerListOptions) (ContainerListResult, error) {
|
||||||
query := url.Values{}
|
query := url.Values{}
|
||||||
|
|
||||||
if options.All {
|
if options.All {
|
||||||
@@ -49,10 +53,10 @@ func (cli *Client) ContainerList(ctx context.Context, options ContainerListOptio
|
|||||||
resp, err := cli.get(ctx, "/containers/json", query, nil)
|
resp, err := cli.get(ctx, "/containers/json", query, nil)
|
||||||
defer ensureReaderClosed(resp)
|
defer ensureReaderClosed(resp)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return ContainerListResult{}, err
|
||||||
}
|
}
|
||||||
|
|
||||||
var containers []container.Summary
|
var containers []container.Summary
|
||||||
err = json.NewDecoder(resp.Body).Decode(&containers)
|
err = json.NewDecoder(resp.Body).Decode(&containers)
|
||||||
return containers, err
|
return ContainerListResult{Items: containers}, err
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -65,7 +65,7 @@ func TestContainerList(t *testing.T) {
|
|||||||
)
|
)
|
||||||
assert.NilError(t, err)
|
assert.NilError(t, err)
|
||||||
|
|
||||||
containers, err := client.ContainerList(context.Background(), ContainerListOptions{
|
list, err := client.ContainerList(context.Background(), ContainerListOptions{
|
||||||
Size: true,
|
Size: true,
|
||||||
All: true,
|
All: true,
|
||||||
Since: "container",
|
Since: "container",
|
||||||
@@ -75,5 +75,5 @@ func TestContainerList(t *testing.T) {
|
|||||||
Add("before", "container"),
|
Add("before", "container"),
|
||||||
})
|
})
|
||||||
assert.NilError(t, err)
|
assert.NilError(t, err)
|
||||||
assert.Check(t, is.Len(containers, 2))
|
assert.Check(t, is.Len(list.Items, 2))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -88,14 +88,14 @@ func (d *Daemon) CheckActiveContainerCount(ctx context.Context) func(t *testing.
|
|||||||
apiClient, err := client.NewClientWithOpts(client.FromEnv, client.WithHost(d.Sock()))
|
apiClient, err := client.NewClientWithOpts(client.FromEnv, client.WithHost(d.Sock()))
|
||||||
assert.NilError(t, err)
|
assert.NilError(t, err)
|
||||||
|
|
||||||
ctrs, err := apiClient.ContainerList(ctx, client.ContainerListOptions{})
|
list, err := apiClient.ContainerList(ctx, client.ContainerListOptions{})
|
||||||
_ = apiClient.Close()
|
_ = apiClient.Close()
|
||||||
assert.NilError(t, err)
|
assert.NilError(t, err)
|
||||||
var out strings.Builder
|
var out strings.Builder
|
||||||
for _, ctr := range ctrs {
|
for _, ctr := range list.Items {
|
||||||
out.WriteString(stringid.TruncateID(ctr.ID) + "\n")
|
out.WriteString(stringid.TruncateID(ctr.ID) + "\n")
|
||||||
}
|
}
|
||||||
return len(ctrs), out.String()
|
return len(list.Items), out.String()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -42,12 +42,12 @@ func (s *DockerAPISuite) TestContainerAPIGetAll(c *testing.T) {
|
|||||||
defer apiClient.Close()
|
defer apiClient.Close()
|
||||||
|
|
||||||
ctx := testutil.GetContext(c)
|
ctx := testutil.GetContext(c)
|
||||||
containers, err := apiClient.ContainerList(ctx, client.ContainerListOptions{
|
list, err := apiClient.ContainerList(ctx, client.ContainerListOptions{
|
||||||
All: true,
|
All: true,
|
||||||
})
|
})
|
||||||
assert.NilError(c, err)
|
assert.NilError(c, err)
|
||||||
assert.Equal(c, len(containers), startCount+1)
|
assert.Equal(c, len(list.Items), startCount+1)
|
||||||
actual := containers[0].Names[0]
|
actual := list.Items[0].Names[0]
|
||||||
assert.Equal(c, actual, "/"+name)
|
assert.Equal(c, actual, "/"+name)
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -64,10 +64,10 @@ func (s *DockerAPISuite) TestContainerAPIGetJSONNoFieldsOmitted(c *testing.T) {
|
|||||||
All: true,
|
All: true,
|
||||||
}
|
}
|
||||||
ctx := testutil.GetContext(c)
|
ctx := testutil.GetContext(c)
|
||||||
containers, err := apiClient.ContainerList(ctx, options)
|
list, err := apiClient.ContainerList(ctx, options)
|
||||||
assert.NilError(c, err)
|
assert.NilError(c, err)
|
||||||
assert.Equal(c, len(containers), startCount+1)
|
assert.Equal(c, len(list.Items), startCount+1)
|
||||||
actual := fmt.Sprintf("%+v", containers[0])
|
actual := fmt.Sprintf("%+v", list.Items[0])
|
||||||
|
|
||||||
// empty Labels field triggered this bug, make sense to check for everything
|
// empty Labels field triggered this bug, make sense to check for everything
|
||||||
// cause even Ports for instance can trigger this bug
|
// cause even Ports for instance can trigger this bug
|
||||||
|
|||||||
@@ -116,7 +116,7 @@ func TestBuildWithRemoveAndForceRemove(t *testing.T) {
|
|||||||
assert.NilError(t, err)
|
assert.NilError(t, err)
|
||||||
remainingContainers, err := apiClient.ContainerList(ctx, client.ContainerListOptions{Filters: filter, All: true})
|
remainingContainers, err := apiClient.ContainerList(ctx, client.ContainerListOptions{Filters: filter, All: true})
|
||||||
assert.NilError(t, err)
|
assert.NilError(t, err)
|
||||||
assert.Equal(t, tc.numberOfIntermediateContainers, len(remainingContainers), "Expected %v remaining intermediate containers, got %v", tc.numberOfIntermediateContainers, len(remainingContainers))
|
assert.Equal(t, tc.numberOfIntermediateContainers, len(remainingContainers.Items), "Expected %v remaining intermediate containers, got %v", tc.numberOfIntermediateContainers, len(remainingContainers.Items))
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -42,10 +42,10 @@ func TestLinksContainerNames(t *testing.T) {
|
|||||||
container.Run(ctx, t, apiClient, container.WithName(containerA))
|
container.Run(ctx, t, apiClient, container.WithName(containerA))
|
||||||
container.Run(ctx, t, apiClient, container.WithName(containerB), container.WithLinks(containerA+":"+containerA))
|
container.Run(ctx, t, apiClient, container.WithName(containerB), container.WithLinks(containerA+":"+containerA))
|
||||||
|
|
||||||
containers, err := apiClient.ContainerList(ctx, client.ContainerListOptions{
|
list, err := apiClient.ContainerList(ctx, client.ContainerListOptions{
|
||||||
Filters: make(client.Filters).Add("name", containerA),
|
Filters: make(client.Filters).Add("name", containerA),
|
||||||
})
|
})
|
||||||
assert.NilError(t, err)
|
assert.NilError(t, err)
|
||||||
assert.Check(t, is.Equal(1, len(containers)))
|
assert.Check(t, is.Equal(1, len(list.Items)))
|
||||||
assert.Check(t, is.DeepEqual([]string{"/" + containerA, "/" + containerB + "/" + containerA}, containers[0].Names))
|
assert.Check(t, is.DeepEqual([]string{"/" + containerA, "/" + containerB + "/" + containerA}, list.Items[0].Names))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -35,12 +35,12 @@ func TestContainerList(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// list them and verify correctness
|
// list them and verify correctness
|
||||||
containerList, err := apiClient.ContainerList(ctx, client.ContainerListOptions{All: true})
|
list, err := apiClient.ContainerList(ctx, client.ContainerListOptions{All: true})
|
||||||
assert.NilError(t, err)
|
assert.NilError(t, err)
|
||||||
assert.Assert(t, is.Len(containerList, num))
|
assert.Assert(t, is.Len(list.Items, num))
|
||||||
for i := range num {
|
for i := range num {
|
||||||
// container list should be ordered in descending creation order
|
// container list should be ordered in descending creation order
|
||||||
assert.Assert(t, is.Equal(containerList[i].ID, containers[num-1-i]))
|
assert.Assert(t, is.Equal(list.Items[i].ID, containers[num-1-i]))
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -65,14 +65,14 @@ func TestContainerList_Annotations(t *testing.T) {
|
|||||||
id := container.Create(ctx, t, apiClient, container.WithAnnotations(annotations))
|
id := container.Create(ctx, t, apiClient, container.WithAnnotations(annotations))
|
||||||
defer container.Remove(ctx, t, apiClient, id, client.ContainerRemoveOptions{Force: true})
|
defer container.Remove(ctx, t, apiClient, id, client.ContainerRemoveOptions{Force: true})
|
||||||
|
|
||||||
containers, err := apiClient.ContainerList(ctx, client.ContainerListOptions{
|
list, err := apiClient.ContainerList(ctx, client.ContainerListOptions{
|
||||||
All: true,
|
All: true,
|
||||||
Filters: make(client.Filters).Add("id", id),
|
Filters: make(client.Filters).Add("id", id),
|
||||||
})
|
})
|
||||||
assert.NilError(t, err)
|
assert.NilError(t, err)
|
||||||
assert.Assert(t, is.Len(containers, 1))
|
assert.Assert(t, is.Len(list.Items, 1))
|
||||||
assert.Equal(t, containers[0].ID, id)
|
assert.Equal(t, list.Items[0].ID, id)
|
||||||
assert.Check(t, is.DeepEqual(containers[0].HostConfig.Annotations, tc.expectedAnnotations))
|
assert.Check(t, is.DeepEqual(list.Items[0].HostConfig.Annotations, tc.expectedAnnotations))
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -101,22 +101,22 @@ func TestContainerList_Filter(t *testing.T) {
|
|||||||
|
|
||||||
t.Run("since", func(t *testing.T) {
|
t.Run("since", func(t *testing.T) {
|
||||||
ctx := testutil.StartSpan(ctx, t)
|
ctx := testutil.StartSpan(ctx, t)
|
||||||
results, err := apiClient.ContainerList(ctx, client.ContainerListOptions{
|
list, err := apiClient.ContainerList(ctx, client.ContainerListOptions{
|
||||||
All: true,
|
All: true,
|
||||||
Filters: make(client.Filters).Add("since", top),
|
Filters: make(client.Filters).Add("since", top),
|
||||||
})
|
})
|
||||||
assert.NilError(t, err)
|
assert.NilError(t, err)
|
||||||
assert.Check(t, is.Contains(containerIDs(results), next))
|
assert.Check(t, is.Contains(containerIDs(list.Items), next))
|
||||||
})
|
})
|
||||||
|
|
||||||
t.Run("before", func(t *testing.T) {
|
t.Run("before", func(t *testing.T) {
|
||||||
ctx := testutil.StartSpan(ctx, t)
|
ctx := testutil.StartSpan(ctx, t)
|
||||||
results, err := apiClient.ContainerList(ctx, client.ContainerListOptions{
|
list, err := apiClient.ContainerList(ctx, client.ContainerListOptions{
|
||||||
All: true,
|
All: true,
|
||||||
Filters: make(client.Filters).Add("before", top),
|
Filters: make(client.Filters).Add("before", top),
|
||||||
})
|
})
|
||||||
assert.NilError(t, err)
|
assert.NilError(t, err)
|
||||||
assert.Check(t, is.Contains(containerIDs(results), prev))
|
assert.Check(t, is.Contains(containerIDs(list.Items), prev))
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -132,13 +132,13 @@ func TestContainerList_ImageManifestPlatform(t *testing.T) {
|
|||||||
id := container.Create(ctx, t, apiClient)
|
id := container.Create(ctx, t, apiClient)
|
||||||
defer container.Remove(ctx, t, apiClient, id, client.ContainerRemoveOptions{Force: true})
|
defer container.Remove(ctx, t, apiClient, id, client.ContainerRemoveOptions{Force: true})
|
||||||
|
|
||||||
containers, err := apiClient.ContainerList(ctx, client.ContainerListOptions{
|
list, err := apiClient.ContainerList(ctx, client.ContainerListOptions{
|
||||||
All: true,
|
All: true,
|
||||||
})
|
})
|
||||||
assert.NilError(t, err)
|
assert.NilError(t, err)
|
||||||
assert.Assert(t, len(containers) > 0)
|
assert.Assert(t, len(list.Items) > 0)
|
||||||
|
|
||||||
ctr := containers[0]
|
ctr := list.Items[0]
|
||||||
if assert.Check(t, ctr.ImageManifestDescriptor != nil && ctr.ImageManifestDescriptor.Platform != nil) {
|
if assert.Check(t, ctr.ImageManifestDescriptor != nil && ctr.ImageManifestDescriptor.Platform != nil) {
|
||||||
// Check that at least OS and Architecture have a value. Other values
|
// Check that at least OS and Architecture have a value. Other values
|
||||||
// depend on the platform on which we're running the test.
|
// depend on the platform on which we're running the test.
|
||||||
@@ -149,7 +149,7 @@ func TestContainerList_ImageManifestPlatform(t *testing.T) {
|
|||||||
|
|
||||||
func pollForHealthStatusSummary(ctx context.Context, apiClient client.APIClient, containerID string, healthStatus containertypes.HealthStatus) func(log poll.LogT) poll.Result {
|
func pollForHealthStatusSummary(ctx context.Context, apiClient client.APIClient, containerID string, healthStatus containertypes.HealthStatus) func(log poll.LogT) poll.Result {
|
||||||
return func(log poll.LogT) poll.Result {
|
return func(log poll.LogT) poll.Result {
|
||||||
containers, err := apiClient.ContainerList(ctx, client.ContainerListOptions{
|
list, err := apiClient.ContainerList(ctx, client.ContainerListOptions{
|
||||||
All: true,
|
All: true,
|
||||||
Filters: make(client.Filters).Add("id", containerID),
|
Filters: make(client.Filters).Add("id", containerID),
|
||||||
})
|
})
|
||||||
@@ -158,7 +158,7 @@ func pollForHealthStatusSummary(ctx context.Context, apiClient client.APIClient,
|
|||||||
}
|
}
|
||||||
total := 0
|
total := 0
|
||||||
version := apiClient.ClientVersion()
|
version := apiClient.ClientVersion()
|
||||||
for _, ctr := range containers {
|
for _, ctr := range list.Items {
|
||||||
if ctr.Health == nil && versions.LessThan(version, "1.52") {
|
if ctr.Health == nil && versions.LessThan(version, "1.52") {
|
||||||
total++
|
total++
|
||||||
} else if ctr.Health != nil && ctr.Health.Status == healthStatus && versions.GreaterThanOrEqualTo(version, "1.52") {
|
} else if ctr.Health != nil && ctr.Health.Status == healthStatus && versions.GreaterThanOrEqualTo(version, "1.52") {
|
||||||
@@ -166,7 +166,7 @@ func pollForHealthStatusSummary(ctx context.Context, apiClient client.APIClient,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if total == len(containers) {
|
if total == len(list.Items) {
|
||||||
return poll.Success()
|
return poll.Success()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -176,10 +176,10 @@ func Remove(ctx context.Context, t *testing.T, apiClient client.APIClient, conta
|
|||||||
func RemoveAll(ctx context.Context, t *testing.T, apiClient client.APIClient) {
|
func RemoveAll(ctx context.Context, t *testing.T, apiClient client.APIClient) {
|
||||||
t.Helper()
|
t.Helper()
|
||||||
|
|
||||||
containers, err := apiClient.ContainerList(ctx, client.ContainerListOptions{All: true})
|
list, err := apiClient.ContainerList(ctx, client.ContainerListOptions{All: true})
|
||||||
assert.NilError(t, err)
|
assert.NilError(t, err)
|
||||||
|
|
||||||
for _, c := range containers {
|
for _, c := range list.Items {
|
||||||
Remove(ctx, t, apiClient, c.ID, client.ContainerRemoveOptions{Force: true})
|
Remove(ctx, t, apiClient, c.ID, client.ContainerRemoveOptions{Force: true})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -382,12 +382,12 @@ func createServices(ctx context.Context, t *testing.T, d *daemon.Daemon, section
|
|||||||
}
|
}
|
||||||
|
|
||||||
func pollService(ctx context.Context, t *testing.T, c *client.Client, host networking.Host) poll.Result {
|
func pollService(ctx context.Context, t *testing.T, c *client.Client, host networking.Host) poll.Result {
|
||||||
cl, err := c.ContainerList(ctx, client.ContainerListOptions{})
|
list, err := c.ContainerList(ctx, client.ContainerListOptions{})
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return poll.Error(fmt.Errorf("failed to list containers: %w", err))
|
return poll.Error(fmt.Errorf("failed to list containers: %w", err))
|
||||||
}
|
}
|
||||||
if len(cl) != 1 {
|
if len(list.Items) != 1 {
|
||||||
return poll.Continue("got %d containers, want 1", len(cl))
|
return poll.Continue("got %d containers, want 1", len(list.Items))
|
||||||
}
|
}
|
||||||
// The DOCKER-INGRESS chain seems to be created, then populated, a few
|
// The DOCKER-INGRESS chain seems to be created, then populated, a few
|
||||||
// milliseconds after the container starts. So, also wait for a conntrack
|
// milliseconds after the container starts. So, also wait for a conntrack
|
||||||
|
|||||||
@@ -89,12 +89,12 @@ func TestHostPortMappings(t *testing.T) {
|
|||||||
|
|
||||||
poll.WaitOn(t, swarm.RunningTasksCount(ctx, apiClient, svcID, 1), swarm.ServicePoll)
|
poll.WaitOn(t, swarm.RunningTasksCount(ctx, apiClient, svcID, 1), swarm.ServicePoll)
|
||||||
|
|
||||||
ctrs, err := apiClient.ContainerList(ctx, client.ContainerListOptions{})
|
list, err := apiClient.ContainerList(ctx, client.ContainerListOptions{})
|
||||||
assert.NilError(t, err)
|
assert.NilError(t, err)
|
||||||
assert.Equal(t, 1, len(ctrs))
|
assert.Equal(t, 1, len(list.Items))
|
||||||
|
|
||||||
var addrs []string
|
var addrs []string
|
||||||
for _, port := range ctrs[0].Ports {
|
for _, port := range list.Items[0].Ports {
|
||||||
addrs = append(addrs, fmt.Sprintf("%s:%d/%s", net.JoinHostPort(port.IP.String(), strconv.Itoa(int(port.PublicPort))), port.PrivatePort, port.Type))
|
addrs = append(addrs, fmt.Sprintf("%s:%d/%s", net.JoinHostPort(port.IP.String(), strconv.Itoa(int(port.PublicPort))), port.PrivatePort, port.Type))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -64,13 +64,13 @@ func testServiceCreateInit(ctx context.Context, daemonEnabled bool) func(t *test
|
|||||||
|
|
||||||
func inspectServiceContainer(ctx context.Context, t *testing.T, apiClient client.APIClient, serviceID string) container.InspectResponse {
|
func inspectServiceContainer(ctx context.Context, t *testing.T, apiClient client.APIClient, serviceID string) container.InspectResponse {
|
||||||
t.Helper()
|
t.Helper()
|
||||||
containers, err := apiClient.ContainerList(ctx, client.ContainerListOptions{
|
list, err := apiClient.ContainerList(ctx, client.ContainerListOptions{
|
||||||
Filters: make(client.Filters).Add("label", "com.docker.swarm.service.id="+serviceID),
|
Filters: make(client.Filters).Add("label", "com.docker.swarm.service.id="+serviceID),
|
||||||
})
|
})
|
||||||
assert.NilError(t, err)
|
assert.NilError(t, err)
|
||||||
assert.Check(t, is.Len(containers, 1))
|
assert.Check(t, is.Len(list.Items, 1))
|
||||||
|
|
||||||
inspect, err := apiClient.ContainerInspect(ctx, containers[0].ID, client.ContainerInspectOptions{})
|
inspect, err := apiClient.ContainerInspect(ctx, list.Items[0].ID, client.ContainerInspectOptions{})
|
||||||
assert.NilError(t, err)
|
assert.NilError(t, err)
|
||||||
return inspect.Container
|
return inspect.Container
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -14,11 +14,11 @@ func (d *Daemon) ActiveContainers(ctx context.Context, t testing.TB) []string {
|
|||||||
cli := d.NewClientT(t)
|
cli := d.NewClientT(t)
|
||||||
defer cli.Close()
|
defer cli.Close()
|
||||||
|
|
||||||
containers, err := cli.ContainerList(context.Background(), client.ContainerListOptions{})
|
list, err := cli.ContainerList(context.Background(), client.ContainerListOptions{})
|
||||||
assert.NilError(t, err)
|
assert.NilError(t, err)
|
||||||
|
|
||||||
ids := make([]string, len(containers))
|
ids := make([]string, len(list.Items))
|
||||||
for i, c := range containers {
|
for i, c := range list.Items {
|
||||||
ids[i] = c.ID
|
ids[i] = c.ID
|
||||||
}
|
}
|
||||||
return ids
|
return ids
|
||||||
|
|||||||
@@ -51,12 +51,12 @@ func unpauseAllContainers(ctx context.Context, t testing.TB, apiClient client.Co
|
|||||||
|
|
||||||
func getPausedContainers(ctx context.Context, t testing.TB, apiClient client.ContainerAPIClient) []container.Summary {
|
func getPausedContainers(ctx context.Context, t testing.TB, apiClient client.ContainerAPIClient) []container.Summary {
|
||||||
t.Helper()
|
t.Helper()
|
||||||
containers, err := apiClient.ContainerList(ctx, client.ContainerListOptions{
|
list, err := apiClient.ContainerList(ctx, client.ContainerListOptions{
|
||||||
Filters: make(client.Filters).Add("status", "paused"),
|
Filters: make(client.Filters).Add("status", "paused"),
|
||||||
All: true,
|
All: true,
|
||||||
})
|
})
|
||||||
assert.Check(t, err, "failed to list containers")
|
assert.Check(t, err, "failed to list containers")
|
||||||
return containers
|
return list.Items
|
||||||
}
|
}
|
||||||
|
|
||||||
func deleteAllContainers(ctx context.Context, t testing.TB, apiclient client.ContainerAPIClient, protectedContainers map[string]struct{}) {
|
func deleteAllContainers(ctx context.Context, t testing.TB, apiclient client.ContainerAPIClient, protectedContainers map[string]struct{}) {
|
||||||
@@ -85,11 +85,11 @@ func deleteAllContainers(ctx context.Context, t testing.TB, apiclient client.Con
|
|||||||
|
|
||||||
func getAllContainers(ctx context.Context, t testing.TB, apiClient client.ContainerAPIClient) []container.Summary {
|
func getAllContainers(ctx context.Context, t testing.TB, apiClient client.ContainerAPIClient) []container.Summary {
|
||||||
t.Helper()
|
t.Helper()
|
||||||
containers, err := apiClient.ContainerList(ctx, client.ContainerListOptions{
|
list, err := apiClient.ContainerList(ctx, client.ContainerListOptions{
|
||||||
All: true,
|
All: true,
|
||||||
})
|
})
|
||||||
assert.Check(t, err, "failed to list containers")
|
assert.Check(t, err, "failed to list containers")
|
||||||
return containers
|
return list.Items
|
||||||
}
|
}
|
||||||
|
|
||||||
func deleteAllImages(ctx context.Context, t testing.TB, apiclient client.ImageAPIClient, protectedImages map[string]struct{}) {
|
func deleteAllImages(ctx context.Context, t testing.TB, apiclient client.ImageAPIClient, protectedImages map[string]struct{}) {
|
||||||
|
|||||||
@@ -79,13 +79,13 @@ func ProtectContainers(ctx context.Context, t testing.TB, testEnv *Execution) {
|
|||||||
|
|
||||||
func getExistingContainers(ctx context.Context, t testing.TB, testEnv *Execution) []string {
|
func getExistingContainers(ctx context.Context, t testing.TB, testEnv *Execution) []string {
|
||||||
t.Helper()
|
t.Helper()
|
||||||
containerList, err := testEnv.APIClient().ContainerList(ctx, client.ContainerListOptions{
|
list, err := testEnv.APIClient().ContainerList(ctx, client.ContainerListOptions{
|
||||||
All: true,
|
All: true,
|
||||||
})
|
})
|
||||||
assert.NilError(t, err, "failed to list containers")
|
assert.NilError(t, err, "failed to list containers")
|
||||||
|
|
||||||
var containers []string
|
var containers []string
|
||||||
for _, container := range containerList {
|
for _, container := range list.Items {
|
||||||
containers = append(containers, container.ID)
|
containers = append(containers, container.ID)
|
||||||
}
|
}
|
||||||
return containers
|
return containers
|
||||||
|
|||||||
2
vendor/github.com/moby/moby/client/client_interfaces.go
generated
vendored
2
vendor/github.com/moby/moby/client/client_interfaces.go
generated
vendored
@@ -62,7 +62,7 @@ type ContainerAPIClient interface {
|
|||||||
ContainerExport(ctx context.Context, container string) (io.ReadCloser, error)
|
ContainerExport(ctx context.Context, container string) (io.ReadCloser, error)
|
||||||
ContainerInspect(ctx context.Context, container string, options ContainerInspectOptions) (ContainerInspectResult, error)
|
ContainerInspect(ctx context.Context, container string, options ContainerInspectOptions) (ContainerInspectResult, error)
|
||||||
ContainerKill(ctx context.Context, container string, options ContainerKillOptions) (ContainerKillResult, error)
|
ContainerKill(ctx context.Context, container string, options ContainerKillOptions) (ContainerKillResult, error)
|
||||||
ContainerList(ctx context.Context, options ContainerListOptions) ([]container.Summary, error)
|
ContainerList(ctx context.Context, options ContainerListOptions) (ContainerListResult, error)
|
||||||
ContainerLogs(ctx context.Context, container string, options ContainerLogsOptions) (io.ReadCloser, error)
|
ContainerLogs(ctx context.Context, container string, options ContainerLogsOptions) (io.ReadCloser, error)
|
||||||
ContainerPause(ctx context.Context, container string, options ContainerPauseOptions) (ContainerPauseResult, error)
|
ContainerPause(ctx context.Context, container string, options ContainerPauseOptions) (ContainerPauseResult, error)
|
||||||
ContainerRemove(ctx context.Context, container string, options ContainerRemoveOptions) (ContainerRemoveResult, error)
|
ContainerRemove(ctx context.Context, container string, options ContainerRemoveOptions) (ContainerRemoveResult, error)
|
||||||
|
|||||||
10
vendor/github.com/moby/moby/client/container_list.go
generated
vendored
10
vendor/github.com/moby/moby/client/container_list.go
generated
vendored
@@ -20,8 +20,12 @@ type ContainerListOptions struct {
|
|||||||
Filters Filters
|
Filters Filters
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type ContainerListResult struct {
|
||||||
|
Items []container.Summary
|
||||||
|
}
|
||||||
|
|
||||||
// ContainerList returns the list of containers in the docker host.
|
// ContainerList returns the list of containers in the docker host.
|
||||||
func (cli *Client) ContainerList(ctx context.Context, options ContainerListOptions) ([]container.Summary, error) {
|
func (cli *Client) ContainerList(ctx context.Context, options ContainerListOptions) (ContainerListResult, error) {
|
||||||
query := url.Values{}
|
query := url.Values{}
|
||||||
|
|
||||||
if options.All {
|
if options.All {
|
||||||
@@ -49,10 +53,10 @@ func (cli *Client) ContainerList(ctx context.Context, options ContainerListOptio
|
|||||||
resp, err := cli.get(ctx, "/containers/json", query, nil)
|
resp, err := cli.get(ctx, "/containers/json", query, nil)
|
||||||
defer ensureReaderClosed(resp)
|
defer ensureReaderClosed(resp)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return ContainerListResult{}, err
|
||||||
}
|
}
|
||||||
|
|
||||||
var containers []container.Summary
|
var containers []container.Summary
|
||||||
err = json.NewDecoder(resp.Body).Decode(&containers)
|
err = json.NewDecoder(resp.Body).Decode(&containers)
|
||||||
return containers, err
|
return ContainerListResult{Items: containers}, err
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user