Skip to content

Commit a483639

Browse files
committed
Set NetworkMode correctly according to network priorities
Signed-off-by: Laura Brehm <[email protected]>
1 parent bfd7428 commit a483639

File tree

2 files changed

+80
-17
lines changed

2 files changed

+80
-17
lines changed

pkg/compose/create.go

Lines changed: 9 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -445,14 +445,16 @@ func (s *composeService) prepareLabels(p *types.Project, service types.ServiceCo
445445
}
446446

447447
func getDefaultNetworkMode(project *types.Project, service types.ServiceConfig) string {
448-
mode := "none"
449-
if len(project.Networks) > 0 {
450-
for name := range getNetworksForService(service) {
451-
mode = project.Networks[name].Name
452-
break
453-
}
448+
if len(project.Networks) == 0 {
449+
return "none"
454450
}
455-
return mode
451+
452+
if len(service.Networks) > 0 {
453+
name := service.NetworksByPriority()[0]
454+
return project.Networks[name].Name
455+
}
456+
457+
return project.Networks["default"].Name
456458
}
457459

458460
func getRestartPolicy(service types.ServiceConfig) container.RestartPolicy {
@@ -1013,16 +1015,6 @@ func getAliases(s types.ServiceConfig, c *types.ServiceNetworkConfig) []string {
10131015
return aliases
10141016
}
10151017

1016-
func getNetworksForService(s types.ServiceConfig) map[string]*types.ServiceNetworkConfig {
1017-
if len(s.Networks) > 0 {
1018-
return s.Networks
1019-
}
1020-
if s.NetworkMode != "" {
1021-
return nil
1022-
}
1023-
return map[string]*types.ServiceNetworkConfig{"default": nil}
1024-
}
1025-
10261018
func (s *composeService) ensureNetwork(ctx context.Context, n types.NetworkConfig) error {
10271019
_, err := s.apiClient.NetworkInspect(ctx, n.Name, moby.NetworkInspectOptions{})
10281020
if err != nil {

pkg/compose/create_test.go

Lines changed: 71 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -151,3 +151,74 @@ func TestGetBindMode(t *testing.T) {
151151
assert.Equal(t, getBindMode(&composetypes.ServiceVolumeBind{SELinux: composetypes.SELinuxShared}, true), "ro,z")
152152
assert.Equal(t, getBindMode(&composetypes.ServiceVolumeBind{SELinux: composetypes.SELinuxPrivate}, true), "ro,Z")
153153
}
154+
155+
func TestGetDefaultNetworkMode(t *testing.T) {
156+
t.Run("returns the network with the highest priority when service has multiple networks", func(t *testing.T) {
157+
service := composetypes.ServiceConfig{
158+
Name: "myService",
159+
Networks: map[string]*composetypes.ServiceNetworkConfig{
160+
"myNetwork1": {
161+
Priority: 10,
162+
},
163+
"myNetwork2": {
164+
Priority: 1000,
165+
},
166+
},
167+
}
168+
project := composetypes.Project{
169+
Name: "myProject",
170+
Services: []composetypes.ServiceConfig{
171+
service,
172+
},
173+
Networks: composetypes.Networks(map[string]composetypes.NetworkConfig{
174+
"myNetwork1": {
175+
Name: "myProject_myNetwork1",
176+
},
177+
"myNetwork2": {
178+
Name: "myProject_myNetwork2",
179+
},
180+
}),
181+
}
182+
183+
assert.Equal(t, getDefaultNetworkMode(&project, service), "myProject_myNetwork2")
184+
})
185+
186+
t.Run("returns default network when service has no networks", func(t *testing.T) {
187+
service := composetypes.ServiceConfig{
188+
Name: "myService",
189+
}
190+
project := composetypes.Project{
191+
Name: "myProject",
192+
Services: []composetypes.ServiceConfig{
193+
service,
194+
},
195+
Networks: composetypes.Networks(map[string]composetypes.NetworkConfig{
196+
"myNetwork1": {
197+
Name: "myProject_myNetwork1",
198+
},
199+
"myNetwork2": {
200+
Name: "myProject_myNetwork2",
201+
},
202+
"default": {
203+
Name: "myProject_default",
204+
},
205+
}),
206+
}
207+
208+
assert.Equal(t, getDefaultNetworkMode(&project, service), "myProject_default")
209+
})
210+
211+
t.Run("returns none if project has no networks", func(t *testing.T) {
212+
service := composetypes.ServiceConfig{
213+
Name: "myService",
214+
}
215+
project := composetypes.Project{
216+
Name: "myProject",
217+
Services: []composetypes.ServiceConfig{
218+
service,
219+
},
220+
}
221+
222+
assert.Equal(t, getDefaultNetworkMode(&project, service), "none")
223+
})
224+
}

0 commit comments

Comments
 (0)