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()) }