Przeglądaj źródła

Reuse Create(Project) and Start(Project)

Signed-off-by: Guillaume Tardif <[email protected]>
Guillaume Tardif 4 lat temu
rodzic
commit
27dc2e5be1
2 zmienionych plików z 20 dodań i 28 usunięć
  1. 1 1
      local/compose/create.go
  2. 19 27
      local/compose/run.go

+ 1 - 1
local/compose/create.go

@@ -48,7 +48,7 @@ func (s *composeService) Create(ctx context.Context, project *types.Project) err
 		return err
 	}
 
-	if err := s.ensureProjectNetworks(ctx, project); err != nil {
+	if err := s.ensureProjectVolumes(ctx, project); err != nil {
 		return err
 	}
 

+ 19 - 27
local/compose/run.go

@@ -30,31 +30,36 @@ import (
 )
 
 func (s *composeService) CreateOneOffContainer(ctx context.Context, project *types.Project, opts compose.RunOptions) (string, error) {
-	service, err := project.GetService(opts.Name)
-	if err != nil {
-		return "", err
-	}
-	if err = s.ensureImagesExists(ctx, project); err != nil {
-		return "", err
-	}
-	if err := s.ensureProjectNetworks(ctx, project); err != nil {
-		return "", err
+	originalServices := project.Services
+	dependencies := []types.ServiceConfig{}
+	var requestedService types.ServiceConfig
+	for _, service := range originalServices {
+		if service.Name != opts.Name {
+			dependencies = append(dependencies, service)
+		} else {
+			requestedService = service
+		}
 	}
-	if err := s.ensureProjectVolumes(ctx, project); err != nil {
+	project.Services = types.Services(dependencies)
+	if err := s.Create(ctx, project); err != nil {
 		return "", err
 	}
-	if err = s.ensureRequiredServices(ctx, project, service); err != nil {
+	if err := s.Start(ctx, project, nil); err != nil {
 		return "", err
 	}
 
-	updateOneOffServiceConfig(&service, project.Name, opts)
+	project.Services = originalServices
+	updateOneOffServiceConfig(&requestedService, project.Name, opts)
 
-	err = s.createContainer(ctx, project, service, service.ContainerName, 1)
+	if err := s.waitDependencies(ctx, project, requestedService); err != nil {
+		return "", err
+	}
+	err := s.createContainer(ctx, project, requestedService, requestedService.ContainerName, 1)
 	if err != nil {
 		return "", err
 	}
 
-	return service.ContainerName, err
+	return requestedService.ContainerName, err
 }
 
 func (s *composeService) Run(ctx context.Context, container string, detach bool) error {
@@ -126,16 +131,3 @@ func updateOneOffServiceConfig(service *types.ServiceConfig, projectName string,
 	service.Tty = true
 	service.StdinOpen = true
 }
-
-func (s *composeService) ensureRequiredServices(ctx context.Context, project *types.Project, service types.ServiceConfig) error {
-	err := InDependencyOrder(ctx, project, func(c context.Context, svc types.ServiceConfig) error {
-		if svc.Name != service.Name { // only start dependencies, not service to run one-off
-			return s.ensureService(c, project, svc)
-		}
-		return nil
-	})
-	if err != nil {
-		return err
-	}
-	return s.Start(ctx, project, nil)
-}