From 536bece4a31deab4940f469c0a7157c03a19e487 Mon Sep 17 00:00:00 2001 From: Nicolas De Loof Date: Fri, 10 Sep 2021 11:57:44 +0200 Subject: [PATCH 1/2] `container:xx` are not constrained to containers managed by compose Signed-off-by: Nicolas De Loof --- loader/validate.go | 7 ------- loader/validate_test.go | 18 ------------------ types/project.go | 18 ------------------ 3 files changed, 43 deletions(-) diff --git a/loader/validate.go b/loader/validate.go index 28ecfa70..4493c051 100644 --- a/loader/validate.go +++ b/loader/validate.go @@ -45,13 +45,6 @@ func checkConsistency(project *types.Project) error { } } - if strings.HasPrefix(s.NetworkMode, types.ContainerPrefix) { - containerName := s.NetworkMode[len(types.ContainerPrefix):] - if _, err := project.GetByContainerName(containerName); err != nil { - return fmt.Errorf("service with container_name %q not found for network_mode 'container:%s'", containerName, containerName) - } - } - for _, volume := range s.Volumes { switch volume.Type { case types.VolumeTypeVolume: diff --git a/loader/validate_test.go b/loader/validate_test.go index 3e9f2959..15a6f340 100644 --- a/loader/validate_test.go +++ b/loader/validate_test.go @@ -138,22 +138,4 @@ func TestValidateNetworkMode(t *testing.T) { err := checkConsistency(project) assert.NilError(t, err) }) - - t.Run("network_mode container fail", func(t *testing.T) { - project := &types.Project{ - Services: types.Services([]types.ServiceConfig{ - { - Name: "myservice1", - Image: "scratch", - }, - { - Name: "myservice2", - Image: "scratch", - NetworkMode: "container:nonexistentcontainer", - }, - }), - } - err := checkConsistency(project) - assert.Error(t, err, `service with container_name "nonexistentcontainer" not found for network_mode 'container:nonexistentcontainer'`) - }) } diff --git a/types/project.go b/types/project.go index e8558ecd..155fad0b 100644 --- a/types/project.go +++ b/types/project.go @@ -94,24 +94,6 @@ func (p Project) ConfigNames() []string { return names } -func (p Project) GetByContainerName(names ...string) (Services, error) { - if len(names) == 0 { - return p.Services, nil - } - services := Services{} -outLoop: - for _, name := range names { - for _, s := range p.Services { - if name == s.ContainerName { - services = append(services, s) - continue outLoop - } - } - return nil, fmt.Errorf("service with container_name %q could not be found", name) - } - return services, nil -} - // GetServices retrieve services by names, or return all services if no name specified func (p Project) GetServices(names ...string) (Services, error) { if len(names) == 0 { From 971af55b3d7aff1265b56bfaeb18bf548683af4b Mon Sep 17 00:00:00 2001 From: Nicolas De Loof Date: Fri, 10 Sep 2021 12:05:22 +0200 Subject: [PATCH 2/2] fix test flackyness caused by unordered ports Signed-off-by: Nicolas De Loof --- loader/merge.go | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/loader/merge.go b/loader/merge.go index bac9dd70..07ccdb06 100644 --- a/loader/merge.go +++ b/loader/merge.go @@ -203,7 +203,18 @@ func toServicePortConfigsSlice(dst reflect.Value, m map[interface{}]interface{}) for _, v := range m { s = append(s, v.(types.ServicePortConfig)) } - sort.Slice(s, func(i, j int) bool { return s[i].Published < s[j].Published }) + sort.Slice(s, func(i, j int) bool { + if s[i].Target != s[j].Target { + return s[i].Target < s[j].Target + } + if s[i].Published != s[j].Published { + return s[i].Published < s[j].Published + } + if s[i].HostIP != s[j].HostIP { + return s[i].HostIP < s[j].HostIP + } + return s[i].Protocol < s[j].Protocol + }) dst.Set(reflect.ValueOf(s)) return nil }