@@ -31,6 +31,7 @@ import (
3131 "github.com/containers/image/v5/types"
3232 "github.com/spf13/cobra"
3333 rbacv1 "k8s.io/api/rbac/v1"
34+ apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
3435 apiextensionsv1client "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset/typed/apiextensions/v1"
3536 k8slabels "k8s.io/apimachinery/pkg/labels"
3637 "k8s.io/apimachinery/pkg/selection"
@@ -438,9 +439,17 @@ func run() error {
438439
439440 if features .OperatorControllerFeatureGate .Enabled (features .BoxcutterRuntime ) {
440441 // TODO: add support for preflight checks
442+ // TODO: better scheme handling - which types do we want to support?
443+ _ = apiextensionsv1 .AddToScheme (mgr .GetScheme ())
441444 extApplier = & applier.Boxcutter {
442445 Client : mgr .GetClient (),
443446 Scheme : mgr .GetScheme (),
447+ RevisionGenerator : & applier.SimpleRevisionGenerator {
448+ Scheme : mgr .GetScheme (),
449+ BundleRenderer : & applier.RegistryV1BundleRenderer {
450+ BundleRenderer : registryv1 .Renderer ,
451+ },
452+ },
444453 }
445454 ctrlBuilderOpts = append (ctrlBuilderOpts , controllers .WithOwns (& ocv1.ClusterExtensionRevision {}))
446455 } else {
@@ -469,46 +478,6 @@ func run() error {
469478 return err
470479 }
471480
472- // Boxcutter
473- discoveryClient , err := discovery .NewDiscoveryClientForConfig (restConfig )
474- if err != nil {
475- setupLog .Error (err , "unable to create discovery client" )
476- return err
477- }
478- mapFunc := func (ctx context.Context , ce * ocv1.ClusterExtension , c * rest.Config , o crcache.Options ) (* rest.Config , crcache.Options , error ) {
479- saKey := client.ObjectKey {
480- Name : ce .Spec .ServiceAccount .Name ,
481- Namespace : ce .Spec .Namespace ,
482- }
483- saConfig := rest .AnonymousClientConfig (c )
484- saConfig .Wrap (func (rt http.RoundTripper ) http.RoundTripper {
485- return & authentication.TokenInjectingRoundTripper {
486- Tripper : rt ,
487- TokenGetter : tokenGetter ,
488- Key : saKey ,
489- }
490- })
491-
492- // Cache scoping
493- req1 , err := k8slabels .NewRequirement (
494- controllers .ClusterExtensionRevisionOwnerLabel , selection .Equals , []string {ce .Name })
495- if err != nil {
496- return nil , o , err
497- }
498- o .DefaultLabelSelector = k8slabels .NewSelector ().Add (* req1 )
499-
500- return saConfig , o , nil
501- }
502-
503- accessManager := managedcache .NewObjectBoundAccessManager (
504- ctrl .Log .WithName ("accessmanager" ), mapFunc , restConfig , crcache.Options {
505- Scheme : mgr .GetScheme (), Mapper : mgr .GetRESTMapper (),
506- })
507- if err := mgr .Add (accessManager ); err != nil {
508- setupLog .Error (err , "unable to register AccessManager" )
509- return err
510- }
511-
512481 if err = (& controllers.ClusterExtensionReconciler {
513482 Client : cl ,
514483 Resolver : resolver ,
@@ -524,12 +493,54 @@ func run() error {
524493 }
525494
526495 if features .OperatorControllerFeatureGate .Enabled (features .BoxcutterRuntime ) {
496+ // Boxcutter
497+ discoveryClient , err := discovery .NewDiscoveryClientForConfig (restConfig )
498+ if err != nil {
499+ setupLog .Error (err , "unable to create discovery client" )
500+ return err
501+ }
502+ mapFunc := func (ctx context.Context , ce * ocv1.ClusterExtension , c * rest.Config , o crcache.Options ) (* rest.Config , crcache.Options , error ) {
503+ saKey := client.ObjectKey {
504+ Name : ce .Spec .ServiceAccount .Name ,
505+ Namespace : ce .Spec .Namespace ,
506+ }
507+ saConfig := rest .AnonymousClientConfig (c )
508+ saConfig .Wrap (func (rt http.RoundTripper ) http.RoundTripper {
509+ return & authentication.TokenInjectingRoundTripper {
510+ Tripper : rt ,
511+ TokenGetter : tokenGetter ,
512+ Key : saKey ,
513+ }
514+ })
515+
516+ // Cache scoping
517+ req1 , err := k8slabels .NewRequirement (
518+ controllers .ClusterExtensionRevisionOwnerLabel , selection .Equals , []string {ce .Name })
519+ if err != nil {
520+ return nil , o , err
521+ }
522+ o .DefaultLabelSelector = k8slabels .NewSelector ().Add (* req1 )
523+
524+ return saConfig , o , nil
525+ }
526+
527+ accessManager := managedcache .NewObjectBoundAccessManager (
528+ ctrl .Log .WithName ("accessmanager" ), mapFunc , restConfig , crcache.Options {
529+ Scheme : mgr .GetScheme (), Mapper : mgr .GetRESTMapper (),
530+ })
531+ if err := mgr .Add (accessManager ); err != nil {
532+ setupLog .Error (err , "unable to register AccessManager" )
533+ return err
534+ }
535+
527536 if err = (& controllers.ClusterExtensionRevisionReconciler {
528- Client : cl ,
529- AccessManager : accessManager ,
530- Scheme : mgr .GetScheme (),
531- RestMapper : mgr .GetRESTMapper (),
532- DiscoveryClient : discoveryClient ,
537+ Client : cl ,
538+ AccessManager : accessManager ,
539+ RevisionEngineGetter : controllers.OLMRevisionEngineGetter {
540+ Scheme : mgr .GetScheme (),
541+ RestMapper : mgr .GetRESTMapper (),
542+ DiscoveryClient : discoveryClient ,
543+ },
533544 }).SetupWithManager (mgr ); err != nil {
534545 setupLog .Error (err , "unable to create controller" , "controller" , "ClusterExtension" )
535546 return err
0 commit comments