diff --git a/CHANGELOG.md b/CHANGELOG.md index c41dd3faf..76c109a8a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -31,6 +31,10 @@ autoscaling with `GatewayConfiguration` as the generated `DataPlane` deployment will no longer be rejected. [#79](https://github.com/Kong/gateway-operator/pull/79) +- Make creating a `DataPlane` index conditional based on enabling the `ControlPlane` + controller. This allows running KGO without `ControlPlane` CRD with its controller + disabled. + [#103](https://github.com/Kong/gateway-operator/pull/103) ## [v1.2.1] diff --git a/internal/utils/index/index.go b/internal/utils/index/index.go index 1fa7891bf..7405c9bb1 100644 --- a/internal/utils/index/index.go +++ b/internal/utils/index/index.go @@ -2,7 +2,9 @@ package index import ( "context" + "fmt" + "k8s.io/apimachinery/pkg/api/meta" "sigs.k8s.io/controller-runtime/pkg/cache" "sigs.k8s.io/controller-runtime/pkg/client" @@ -14,10 +16,17 @@ const ( DataPlaneNameIndex = "dataplane" ) -// IndexDataPlaneNameOnControlPlane indexes the ControlPlane .spec.dataplaneName field +// DataPlaneNameOnControlPlane indexes the ControlPlane .spec.dataplaneName field // on the "dataplane" key. -func IndexDataPlaneNameOnControlPlane(c cache.Cache) error { - return c.IndexField(context.Background(), &operatorv1beta1.ControlPlane{}, DataPlaneNameIndex, func(o client.Object) []string { +func DataPlaneNameOnControlPlane(ctx context.Context, c cache.Cache) error { + if _, err := c.GetInformer(ctx, &operatorv1beta1.ControlPlane{}); err != nil { + if meta.IsNoMatchError(err) { + return nil + } + return fmt.Errorf("failed to get informer for v1beta1 ControlPlane: %w, disabling indexing DataPlanes for ControlPlanes' .spec.dataplaneName", err) + } + + return c.IndexField(ctx, &operatorv1beta1.ControlPlane{}, DataPlaneNameIndex, func(o client.Object) []string { controlPlane, ok := o.(*operatorv1beta1.ControlPlane) if !ok { return []string{} diff --git a/modules/manager/controller_setup.go b/modules/manager/controller_setup.go index b8d2a809e..724cb319c 100644 --- a/modules/manager/controller_setup.go +++ b/modules/manager/controller_setup.go @@ -1,6 +1,7 @@ package manager import ( + "context" "errors" "fmt" "net/url" @@ -93,8 +94,13 @@ func (c *ControllerDef) MaybeSetupWithManager(mgr ctrl.Manager) error { return c.Controller.SetupWithManager(mgr) } -func setupIndexes(mgr manager.Manager) error { - return index.IndexDataPlaneNameOnControlPlane(mgr.GetCache()) +func setupIndexes(ctx context.Context, mgr manager.Manager, cfg Config) error { + if cfg.ControlPlaneControllerEnabled || cfg.GatewayControllerEnabled { + if err := index.DataPlaneNameOnControlPlane(ctx, mgr.GetCache()); err != nil { + return fmt.Errorf("failed to setup index for DataPlane names on ControlPlane: %w", err) + } + } + return nil } // SetupControllers returns a list of ControllerDefs based on config. diff --git a/modules/manager/run.go b/modules/manager/run.go index 427606c68..97a74ef3d 100644 --- a/modules/manager/run.go +++ b/modules/manager/run.go @@ -186,7 +186,7 @@ func Run( return fmt.Errorf("unable to start manager: %w", err) } - if err := setupIndexes(mgr); err != nil { + if err := setupIndexes(context.Background(), mgr, cfg); err != nil { return err }