Skip to content
This repository was archived by the owner on Nov 27, 2023. It is now read-only.

Commit f80e90c

Browse files
authored
Merge pull request #529 from docker/api
Revisit compose API so it uses compose-go Project as parameter
2 parents 92a0c60 + edb30e7 commit f80e90c

File tree

15 files changed

+87
-126
lines changed

15 files changed

+87
-126
lines changed

aci/backend.go

+7-23
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,6 @@ import (
2727
"github.com/Azure/azure-sdk-for-go/services/containerinstance/mgmt/2018-10-01/containerinstance"
2828
"github.com/Azure/go-autorest/autorest"
2929
"github.com/Azure/go-autorest/autorest/to"
30-
"github.com/compose-spec/compose-go/cli"
3130
"github.com/compose-spec/compose-go/types"
3231
"github.com/pkg/errors"
3332
"github.com/sirupsen/logrus"
@@ -386,11 +385,7 @@ type aciComposeService struct {
386385
ctx store.AciContext
387386
}
388387

389-
func (cs *aciComposeService) Up(ctx context.Context, opts *cli.ProjectOptions) error {
390-
project, err := cli.ProjectFromOptions(opts)
391-
if err != nil {
392-
return err
393-
}
388+
func (cs *aciComposeService) Up(ctx context.Context, project *types.Project) error {
394389
logrus.Debugf("Up on project with name %q\n", project.Name)
395390
groupDefinition, err := convert.ToContainerGroup(ctx, cs.ctx, *project)
396391
addTag(&groupDefinition, composeContainerTag)
@@ -401,21 +396,10 @@ func (cs *aciComposeService) Up(ctx context.Context, opts *cli.ProjectOptions) e
401396
return createOrUpdateACIContainers(ctx, cs.ctx, groupDefinition)
402397
}
403398

404-
func (cs *aciComposeService) Down(ctx context.Context, opts *cli.ProjectOptions) error {
405-
var project types.Project
406-
407-
if opts.Name != "" {
408-
project = types.Project{Name: opts.Name}
409-
} else {
410-
fullProject, err := cli.ProjectFromOptions(opts)
411-
if err != nil {
412-
return err
413-
}
414-
project = *fullProject
415-
}
416-
logrus.Debugf("Down on project with name %q\n", project.Name)
399+
func (cs *aciComposeService) Down(ctx context.Context, project string) error {
400+
logrus.Debugf("Down on project with name %q\n", project)
417401

418-
cg, err := deleteACIContainerGroup(ctx, cs.ctx, project.Name)
402+
cg, err := deleteACIContainerGroup(ctx, cs.ctx, project)
419403
if err != nil {
420404
return err
421405
}
@@ -426,15 +410,15 @@ func (cs *aciComposeService) Down(ctx context.Context, opts *cli.ProjectOptions)
426410
return err
427411
}
428412

429-
func (cs *aciComposeService) Ps(ctx context.Context, opts *cli.ProjectOptions) ([]compose.ServiceStatus, error) {
413+
func (cs *aciComposeService) Ps(ctx context.Context, project string) ([]compose.ServiceStatus, error) {
430414
return nil, errdefs.ErrNotImplemented
431415
}
432416

433-
func (cs *aciComposeService) Logs(ctx context.Context, opts *cli.ProjectOptions, w io.Writer) error {
417+
func (cs *aciComposeService) Logs(ctx context.Context, project string, w io.Writer) error {
434418
return errdefs.ErrNotImplemented
435419
}
436420

437-
func (cs *aciComposeService) Convert(ctx context.Context, opts *cli.ProjectOptions) ([]byte, error) {
421+
func (cs *aciComposeService) Convert(ctx context.Context, project *types.Project) ([]byte, error) {
438422
return nil, errdefs.ErrNotImplemented
439423
}
440424

cli/cmd/compose/compose.go

+17
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,23 @@ type composeOptions struct {
3434
Environment []string
3535
}
3636

37+
func (o *composeOptions) toProjectName() (string, error) {
38+
if o.Name != "" {
39+
return o.Name, nil
40+
}
41+
42+
options, err := o.toProjectOptions()
43+
if err != nil {
44+
return "", err
45+
}
46+
47+
project, err := cli.ProjectFromOptions(options)
48+
if err != nil {
49+
return "", err
50+
}
51+
return project.Name, nil
52+
}
53+
3754
func (o *composeOptions) toProjectOptions() (*cli.ProjectOptions, error) {
3855
return cli.NewProjectOptions(o.ConfigPaths,
3956
cli.WithOsEnv,

cli/cmd/compose/convert.go

+15-7
Original file line numberDiff line numberDiff line change
@@ -32,27 +32,35 @@ func convertCommand() *cobra.Command {
3232
Use: "convert",
3333
Short: "Converts the compose file to a cloud format (default: cloudformation)",
3434
RunE: func(cmd *cobra.Command, args []string) error {
35-
options, err := opts.toProjectOptions()
36-
if err != nil {
37-
return err
38-
}
39-
return runConvert(cmd.Context(), options)
35+
return runConvert(cmd.Context(), opts)
4036
},
4137
}
4238
convertCmd.Flags().StringVarP(&opts.Name, "project-name", "p", "", "Project name")
4339
convertCmd.Flags().StringVar(&opts.WorkingDir, "workdir", "", "Work dir")
4440
convertCmd.Flags().StringArrayVarP(&opts.ConfigPaths, "file", "f", []string{}, "Compose configuration files")
41+
convertCmd.Flags().StringArrayVarP(&opts.Environment, "environment", "e", []string{}, "Environment variables")
4542

4643
return convertCmd
4744
}
4845

49-
func runConvert(ctx context.Context, opts *cli.ProjectOptions) error {
46+
func runConvert(ctx context.Context, opts composeOptions) error {
5047
var json []byte
5148
c, err := client.New(ctx)
5249
if err != nil {
5350
return err
5451
}
55-
json, err = c.ComposeService().Convert(ctx, opts)
52+
53+
options, err := opts.toProjectOptions()
54+
if err != nil {
55+
return err
56+
}
57+
58+
project, err := cli.ProjectFromOptions(options)
59+
if err != nil {
60+
return err
61+
}
62+
63+
json, err = c.ComposeService().Convert(ctx, project)
5664
if err != nil {
5765
return err
5866
}

cli/cmd/compose/down.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -47,10 +47,10 @@ func runDown(ctx context.Context, opts composeOptions) error {
4747
}
4848

4949
return progress.Run(ctx, func(ctx context.Context) error {
50-
options, err := opts.toProjectOptions()
50+
projectName, err := opts.toProjectName()
5151
if err != nil {
5252
return err
5353
}
54-
return c.ComposeService().Down(ctx, options)
54+
return c.ComposeService().Down(ctx, projectName)
5555
})
5656
}

cli/cmd/compose/logs.go

+2-2
Original file line numberDiff line numberDiff line change
@@ -46,9 +46,9 @@ func runLogs(ctx context.Context, opts composeOptions) error {
4646
return err
4747
}
4848

49-
options, err := opts.toProjectOptions()
49+
projectName, err := opts.toProjectName()
5050
if err != nil {
5151
return err
5252
}
53-
return c.ComposeService().Logs(ctx, options, os.Stdout)
53+
return c.ComposeService().Logs(ctx, projectName, os.Stdout)
5454
}

cli/cmd/compose/ps.go

+3-2
Original file line numberDiff line numberDiff line change
@@ -50,14 +50,15 @@ func runPs(ctx context.Context, opts composeOptions) error {
5050
return err
5151
}
5252

53-
options, err := opts.toProjectOptions()
53+
projectName, err := opts.toProjectName()
5454
if err != nil {
5555
return err
5656
}
57-
serviceList, err := c.ComposeService().Ps(ctx, options)
57+
serviceList, err := c.ComposeService().Ps(ctx, projectName)
5858
if err != nil {
5959
return err
6060
}
61+
6162
err = printSection(os.Stdout, func(w io.Writer) {
6263
for _, service := range serviceList {
6364
fmt.Fprintf(w, "%s\t%s\t%d/%d\t%s\n", service.ID, service.Name, service.Replicas, service.Desired, strings.Join(service.Ports, ", "))

cli/cmd/compose/up.go

+8-1
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ package compose
1919
import (
2020
"context"
2121

22+
"github.com/compose-spec/compose-go/cli"
23+
2224
"github.com/spf13/cobra"
2325

2426
"github.com/docker/compose-cli/client"
@@ -53,6 +55,11 @@ func runUp(ctx context.Context, opts composeOptions) error {
5355
if err != nil {
5456
return err
5557
}
56-
return c.ComposeService().Up(ctx, options)
58+
project, err := cli.ProjectFromOptions(options)
59+
if err != nil {
60+
return err
61+
}
62+
63+
return c.ComposeService().Up(ctx, project)
5764
})
5865
}

client/compose.go

+6-6
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ import (
2020
"context"
2121
"io"
2222

23-
"github.com/compose-spec/compose-go/cli"
23+
"github.com/compose-spec/compose-go/types"
2424

2525
"github.com/docker/compose-cli/compose"
2626
"github.com/docker/compose-cli/errdefs"
@@ -30,26 +30,26 @@ type composeService struct {
3030
}
3131

3232
// Up executes the equivalent to a `compose up`
33-
func (c *composeService) Up(context.Context, *cli.ProjectOptions) error {
33+
func (c *composeService) Up(context.Context, *types.Project) error {
3434
return errdefs.ErrNotImplemented
3535
}
3636

3737
// Down executes the equivalent to a `compose down`
38-
func (c *composeService) Down(context.Context, *cli.ProjectOptions) error {
38+
func (c *composeService) Down(context.Context, string) error {
3939
return errdefs.ErrNotImplemented
4040
}
4141

4242
// Logs executes the equivalent to a `compose logs`
43-
func (c *composeService) Logs(context.Context, *cli.ProjectOptions, io.Writer) error {
43+
func (c *composeService) Logs(context.Context, string, io.Writer) error {
4444
return errdefs.ErrNotImplemented
4545
}
4646

4747
// Ps executes the equivalent to a `compose ps`
48-
func (c *composeService) Ps(context.Context, *cli.ProjectOptions) ([]compose.ServiceStatus, error) {
48+
func (c *composeService) Ps(context.Context, string) ([]compose.ServiceStatus, error) {
4949
return nil, errdefs.ErrNotImplemented
5050
}
5151

5252
// Convert translate compose model into backend's native format
53-
func (c *composeService) Convert(context.Context, *cli.ProjectOptions) ([]byte, error) {
53+
func (c *composeService) Convert(context.Context, *types.Project) ([]byte, error) {
5454
return nil, errdefs.ErrNotImplemented
5555
}

compose/api.go

+6-6
Original file line numberDiff line numberDiff line change
@@ -20,21 +20,21 @@ import (
2020
"context"
2121
"io"
2222

23-
"github.com/compose-spec/compose-go/cli"
23+
"github.com/compose-spec/compose-go/types"
2424
)
2525

2626
// Service manages a compose project
2727
type Service interface {
2828
// Up executes the equivalent to a `compose up`
29-
Up(ctx context.Context, opts *cli.ProjectOptions) error
29+
Up(ctx context.Context, project *types.Project) error
3030
// Down executes the equivalent to a `compose down`
31-
Down(ctx context.Context, opts *cli.ProjectOptions) error
31+
Down(ctx context.Context, projectName string) error
3232
// Logs executes the equivalent to a `compose logs`
33-
Logs(ctx context.Context, opts *cli.ProjectOptions, w io.Writer) error
33+
Logs(ctx context.Context, projectName string, w io.Writer) error
3434
// Ps executes the equivalent to a `compose ps`
35-
Ps(ctx context.Context, opts *cli.ProjectOptions) ([]ServiceStatus, error)
35+
Ps(ctx context.Context, projectName string) ([]ServiceStatus, error)
3636
// Convert translate compose model into backend's native format
37-
Convert(ctx context.Context, opts *cli.ProjectOptions) ([]byte, error)
37+
Convert(ctx context.Context, project *types.Project) ([]byte, error)
3838
}
3939

4040
// PortPublisher hold status about published port

ecs/cloudformation.go

+1-7
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,6 @@ import (
2323
"regexp"
2424
"strings"
2525

26-
"github.com/compose-spec/compose-go/cli"
27-
2826
"github.com/docker/compose-cli/compose"
2927

3028
ecsapi "github.com/aws/aws-sdk-go/service/ecs"
@@ -53,11 +51,7 @@ const (
5351
parameterLoadBalancerARN = "ParameterLoadBalancerARN"
5452
)
5553

56-
func (b *ecsAPIService) Convert(ctx context.Context, opts *cli.ProjectOptions) ([]byte, error) {
57-
project, err := cli.ProjectFromOptions(opts)
58-
if err != nil {
59-
return nil, err
60-
}
54+
func (b *ecsAPIService) Convert(ctx context.Context, project *types.Project) ([]byte, error) {
6155
template, err := b.convert(project)
6256
if err != nil {
6357
return nil, err

ecs/down.go

+3-22
Original file line numberDiff line numberDiff line change
@@ -18,31 +18,12 @@ package ecs
1818

1919
import (
2020
"context"
21-
22-
"github.com/compose-spec/compose-go/cli"
2321
)
2422

25-
func (b *ecsAPIService) Down(ctx context.Context, options *cli.ProjectOptions) error {
26-
name, err := b.projectName(options)
27-
if err != nil {
28-
return err
29-
}
30-
31-
err = b.SDK.DeleteStack(ctx, name)
23+
func (b *ecsAPIService) Down(ctx context.Context, project string) error {
24+
err := b.SDK.DeleteStack(ctx, project)
3225
if err != nil {
3326
return err
3427
}
35-
return b.WaitStackCompletion(ctx, name, stackDelete)
36-
}
37-
38-
func (b *ecsAPIService) projectName(options *cli.ProjectOptions) (string, error) {
39-
name := options.Name
40-
if name == "" {
41-
project, err := cli.ProjectFromOptions(options)
42-
if err != nil {
43-
return "", err
44-
}
45-
name = project.Name
46-
}
47-
return name, nil
28+
return b.WaitStackCompletion(ctx, project, stackDelete)
4829
}

ecs/list.go

+3-9
Original file line numberDiff line numberDiff line change
@@ -22,22 +22,16 @@ import (
2222
"strings"
2323

2424
"github.com/docker/compose-cli/compose"
25-
26-
"github.com/compose-spec/compose-go/cli"
2725
)
2826

29-
func (b *ecsAPIService) Ps(ctx context.Context, options *cli.ProjectOptions) ([]compose.ServiceStatus, error) {
30-
projectName, err := b.projectName(options)
31-
if err != nil {
32-
return nil, err
33-
}
34-
parameters, err := b.SDK.ListStackParameters(ctx, projectName)
27+
func (b *ecsAPIService) Ps(ctx context.Context, project string) ([]compose.ServiceStatus, error) {
28+
parameters, err := b.SDK.ListStackParameters(ctx, project)
3529
if err != nil {
3630
return nil, err
3731
}
3832
cluster := parameters[parameterClusterName]
3933

40-
resources, err := b.SDK.ListStackResources(ctx, projectName)
34+
resources, err := b.SDK.ListStackResources(ctx, project)
4135
if err != nil {
4236
return nil, err
4337
}

ecs/logs.go

+3-14
Original file line numberDiff line numberDiff line change
@@ -23,26 +23,15 @@ import (
2323
"io"
2424
"strconv"
2525
"strings"
26-
27-
"github.com/compose-spec/compose-go/cli"
2826
)
2927

30-
func (b *ecsAPIService) Logs(ctx context.Context, options *cli.ProjectOptions, writer io.Writer) error {
31-
name := options.Name
32-
if name == "" {
33-
project, err := cli.ProjectFromOptions(options)
34-
if err != nil {
35-
return err
36-
}
37-
name = project.Name
38-
}
39-
28+
func (b *ecsAPIService) Logs(ctx context.Context, project string, w io.Writer) error {
4029
consumer := logConsumer{
4130
colors: map[string]colorFunc{},
4231
width: 0,
43-
writer: writer,
32+
writer: w,
4433
}
45-
err := b.SDK.GetLogs(ctx, name, consumer.Log)
34+
err := b.SDK.GetLogs(ctx, project, consumer.Log)
4635
return err
4736
}
4837

0 commit comments

Comments
 (0)