Skip to content

Commit c046561

Browse files
committed
check service existence in project
Signed-off-by: Mehrad Dadar <[email protected]>
1 parent 32d44df commit c046561

File tree

5 files changed

+26
-7
lines changed

5 files changed

+26
-7
lines changed

pkg/compose/compose.go

Lines changed: 13 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ import (
2424
"strings"
2525

2626
"github.com/docker/compose/v2/pkg/api"
27+
"github.com/pkg/errors"
2728

2829
"github.com/compose-spec/compose-go/types"
2930
"github.com/docker/cli/cli/config/configfile"
@@ -94,12 +95,12 @@ func escapeDollarSign(marshal []byte) []byte {
9495
}
9596

9697
// projectFromName builds a types.Project based on actual resources with compose labels set
97-
func (s *composeService) projectFromName(containers Containers, projectName string) *types.Project {
98+
func (s *composeService) projectFromName(containers Containers, projectName string, services ...string) (*types.Project, error) {
9899
project := &types.Project{
99100
Name: projectName,
100101
}
101102
if len(containers) == 0 {
102-
return project
103+
return project, nil
103104
}
104105
set := map[string]types.ServiceConfig{}
105106
for _, c := range containers {
@@ -130,6 +131,15 @@ func (s *composeService) projectFromName(containers Containers, projectName stri
130131
}
131132
project.Services = append(project.Services, service)
132133
}
134+
SERVICES:
135+
for _, qs := range services {
136+
for _, es := range project.Services {
137+
if es.Name == qs {
138+
continue SERVICES
139+
}
140+
}
141+
return project, errors.New("no such service: " + qs)
142+
}
133143

134-
return project
144+
return project, nil
135145
}

pkg/compose/down.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -235,7 +235,7 @@ func (s *composeService) removeContainers(ctx context.Context, w progress.Writer
235235

236236
func (s *composeService) getProjectWithVolumes(ctx context.Context, containers Containers, projectName string) (*types.Project, error) {
237237
containers = containers.filter(isNotOneOff)
238-
project := s.projectFromName(containers, projectName)
238+
project, _ := s.projectFromName(containers, projectName)
239239
volumes, err := s.apiClient.VolumeList(ctx, filters.NewArgs(projectFilter(projectName)))
240240
if err != nil {
241241
return nil, err

pkg/compose/restart.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,10 @@ func (s *composeService) restart(ctx context.Context, projectName string, option
3939
return err
4040
}
4141

42-
project := s.projectFromName(observedState, projectName)
42+
project, err := s.projectFromName(observedState, projectName, options.Services...)
43+
if err != nil {
44+
return err
45+
}
4346

4447
if len(options.Services) == 0 {
4548
options.Services = project.ServiceNames()

pkg/compose/start.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,10 @@ func (s *composeService) start(ctx context.Context, projectName string, options
4141
return err
4242
}
4343

44-
project := s.projectFromName(containers, projectName)
44+
project, err := s.projectFromName(containers, projectName, options.AttachTo...)
45+
if err != nil {
46+
return err
47+
}
4548

4649
eg, ctx := errgroup.WithContext(ctx)
4750
if listener != nil {

pkg/compose/stop.go

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,10 @@ func (s *composeService) stop(ctx context.Context, projectName string, options a
4343
return err
4444
}
4545

46-
project := s.projectFromName(containers, projectName)
46+
project, err := s.projectFromName(containers, projectName, services...)
47+
if err != nil {
48+
return err
49+
}
4750

4851
return InReverseDependencyOrder(ctx, project, func(c context.Context, service string) error {
4952
return s.stopContainers(ctx, w, containers.filter(isService(service)), options.Timeout)

0 commit comments

Comments
 (0)