Skip to content

Commit

Permalink
Extract plugin discovery function registration
Browse files Browse the repository at this point in the history
This means that the general network discovery code doesn't need to
have a list of functions to call.

Signed-off-by: Stephen Kitt <[email protected]>
  • Loading branch information
skitt authored and tpantelis committed Sep 26, 2022
1 parent 80981e7 commit 0e70fdc
Show file tree
Hide file tree
Showing 8 changed files with 38 additions and 29 deletions.
4 changes: 4 additions & 0 deletions pkg/discovery/network/calico.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,10 @@ import (
controllerClient "sigs.k8s.io/controller-runtime/pkg/client"
)

func init() {
registerNetworkPluginDiscoveryFunction(discoverCalicoNetwork)
}

// nolint:nilnil // Intentional as the purpose is to discover.
func discoverCalicoNetwork(client controllerClient.Client) (*ClusterNetwork, error) {
cmList := &corev1.ConfigMapList{}
Expand Down
4 changes: 4 additions & 0 deletions pkg/discovery/network/canal.go
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,10 @@ import (
controllerClient "sigs.k8s.io/controller-runtime/pkg/client"
)

func init() {
registerNetworkPluginDiscoveryFunction(discoverCanalFlannelNetwork)
}

// nolint:nilnil // Intentional as the purpose is to discover.
func discoverCanalFlannelNetwork(client controllerClient.Client) (*ClusterNetwork, error) {
// TODO: this must be smarter, looking for the canal daemonset, with labels k8s-app=canal
Expand Down
4 changes: 4 additions & 0 deletions pkg/discovery/network/kindnet.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,10 @@ import (
controllerClient "sigs.k8s.io/controller-runtime/pkg/client"
)

func init() {
registerNetworkPluginDiscoveryFunction(discoverKindNetwork)
}

func discoverKindNetwork(client controllerClient.Client) (*ClusterNetwork, error) {
kindNetPod, err := FindPod(client, "app=kindnet")

Expand Down
39 changes: 12 additions & 27 deletions pkg/discovery/network/network.go
Original file line number Diff line number Diff line change
Expand Up @@ -103,36 +103,21 @@ func Discover(client controllerClient.Client, operatorNamespace string) (*Cluste
return discoverGenericNetwork(client)
}

// nolint:nilnil // Intentional as the purpose is to discover.
func networkPluginsDiscovery(client controllerClient.Client) (*ClusterNetwork, error) {
osClusterNet, err := discoverOpenShift4Network(client)
if err != nil || osClusterNet != nil {
return osClusterNet, err
}
type pluginDiscoveryFn func(controllerClient.Client) (*ClusterNetwork, error)

kindNet, err := discoverKindNetwork(client)
if err != nil || kindNet != nil {
return kindNet, err
}
var discoverFunctions = []pluginDiscoveryFn{}

weaveClusterNet, err := discoverWeaveNetwork(client)
if err != nil || weaveClusterNet != nil {
return weaveClusterNet, err
}

canalClusterNet, err := discoverCanalFlannelNetwork(client)
if err != nil || canalClusterNet != nil {
return canalClusterNet, err
}

ovnClusterNet, err := discoverOvnKubernetesNetwork(client)
if err != nil || ovnClusterNet != nil {
return ovnClusterNet, err
}
func registerNetworkPluginDiscoveryFunction(function pluginDiscoveryFn) {
discoverFunctions = append(discoverFunctions, function)
}

calicoClusterNet, err := discoverCalicoNetwork(client)
if err != nil || calicoClusterNet != nil {
return calicoClusterNet, err
// nolint:nilnil // Intentional as the purpose is to discover.
func networkPluginsDiscovery(client controllerClient.Client) (*ClusterNetwork, error) {
for _, function := range discoverFunctions {
network, err := function(client)
if err != nil || network != nil {
return network, err
}
}

return nil, nil
Expand Down
4 changes: 4 additions & 0 deletions pkg/discovery/network/openshift4.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,10 @@ import (
controllerClient "sigs.k8s.io/controller-runtime/pkg/client"
)

func init() {
registerNetworkPluginDiscoveryFunction(discoverOpenShift4Network)
}

// nolint:nilnil // Intentional as the purpose is to discover.
func discoverOpenShift4Network(client controllerClient.Client) (*ClusterNetwork, error) {
network := &unstructured.Unstructured{}
Expand Down
4 changes: 2 additions & 2 deletions pkg/discovery/network/openshift4_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ import (
"github.com/submariner-io/submariner-operator/pkg/discovery/network"
"github.com/submariner-io/submariner/pkg/cni"
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
"k8s.io/apimachinery/pkg/runtime"
"k8s.io/client-go/kubernetes/scheme"
"sigs.k8s.io/controller-runtime/pkg/client/fake"
)

Expand Down Expand Up @@ -61,7 +61,7 @@ func testOS4DiscoveryWith(json []byte) (*network.ClusterNetwork, error) {
err := obj.UnmarshalJSON(json)
Expect(err).NotTo(HaveOccurred())

return network.Discover(fake.NewClientBuilder().WithScheme(runtime.NewScheme()).WithObjects(obj).Build(), "")
return network.Discover(fake.NewClientBuilder().WithScheme(scheme.Scheme).WithObjects(obj).Build(), "")
}

func getNetworkJSON() []byte {
Expand Down
4 changes: 4 additions & 0 deletions pkg/discovery/network/ovnkubernetes.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,10 @@ const (
OvnSBDBDefaultPort = 6642
)

func init() {
registerNetworkPluginDiscoveryFunction(discoverOvnKubernetesNetwork)
}

func discoverOvnKubernetesNetwork(client controllerClient.Client) (*ClusterNetwork, error) {
ovnDBPod, err := FindPod(client, "name=ovnkube-db")

Expand Down
4 changes: 4 additions & 0 deletions pkg/discovery/network/weavenet.go
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,10 @@ import (
controllerClient "sigs.k8s.io/controller-runtime/pkg/client"
)

func init() {
registerNetworkPluginDiscoveryFunction(discoverWeaveNetwork)
}

func discoverWeaveNetwork(client controllerClient.Client) (*ClusterNetwork, error) {
weaveNetPod, err := FindPod(client, "name=weave-net")

Expand Down

0 comments on commit 0e70fdc

Please sign in to comment.