refactor: avoiding init functions for direct registration

This commit is contained in:
Dario Tranchitella
2021-07-31 17:22:35 +02:00
parent 01053d5deb
commit e24394f329
5 changed files with 29 additions and 58 deletions

View File

@@ -1,26 +0,0 @@
// Copyright 2020-2021 Clastix Labs
// SPDX-License-Identifier: Apache-2.0
package indexer
import (
extensionsv1beta1 "k8s.io/api/extensions/v1beta1"
networkingv1 "k8s.io/api/networking/v1"
networkingv1beta1 "k8s.io/api/networking/v1beta1"
"github.com/clastix/capsule/pkg/indexer/ingress"
"github.com/clastix/capsule/pkg/webhook/utils"
)
func init() {
majorVer, minorVer, _, _ := utils.GetK8sVersion()
switch {
case majorVer == 1 && minorVer >= 19:
AddToIndexerFuncs = append(AddToIndexerFuncs, ingress.Hostname{Obj: &networkingv1.Ingress{}})
case majorVer == 1 && (minorVer >= 19 && minorVer < 22):
AddToIndexerFuncs = append(AddToIndexerFuncs, ingress.Hostname{Obj: &networkingv1beta1.Ingress{}})
case majorVer == 1 && minorVer < 22:
AddToIndexerFuncs = append(AddToIndexerFuncs, ingress.Hostname{Obj: &extensionsv1beta1.Ingress{}})
}
}

View File

@@ -1,12 +0,0 @@
// Copyright 2020-2021 Clastix Labs
// SPDX-License-Identifier: Apache-2.0
package indexer
import (
"github.com/clastix/capsule/pkg/indexer/namespace"
)
func init() {
AddToIndexerFuncs = append(AddToIndexerFuncs, namespace.OwnerReference{})
}

View File

@@ -1,12 +0,0 @@
// Copyright 2020-2021 Clastix Labs
// SPDX-License-Identifier: Apache-2.0
package indexer
import "github.com/clastix/capsule/pkg/indexer/tenant"
func init() {
AddToIndexerFuncs = append(AddToIndexerFuncs, tenant.IngressHostnames{})
AddToIndexerFuncs = append(AddToIndexerFuncs, tenant.NamespacesReference{})
AddToIndexerFuncs = append(AddToIndexerFuncs, tenant.OwnerReference{})
}

View File

@@ -6,6 +6,13 @@ package indexer
import (
"context"
"github.com/clastix/capsule/pkg/indexer/ingress"
"github.com/clastix/capsule/pkg/indexer/namespace"
"github.com/clastix/capsule/pkg/indexer/tenant"
"github.com/clastix/capsule/pkg/webhook/utils"
extensionsv1beta1 "k8s.io/api/extensions/v1beta1"
networkingv1 "k8s.io/api/networking/v1"
networkingv1beta1 "k8s.io/api/networking/v1beta1"
"sigs.k8s.io/controller-runtime/pkg/client"
"sigs.k8s.io/controller-runtime/pkg/manager"
)
@@ -16,13 +23,26 @@ type CustomIndexer interface {
Func() client.IndexerFunc
}
var AddToIndexerFuncs []CustomIndexer
func AddToManager(m manager.Manager) error {
for _, f := range AddToIndexerFuncs {
indexers := append([]CustomIndexer{},
tenant.IngressHostnames{},
tenant.NamespacesReference{},
tenant.OwnerReference{},
namespace.OwnerReference{},
ingress.Hostname{Obj: &extensionsv1beta1.Ingress{}},
ingress.Hostname{Obj: &networkingv1beta1.Ingress{}},
)
majorVer, minorVer, _, _ := utils.GetK8sVersion()
if majorVer == 1 && minorVer >= 19 {
indexers = append(indexers, ingress.Hostname{Obj: &networkingv1.Ingress{}})
}
for _, f := range indexers {
if err := m.GetFieldIndexer().IndexField(context.TODO(), f.Object(), f.Field(), f.Func()); err != nil {
return err
}
}
return nil
}

View File

@@ -11,6 +11,10 @@ import (
"sigs.k8s.io/controller-runtime/pkg/client"
)
const (
HostnameFieldSelector = "host"
)
type Hostname struct {
Obj metav1.Object
}
@@ -20,26 +24,23 @@ func (h Hostname) Object() client.Object {
}
func (h Hostname) Field() string {
return ".spec.rules[*].host"
return HostnameFieldSelector
}
func (h Hostname) Func() client.IndexerFunc {
return func(object client.Object) (hostnames []string) {
switch h.Obj.(type) {
switch ing := h.Obj.(type) {
case *networkingv1.Ingress:
ing := object.(*networkingv1.Ingress)
for _, r := range ing.Spec.Rules {
hostnames = append(hostnames, r.Host)
}
return
case *networkingv1beta1.Ingress:
ing := object.(*networkingv1beta1.Ingress)
for _, r := range ing.Spec.Rules {
hostnames = append(hostnames, r.Host)
}
return
case *extensionsv1beta1.Ingress:
ing := object.(*extensionsv1beta1.Ingress)
for _, r := range ing.Spec.Rules {
hostnames = append(hostnames, r.Host)
}