Skip to content

Commit 3bd5b93

Browse files
committed
resolve linter issues
Signed-off-by: Joe Lanford <[email protected]>
1 parent 6d6965e commit 3bd5b93

File tree

4 files changed

+150
-130
lines changed

4 files changed

+150
-130
lines changed

cmd/operator-controller/main.go

Lines changed: 146 additions & 125 deletions
Original file line numberDiff line numberDiff line change
@@ -49,9 +49,11 @@ import (
4949
crcache "sigs.k8s.io/controller-runtime/pkg/cache"
5050
"sigs.k8s.io/controller-runtime/pkg/certwatcher"
5151
"sigs.k8s.io/controller-runtime/pkg/client"
52+
crcontroller "sigs.k8s.io/controller-runtime/pkg/controller"
5253
crfinalizer "sigs.k8s.io/controller-runtime/pkg/finalizer"
5354
"sigs.k8s.io/controller-runtime/pkg/healthz"
5455
"sigs.k8s.io/controller-runtime/pkg/log"
56+
"sigs.k8s.io/controller-runtime/pkg/manager"
5557
"sigs.k8s.io/controller-runtime/pkg/metrics/filters"
5658
"sigs.k8s.io/controller-runtime/pkg/metrics/server"
5759

@@ -420,133 +422,14 @@ func run() error {
420422
return err
421423
}
422424

423-
certProvider := getCertificateProvider()
424425
if features.OperatorControllerFeatureGate.Enabled(features.BoxcutterRuntime) {
425-
// TODO: add support for preflight checks
426-
// TODO: better scheme handling - which types do we want to support?
427-
_ = apiextensionsv1.AddToScheme(mgr.GetScheme())
428-
ceReconciler.Applier = &applier.Boxcutter{
429-
Client: mgr.GetClient(),
430-
Scheme: mgr.GetScheme(),
431-
RevisionGenerator: &applier.SimpleRevisionGenerator{
432-
Scheme: mgr.GetScheme(),
433-
BundleRenderer: &applier.RegistryV1BundleRenderer{
434-
BundleRenderer: registryv1.Renderer,
435-
CertificateProvider: certProvider,
436-
},
437-
},
438-
Preflights: preflights,
439-
}
440-
ceReconciler.RevisionStatesGetter = &controllers.BoxcutterRevisionStatesGetter{Reader: mgr.GetClient()}
441-
442-
// Boxcutter
443-
const (
444-
boxcutterSystemPrefixFieldOwner = "olm.operatorframework.io"
445-
)
446-
447-
discoveryClient, err := discovery.NewDiscoveryClientForConfig(restConfig)
448-
if err != nil {
449-
setupLog.Error(err, "unable to create discovery client")
450-
return err
451-
}
452-
453-
trackingCache, err := managedcache.NewTrackingCache(
454-
ctrl.Log.WithName("trackingCache"),
455-
restConfig,
456-
crcache.Options{
457-
Scheme: mgr.GetScheme(), Mapper: mgr.GetRESTMapper(),
458-
},
459-
)
460-
if err != nil {
461-
setupLog.Error(err, "unable to create boxcutter tracking cache")
462-
}
463-
if err := mgr.Add(trackingCache); err != nil {
464-
setupLog.Error(err, "unable to set up tracking cache")
465-
}
466-
467-
if err = (&controllers.ClusterExtensionRevisionReconciler{
468-
Client: cl,
469-
RevisionEngine: machinery.NewRevisionEngine(
470-
machinery.NewPhaseEngine(
471-
machinery.NewObjectEngine(
472-
mgr.GetScheme(), trackingCache, mgr.GetClient(),
473-
ownerhandling.NewNative(mgr.GetScheme()),
474-
machinery.NewComparator(ownerhandling.NewNative(mgr.GetScheme()), discoveryClient, mgr.GetScheme(), boxcutterSystemPrefixFieldOwner),
475-
boxcutterSystemPrefixFieldOwner, boxcutterSystemPrefixFieldOwner,
476-
),
477-
validation.NewClusterPhaseValidator(mgr.GetRESTMapper(), mgr.GetClient()),
478-
),
479-
validation.NewRevisionValidator(), mgr.GetClient(),
480-
),
481-
TrackingCache: trackingCache,
482-
}).SetupWithManager(mgr); err != nil {
483-
setupLog.Error(err, "unable to create controller", "controller", "ClusterExtensionRevision")
484-
return err
485-
}
426+
err = setupBoxcutter(mgr, ceReconciler, preflights)
486427
} 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}
428+
err = setupHelm(mgr, ceReconciler, preflights, ceController, clusterExtensionFinalizers)
429+
}
430+
if err != nil {
431+
setupLog.Error(err, "unable to setup lifecycler")
432+
return err
550433
}
551434

