Skip to content

Commit fc56650

Browse files
committed
fix support for service.mac_address
Signed-off-by: Nicolas De Loof <[email protected]>
1 parent e73c230 commit fc56650

File tree

4 files changed

+47
-33
lines changed

4 files changed

+47
-33
lines changed

pkg/compose/create.go

+14-9
Original file line numberDiff line numberDiff line change
@@ -545,23 +545,28 @@ func defaultNetworkSettings(
545545
primaryNetworkKey = "default"
546546
}
547547
primaryNetworkMobyNetworkName := project.Networks[primaryNetworkKey].Name
548-
endpointsConfig := map[string]*network.EndpointSettings{
549-
primaryNetworkMobyNetworkName: createEndpointSettings(project, service, serviceIndex, primaryNetworkKey, links, useNetworkAliases),
550-
}
548+
primaryNetworkEndpoint := createEndpointSettings(project, service, serviceIndex, primaryNetworkKey, links, useNetworkAliases)
549+
endpointsConfig := map[string]*network.EndpointSettings{}
551550

552551
// Starting from API version 1.44, the Engine will take several EndpointsConfigs
553552
// so we can pass all the extra networks we want the container to be connected to
554553
// in the network configuration instead of connecting the container to each extra
555554
// network individually after creation.
556-
if versions.GreaterThanOrEqualTo(version, "1.44") && len(service.Networks) > 1 {
557-
serviceNetworks := service.NetworksByPriority()
558-
for _, networkKey := range serviceNetworks[1:] {
559-
mobyNetworkName := project.Networks[networkKey].Name
560-
epSettings := createEndpointSettings(project, service, serviceIndex, networkKey, links, useNetworkAliases)
561-
endpointsConfig[mobyNetworkName] = epSettings
555+
if versions.GreaterThanOrEqualTo(version, "1.44") {
556+
if len(service.Networks) > 1 {
557+
serviceNetworks := service.NetworksByPriority()
558+
for _, networkKey := range serviceNetworks[1:] {
559+
mobyNetworkName := project.Networks[networkKey].Name
560+
epSettings := createEndpointSettings(project, service, serviceIndex, networkKey, links, useNetworkAliases)
561+
endpointsConfig[mobyNetworkName] = epSettings
562+
}
563+
}
564+
if primaryNetworkEndpoint.MacAddress == "" {
565+
primaryNetworkEndpoint.MacAddress = service.MacAddress
562566
}
563567
}
564568

569+
endpointsConfig[primaryNetworkMobyNetworkName] = primaryNetworkEndpoint
565570
networkConfig := &network.NetworkingConfig{
566571
EndpointsConfig: endpointsConfig,
567572
}

pkg/compose/create_test.go

+17-24
Original file line numberDiff line numberDiff line change
@@ -278,33 +278,26 @@ func TestDefaultNetworkSettings(t *testing.T) {
278278
}
279279

280280
func TestCreateEndpointSettings(t *testing.T) {
281-
eps := createEndpointSettings(
282-
&composetypes.Project{
283-
Name: "projName",
284-
},
285-
composetypes.ServiceConfig{
286-
Name: "serviceName",
287-
ContainerName: "containerName",
288-
Networks: map[string]*composetypes.ServiceNetworkConfig{
289-
"netName": {
290-
Priority: 100,
291-
Aliases: []string{"alias1", "alias2"},
292-
Ipv4Address: "10.16.17.18",
293-
Ipv6Address: "fdb4:7a7f:373a:3f0c::42",
294-
LinkLocalIPs: []string{"169.254.10.20"},
295-
MacAddress: "10:00:00:00:01",
296-
DriverOpts: composetypes.Options{
297-
"driverOpt1": "optval1",
298-
"driverOpt2": "optval2",
299-
},
281+
eps := createEndpointSettings(&composetypes.Project{
282+
Name: "projName",
283+
}, composetypes.ServiceConfig{
284+
Name: "serviceName",
285+
ContainerName: "containerName",
286+
Networks: map[string]*composetypes.ServiceNetworkConfig{
287+
"netName": {
288+
Priority: 100,
289+
Aliases: []string{"alias1", "alias2"},
290+
Ipv4Address: "10.16.17.18",
291+
Ipv6Address: "fdb4:7a7f:373a:3f0c::42",
292+
LinkLocalIPs: []string{"169.254.10.20"},
293+
MacAddress: "10:00:00:00:01",
294+
DriverOpts: composetypes.Options{
295+
"driverOpt1": "optval1",
296+
"driverOpt2": "optval2",
300297
},
301298
},
302299
},
303-
0, // serviceIndex
304-
"netName", // networkKey
305-
[]string{"link1", "link2"}, // links
306-
true, // useNetworkAliases
307-
)
300+
}, 0, "netName", []string{"link1", "link2"}, true)
308301
assert.Check(t, cmp.DeepEqual(eps, &network.EndpointSettings{
309302
IPAMConfig: &network.EndpointIPAMConfig{
310303
IPv4Address: "10.16.17.18",
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
services:
2+
test:
3+
image: nginx:alpine
4+
mac_address: 00:e0:84:35:d0:e8

pkg/e2e/networks_test.go

+12
Original file line numberDiff line numberDiff line change
@@ -172,3 +172,15 @@ func TestNetworkConfigChanged(t *testing.T) {
172172
res = c.RunDockerComposeCmd(t, "--project-name", projectName, "exec", "test", "hostname", "-i")
173173
res.Assert(t, icmd.Expected{Out: "192.168.0."})
174174
}
175+
176+
func TestMacAddress(t *testing.T) {
177+
c := NewCLI(t)
178+
const projectName = "network_mac_address"
179+
c.RunDockerComposeCmd(t, "-f", "./fixtures/network-test/mac_address.yaml", "--project-name", projectName, "up", "-d")
180+
t.Cleanup(func() {
181+
c.cleanupWithDown(t, projectName)
182+
})
183+
res := c.RunDockerCmd(t, "inspect", fmt.Sprintf("%s-test-1", projectName), "-f", "{{ (index .NetworkSettings.Networks \"network_mac_address_default\" ).MacAddress }}")
184+
res.Assert(t, icmd.Expected{Out: "00:e0:84:35:d0:e8"})
185+
186+
}

0 commit comments

Comments
 (0)