@@ -22,6 +22,13 @@ import (
2222 "errors"
2323 "flag"
2424 "fmt"
25+ "github.com/operator-framework/operator-controller/internal/operator-controller/authorization"
26+ "github.com/operator-framework/operator-controller/internal/operator-controller/rukpak/convert"
27+ "github.com/operator-framework/operator-controller/internal/operator-controller/rukpak/preflights/crdupgradesafety"
28+ "github.com/operator-framework/operator-controller/internal/operator-controller/rukpak/render"
29+ "github.com/operator-framework/operator-controller/internal/operator-controller/rukpak/render/certproviders"
30+ "github.com/operator-framework/operator-controller/internal/operator-controller/rukpak/render/registryv1"
31+ apiextensionsv1client "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/typed/apiextensions/v1"
2532 "net/http"
2633 "os"
2734 "path/filepath"
@@ -410,50 +417,47 @@ func run() error {
410417 },
411418 }
412419
413- // aeClient, err := apiextensionsv1client.NewForConfig(mgr.GetConfig())
414- // if err != nil {
415- // setupLog.Error(err, "unable to create apiextensions client")
416- // return err
417- // }
418-
419- // preflights := []applier.Preflight{
420- // crdupgradesafety.NewPreflight(aeClient.CustomResourceDefinitions()),
421- // }
422-
423- // // determine if PreAuthorizer should be enabled based on feature gate
424- // var preAuth authorization.PreAuthorizer
425- // if features.OperatorControllerFeatureGate.Enabled(features.PreflightPermissions) {
426- // preAuth = authorization.NewRBACPreAuthorizer(mgr.GetClient())
427- // }
428-
429- boxcutterApplier := & applier.Boxcutter {
430- Client : mgr .GetClient (),
431- Scheme : mgr .GetScheme (),
432- }
433-
434- // determine if a certificate provider should be set in the bundle renderer and feature support for the provider
435- // based on the feature flag
436- // var certProvider render.CertificateProvider
437- // var isWebhookSupportEnabled bool
438- // if features.OperatorControllerFeatureGate.Enabled(features.WebhookProviderCertManager) {
439- // certProvider = certproviders.CertManagerCertificateProvider{}
440- // isWebhookSupportEnabled = true
441- // } else if features.OperatorControllerFeatureGate.Enabled(features.WebhookProviderOpenshiftServiceCA) {
442- // certProvider = certproviders.OpenshiftServiceCaCertificateProvider{}
443- // isWebhookSupportEnabled = true
444- // }
445-
446- // now initialize the helmApplier, assigning the potentially nil preAuth
447- // helmApplier := &applier.Helm{
448- // ActionClientGetter: acg,
449- // Preflights: preflights,
450- // BundleToHelmChartConverter: &convert.BundleToHelmChartConverter{
451- // BundleRenderer: registryv1.Renderer,
452- // CertificateProvider: certProvider,
453- // IsWebhookSupportEnabled: isWebhookSupportEnabled,
454- // },
455- // PreAuthorizer: preAuth,
456- // }
420+ aeClient , err := apiextensionsv1client .NewForConfig (mgr .GetConfig ())
421+ if err != nil {
422+ setupLog .Error (err , "unable to create apiextensions client" )
423+ return err
424+ }
425+
426+ preflights := []applier.Preflight {
427+ crdupgradesafety .NewPreflight (aeClient .CustomResourceDefinitions ()),
428+ }
429+
430+ // determine if PreAuthorizer should be enabled based on feature gate
431+ var preAuth authorization.PreAuthorizer
432+ if features .OperatorControllerFeatureGate .Enabled (features .PreflightPermissions ) {
433+ preAuth = authorization .NewRBACPreAuthorizer (mgr .GetClient ())
434+ }
435+
436+ // create applier
437+ var ctrlBuilderOpts []controllers.ControllerBuilderOption
438+ var extApplier controllers.Applier
439+
440+ if features .OperatorControllerFeatureGate .Enabled (features .BoxcutterRuntime ) {
441+ // TODO: add support for preflight checks
442+ extApplier = & applier.Boxcutter {
443+ Client : mgr .GetClient (),
444+ Scheme : mgr .GetScheme (),
445+ }
446+ ctrlBuilderOpts = append (ctrlBuilderOpts , controllers .WithOwns (& ocv1.ClusterExtensionRevision {}))
447+ } else {
448+ // now initialize the helmApplier, assigning the potentially nil preAuth
449+ certProvider := getCertificateProvider ()
450+ extApplier = & applier.Helm {
451+ ActionClientGetter : acg ,
452+ Preflights : preflights ,
453+ BundleToHelmChartConverter : & convert.BundleToHelmChartConverter {
454+ BundleRenderer : registryv1 .Renderer ,
455+ CertificateProvider : certProvider ,
456+ IsWebhookSupportEnabled : certProvider != nil ,
457+ },
458+ PreAuthorizer : preAuth ,
459+ }
460+ }
457461
458462 cm := contentmanager .NewManager (clientRestConfigMapper , mgr .GetConfig (), mgr .GetRESTMapper ())
459463 err = clusterExtensionFinalizers .Register (controllers .ClusterExtensionCleanupContentManagerCacheFinalizer , finalizers .FinalizerFunc (func (ctx context.Context , obj client.Object ) (crfinalizer.Result , error ) {
@@ -505,18 +509,17 @@ func run() error {
505509 setupLog .Error (err , "unable to register AccessManager" )
506510 return err
507511 }
508- // Boxcutter
509512
510513 if err = (& controllers.ClusterExtensionReconciler {
511514 Client : cl ,
512515 Resolver : resolver ,
513516 ImageCache : imageCache ,
514517 ImagePuller : imagePuller ,
515- Applier : boxcutterApplier ,
518+ Applier : extApplier ,
516519 InstalledBundleGetter : & controllers.DefaultInstalledBundleGetter {ActionClientGetter : acg },
517520 Finalizers : clusterExtensionFinalizers ,
518521 Manager : cm ,
519- }).SetupWithManager (mgr ); err != nil {
522+ }).SetupWithManager (mgr , ctrlBuilderOpts ... ); err != nil {
520523 setupLog .Error (err , "unable to create controller" , "controller" , "ClusterExtension" )
521524 return err
522525 }
@@ -577,6 +580,15 @@ func run() error {
577580 return nil
578581}
579582
583+ func getCertificateProvider () render.CertificateProvider {
584+ if features .OperatorControllerFeatureGate .Enabled (features .WebhookProviderCertManager ) {
585+ return certproviders.CertManagerCertificateProvider {}
586+ } else if features .OperatorControllerFeatureGate .Enabled (features .WebhookProviderOpenshiftServiceCA ) {
587+ return certproviders.OpenshiftServiceCaCertificateProvider {}
588+ }
589+ return nil
590+ }
591+
580592func main () {
581593 if err := operatorControllerCmd .Execute (); err != nil {
582594 fmt .Fprintf (os .Stderr , "Error: %v\n " , err )
0 commit comments