552435
if err = (&controllers.ClusterCatalogReconciler{
@@ -603,6 +486,144 @@ func getCertificateProvider() render.CertificateProvider {
603486
return nil
604487
}
605488

489+
func setupBoxcutter(mgr manager.Manager, ceReconciler *controllers.ClusterExtensionReconciler, preflights []applier.Preflight) error {
490+
certProvider := getCertificateProvider()
491+
492+
// TODO: add support for preflight checks
493+
// TODO: better scheme handling - which types do we want to support?
494+
_ = apiextensionsv1.AddToScheme(mgr.GetScheme())
495+
ceReconciler.Applier = &applier.Boxcutter{
496+
Client: mgr.GetClient(),
497+
Scheme: mgr.GetScheme(),
498+
RevisionGenerator: &applier.SimpleRevisionGenerator{
499+
Scheme: mgr.GetScheme(),
500+
BundleRenderer: &applier.RegistryV1BundleRenderer{
501+
BundleRenderer: registryv1.Renderer,
502+
CertificateProvider: certProvider,
503+
},
504+
},
505+
Preflights: preflights,
506+
}
507+
ceReconciler.RevisionStatesGetter = &controllers.BoxcutterRevisionStatesGetter{Reader: mgr.GetClient()}
508+
509+
// Boxcutter
510+
const (
511+
boxcutterSystemPrefixFieldOwner = "olm.operatorframework.io"
512+
)
513+
514+
discoveryClient, err := discovery.NewDiscoveryClientForConfig(mgr.GetConfig())
515+
if err != nil {
516+
return fmt.Errorf("unable to create discovery client: %w", err)
517+
}
518+
519+
trackingCache, err := managedcache.NewTrackingCache(
520+
ctrl.Log.WithName("trackingCache"),
521+
mgr.GetConfig(),
522+
crcache.Options{
523+
Scheme: mgr.GetScheme(), Mapper: mgr.GetRESTMapper(),
524+
},
525+
)
526+
if err != nil {
527+
return fmt.Errorf("unable to create boxcutter tracking cache: %v", err)
528+
}
529+
if err := mgr.Add(trackingCache); err != nil {
530+
return fmt.Errorf("unable to add tracking cache to manager: %v", err)
531+
}
532+
533+
if err = (&controllers.ClusterExtensionRevisionReconciler{
534+
Client: mgr.GetClient(),
535+
RevisionEngine: machinery.NewRevisionEngine(
536+
machinery.NewPhaseEngine(
537+
machinery.NewObjectEngine(
538+
mgr.GetScheme(), trackingCache, mgr.GetClient(),
539+
ownerhandling.NewNative(mgr.GetScheme()),
540+
machinery.NewComparator(ownerhandling.NewNative(mgr.GetScheme()), discoveryClient, mgr.GetScheme(), boxcutterSystemPrefixFieldOwner),
541+
boxcutterSystemPrefixFieldOwner, boxcutterSystemPrefixFieldOwner,
542+
),
543+
validation.NewClusterPhaseValidator(mgr.GetRESTMapper(), mgr.GetClient()),
544+
),
545+
validation.NewRevisionValidator(), mgr.GetClient(),
546+
),
547+
TrackingCache: trackingCache,
548+
}).SetupWithManager(mgr); err != nil {
549+
return fmt.Errorf("unable to setup ClusterExtensionRevision controller: %w", err)
550+
}
551+
return nil
552+
}
553+
554+
func setupHelm(
555+
mgr manager.Manager,
556+
ceReconciler *controllers.ClusterExtensionReconciler,
557+
preflights []applier.Preflight,
558+
ceController crcontroller.Controller,
559+
clusterExtensionFinalizers crfinalizer.Registerer,
560+
) error {
561+
coreClient, err := corev1client.NewForConfig(mgr.GetConfig())
562+
if err != nil {
563+
return fmt.Errorf("unable to create core client: %w", err)
564+
}
565+
tokenGetter := authentication.NewTokenGetter(coreClient, authentication.WithExpirationDuration(1*time.Hour))
566+
clientRestConfigMapper := action.ServiceAccountRestConfigMapper(tokenGetter)
567+
if features.OperatorControllerFeatureGate.Enabled(features.SyntheticPermissions) {
568+
clientRestConfigMapper = action.SyntheticUserRestConfigMapper(clientRestConfigMapper)
569+
}
570+
571+
cfgGetter, err := helmclient.NewActionConfigGetter(mgr.GetConfig(), mgr.GetRESTMapper(),
572+
helmclient.StorageDriverMapper(action.ChunkedStorageDriverMapper(coreClient, mgr.GetAPIReader(), cfg.systemNamespace)),
573+
helmclient.ClientNamespaceMapper(func(obj client.Object) (string, error) {
574+
ext := obj.(*ocv1.ClusterExtension)
575+
return ext.Spec.Namespace, nil
576+
}),
577+
helmclient.ClientRestConfigMapper(clientRestConfigMapper),
578+
)
579+
if err != nil {
580+
return fmt.Errorf("unable to create helm action config getter: %w", err)
581+
}
582+
583+
acg, err := action.NewWrappedActionClientGetter(cfgGetter,
584+
helmclient.WithFailureRollbacks(false),
585+
)
586+
if err != nil {
587+
return fmt.Errorf("unable to create helm action client getter: %w", err)
588+
}
589+
590+
// determine if PreAuthorizer should be enabled based on feature gate
591+
var preAuth authorization.PreAuthorizer
592+
if features.OperatorControllerFeatureGate.Enabled(features.PreflightPermissions) {
593+
preAuth = authorization.NewRBACPreAuthorizer(mgr.GetClient())
594+
}
595+
596+
cm := contentmanager.NewManager(clientRestConfigMapper, mgr.GetConfig(), mgr.GetRESTMapper())
597+
err = clusterExtensionFinalizers.Register(controllers.ClusterExtensionCleanupContentManagerCacheFinalizer, finalizers.FinalizerFunc(func(ctx context.Context, obj client.Object) (crfinalizer.Result, error) {
598+
ext := obj.(*ocv1.ClusterExtension)
599+
err := cm.Delete(ext)
600+
return crfinalizer.Result{}, err
601+
}))
602+
if err != nil {
603+
setupLog.Error(err, "unable to register content manager cleanup finalizer")
604+
return err
605+
}
606+
607+
certProvider := getCertificateProvider()
608+
609+
// now initialize the helmApplier, assigning the potentially nil preAuth
610+
ceReconciler.Applier = &applier.Helm{
611+
ActionClientGetter: acg,
612+
Preflights: preflights,
613+
BundleToHelmChartConverter: &convert.BundleToHelmChartConverter{
614+
BundleRenderer: registryv1.Renderer,
615+
CertificateProvider: certProvider,
616+
IsWebhookSupportEnabled: certProvider != nil,
617+
},
618+
HelmReleaseToObjectsConverter: &applier.HelmReleaseToObjectsConverter{},
619+
PreAuthorizer: preAuth,
620+
Watcher: ceController,
621+
Manager: cm,
622+
}
623+
ceReconciler.RevisionStatesGetter = &controllers.HelmRevisionStatesGetter{ActionClientGetter: acg}
624+
return nil
625+
}
626+
606627
func main() {
607628
if err := operatorControllerCmd.Execute(); err != nil {
608629
fmt.Fprintf(os.Stderr, "Error: %v\n", err)

internal/operator-controller/applier/boxcutter_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -510,7 +510,7 @@ func TestBoxcutter_Apply(t *testing.T) {
510510
} else {
511511
require.NoError(t, err)
512512
assert.False(t, installSucceeded)
513-
assert.Equal(t, installStatus, "New revision created")
513+
assert.Equal(t, "New revision created", installStatus)
514514
}
515515

516516
if tc.validate != nil {

internal/operator-controller/applier/helm_test.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -344,7 +344,7 @@ func TestApply_Installation(t *testing.T) {
344344

345345
installSucceeded, installStatus, err := helmApplier.Apply(context.TODO(), validFS, testCE, testObjectLabels, testStorageLabels)
346346
require.NoError(t, err)
347-
require.Equal(t, "", installStatus)
347+
require.Empty(t, installStatus)
348348
require.True(t, installSucceeded)
349349
})
350350
}
@@ -480,7 +480,7 @@ func TestApply_InstallationWithPreflightPermissionsEnabled(t *testing.T) {
480480

481481
installSucceeded, installStatus, err := helmApplier.Apply(context.TODO(), validFS, validCE, testObjectLabels, testStorageLabels)
482482
require.NoError(t, err)
483-
require.Equal(t, "", installStatus)
483+
require.Empty(t, installStatus)
484484
require.True(t, installSucceeded)
485485
})
486486
}

internal/operator-controller/controllers/clusterextension_controller.go

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -525,7 +525,7 @@ func (d *HelmRevisionStatesGetter) GetRevisionStates(ctx context.Context, ext *o
525525
}
526526

527527
type BoxcutterRevisionStatesGetter struct {
528-
client.Reader
528+
Reader client.Reader
529529
}
530530

531531
func (d *BoxcutterRevisionStatesGetter) GetRevisionStates(ctx context.Context, ext *ocv1.ClusterExtension) (*RevisionStates, error) {
@@ -545,7 +545,6 @@ func (d *BoxcutterRevisionStatesGetter) GetRevisionStates(ctx context.Context, e
545545
rs := &RevisionStates{}
546546
for _, rev := range existingRevisionList.Items {
547547
if rev.Spec.LifecycleState == ocv1.ClusterExtensionRevisionLifecycleStateActive {
548-
549548
// TODO: the setting of these annotations (happens in boxcutter applier when we pass in "storageLabels")
550549
// is fairly decoupled from this code where we get the annotations back out. We may want to co-locate
551550
// the set/get logic a bit better to make it more maintainable and less likely to get out of sync.

0 commit comments

Comments
 (0)