From 7467e58a07d6a5f724979da15b65af93ff8601b9 Mon Sep 17 00:00:00 2001 From: Casey Davenport Date: Fri, 11 May 2018 18:27:44 -0700 Subject: [PATCH] Allow configuration of veth prefix in KDD mode --- lib/backend/k8s/conversion/conversion.go | 13 ++++++++++++- lib/backend/k8s/conversion/conversion_test.go | 10 ++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/lib/backend/k8s/conversion/conversion.go b/lib/backend/k8s/conversion/conversion.go index 726f7ff90..9202a87ab 100644 --- a/lib/backend/k8s/conversion/conversion.go +++ b/lib/backend/k8s/conversion/conversion.go @@ -18,6 +18,7 @@ import ( "crypto/sha1" "encoding/hex" "fmt" + "os" "sort" "strings" @@ -58,7 +59,17 @@ func VethNameForWorkload(namespace, podname string) string { // veth name and mac addr. h := sha1.New() h.Write([]byte(fmt.Sprintf("%s.%s", namespace, podname))) - return fmt.Sprintf("cali%s", hex.EncodeToString(h.Sum(nil))[:11]) + prefix := os.Getenv("FELIX_INTERFACEPREFIX") + if prefix == "" { + // Prefix is not set. Default to "cali" + prefix = "cali" + } else { + // Prefix is set - use the first value in the list. + splits := strings.Split(prefix, ",") + prefix = splits[0] + } + log.WithField("prefix", prefix).Debugf("Using prefix to create a WorkloadEndpoint veth name") + return fmt.Sprintf("%s%s", prefix, hex.EncodeToString(h.Sum(nil))[:11]) } // ParseWorkloadName extracts the Node name, Orchestrator, Pod name and endpoint from the diff --git a/lib/backend/k8s/conversion/conversion_test.go b/lib/backend/k8s/conversion/conversion_test.go index 2f6b452e2..70b0227ca 100644 --- a/lib/backend/k8s/conversion/conversion_test.go +++ b/lib/backend/k8s/conversion/conversion_test.go @@ -15,6 +15,8 @@ package conversion import ( + "os" + . "github.com/onsi/ginkgo" . "github.com/onsi/ginkgo/extensions/table" . "github.com/onsi/gomega" @@ -44,6 +46,14 @@ var _ = Describe("Test parsing strings", func() { Expect(weid.Pod).To(Equal("pod-name")) }) + It("generate a veth name with the right prefix", func() { + os.Setenv("FELIX_INTERFACEPREFIX", "eni,veth,foo") + defer os.Setenv("FELIX_INTERFACEPREFIX", "") + + name := VethNameForWorkload("namespace", "podname") + Expect(name).To(Equal("eni82111e10a96")) + }) + It("should parse valid profile names", func() { name := "kns.default" ns, err := c.ProfileNameToNamespace(name)