diff --git a/aci/compose.go b/aci/compose.go index ab6f56c76..43c765cbb 100644 --- a/aci/compose.go +++ b/aci/compose.go @@ -124,19 +124,19 @@ func (cs *aciComposeService) Down(ctx context.Context, projectName string, optio return err } -func (cs *aciComposeService) Ps(ctx context.Context, project string) ([]compose.ContainerSummary, error) { +func (cs *aciComposeService) Ps(ctx context.Context, projectName string, options compose.PsOptions) ([]compose.ContainerSummary, error) { groupsClient, err := login.NewContainerGroupsClient(cs.ctx.SubscriptionID) if err != nil { return nil, err } - group, err := groupsClient.Get(ctx, cs.ctx.ResourceGroup, project) + group, err := groupsClient.Get(ctx, cs.ctx.ResourceGroup, projectName) if err != nil { return nil, err } if group.Containers == nil || len(*group.Containers) == 0 { - return nil, fmt.Errorf("no containers found in ACI container group %s", project) + return nil, fmt.Errorf("no containers found in ACI container group %s", projectName) } res := []compose.ContainerSummary{} @@ -158,7 +158,7 @@ func (cs *aciComposeService) Ps(ctx context.Context, project string) ([]compose. res = append(res, compose.ContainerSummary{ ID: id, Name: id, - Project: project, + Project: projectName, Service: *container.Name, State: convert.GetStatus(container, group), Publishers: publishers, diff --git a/api/client/compose.go b/api/client/compose.go index df0ee7d23..16198c47f 100644 --- a/api/client/compose.go +++ b/api/client/compose.go @@ -64,7 +64,7 @@ func (c *composeService) Logs(context.Context, string, compose.LogConsumer, comp return errdefs.ErrNotImplemented } -func (c *composeService) Ps(context.Context, string) ([]compose.ContainerSummary, error) { +func (c *composeService) Ps(context.Context, string, compose.PsOptions) ([]compose.ContainerSummary, error) { return nil, errdefs.ErrNotImplemented } diff --git a/api/compose/api.go b/api/compose/api.go index acb3d00ff..c504d14fd 100644 --- a/api/compose/api.go +++ b/api/compose/api.go @@ -44,7 +44,7 @@ type Service interface { // Logs executes the equivalent to a `compose logs` Logs(ctx context.Context, projectName string, consumer LogConsumer, options LogOptions) error // Ps executes the equivalent to a `compose ps` - Ps(ctx context.Context, projectName string) ([]ContainerSummary, error) + Ps(ctx context.Context, projectName string, options PsOptions) ([]ContainerSummary, error) // List executes the equivalent to a `docker stack ls` List(ctx context.Context) ([]Stack, error) // Convert translate compose model into backend's native format @@ -91,6 +91,11 @@ type RunOptions struct { Reader io.Reader } +// PsOptions group options of the Ps API +type PsOptions struct { + All bool +} + // PortPublisher hold status about published port type PortPublisher struct { URL string diff --git a/cli/cmd/compose/ps.go b/cli/cmd/compose/ps.go index 7252ddb65..8837d5862 100644 --- a/cli/cmd/compose/ps.go +++ b/cli/cmd/compose/ps.go @@ -27,12 +27,14 @@ import ( "github.com/spf13/cobra" "github.com/docker/compose-cli/api/client" + "github.com/docker/compose-cli/api/compose" "github.com/docker/compose-cli/cli/formatter" ) type psOptions struct { *projectOptions Format string + All bool Quiet bool } @@ -49,6 +51,7 @@ func psCommand(p *projectOptions) *cobra.Command { } psCmd.Flags().StringVar(&opts.Format, "format", "pretty", "Format the output. Values: [pretty | json].") psCmd.Flags().BoolVarP(&opts.Quiet, "quiet", "q", false, "Only display IDs") + psCmd.Flags().BoolVarP(&opts.All, "all", "a", false, "Show all stopped containers (including those created by the run command)") return psCmd } @@ -62,7 +65,9 @@ func runPs(ctx context.Context, opts psOptions) error { if err != nil { return err } - containers, err := c.ComposeService().Ps(ctx, projectName) + containers, err := c.ComposeService().Ps(ctx, projectName, compose.PsOptions{ + All: opts.All, + }) if err != nil { return err } diff --git a/cli/server/proxy/compose.go b/cli/server/proxy/compose.go index 43939549e..0fac7cc9d 100644 --- a/cli/server/proxy/compose.go +++ b/cli/server/proxy/compose.go @@ -59,7 +59,7 @@ func (p *proxy) Services(ctx context.Context, request *composev1.ComposeServices projectName = project.Name } response := []*composev1.Service{} - _, err := Client(ctx).ComposeService().Ps(ctx, projectName) + _, err := Client(ctx).ComposeService().Ps(ctx, projectName, compose.PsOptions{}) if err != nil { return nil, err } diff --git a/ecs/local/compose.go b/ecs/local/compose.go index 62451e09c..a7bfd747e 100644 --- a/ecs/local/compose.go +++ b/ecs/local/compose.go @@ -162,8 +162,8 @@ func (e ecsLocalSimulation) Logs(ctx context.Context, projectName string, consum return e.compose.Logs(ctx, projectName, consumer, options) } -func (e ecsLocalSimulation) Ps(ctx context.Context, projectName string) ([]compose.ContainerSummary, error) { - return e.compose.Ps(ctx, projectName) +func (e ecsLocalSimulation) Ps(ctx context.Context, projectName string, options compose.PsOptions) ([]compose.ContainerSummary, error) { + return e.compose.Ps(ctx, projectName, options) } func (e ecsLocalSimulation) List(ctx context.Context) ([]compose.Stack, error) { return e.compose.List(ctx) diff --git a/ecs/ps.go b/ecs/ps.go index a1c4ea7b6..4b9572225 100644 --- a/ecs/ps.go +++ b/ecs/ps.go @@ -22,12 +22,12 @@ import ( "github.com/docker/compose-cli/api/compose" ) -func (b *ecsAPIService) Ps(ctx context.Context, project string) ([]compose.ContainerSummary, error) { - cluster, err := b.aws.GetStackClusterID(ctx, project) +func (b *ecsAPIService) Ps(ctx context.Context, projectName string, options compose.PsOptions) ([]compose.ContainerSummary, error) { + cluster, err := b.aws.GetStackClusterID(ctx, projectName) if err != nil { return nil, err } - servicesARN, err := b.aws.ListStackServices(ctx, project) + servicesARN, err := b.aws.ListStackServices(ctx, projectName) if err != nil { return nil, err } @@ -43,7 +43,7 @@ func (b *ecsAPIService) Ps(ctx context.Context, project string) ([]compose.Conta return nil, err } - tasks, err := b.aws.DescribeServiceTasks(ctx, cluster, project, service.Name) + tasks, err := b.aws.DescribeServiceTasks(ctx, cluster, projectName, service.Name) if err != nil { return nil, err } diff --git a/kube/compose.go b/kube/compose.go index 3cfd32e37..22b80ada9 100644 --- a/kube/compose.go +++ b/kube/compose.go @@ -94,7 +94,7 @@ func (s *composeService) Logs(ctx context.Context, projectName string, consumer } // Ps executes the equivalent to a `compose ps` -func (s *composeService) Ps(ctx context.Context, projectName string) ([]compose.ContainerSummary, error) { +func (s *composeService) Ps(ctx context.Context, projectName string, options compose.PsOptions) ([]compose.ContainerSummary, error) { return nil, errdefs.ErrNotImplemented } diff --git a/local/compose/ps.go b/local/compose/ps.go index 9dfcdd7eb..87d1218c4 100644 --- a/local/compose/ps.go +++ b/local/compose/ps.go @@ -27,11 +27,12 @@ import ( "github.com/docker/compose-cli/api/compose" ) -func (s *composeService) Ps(ctx context.Context, projectName string) ([]compose.ContainerSummary, error) { +func (s *composeService) Ps(ctx context.Context, projectName string, options compose.PsOptions) ([]compose.ContainerSummary, error) { containers, err := s.apiClient.ContainerList(ctx, moby.ContainerListOptions{ Filters: filters.NewArgs( projectFilter(projectName), ), + All: options.All, }) if err != nil { return nil, err