Просмотр исходного кода

introduce `Convert` in compose API

Signed-off-by: Nicolas De Loof <[email protected]>
Nicolas De Loof 5 лет назад
Родитель
Сommit
91427d0492
6 измененных файлов с 28 добавлено и 4 удалено
  1. 4 0
      aci/backend.go
  2. 2 0
      compose/api.go
  3. 16 2
      ecs/cloudformation.go
  4. 1 1
      ecs/convert.go
  5. 1 1
      ecs/up.go
  6. 4 0
      example/backend.go

+ 4 - 0
aci/backend.go

@@ -451,6 +451,10 @@ func (cs *aciComposeService) Logs(ctx context.Context, opts *cli.ProjectOptions,
 	return errdefs.ErrNotImplemented
 }
 
+func Convert(ctx context.Context, opts *cli.ProjectOptions) ([]byte, error) {
+	return nil, errdefs.ErrNotImplemented
+}
+
 type aciCloudService struct {
 	loginService login.AzureLoginServiceAPI
 }

+ 2 - 0
compose/api.go

@@ -33,6 +33,8 @@ type Service interface {
 	Logs(ctx context.Context, opts *cli.ProjectOptions, w io.Writer) error
 	// Ps executes the equivalent to a `compose ps`
 	Ps(ctx context.Context, opts *cli.ProjectOptions) ([]ServiceStatus, error)
+	// Convert translate compose model into backend's native format
+	Convert(ctx context.Context, opts *cli.ProjectOptions) ([]byte, error)
 }
 
 

+ 16 - 2
ecs/cloudformation.go

@@ -1,7 +1,9 @@
 package ecs
 
 import (
+	"context"
 	"fmt"
+	"github.com/compose-spec/compose-go/cli"
 	"github.com/docker/api/compose"
 	"io/ioutil"
 	"regexp"
@@ -33,8 +35,20 @@ const (
 	ParameterLoadBalancerARN = "ParameterLoadBalancerARN"
 )
 
+func (b *ecsAPIService) Convert(ctx context.Context, opts *cli.ProjectOptions) ([]byte, error) {
+	project, err := cli.ProjectFromOptions(opts)
+	if err != nil {
+		return nil, err
+	}
+	template, err := b.convert(project)
+	if err != nil {
+		return nil, err
+	}
+	return Marshall(template)
+}
+
 // Convert a compose project into a CloudFormation template
-func (b ecsAPIService) Convert(project *types.Project) (*cloudformation.Template, error) {
+func (b *ecsAPIService) convert(project *types.Project) (*cloudformation.Template, error) {
 	var checker compatibility.Checker = &FargateCompatibilityChecker{
 		compatibility.AllowList{
 			Supported: compatibleComposeAttributes,
@@ -128,7 +142,7 @@ func (b ecsAPIService) Convert(project *types.Project) (*cloudformation.Template
 
 	for _, service := range project.Services {
 
-		definition, err := Convert(project, service)
+		definition, err := convert(project, service)
 		if err != nil {
 			return nil, err
 		}

+ 1 - 1
ecs/convert.go

@@ -23,7 +23,7 @@ import (
 
 const secretsInitContainerImage = "docker/ecs-secrets-sidecar"
 
-func Convert(project *types.Project, service types.ServiceConfig) (*ecs.TaskDefinition, error) {
+func convert(project *types.Project, service types.ServiceConfig) (*ecs.TaskDefinition, error) {
 	cpu, mem, err := toLimits(service)
 	if err != nil {
 		return nil, err

+ 1 - 1
ecs/up.go

@@ -27,7 +27,7 @@ func (b *ecsAPIService) Up(ctx context.Context, options *cli.ProjectOptions) err
 		return err
 	}
 
-	template, err := b.Convert(project)
+	template, err := b.convert(project)
 	if err != nil {
 		return err
 	}

+ 4 - 0
example/backend.go

@@ -142,3 +142,7 @@ func (cs *composeService) Ps(ctx context.Context, opts *cli.ProjectOptions) ([]c
 func (cs *composeService) Logs(ctx context.Context, opts *cli.ProjectOptions, w io.Writer) error {
 	return errdefs.ErrNotImplemented
 }
+
+func Convert(ctx context.Context, opts *cli.ProjectOptions) ([]byte, error) {
+	return nil, errdefs.ErrNotImplemented
+}