mirror of
https://github.com/docker/compose.git
synced 2025-07-23 21:54:40 +02:00
Add warning on container_name and scale > 1
Signed-off-by: Ulysses Souza <ulyssessouza@gmail.com>
This commit is contained in:
parent
8976a20698
commit
b264e1814b
@ -47,31 +47,18 @@ func containerExists(ctx context.Context, c *client.Client, name string) bool {
|
|||||||
return err == nil && container.ContainerJSONBase != nil && container.Name == "/"+name
|
return err == nil && container.ContainerJSONBase != nil && container.Name == "/"+name
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *composeService) ensureService(ctx context.Context, observedState Containers, project *types.Project, service types.ServiceConfig) error {
|
func (s *composeService) ensureScale(ctx context.Context, actual []moby.Container, scale int, project *types.Project, service types.ServiceConfig) (*errgroup.Group, []moby.Container, error) {
|
||||||
scale := getScale(service)
|
|
||||||
actual := observedState.filter(isService(service.Name))
|
|
||||||
if scale > 1 && service.ContainerName != "" {
|
|
||||||
return fmt.Errorf(doubledContainerNameWarning,
|
|
||||||
service.Name,
|
|
||||||
service.ContainerName)
|
|
||||||
}
|
|
||||||
|
|
||||||
eg, _ := errgroup.WithContext(ctx)
|
eg, _ := errgroup.WithContext(ctx)
|
||||||
if len(actual) < scale {
|
if len(actual) < scale {
|
||||||
next, err := nextContainerNumber(actual)
|
next, err := nextContainerNumber(actual)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return nil, actual, err
|
||||||
}
|
}
|
||||||
missing := scale - len(actual)
|
missing := scale - len(actual)
|
||||||
for i := 0; i < missing; i++ {
|
for i := 0; i < missing; i++ {
|
||||||
number := next + i
|
number := next + i
|
||||||
name := getContainerLogPrefix(project.Name, service, number)
|
name := getContainerLogPrefix(project.Name, service, number)
|
||||||
eg.Go(func() error {
|
eg.Go(func() error {
|
||||||
if containerExists(ctx, s.apiClient, name) {
|
|
||||||
return fmt.Errorf(doubledContainerNameWarning,
|
|
||||||
service.Name,
|
|
||||||
name)
|
|
||||||
}
|
|
||||||
return s.createContainer(ctx, project, service, name, number, false)
|
return s.createContainer(ctx, project, service, name, number, false)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
@ -90,6 +77,30 @@ func (s *composeService) ensureService(ctx context.Context, observedState Contai
|
|||||||
}
|
}
|
||||||
actual = actual[:scale]
|
actual = actual[:scale]
|
||||||
}
|
}
|
||||||
|
return eg, actual, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (s *composeService) ensureService(ctx context.Context, observedState Containers, project *types.Project, service types.ServiceConfig) error {
|
||||||
|
actual, err := s.apiClient.ContainerList(ctx, moby.ContainerListOptions{
|
||||||
|
Filters: filters.NewArgs(
|
||||||
|
projectFilter(project.Name),
|
||||||
|
serviceFilter(service.Name),
|
||||||
|
),
|
||||||
|
All: true,
|
||||||
|
})
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
scale, err := getScale(service)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
|
eg, actual, err := s.ensureScale(ctx, actual, scale, project, service)
|
||||||
|
if err != nil {
|
||||||
|
return err
|
||||||
|
}
|
||||||
|
|
||||||
expected, err := jsonHash(service)
|
expected, err := jsonHash(service)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
@ -171,17 +182,30 @@ func nextContainerNumber(containers []moby.Container) (int, error) {
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
func getScale(config types.ServiceConfig) int {
|
func getScale(config types.ServiceConfig) (int, error) {
|
||||||
|
scale := 1
|
||||||
|
var err error
|
||||||
if config.Deploy != nil && config.Deploy.Replicas != nil {
|
if config.Deploy != nil && config.Deploy.Replicas != nil {
|
||||||
return int(*config.Deploy.Replicas)
|
scale = int(*config.Deploy.Replicas)
|
||||||
}
|
}
|
||||||
if config.Scale != 0 {
|
if config.Scale != 0 {
|
||||||
return config.Scale
|
scale = config.Scale
|
||||||
}
|
}
|
||||||
return 1
|
if scale > 1 && config.ContainerName != "" {
|
||||||
|
scale = -1
|
||||||
|
err = fmt.Errorf(doubledContainerNameWarning,
|
||||||
|
config.Name,
|
||||||
|
config.ContainerName)
|
||||||
|
}
|
||||||
|
return scale, err
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *composeService) createContainer(ctx context.Context, project *types.Project, service types.ServiceConfig, name string, number int, autoRemove bool) error {
|
func (s *composeService) createContainer(ctx context.Context, project *types.Project, service types.ServiceConfig, name string, number int, autoRemove bool) error {
|
||||||
|
if containerExists(ctx, s.apiClient, name) {
|
||||||
|
return fmt.Errorf(doubledContainerNameWarning,
|
||||||
|
service.Name,
|
||||||
|
name)
|
||||||
|
}
|
||||||
w := progress.ContextWriter(ctx)
|
w := progress.ContextWriter(ctx)
|
||||||
w.Event(progress.CreatingEvent(name))
|
w.Event(progress.CreatingEvent(name))
|
||||||
err := s.createMobyContainer(ctx, project, service, name, number, nil, autoRemove)
|
err := s.createMobyContainer(ctx, project, service, name, number, nil, autoRemove)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user