cmd/add-netns/main.go (35 lines of code) (raw):
package main
import (
"fmt"
"os"
"github.com/containernetworking/plugins/pkg/ns"
"github.com/Azure/kube-egress-gateway/pkg/consts"
"github.com/Azure/kube-egress-gateway/pkg/netnswrapper"
)
func ensureNS(nsKit netnswrapper.Interface, namespace string) error {
targetNS, err := nsKit.GetNS(namespace)
if err != nil {
if _, ok := err.(ns.NSPathNotExistErr); ok {
fmt.Printf("Creating new network namespace %q\n", namespace)
targetNS, err = nsKit.NewNS(namespace)
if err != nil {
return fmt.Errorf("failed to create network namespace %q: %w", namespace, err)
}
fmt.Printf("Created new network namespace %q\n", namespace)
} else {
return fmt.Errorf("failed to get network namespace %q: %w", namespace, err)
}
} else {
fmt.Printf("Got network namespace %q, no need to create\n", namespace)
}
defer targetNS.Close()
return nil
}
func main() {
nsKit := netnswrapper.NewNetNS()
err := ensureNS(nsKit, consts.GatewayNetnsName)
if err != nil {
fmt.Println("Error:", err.Error())
os.Exit(1)
}
}