mirror of
https://github.com/projectcapsule/capsule.git
synced 2026-02-14 18:09:58 +00:00
refactor: avoiding init functions for direct registration
This commit is contained in:
@@ -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{}})
|
||||
}
|
||||
}
|
||||
@@ -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{})
|
||||
}
|
||||
@@ -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{})
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user