66 "context"
77 "encoding/json"
88 "fmt"
9- types2 "pkg.package-operator.run/boxcutter/machinery/types"
109 "strings"
1110 "time"
1211
@@ -22,6 +21,7 @@ import (
2221 "k8s.io/utils/ptr"
2322 "pkg.package-operator.run/boxcutter"
2423 "pkg.package-operator.run/boxcutter/machinery"
24+ machinerytypes "pkg.package-operator.run/boxcutter/machinery/types"
2525 "pkg.package-operator.run/boxcutter/managedcache"
2626 "pkg.package-operator.run/boxcutter/ownerhandling"
2727 "pkg.package-operator.run/boxcutter/validation"
@@ -38,18 +38,16 @@ import (
3838)
3939
4040const (
41- ClusterExtensionRevisionOwnerLabel = "olm.operatorframework.io/owner"
42-
41+ ClusterExtensionRevisionOwnerLabel = "olm.operatorframework.io/owner"
4342 boxcutterSystemPrefixFieldOwner = "olm.operatorframework.io"
4443 clusterExtensionRevisionTeardownFinalizer = "olm.operatorframework.io/teardown"
4544)
4645
4746// ClusterExtensionRevisionReconciler actions individual snapshots of ClusterExtensions,
4847// as part of the boxcutter integration.
4948type ClusterExtensionRevisionReconciler struct {
50- Client client.Client
51- AccessManager AccessManager
52- RevisionEngineGetter RevisionEngineGetter
49+ Client client.Client
50+ RevisionManager RevisionManager
5351}
5452
5553type AccessManager interface {
@@ -59,21 +57,28 @@ type AccessManager interface {
5957}
6058
6159type RevisionEngine interface {
62- Teardown (ctx context.Context , rev types2 .Revision , opts ... types2 .RevisionTeardownOption ) (machinery.RevisionTeardownResult , error )
63- Reconcile (ctx context.Context , rev types2 .Revision , opts ... types2 .RevisionReconcileOption ) (machinery.RevisionResult , error )
60+ Teardown (ctx context.Context , rev machinerytypes .Revision , opts ... machinerytypes .RevisionTeardownOption ) (machinery.RevisionTeardownResult , error )
61+ Reconcile (ctx context.Context , rev machinerytypes .Revision , opts ... machinerytypes .RevisionReconcileOption ) (machinery.RevisionResult , error )
6462}
6563
66- type RevisionEngineGetter interface {
67- GetRevisionEngineWithAccessor (accessor managedcache.Accessor ) RevisionEngine
64+ type RevisionManager interface {
65+ GetScopedRevisionEngine (ctx context.Context , owner * ocv1.ClusterExtension , user client.Object , usedFor []client.Object ) (RevisionEngine , error )
66+ HandleDeletion (ctx context.Context , owner * ocv1.ClusterExtension , user client.Object ) error
67+ Source (handler.EventHandler , ... predicate.Predicate ) source.Source
6868}
6969
7070type OLMRevisionEngineGetter struct {
7171 DiscoveryClient * discovery.DiscoveryClient
7272 Scheme * runtime.Scheme
7373 RestMapper meta.RESTMapper
74+ AccessManager AccessManager
7475}
7576
76- func (r * OLMRevisionEngineGetter ) GetRevisionEngineWithAccessor (accessor managedcache.Accessor ) RevisionEngine {
77+ func (r * OLMRevisionEngineGetter ) GetScopedRevisionEngine (ctx context.Context , owner * ocv1.ClusterExtension , user client.Object , usedFor []client.Object ) (RevisionEngine , error ) {
78+ accessor , err := r .AccessManager .GetWithUser (ctx , owner , user , usedFor )
79+ if err != nil {
80+ return nil , fmt .Errorf ("get cache: %w" , err )
81+ }
7782 return machinery .NewRevisionEngine (
7883 machinery .NewPhaseEngine (
7984 machinery .NewObjectEngine (
@@ -85,7 +90,15 @@ func (r *OLMRevisionEngineGetter) GetRevisionEngineWithAccessor(accessor managed
8590 validation .NewClusterPhaseValidator (r .RestMapper , accessor ),
8691 ),
8792 validation .NewRevisionValidator (), accessor ,
88- )
93+ ), nil
94+ }
95+
96+ func (r * OLMRevisionEngineGetter ) HandleDeletion (ctx context.Context , owner * ocv1.ClusterExtension , user client.Object ) error {
97+ return r .AccessManager .FreeWithUser (ctx , owner , user )
98+ }
99+
100+ func (r * OLMRevisionEngineGetter ) Source (eventHandler handler.EventHandler , p ... predicate.Predicate ) source.Source {
101+ return r .AccessManager .Source (eventHandler , p ... )
89102}
90103
91104//+kubebuilder:rbac:groups=olm.operatorframework.io,resources=clusterextensionrevisions,verbs=get;list;watch;update;patch;create;delete
@@ -148,12 +161,7 @@ func (c *ClusterExtensionRevisionReconciler) reconcile(ctx context.Context, ce *
148161 }
149162 }
150163
151- accessor , err := c .AccessManager .GetWithUser (ctx , ce , rev , objects )
152- if err != nil {
153- return ctrl.Result {}, fmt .Errorf ("get cache: %w" , err )
154- }
155-
156- re , err := c .RevisionEngineGetter .GetRevisionEngineWithAccessor (accessor )
164+ re , err := c .RevisionManager .GetScopedRevisionEngine (ctx , ce , rev , objects )
157165 if err != nil {
158166 return ctrl.Result {}, err
159167 }
@@ -173,7 +181,7 @@ func (c *ClusterExtensionRevisionReconciler) reconcile(ctx context.Context, ce *
173181 if ! tres .IsComplete () {
174182 return ctrl.Result {}, nil
175183 }
176- if err := c .AccessManager . FreeWithUser (ctx , ce , rev ); err != nil {
184+ if err := c .RevisionManager . HandleDeletion (ctx , ce , rev ); err != nil {
177185 return ctrl.Result {}, fmt .Errorf ("get cache: %w" , err )
178186 }
179187 return ctrl.Result {}, c .removeFinalizer (ctx , rev , clusterExtensionRevisionTeardownFinalizer )
@@ -209,7 +217,7 @@ func (c *ClusterExtensionRevisionReconciler) reconcile(ctx context.Context, ce *
209217 // Archive other revisions.
210218 for _ , a := range previous {
211219 if err := c .Client .Patch (ctx , a , client .RawPatch (
212- types .MergePatchType , []byte (`{"data ":{"state ":"Archived"}}` ))); err != nil {
220+ types .MergePatchType , []byte (`{"spec ":{"lifecycleState ":"Archived"}}` ))); err != nil {
213221 return ctrl.Result {}, fmt .Errorf ("archive previous Revision: %w" , err )
214222 }
215223 }
@@ -293,7 +301,7 @@ func (c *ClusterExtensionRevisionReconciler) SetupWithManager(mgr ctrl.Manager)
293301 builder .WithPredicates (predicate.ResourceVersionChangedPredicate {}),
294302 ).
295303 WatchesRawSource (
296- c .AccessManager .Source (
304+ c .RevisionManager .Source (
297305 handler .EnqueueRequestForOwner (mgr .GetScheme (), mgr .GetRESTMapper (), & ocv1.ClusterExtensionRevision {}),
298306 predicate.ResourceVersionChangedPredicate {},
299307 ),
0 commit comments