Skip to content

Commit 2e35363

Browse files
author
Per Goncalves da Silva
committed
Progress
Signed-off-by: Per Goncalves da Silva <[email protected]>
1 parent 26b052f commit 2e35363

File tree

11 files changed

+942
-203
lines changed

11 files changed

+942
-203
lines changed

cmd/operator-controller/main.go

Lines changed: 56 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -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

config/base/operator-controller/rbac/experimental/role.yaml

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,10 @@ rules:
2727
- apiGroups:
2828
- olm.operatorframework.io
2929
resources:
30-
- clusterextensions
30+
- clusterextensionrevisions
3131
verbs:
32+
- create
33+
- delete
3234
- get
3335
- list
3436
- patch
@@ -37,16 +39,28 @@ rules:
3739
- apiGroups:
3840
- olm.operatorframework.io
3941
resources:
42+
- clusterextensionrevisions/finalizers
4043
- clusterextensions/finalizers
4144
verbs:
4245
- update
4346
- apiGroups:
4447
- olm.operatorframework.io
4548
resources:
49+
- clusterextensionrevisions/status
4650
- clusterextensions/status
4751
verbs:
4852
- patch
4953
- update
54+
- apiGroups:
55+
- olm.operatorframework.io
56+
resources:
57+
- clusterextensions
58+
verbs:
59+
- get
60+
- list
61+
- patch
62+
- update
63+
- watch
5064
- apiGroups:
5165
- rbac.authorization.k8s.io
5266
resources:

config/samples/olm_v1_clusterextension.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,10 @@ rules:
3333
resources: [clusterextensions/finalizers]
3434
verbs: [update]
3535
resourceNames: [argocd]
36+
# Allow ClusterExtensionRevisions to set blockOwnerDeletion ownerReferences
37+
- apiGroups: [olm.operatorframework.io]
38+
resources: [clusterextensionrevisions/finalizers]
39+
verbs: [update]
3640
# Manage ArgoCD CRDs
3741
- apiGroups: [apiextensions.k8s.io]
3842
resources: [customresourcedefinitions]

0 commit comments

Comments
 (0)