From 2ac891bdc05edf950a014c4be6ff4723a6fd2db7 Mon Sep 17 00:00:00 2001 From: Paul Johnston Date: Fri, 9 Jun 2023 12:52:19 -0700 Subject: [PATCH 1/3] 'Overlay' conflist generator for CNS --- cns/cniconflist/generator.go | 13 ++++++++ cns/cniconflist/generator_linux.go | 31 +++++++++++++++++-- cns/cniconflist/generator_linux_test.go | 15 +++++++++ cns/cniconflist/generator_windows.go | 4 +++ .../azure-linux-swift-overlay.conflist | 3 +- cns/service/main.go | 3 ++ 6 files changed, 65 insertions(+), 4 deletions(-) diff --git a/cns/cniconflist/generator.go b/cns/cniconflist/generator.go index 6bbe1744db..240f4f5b7d 100644 --- a/cns/cniconflist/generator.go +++ b/cns/cniconflist/generator.go @@ -53,6 +53,11 @@ type DualStackOverlayGenerator struct { Writer io.WriteCloser } +// OverlayGenerator generates the Azure CNI conflist for all Overlay scenarios +type OverlayGenerator struct { + Writer io.WriteCloser +} + // CiliumGenerator generates the Azure CNI conflist for the Cilium scenario type CiliumGenerator struct { Writer io.WriteCloser @@ -74,6 +79,14 @@ func (v *DualStackOverlayGenerator) Close() error { return nil } +func (v *OverlayGenerator) Close() error { + if err := v.Writer.Close(); err != nil { + return errors.Wrap(err, "error closing generator") + } + + return nil +} + func (v *CiliumGenerator) Close() error { if err := v.Writer.Close(); err != nil { return errors.Wrap(err, "error closing generator") diff --git a/cns/cniconflist/generator_linux.go b/cns/cniconflist/generator_linux.go index a91288352e..1752f89783 100644 --- a/cns/cniconflist/generator_linux.go +++ b/cns/cniconflist/generator_linux.go @@ -32,11 +32,10 @@ func (v *V4OverlayGenerator) Generate() error { cni.NetworkConfig{ Type: overlaycniType, Mode: cninet.OpModeTransparent, - ExecutionMode: string(util.V4Swift), IPsToRouteViaHost: []string{nodeLocalDNSIP}, IPAM: cni.IPAM{ Type: network.AzureCNS, - Mode: string(util.V4Overlay), + Mode: string(util.Overlay), }, }, portmapConfig, @@ -80,6 +79,34 @@ func (v *DualStackOverlayGenerator) Generate() error { return nil } +// Generate writes the CNI conflist to the Generator's output stream +func (v *OverlayGenerator) Generate() error { + conflist := cniConflist{ + CNIVersion: overlaycniVersion, + Name: overlaycniName, + Plugins: []any{ + cni.NetworkConfig{ + Type: overlaycniType, + Mode: cninet.OpModeTransparent, + IPsToRouteViaHost: []string{nodeLocalDNSIP}, + IPAM: cni.IPAM{ + Type: network.AzureCNS, + Mode: string(util.Overlay), + }, + }, + portmapConfig, + }, + } + + enc := json.NewEncoder(v.Writer) + enc.SetIndent("", "\t") + if err := enc.Encode(conflist); err != nil { + return errors.Wrap(err, "error encoding conflist to json") + } + + return nil +} + // Generate writes the CNI conflist to the Generator's output stream func (v *CiliumGenerator) Generate() error { conflist := cniConflist{ diff --git a/cns/cniconflist/generator_linux_test.go b/cns/cniconflist/generator_linux_test.go index fcf9d68cb8..4d3c7ec87d 100644 --- a/cns/cniconflist/generator_linux_test.go +++ b/cns/cniconflist/generator_linux_test.go @@ -47,6 +47,21 @@ func TestGenerateDualStackOverlayConflist(t *testing.T) { assert.Equal(t, removeNewLines(fixtureBytes), removeNewLines(buffer.Bytes())) } +func TestGenerateOverlayConflist(t *testing.T) { + fixture := "testdata/fixtures/azure-linux-swift-overlay.conflist" + + buffer := new(bytes.Buffer) + g := cniconflist.OverlayGenerator{Writer: &bufferWriteCloser{buffer}} + err := g.Generate() + assert.NoError(t, err) + + fixtureBytes, err := os.ReadFile(fixture) + assert.NoError(t, err) + + // remove newlines and carriage returns in case these UTs are running on Windows + assert.Equal(t, removeNewLines(fixtureBytes), removeNewLines(buffer.Bytes())) +} + func TestGenerateCiliumConflist(t *testing.T) { fixture := "testdata/fixtures/cilium.conflist" diff --git a/cns/cniconflist/generator_windows.go b/cns/cniconflist/generator_windows.go index 08b62997b7..027cde81d2 100644 --- a/cns/cniconflist/generator_windows.go +++ b/cns/cniconflist/generator_windows.go @@ -14,6 +14,10 @@ func (v *DualStackOverlayGenerator) Generate() error { return errNotImplemented } +func (v *OverlayGenerator) Generate() error { + return errNotImplemented +} + func (v *CiliumGenerator) Generate() error { return errNotImplemented } diff --git a/cns/cniconflist/testdata/fixtures/azure-linux-swift-overlay.conflist b/cns/cniconflist/testdata/fixtures/azure-linux-swift-overlay.conflist index 047837ce29..5b0c6e3194 100644 --- a/cns/cniconflist/testdata/fixtures/azure-linux-swift-overlay.conflist +++ b/cns/cniconflist/testdata/fixtures/azure-linux-swift-overlay.conflist @@ -8,9 +8,8 @@ "ipsToRouteViaHost": [ "169.254.20.10" ], - "executionMode": "v4swift", "ipam": { - "mode": "v4overlay", + "mode": "overlay", "type": "azure-cns" }, "dns": {}, diff --git a/cns/service/main.go b/cns/service/main.go index 5e9a64dac0..0cb2e01912 100644 --- a/cns/service/main.go +++ b/cns/service/main.go @@ -88,6 +88,7 @@ type cniConflistScenario string const ( scenarioV4Overlay cniConflistScenario = "v4overlay" scenarioDualStackOverlay cniConflistScenario = "dualStackOverlay" + scenarioOverlay cniConflistScenario = "overlay" scenarioCilium cniConflistScenario = "cilium" ) @@ -539,6 +540,8 @@ func main() { conflistGenerator = &cniconflist.V4OverlayGenerator{Writer: writer} case scenarioDualStackOverlay: conflistGenerator = &cniconflist.DualStackOverlayGenerator{Writer: writer} + case scenarioOverlay: + conflistGenerator = &cniconflist.OverlayGenerator{Writer: writer} case scenarioCilium: conflistGenerator = &cniconflist.CiliumGenerator{Writer: writer} default: From 0b41a7fdbe5fd2142427fc57655aaf14293c9166 Mon Sep 17 00:00:00 2001 From: Paul Johnston Date: Mon, 12 Jun 2023 09:34:18 -0700 Subject: [PATCH 2/3] Don't change v4overlay generator behavior --- cns/cniconflist/generator_linux.go | 3 +- cns/cniconflist/generator_linux_test.go | 2 +- .../azure-linux-swift-v4overlay.conflist | 30 +++++++++++++++++++ 3 files changed, 33 insertions(+), 2 deletions(-) create mode 100644 cns/cniconflist/testdata/fixtures/azure-linux-swift-v4overlay.conflist diff --git a/cns/cniconflist/generator_linux.go b/cns/cniconflist/generator_linux.go index 1752f89783..64d2993709 100644 --- a/cns/cniconflist/generator_linux.go +++ b/cns/cniconflist/generator_linux.go @@ -32,10 +32,11 @@ func (v *V4OverlayGenerator) Generate() error { cni.NetworkConfig{ Type: overlaycniType, Mode: cninet.OpModeTransparent, + ExecutionMode: string(util.V4Swift), IPsToRouteViaHost: []string{nodeLocalDNSIP}, IPAM: cni.IPAM{ Type: network.AzureCNS, - Mode: string(util.Overlay), + Mode: string(util.V4Overlay), }, }, portmapConfig, diff --git a/cns/cniconflist/generator_linux_test.go b/cns/cniconflist/generator_linux_test.go index 4d3c7ec87d..3f202907be 100644 --- a/cns/cniconflist/generator_linux_test.go +++ b/cns/cniconflist/generator_linux_test.go @@ -18,7 +18,7 @@ func (b *bufferWriteCloser) Close() error { } func TestGenerateV4OverlayConflist(t *testing.T) { - fixture := "testdata/fixtures/azure-linux-swift-overlay.conflist" + fixture := "testdata/fixtures/azure-linux-swift-v4overlay.conflist" buffer := new(bytes.Buffer) g := cniconflist.V4OverlayGenerator{Writer: &bufferWriteCloser{buffer}} diff --git a/cns/cniconflist/testdata/fixtures/azure-linux-swift-v4overlay.conflist b/cns/cniconflist/testdata/fixtures/azure-linux-swift-v4overlay.conflist new file mode 100644 index 0000000000..047837ce29 --- /dev/null +++ b/cns/cniconflist/testdata/fixtures/azure-linux-swift-v4overlay.conflist @@ -0,0 +1,30 @@ +{ + "cniVersion": "0.3.0", + "name": "azure", + "plugins": [ + { + "type": "azure-vnet", + "mode": "transparent", + "ipsToRouteViaHost": [ + "169.254.20.10" + ], + "executionMode": "v4swift", + "ipam": { + "mode": "v4overlay", + "type": "azure-cns" + }, + "dns": {}, + "runtimeConfig": { + "dns": {} + }, + "windowsSettings": {} + }, + { + "type": "portmap", + "capabilities": { + "portMappings": true + }, + "snat": true + } + ] +} \ No newline at end of file From 3b3e2cf660fab62e130bbbf205fd9464a106f7f5 Mon Sep 17 00:00:00 2001 From: Paul Johnston Date: Mon, 12 Jun 2023 11:19:35 -0700 Subject: [PATCH 3/3] Missing new line at end of test file --- .../testdata/fixtures/azure-linux-swift-v4overlay.conflist | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cns/cniconflist/testdata/fixtures/azure-linux-swift-v4overlay.conflist b/cns/cniconflist/testdata/fixtures/azure-linux-swift-v4overlay.conflist index 047837ce29..7220f53ef8 100644 --- a/cns/cniconflist/testdata/fixtures/azure-linux-swift-v4overlay.conflist +++ b/cns/cniconflist/testdata/fixtures/azure-linux-swift-v4overlay.conflist @@ -27,4 +27,4 @@ "snat": true } ] -} \ No newline at end of file +}