From 3d758b7f26210fbc2a7d2e7221db1c9367e2c19c Mon Sep 17 00:00:00 2001 From: Guillaume Tardif Date: Wed, 12 Aug 2020 11:59:36 +0200 Subject: [PATCH] =?UTF-8?q?Implement=20`docker=20ps=20=E2=80=94all`=20filt?= =?UTF-8?q?er=20on=20ACI?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- aci/backend.go | 35 +++++++++++++++++++---------------- tests/aci-e2e/e2e-aci_test.go | 12 ++++++++++++ 2 files changed, 31 insertions(+), 16 deletions(-) diff --git a/aci/backend.go b/aci/backend.go index 08de31886..67aedcc95 100644 --- a/aci/backend.go +++ b/aci/backend.go @@ -131,7 +131,7 @@ type aciContainerService struct { ctx store.AciContext } -func (cs *aciContainerService) List(ctx context.Context, _ bool) ([]containers.Container, error) { +func (cs *aciContainerService) List(ctx context.Context, all bool) ([]containers.Container, error) { groupsClient, err := getContainerGroupsClient(cs.ctx.SubscriptionID) if err != nil { return nil, err @@ -156,36 +156,31 @@ func (cs *aciContainerService) List(ctx context.Context, _ bool) ([]containers.C return []containers.Container{}, err } - if _, ok := group.Tags[singleContainerTag]; ok { - if group.Containers == nil || len(*group.Containers) < 1 { - return []containers.Container{}, fmt.Errorf("no containers found in ACI container group %s", *containerGroup.Name) - } - container := (*group.Containers)[0] - c := getContainer(*containerGroup.Name, group.IPAddress, container) - res = append(res, c) - continue + if group.Containers == nil || len(*group.Containers) < 1 { + return []containers.Container{}, fmt.Errorf("no containers found in ACI container group %s", *containerGroup.Name) } for _, container := range *group.Containers { - var containerID string // don't list sidecar container if *container.Name == convert.ComposeDNSSidecarName { continue } - containerID = *containerGroup.Name + composeContainerSeparator + *container.Name + if !all && getStatus(container) != statusRunning { + continue + } + containerID := *containerGroup.Name + composeContainerSeparator + *container.Name + if _, ok := group.Tags[singleContainerTag]; ok { + containerID = *containerGroup.Name + } c := getContainer(containerID, group.IPAddress, container) res = append(res, c) } } - return res, nil } func getContainer(containerID string, ipAddress *containerinstance.IPAddress, container containerinstance.Container) containers.Container { - status := statusUnknown - if container.InstanceView != nil && container.InstanceView.CurrentState != nil { - status = *container.InstanceView.CurrentState.State - } + status := getStatus(container) return containers.Container{ ID: containerID, Image: *container.Image, @@ -194,6 +189,14 @@ func getContainer(containerID string, ipAddress *containerinstance.IPAddress, co } } +func getStatus(container containerinstance.Container) string { + status := statusUnknown + if container.InstanceView != nil && container.InstanceView.CurrentState != nil { + status = *container.InstanceView.CurrentState.State + } + return status +} + func (cs *aciContainerService) Run(ctx context.Context, r containers.ContainerConfig) error { if strings.Contains(r.ID, composeContainerSeparator) { return errors.New(fmt.Sprintf("invalid container name. ACI container name cannot include %q", composeContainerSeparator)) diff --git a/tests/aci-e2e/e2e-aci_test.go b/tests/aci-e2e/e2e-aci_test.go index b3a8baa95..9dbdab4d9 100644 --- a/tests/aci-e2e/e2e-aci_test.go +++ b/tests/aci-e2e/e2e-aci_test.go @@ -373,6 +373,18 @@ func TestContainerRunAttached(t *testing.T) { res.Assert(t, icmd.Expected{Out: container}) }) + t.Run("ps stopped container with --all", func(t *testing.T) { + res := c.RunDockerCmd("ps", container) + res.Assert(t, icmd.Success) + out := strings.Split(strings.TrimSpace(res.Stdout()), "\n") + assert.Assert(t, is.Len(out, 1)) + + res = c.RunDockerCmd("ps", "--all", container) + res.Assert(t, icmd.Success) + out = strings.Split(strings.TrimSpace(res.Stdout()), "\n") + assert.Assert(t, is.Len(out, 2)) + }) + t.Run("rm stopped container", func(t *testing.T) { res := c.RunDockerCmd("rm", container) res.Assert(t, icmd.Expected{Out: container})