Reuse Create(Project) and Start(Project)

Signed-off-by: Guillaume Tardif <guillaume.tardif@gmail.com>
This commit is contained in:
Guillaume Tardif 2020-12-16 11:57:58 +01:00
parent 1e6c4263cb
commit 27dc2e5be1
2 changed files with 21 additions and 29 deletions

View File

@ -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
}

View File

@ -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 {
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
}
}
project.Services = types.Services(dependencies)
if err := s.Create(ctx, project); err != nil {
return "", err
}
if err = s.ensureImagesExists(ctx, project); err != nil {
return "", err
}
if err := s.ensureProjectNetworks(ctx, project); err != nil {
return "", err
}
if err := s.ensureProjectVolumes(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)
}