From e24394f32991daa0fae2a995c1aba53b3c775d15 Mon Sep 17 00:00:00 2001 From: Dario Tranchitella Date: Sat, 31 Jul 2021 17:22:35 +0200 Subject: [PATCH] refactor: avoiding init functions for direct registration --- pkg/indexer/add_ingress.go | 26 -------------------------- pkg/indexer/add_namespace.go | 12 ------------ pkg/indexer/add_tenant.go | 12 ------------ pkg/indexer/indexer.go | 26 +++++++++++++++++++++++--- pkg/indexer/ingress/hostname.go | 11 ++++++----- 5 files changed, 29 insertions(+), 58 deletions(-) delete mode 100644 pkg/indexer/add_ingress.go delete mode 100644 pkg/indexer/add_namespace.go delete mode 100644 pkg/indexer/add_tenant.go diff --git a/pkg/indexer/add_ingress.go b/pkg/indexer/add_ingress.go deleted file mode 100644 index 6248b521..00000000 --- a/pkg/indexer/add_ingress.go +++ /dev/null @@ -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{}}) - } -} diff --git a/pkg/indexer/add_namespace.go b/pkg/indexer/add_namespace.go deleted file mode 100644 index 772fcfff..00000000 --- a/pkg/indexer/add_namespace.go +++ /dev/null @@ -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{}) -} diff --git a/pkg/indexer/add_tenant.go b/pkg/indexer/add_tenant.go deleted file mode 100644 index a269a016..00000000 --- a/pkg/indexer/add_tenant.go +++ /dev/null @@ -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{}) -} diff --git a/pkg/indexer/indexer.go b/pkg/indexer/indexer.go index 205c5002..9e6aa36b 100644 --- a/pkg/indexer/indexer.go +++ b/pkg/indexer/indexer.go @@ -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 } diff --git a/pkg/indexer/ingress/hostname.go b/pkg/indexer/ingress/hostname.go index 299ffd89..11bd22c2 100644 --- a/pkg/indexer/ingress/hostname.go +++ b/pkg/indexer/ingress/hostname.go @@ -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) }