fix support for service.mac_address

Signed-off-by: Nicolas De Loof <nicolas.deloof@gmail.com>
This commit is contained in:
Nicolas De Loof 2024-12-10 14:22:30 +01:00 committed by Nicolas De loof
parent e73c2303fb
commit fc566509d5
4 changed files with 47 additions and 33 deletions

View File

@ -545,23 +545,28 @@ func defaultNetworkSettings(
primaryNetworkKey = "default" primaryNetworkKey = "default"
} }
primaryNetworkMobyNetworkName := project.Networks[primaryNetworkKey].Name primaryNetworkMobyNetworkName := project.Networks[primaryNetworkKey].Name
endpointsConfig := map[string]*network.EndpointSettings{ primaryNetworkEndpoint := createEndpointSettings(project, service, serviceIndex, primaryNetworkKey, links, useNetworkAliases)
primaryNetworkMobyNetworkName: createEndpointSettings(project, service, serviceIndex, primaryNetworkKey, links, useNetworkAliases), endpointsConfig := map[string]*network.EndpointSettings{}
}
// Starting from API version 1.44, the Engine will take several EndpointsConfigs // Starting from API version 1.44, the Engine will take several EndpointsConfigs
// so we can pass all the extra networks we want the container to be connected to // so we can pass all the extra networks we want the container to be connected to
// in the network configuration instead of connecting the container to each extra // in the network configuration instead of connecting the container to each extra
// network individually after creation. // network individually after creation.
if versions.GreaterThanOrEqualTo(version, "1.44") && len(service.Networks) > 1 { if versions.GreaterThanOrEqualTo(version, "1.44") {
serviceNetworks := service.NetworksByPriority() if len(service.Networks) > 1 {
for _, networkKey := range serviceNetworks[1:] { serviceNetworks := service.NetworksByPriority()
mobyNetworkName := project.Networks[networkKey].Name for _, networkKey := range serviceNetworks[1:] {
epSettings := createEndpointSettings(project, service, serviceIndex, networkKey, links, useNetworkAliases) mobyNetworkName := project.Networks[networkKey].Name
endpointsConfig[mobyNetworkName] = epSettings epSettings := createEndpointSettings(project, service, serviceIndex, networkKey, links, useNetworkAliases)
endpointsConfig[mobyNetworkName] = epSettings
}
}
if primaryNetworkEndpoint.MacAddress == "" {
primaryNetworkEndpoint.MacAddress = service.MacAddress
} }
} }
endpointsConfig[primaryNetworkMobyNetworkName] = primaryNetworkEndpoint
networkConfig := &network.NetworkingConfig{ networkConfig := &network.NetworkingConfig{
EndpointsConfig: endpointsConfig, EndpointsConfig: endpointsConfig,
} }

View File

@ -278,33 +278,26 @@ func TestDefaultNetworkSettings(t *testing.T) {
} }
func TestCreateEndpointSettings(t *testing.T) { func TestCreateEndpointSettings(t *testing.T) {
eps := createEndpointSettings( eps := createEndpointSettings(&composetypes.Project{
&composetypes.Project{ Name: "projName",
Name: "projName", }, composetypes.ServiceConfig{
}, Name: "serviceName",
composetypes.ServiceConfig{ ContainerName: "containerName",
Name: "serviceName", Networks: map[string]*composetypes.ServiceNetworkConfig{
ContainerName: "containerName", "netName": {
Networks: map[string]*composetypes.ServiceNetworkConfig{ Priority: 100,
"netName": { Aliases: []string{"alias1", "alias2"},
Priority: 100, Ipv4Address: "10.16.17.18",
Aliases: []string{"alias1", "alias2"}, Ipv6Address: "fdb4:7a7f:373a:3f0c::42",
Ipv4Address: "10.16.17.18", LinkLocalIPs: []string{"169.254.10.20"},
Ipv6Address: "fdb4:7a7f:373a:3f0c::42", MacAddress: "10:00:00:00:01",
LinkLocalIPs: []string{"169.254.10.20"}, DriverOpts: composetypes.Options{
MacAddress: "10:00:00:00:01", "driverOpt1": "optval1",
DriverOpts: composetypes.Options{ "driverOpt2": "optval2",
"driverOpt1": "optval1",
"driverOpt2": "optval2",
},
}, },
}, },
}, },
0, // serviceIndex }, 0, "netName", []string{"link1", "link2"}, true)
"netName", // networkKey
[]string{"link1", "link2"}, // links
true, // useNetworkAliases
)
assert.Check(t, cmp.DeepEqual(eps, &network.EndpointSettings{ assert.Check(t, cmp.DeepEqual(eps, &network.EndpointSettings{
IPAMConfig: &network.EndpointIPAMConfig{ IPAMConfig: &network.EndpointIPAMConfig{
IPv4Address: "10.16.17.18", IPv4Address: "10.16.17.18",

View File

@ -0,0 +1,4 @@
services:
test:
image: nginx:alpine
mac_address: 00:e0:84:35:d0:e8

View File

@ -172,3 +172,15 @@ func TestNetworkConfigChanged(t *testing.T) {
res = c.RunDockerComposeCmd(t, "--project-name", projectName, "exec", "test", "hostname", "-i") res = c.RunDockerComposeCmd(t, "--project-name", projectName, "exec", "test", "hostname", "-i")
res.Assert(t, icmd.Expected{Out: "192.168.0."}) res.Assert(t, icmd.Expected{Out: "192.168.0."})
} }
func TestMacAddress(t *testing.T) {
c := NewCLI(t)
const projectName = "network_mac_address"
c.RunDockerComposeCmd(t, "-f", "./fixtures/network-test/mac_address.yaml", "--project-name", projectName, "up", "-d")
t.Cleanup(func() {
c.cleanupWithDown(t, projectName)
})
res := c.RunDockerCmd(t, "inspect", fmt.Sprintf("%s-test-1", projectName), "-f", "{{ (index .NetworkSettings.Networks \"network_mac_address_default\" ).MacAddress }}")
res.Assert(t, icmd.Expected{Out: "00:e0:84:35:d0:e8"})
}