From 25d1d4fb03d1e898b69452977780d9d9cd93fa56 Mon Sep 17 00:00:00 2001 From: Miguel Angel Ajo Date: Tue, 24 Nov 2020 11:36:19 +0100 Subject: [PATCH] Extend the generic routeagent handler to the other drivers This will allow for all those network plugins to be recognized with this same route agent driver, and at the same time we could make specific modification if this was ever required. Signed-off-by: Miguel Angel Ajo --- pkg/event/handler.go | 2 +- pkg/event/logger/handler.go | 4 ++-- pkg/event/registry.go | 9 +++++++-- pkg/event/testing/testing.go | 4 ++-- pkg/networkplugin-syncer/handlers/ovn/handler.go | 6 +++--- pkg/networkplugin-syncer/main.go | 8 +++++++- .../handlers/kubeproxy_iptables/kp_iptables.go | 4 ++-- pkg/routeagent_driver/main.go | 13 ++++++++++--- 8 files changed, 34 insertions(+), 16 deletions(-) diff --git a/pkg/event/handler.go b/pkg/event/handler.go index f8b41f869..9ec7fcb3f 100644 --- a/pkg/event/handler.go +++ b/pkg/event/handler.go @@ -17,7 +17,7 @@ type Handler interface { GetName() string // GetNetworkPlugin returns the kubernetes network plugin that this handler supports. - GetNetworkPlugin() string + GetNetworkPlugins() []string // Stop is called once during shutdown to let the handler perform any cleanup. The uninstall flag indicates // whether or not Submariner is being completely uninstalled from the system. diff --git a/pkg/event/logger/handler.go b/pkg/event/logger/handler.go index b2abb4d17..ae84a5811 100644 --- a/pkg/event/logger/handler.go +++ b/pkg/event/logger/handler.go @@ -21,8 +21,8 @@ func (l *Handler) GetName() string { return "logger" } -func (l *Handler) GetNetworkPlugin() string { - return event.AnyNetworkPlugin +func (l *Handler) GetNetworkPlugins() []string { + return []string{event.AnyNetworkPlugin} } func (l *Handler) TransitionToNonGateway() error { diff --git a/pkg/event/registry.go b/pkg/event/registry.go index a27e63386..7f45f8773 100644 --- a/pkg/event/registry.go +++ b/pkg/event/registry.go @@ -10,6 +10,7 @@ import ( "github.com/submariner-io/admiral/pkg/log" submV1 "github.com/submariner-io/submariner/pkg/apis/submariner.io/v1" + "github.com/submariner-io/submariner/pkg/util" ) type Registry struct { @@ -34,9 +35,13 @@ func (er *Registry) GetName() string { } func (er *Registry) addHandler(eventHandler Handler) error { - evNetworkPlugin := eventHandler.GetNetworkPlugin() + evNetworkPlugins := util.NewStringSet() - if evNetworkPlugin == AnyNetworkPlugin || evNetworkPlugin == er.networkPlugin { + for _, np := range eventHandler.GetNetworkPlugins() { + evNetworkPlugins.Add(np) + } + + if evNetworkPlugins.Contains(AnyNetworkPlugin) || evNetworkPlugins.Contains(er.networkPlugin) { if err := eventHandler.Init(); err != nil { return errors.Wrapf(err, "Event handler %q failed to initialize", eventHandler.GetName()) } diff --git a/pkg/event/testing/testing.go b/pkg/event/testing/testing.go index a1126073b..0e7888c0a 100644 --- a/pkg/event/testing/testing.go +++ b/pkg/event/testing/testing.go @@ -52,8 +52,8 @@ func (t *TestHandler) GetName() string { return t.Name } -func (t *TestHandler) GetNetworkPlugin() string { - return t.NetworkPlugin +func (t *TestHandler) GetNetworkPlugins() []string { + return []string{t.NetworkPlugin} } const EvTransitionToNonGateway = "TransitionToNonGateway" diff --git a/pkg/networkplugin-syncer/handlers/ovn/handler.go b/pkg/networkplugin-syncer/handlers/ovn/handler.go index a8816fecd..89c6123e9 100644 --- a/pkg/networkplugin-syncer/handlers/ovn/handler.go +++ b/pkg/networkplugin-syncer/handlers/ovn/handler.go @@ -31,11 +31,11 @@ func (ovn *SyncHandler) GetName() string { return "ovn-sync-handler" } -func (ovn *SyncHandler) GetNetworkPlugin() string { - return "OVNKubernetes" +func (ovn *SyncHandler) GetNetworkPlugins() []string { + return []string{"OVNKubernetes"} } -func NewSyncHandler(k8sClientset clientset.Interface) *SyncHandler { +func NewSyncHandler(k8sClientset clientset.Interface) event.Handler { return &SyncHandler{ remoteEndpoints: make(map[string]*submV1.Endpoint), k8sClientset: k8sClientset, diff --git a/pkg/networkplugin-syncer/main.go b/pkg/networkplugin-syncer/main.go index f38a18517..b79d8dc45 100644 --- a/pkg/networkplugin-syncer/main.go +++ b/pkg/networkplugin-syncer/main.go @@ -30,7 +30,13 @@ func main() { // set up signals so we handle the first shutdown signal gracefully stopCh := signals.SetupSignalHandler() - registry := event.NewRegistry("networkplugin-syncer", os.Getenv("NETWORK_PLUGIN")) + networkPlugin := os.Getenv("SUBMARINER_NETWORKPLUGIN") + + if networkPlugin == "" { + networkPlugin = "generic" + } + + registry := event.NewRegistry("networkplugin-syncer", networkPlugin) if err := registry.AddHandlers(logger.NewHandler(), ovn.NewSyncHandler(getK8sClient())); err != nil { klog.Fatalf("Error registering the handlers: %s", err.Error()) } diff --git a/pkg/routeagent_driver/handlers/kubeproxy_iptables/kp_iptables.go b/pkg/routeagent_driver/handlers/kubeproxy_iptables/kp_iptables.go index 9c48d00ed..d2edb5e18 100644 --- a/pkg/routeagent_driver/handlers/kubeproxy_iptables/kp_iptables.go +++ b/pkg/routeagent_driver/handlers/kubeproxy_iptables/kp_iptables.go @@ -60,8 +60,8 @@ func (kp *SyncHandler) GetName() string { return "kubeproxy-iptables-handler" } -func (kp *SyncHandler) GetNetworkPlugin() string { - return event.AnyNetworkPlugin +func (kp *SyncHandler) GetNetworkPlugins() []string { + return []string{"generic", "canal-flannel", "weave-net", "OpenShiftSDN"} } func (kp *SyncHandler) Init() error { diff --git a/pkg/routeagent_driver/main.go b/pkg/routeagent_driver/main.go index 7546e581f..64c07e124 100644 --- a/pkg/routeagent_driver/main.go +++ b/pkg/routeagent_driver/main.go @@ -60,9 +60,16 @@ func main() { klog.Errorf("Error while annotating the node: %s", err.Error()) } - registry := event.NewRegistry("routeagent_driver", os.Getenv("NETWORK_PLUGIN")) - if err := registry.AddHandlers(logger.NewHandler(), - kp_iptables.NewSyncHandler(env.ClusterCidr, env.ServiceCidr, smClientset)); err != nil { + np := os.Getenv("SUBMARINER_NETWORKPLUGIN") + if np == "" { + np = "generic" + } + + registry := event.NewRegistry("routeagent_driver", np) + if err := registry.AddHandlers( + logger.NewHandler(), + kp_iptables.NewSyncHandler(env.ClusterCidr, env.ServiceCidr, smClientset), + ); err != nil { klog.Fatalf("Error registering the handlers: %s", err.Error()) }