From 59a7b2580f40f0a7d0334057c24fdb141014828d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Derzsi=20D=C3=A1niel?= Date: Thu, 21 Nov 2024 20:37:35 +0200 Subject: [PATCH 1/2] Enable IPv6 on compose networks where enable_ipv6 is true MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Derzsi Dániel --- pkg/composer/up_network.go | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/pkg/composer/up_network.go b/pkg/composer/up_network.go index a68b63c0f71..891046d6dfc 100644 --- a/pkg/composer/up_network.go +++ b/pkg/composer/up_network.go @@ -36,7 +36,7 @@ func (c *Composer) upNetwork(ctx context.Context, shortName string) error { return nil } - if unknown := reflectutil.UnknownNonEmptyFields(&net, "Name", "Ipam", "Driver", "DriverOpts"); len(unknown) > 0 { + if unknown := reflectutil.UnknownNonEmptyFields(&net, "Name", "Ipam", "Driver", "DriverOpts", "EnableIPv6"); len(unknown) > 0 { log.G(ctx).Warnf("Ignoring: network %s: %+v", shortName, unknown) } @@ -83,6 +83,10 @@ func (c *Composer) upNetwork(ctx context.Context, shortName string) error { } } + if *net.EnableIPv6 { + createArgs = append(createArgs, "--ipv6") + } + createArgs = append(createArgs, fullName) if c.DebugPrintFull { From 8b50f595919453e2ced241bca8ca266f41f2518a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Derzsi=20D=C3=A1niel?= Date: Thu, 21 Nov 2024 20:37:57 +0200 Subject: [PATCH 2/2] Add compose tests for enable_ipv6 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Derzsi Dániel --- cmd/nerdctl/compose/compose_up_linux_test.go | 72 ++++++++++++++++++++ 1 file changed, 72 insertions(+) diff --git a/cmd/nerdctl/compose/compose_up_linux_test.go b/cmd/nerdctl/compose/compose_up_linux_test.go index 6dbd6b7cf34..9e293936309 100644 --- a/cmd/nerdctl/compose/compose_up_linux_test.go +++ b/cmd/nerdctl/compose/compose_up_linux_test.go @@ -579,3 +579,75 @@ services: } c.Assert(expected) } + +func TestComposeUpWithIPv6(t *testing.T) { + base := testutil.NewBaseWithIPv6Compatible(t) + + subnet := "2001:aaa::/64" + var dockerComposeYAML = fmt.Sprintf(` +services: + svc0: + image: %s + networks: + - net0 +networks: + net0: + enable_ipv6: true + ipam: + config: + - subnet: %s`, testutil.CommonImage, subnet) + + comp := testutil.NewComposeDir(t, dockerComposeYAML) + defer comp.CleanUp() + projectName := comp.ProjectName() + t.Logf("projectName=%q", projectName) + base.ComposeCmd("-f", comp.YAMLFullPath(), "up", "-d").AssertOK() + defer base.ComposeCmd("-f", comp.YAMLFullPath(), "down", "-v").Run() + + inspectCmd := base.Cmd("network", "inspect", projectName+"_net0", "--format", "\"{{range .IPAM.Config}}{{.Subnet}} {{end}}\"") + result := inspectCmd.Run() + stdoutContent := result.Stdout() + result.Stderr() + assert.Assert(inspectCmd.Base.T, result.ExitCode == 0, stdoutContent) + + if !strings.Contains(stdoutContent, subnet) { + log.L.Errorf("test failed, the actual subnets are %s", stdoutContent) + t.Fail() + return + } +} + +func TestComposeUpWithIPv6Disabled(t *testing.T) { + base := testutil.NewBaseWithIPv6Compatible(t) + + subnet := "2001:aab::/64" + var dockerComposeYAML = fmt.Sprintf(` +services: + svc0: + image: %s + networks: + - net0 +networks: + net0: + enable_ipv6: false + ipam: + config: + - subnet: %s`, testutil.CommonImage, subnet) + + comp := testutil.NewComposeDir(t, dockerComposeYAML) + defer comp.CleanUp() + projectName := comp.ProjectName() + t.Logf("projectName=%q", projectName) + base.ComposeCmd("-f", comp.YAMLFullPath(), "up", "-d").AssertOK() + defer base.ComposeCmd("-f", comp.YAMLFullPath(), "down", "-v").Run() + + inspectCmd := base.Cmd("network", "inspect", projectName+"_net0", "--format", "\"{{range .IPAM.Config}}{{.Subnet}} {{end}}\"") + result := inspectCmd.Run() + stdoutContent := result.Stdout() + result.Stderr() + assert.Assert(inspectCmd.Base.T, result.ExitCode == 0, stdoutContent) + + if strings.Contains(stdoutContent, subnet) { + log.L.Errorf("test failed, the actual subnets are %s", stdoutContent) + t.Fail() + return + } +}