@@ -317,38 +317,6 @@ func run() error {
317317 return err
318318 }
319319
320- coreClient , err := corev1client .NewForConfig (mgr .GetConfig ())
321- if err != nil {
322- setupLog .Error (err , "unable to create core client" )
323- return err
324- }
325- tokenGetter := authentication .NewTokenGetter (coreClient , authentication .WithExpirationDuration (1 * time .Hour ))
326- clientRestConfigMapper := action .ServiceAccountRestConfigMapper (tokenGetter )
327- if features .OperatorControllerFeatureGate .Enabled (features .SyntheticPermissions ) {
328- clientRestConfigMapper = action .SyntheticUserRestConfigMapper (clientRestConfigMapper )
329- }
330-
331- cfgGetter , err := helmclient .NewActionConfigGetter (mgr .GetConfig (), mgr .GetRESTMapper (),
332- helmclient .StorageDriverMapper (action .ChunkedStorageDriverMapper (coreClient , mgr .GetAPIReader (), cfg .systemNamespace )),
333- helmclient .ClientNamespaceMapper (func (obj client.Object ) (string , error ) {
334- ext := obj .(* ocv1.ClusterExtension )
335- return ext .Spec .Namespace , nil
336- }),
337- helmclient .ClientRestConfigMapper (clientRestConfigMapper ),
338- )
339- if err != nil {
340- setupLog .Error (err , "unable to config for creating helm client" )
341- return err
342- }
343-
344- acg , err := action .NewWrappedActionClientGetter (cfgGetter ,
345- helmclient .WithFailureRollbacks (false ),
346- )
347- if err != nil {
348- setupLog .Error (err , "unable to create helm client" )
349- return err
350- }
351-
352320 certPoolWatcher , err := httputil .NewCertPoolWatcher (cfg .catalogdCasDir , ctrl .Log .WithName ("cert-pool" ))
353321 if err != nil {
354322 setupLog .Error (err , "unable to create CA certificate pool" )
@@ -434,24 +402,30 @@ func run() error {
434402 crdupgradesafety .NewPreflight (aeClient .CustomResourceDefinitions ()),
435403 }
436404
437- // determine if PreAuthorizer should be enabled based on feature gate
438- var preAuth authorization.PreAuthorizer
439- if features .OperatorControllerFeatureGate .Enabled (features .PreflightPermissions ) {
440- preAuth = authorization .NewRBACPreAuthorizer (mgr .GetClient ())
405+ var ctrlBuilderOpts []controllers.ControllerBuilderOption
406+ if features .OperatorControllerFeatureGate .Enabled (features .BoxcutterRuntime ) {
407+ ctrlBuilderOpts = append (ctrlBuilderOpts , controllers .WithOwns (& ocv1.ClusterExtensionRevision {}))
408+ }
409+
410+ ceReconciler := & controllers.ClusterExtensionReconciler {
411+ Client : cl ,
412+ Resolver : resolver ,
413+ ImageCache : imageCache ,
414+ ImagePuller : imagePuller ,
415+ Finalizers : clusterExtensionFinalizers ,
416+ }
417+ ceController , err := ceReconciler .SetupWithManager (mgr , ctrlBuilderOpts ... )
418+ if err != nil {
419+ setupLog .Error (err , "unable to create controller" , "controller" , "ClusterExtension" )
420+ return err
441421 }
442422
443- // create applier
444- var (
445- ctrlBuilderOpts []controllers.ControllerBuilderOption
446- extApplier controllers.Applier
447- revisionStatesGetter controllers.RevisionStatesGetter
448- )
449423 certProvider := getCertificateProvider ()
450424 if features .OperatorControllerFeatureGate .Enabled (features .BoxcutterRuntime ) {
451425 // TODO: add support for preflight checks
452426 // TODO: better scheme handling - which types do we want to support?
453427 _ = apiextensionsv1 .AddToScheme (mgr .GetScheme ())
454- extApplier = & applier.Boxcutter {
428+ ceReconciler . Applier = & applier.Boxcutter {
455429 Client : mgr .GetClient (),
456430 Scheme : mgr .GetScheme (),
457431 RevisionGenerator : & applier.SimpleRevisionGenerator {
@@ -463,50 +437,8 @@ func run() error {
463437 },
464438 Preflights : preflights ,
465439 }
466- revisionStatesGetter = & controllers.BoxcutterRevisionStatesGetter {Reader : mgr .GetClient ()}
467- ctrlBuilderOpts = append (ctrlBuilderOpts , controllers .WithOwns (& ocv1.ClusterExtensionRevision {}))
468- } else {
469- // now initialize the helmApplier, assigning the potentially nil preAuth
470- extApplier = & applier.Helm {
471- ActionClientGetter : acg ,
472- Preflights : preflights ,
473- BundleToHelmChartConverter : & convert.BundleToHelmChartConverter {
474- BundleRenderer : registryv1 .Renderer ,
475- CertificateProvider : certProvider ,
476- IsWebhookSupportEnabled : certProvider != nil ,
477- },
478- PreAuthorizer : preAuth ,
479- HelmReleaseToObjectsConverter : & applier.HelmReleaseToObjectsConverter {},
480- }
481- revisionStatesGetter = & controllers.HelmRevisionStatesGetter {ActionClientGetter : acg }
482- }
483-
484- cm := contentmanager .NewManager (clientRestConfigMapper , mgr .GetConfig (), mgr .GetRESTMapper ())
485- err = clusterExtensionFinalizers .Register (controllers .ClusterExtensionCleanupContentManagerCacheFinalizer , finalizers .FinalizerFunc (func (ctx context.Context , obj client.Object ) (crfinalizer.Result , error ) {
486- ext := obj .(* ocv1.ClusterExtension )
487- err := cm .Delete (ext )
488- return crfinalizer.Result {}, err
489- }))
490- if err != nil {
491- setupLog .Error (err , "unable to register content manager cleanup finalizer" )
492- return err
493- }
494-
495- if err = (& controllers.ClusterExtensionReconciler {
496- Client : cl ,
497- Resolver : resolver ,
498- ImageCache : imageCache ,
499- ImagePuller : imagePuller ,
500- Applier : extApplier ,
501- RevisionStatesGetter : revisionStatesGetter ,
502- Finalizers : clusterExtensionFinalizers ,
503- Manager : cm ,
504- }).SetupWithManager (mgr , ctrlBuilderOpts ... ); err != nil {
505- setupLog .Error (err , "unable to create controller" , "controller" , "ClusterExtension" )
506- return err
507- }
440+ ceReconciler .RevisionStatesGetter = & controllers.BoxcutterRevisionStatesGetter {Reader : mgr .GetClient ()}
508441
509- if features .OperatorControllerFeatureGate .Enabled (features .BoxcutterRuntime ) {
510442 // Boxcutter
511443 const (
512444 boxcutterSystemPrefixFieldOwner = "olm.operatorframework.io"
@@ -551,6 +483,70 @@ func run() error {
551483 setupLog .Error (err , "unable to create controller" , "controller" , "ClusterExtensionRevision" )
552484 return err
553485 }
486+ } else {
487+ coreClient , err := corev1client .NewForConfig (mgr .GetConfig ())
488+ if err != nil {
489+ setupLog .Error (err , "unable to create core client" )
490+ return err
491+ }
492+ tokenGetter := authentication .NewTokenGetter (coreClient , authentication .WithExpirationDuration (1 * time .Hour ))
493+ clientRestConfigMapper := action .ServiceAccountRestConfigMapper (tokenGetter )
494+ if features .OperatorControllerFeatureGate .Enabled (features .SyntheticPermissions ) {
495+ clientRestConfigMapper = action .SyntheticUserRestConfigMapper (clientRestConfigMapper )
496+ }
497+
498+ cfgGetter , err := helmclient .NewActionConfigGetter (mgr .GetConfig (), mgr .GetRESTMapper (),
499+ helmclient .StorageDriverMapper (action .ChunkedStorageDriverMapper (coreClient , mgr .GetAPIReader (), cfg .systemNamespace )),
500+ helmclient .ClientNamespaceMapper (func (obj client.Object ) (string , error ) {
501+ ext := obj .(* ocv1.ClusterExtension )
502+ return ext .Spec .Namespace , nil
503+ }),
504+ helmclient .ClientRestConfigMapper (clientRestConfigMapper ),
505+ )
506+ if err != nil {
507+ setupLog .Error (err , "unable to config for creating helm client" )
508+ return err
509+ }
510+
511+ acg , err := action .NewWrappedActionClientGetter (cfgGetter ,
512+ helmclient .WithFailureRollbacks (false ),
513+ )
514+ if err != nil {
515+ setupLog .Error (err , "unable to create helm client" )
516+ return err
517+ }
518+
519+ // determine if PreAuthorizer should be enabled based on feature gate
520+ var preAuth authorization.PreAuthorizer
521+ if features .OperatorControllerFeatureGate .Enabled (features .PreflightPermissions ) {
522+ preAuth = authorization .NewRBACPreAuthorizer (mgr .GetClient ())
523+ }
524+
525+ cm := contentmanager .NewManager (clientRestConfigMapper , mgr .GetConfig (), mgr .GetRESTMapper ())
526+ err = clusterExtensionFinalizers .Register (controllers .ClusterExtensionCleanupContentManagerCacheFinalizer , finalizers .FinalizerFunc (func (ctx context.Context , obj client.Object ) (crfinalizer.Result , error ) {
527+ ext := obj .(* ocv1.ClusterExtension )
528+ err := cm .Delete (ext )
529+ return crfinalizer.Result {}, err
530+ }))
531+ if err != nil {
532+ setupLog .Error (err , "unable to register content manager cleanup finalizer" )
533+ return err
534+ }
535+ // now initialize the helmApplier, assigning the potentially nil preAuth
536+ ceReconciler .Applier = & applier.Helm {
537+ ActionClientGetter : acg ,
538+ Preflights : preflights ,
539+ BundleToHelmChartConverter : & convert.BundleToHelmChartConverter {
540+ BundleRenderer : registryv1 .Renderer ,
541+ CertificateProvider : certProvider ,
542+ IsWebhookSupportEnabled : certProvider != nil ,
543+ },
544+ HelmReleaseToObjectsConverter : & applier.HelmReleaseToObjectsConverter {},
545+ PreAuthorizer : preAuth ,
546+ Watcher : ceController ,
547+ Manager : cm ,
548+ }
549+ ceReconciler .RevisionStatesGetter = & controllers.HelmRevisionStatesGetter {ActionClientGetter : acg }
554550 }
555551
556552 if err = (& controllers.ClusterCatalogReconciler {
0 commit comments