diff --git a/commonclient/metrics_cr11.go b/commonclient/metrics_cr11.go new file mode 100644 index 00000000..69309f9b --- /dev/null +++ b/commonclient/metrics_cr11.go @@ -0,0 +1,19 @@ +//go:build controllerruntime_11 || controllerruntime_12 || controllerruntime_13 || controllerruntime_14 || controllerruntime_15 + +package commonclient + +import ( + "fmt" + + ctrl "sigs.k8s.io/controller-runtime" +) + +// SetMetricsBindAddress sets the metrics address on options independent of +// manager options version +func SetMetricsBindAddress(options *ctrl.Options, bindAddress string) error { + if options == nil { + return fmt.Errorf("unable to set metrics bind address on non-existent manager options") + } + options.MetricsBindAddress = bindAddress + return nil +} diff --git a/commonclient/metrics_cr16.go b/commonclient/metrics_cr16.go new file mode 100644 index 00000000..1d31509e --- /dev/null +++ b/commonclient/metrics_cr16.go @@ -0,0 +1,19 @@ +//go:build !(controllerruntime_11 || controllerruntime_12 || controllerruntime_13 || controllerruntime_14 || controllerruntime_15) + +package commonclient + +import ( + "fmt" + + ctrl "sigs.k8s.io/controller-runtime" +) + +// SetMetricsBindAddress sets the metrics address on options independent of +// manager options version +func SetMetricsBindAddress(options *ctrl.Options, bindAddress string) error { + if options == nil { + return fmt.Errorf("unable to set metrics bind address on non-existent manager options") + } + options.Metrics.BindAddress = bindAddress + return nil +} diff --git a/examples/guestbook-operator/main.go b/examples/guestbook-operator/main.go index 9e2b42ab..255e7d38 100644 --- a/examples/guestbook-operator/main.go +++ b/examples/guestbook-operator/main.go @@ -30,7 +30,7 @@ import ( ctrl "sigs.k8s.io/controller-runtime" "sigs.k8s.io/controller-runtime/pkg/healthz" "sigs.k8s.io/controller-runtime/pkg/log/zap" - metricsserver "sigs.k8s.io/controller-runtime/pkg/metrics/server" + "sigs.k8s.io/kubebuilder-declarative-pattern/commonclient" "sigs.k8s.io/kubebuilder-declarative-pattern/pkg/patterns/addon" addonsv1alpha1 "sigs.k8s.io/kubebuilder-declarative-pattern/examples/guestbook-operator/api/v1alpha1" @@ -51,10 +51,8 @@ func init() { } func main() { - var metricsAddr string var enableLeaderElection bool var probeAddr string - flag.StringVar(&metricsAddr, "metrics-bind-address", ":8080", "The address the metric endpoint binds to.") flag.StringVar(&probeAddr, "health-probe-bind-address", ":8081", "The address the probe endpoint binds to.") flag.BoolVar(&enableLeaderElection, "leader-elect", false, "Enable leader election for controller manager. "+ @@ -68,15 +66,17 @@ func main() { ctrl.SetLogger(zap.New(zap.UseFlagOptions(&opts))) addon.Init() - mgr, err := ctrl.NewManager(ctrl.GetConfigOrDie(), ctrl.Options{ - Scheme: scheme, - Metrics: metricsserver.Options{ - BindAddress: "0", // Disable the metrics server - }, + mgrOpt := ctrl.Options{ + Scheme: scheme, HealthProbeBindAddress: probeAddr, LeaderElection: enableLeaderElection, LeaderElectionID: "c3cffa1a.example.org", - }) + } + err := commonclient.SetMetricsBindAddress(&mgrOpt, "0") + if err != nil { + setupLog.Error(err, "unable to configure manager") + } + mgr, err := ctrl.NewManager(ctrl.GetConfigOrDie(), mgrOpt) if err != nil { setupLog.Error(err, "unable to start manager") os.Exit(1) diff --git a/pkg/patterns/declarative/metrics_test.go b/pkg/patterns/declarative/metrics_test.go index 63ecebc1..71d8d633 100644 --- a/pkg/patterns/declarative/metrics_test.go +++ b/pkg/patterns/declarative/metrics_test.go @@ -38,11 +38,11 @@ import ( "k8s.io/klog/v2" "sigs.k8s.io/controller-runtime/pkg/client/fake" "sigs.k8s.io/controller-runtime/pkg/manager" - metricsserver "sigs.k8s.io/controller-runtime/pkg/metrics/server" "sigs.k8s.io/controller-runtime/pkg/reconcile" "sigs.k8s.io/yaml" "sigs.k8s.io/kubebuilder-declarative-pattern/applylib/applyset" + "sigs.k8s.io/kubebuilder-declarative-pattern/commonclient" "sigs.k8s.io/kubebuilder-declarative-pattern/mockkubeapiserver" "sigs.k8s.io/kubebuilder-declarative-pattern/pkg/patterns/declarative/pkg/applier" "sigs.k8s.io/kubebuilder-declarative-pattern/pkg/patterns/declarative/pkg/manifest" @@ -277,10 +277,10 @@ func TestAddIfNotPresent(t *testing.T) { } // Create manager - mgrOpt := manager.Options{ - Metrics: metricsserver.Options{ - BindAddress: "0", // Disable the metrics server, don't open unneeded ports - }, + mgrOpt := manager.Options{} + err = commonclient.SetMetricsBindAddress(&mgrOpt, "0") + if err != nil { + t.Error(err) } mgr, err := manager.New(restConfig, mgrOpt) if err != nil { diff --git a/pkg/test/testreconciler/simpletest/controller_test.go b/pkg/test/testreconciler/simpletest/controller_test.go index 99b12b88..60d02c35 100644 --- a/pkg/test/testreconciler/simpletest/controller_test.go +++ b/pkg/test/testreconciler/simpletest/controller_test.go @@ -13,8 +13,8 @@ import ( "k8s.io/klog/v2" "k8s.io/klog/v2/klogr" ctrl "sigs.k8s.io/controller-runtime" - metricsserver "sigs.k8s.io/controller-runtime/pkg/metrics/server" + "sigs.k8s.io/kubebuilder-declarative-pattern/commonclient" "sigs.k8s.io/kubebuilder-declarative-pattern/mockkubeapiserver" "sigs.k8s.io/kubebuilder-declarative-pattern/pkg/patterns/addon/pkg/loaders" "sigs.k8s.io/kubebuilder-declarative-pattern/pkg/patterns/declarative" @@ -68,18 +68,20 @@ func testSimpleReconciler(h *testharness.Harness, testdir string, applier applie } logger := klogr.New() - mgr, err := ctrl.NewManager(restConfig, ctrl.Options{ - Scheme: scheme, - Metrics: metricsserver.Options{ - BindAddress: "0", // Disable the metrics server - }, + mgrOpt := ctrl.Options{ + Scheme: scheme, LeaderElection: false, // MapperProvider provides the rest mapper used to map go types to Kubernetes APIs MapperProvider: restmapper.NewControllerRESTMapper, Logger: logger, - }) + } + err = commonclient.SetMetricsBindAddress(&mgrOpt, "0") + if err != nil { + h.Errorf("error configuring manager: %v", err) + } + mgr, err := ctrl.NewManager(restConfig, mgrOpt) if err != nil { h.Fatalf("error starting manager: %v", err) }