Skip to content

Commit 2a8e7b2

Browse files
committed
Fixup
1 parent 2de026e commit 2a8e7b2

File tree

9 files changed

+61
-20
lines changed

9 files changed

+61
-20
lines changed

api/v1/clusterextensionrevision_types.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ type ClusterExtensionRevisionSpec struct {
3838
// +kubebuilder:validation:XValidation:rule="self == oldSelf", message="phases is immutable"
3939
Phases []ClusterExtensionRevisionPhase `json:"phases"`
4040
// +kubebuilder:validation:XValidation:rule="self == oldSelf", message="previous is immutable"
41-
Previous []ClusterExtensionRevisionPrevious `json:"previous"`
41+
Previous []ClusterExtensionRevisionPrevious `json:"previous,omitempty"`
4242
}
4343

4444
// ClusterExtensionRevisionLifecycleState specifies the lifecycle state of the ClusterExtensionRevision.

cmd/operator-controller/main.go

Lines changed: 19 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -451,7 +451,18 @@ func run() error {
451451
return err
452452
}
453453
mapFunc := func(ctx context.Context, ce *ocv1.ClusterExtension, c *rest.Config, o crcache.Options) (*rest.Config, crcache.Options, error) {
454-
// TODO: Rest Config Mapping / change ServiceAccount
454+
saKey := client.ObjectKey{
455+
Name: ce.Spec.ServiceAccount.Name,
456+
Namespace: ce.Spec.Namespace,
457+
}
458+
saConfig := rest.AnonymousClientConfig(c)
459+
saConfig.Wrap(func(rt http.RoundTripper) http.RoundTripper {
460+
return &authentication.TokenInjectingRoundTripper{
461+
Tripper: rt,
462+
TokenGetter: tokenGetter,
463+
Key: saKey,
464+
}
465+
})
455466

456467
// Cache scoping
457468
req1, err := labels.NewRequirement(
@@ -461,12 +472,17 @@ func run() error {
461472
}
462473
o.DefaultLabelSelector = labels.NewSelector().Add(*req1)
463474

464-
return c, o, nil
475+
return saConfig, o, nil
465476
}
466-
accessManager := managedcache.NewObjectBoundAccessManager[*ocv1.ClusterExtension](
477+
478+
accessManager := managedcache.NewObjectBoundAccessManager(
467479
ctrl.Log.WithName("accessmanager"), mapFunc, restConfig, crcache.Options{
468480
Scheme: mgr.GetScheme(), Mapper: mgr.GetRESTMapper(),
469481
})
482+
if err := mgr.Add(accessManager); err != nil {
483+
setupLog.Error(err, "unable to register AccessManager")
484+
return err
485+
}
470486
// Boxcutter
471487

472488
if err = (&controllers.ClusterExtensionReconciler{

config/base/operator-controller/crd/bases/olm.operatorframework.io_clusterextensionrevisions.yaml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,6 @@ spec:
104104
rule: self == oldSelf
105105
required:
106106
- phases
107-
- previous
108107
- revision
109108
type: object
110109
status:

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

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,9 @@ rules:
2828
- olm.operatorframework.io
2929
resources:
3030
- clusterextensionrevisions
31-
- clusterextensions
3231
verbs:
32+
- create
33+
- delete
3334
- get
3435
- list
3536
- patch
@@ -50,6 +51,16 @@ rules:
5051
verbs:
5152
- patch
5253
- update
54+
- apiGroups:
55+
- olm.operatorframework.io
56+
resources:
57+
- clusterextensions
58+
verbs:
59+
- get
60+
- list
61+
- patch
62+
- update
63+
- watch
5364
- apiGroups:
5465
- rbac.authorization.k8s.io
5566
resources:

go.mod

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ module github.com/operator-framework/operator-controller
22

33
go 1.23.4
44

5+
replace pkg.package-operator.run/boxcutter => ../../package-operator/boxcutter
6+
57
require (
68
github.com/BurntSushi/toml v1.5.0
79
github.com/Masterminds/semver/v3 v3.3.1
@@ -109,7 +111,7 @@ require (
109111
github.com/go-logr/stdr v1.2.2 // indirect
110112
github.com/go-openapi/analysis v0.23.0 // indirect
111113
github.com/go-openapi/errors v0.22.1 // indirect
112-
github.com/go-openapi/jsonpointer v0.21.0 // indirect
114+
github.com/go-openapi/jsonpointer v0.21.1 // indirect
113115
github.com/go-openapi/jsonreference v0.21.0 // indirect
114116
github.com/go-openapi/loads v0.22.0 // indirect
115117
github.com/go-openapi/runtime v0.28.0 // indirect
@@ -184,8 +186,8 @@ require (
184186
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
185187
github.com/proglottis/gpgme v0.1.4 // indirect
186188
github.com/prometheus/client_model v0.6.1 // indirect
187-
github.com/prometheus/common v0.62.0 // indirect
188-
github.com/prometheus/procfs v0.15.1 // indirect
189+
github.com/prometheus/common v0.63.0 // indirect
190+
github.com/prometheus/procfs v0.16.0 // indirect
189191
github.com/rivo/uniseg v0.4.7 // indirect
190192
github.com/rubenv/sql-migrate v1.7.1 // indirect
191193
github.com/russross/blackfriday/v2 v2.1.0 // indirect

go.sum

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -178,8 +178,8 @@ github.com/go-openapi/analysis v0.23.0 h1:aGday7OWupfMs+LbmLZG4k0MYXIANxcuBTYUC0
178178
github.com/go-openapi/analysis v0.23.0/go.mod h1:9mz9ZWaSlV8TvjQHLl2mUW2PbZtemkE8yA5v22ohupo=
179179
github.com/go-openapi/errors v0.22.1 h1:kslMRRnK7NCb/CvR1q1VWuEQCEIsBGn5GgKD9e+HYhU=
180180
github.com/go-openapi/errors v0.22.1/go.mod h1:+n/5UdIqdVnLIJ6Q9Se8HNGUXYaY6CN8ImWzfi/Gzp0=
181-
github.com/go-openapi/jsonpointer v0.21.0 h1:YgdVicSA9vH5RiHs9TZW5oyafXZFc6+2Vc1rr/O9oNQ=
182-
github.com/go-openapi/jsonpointer v0.21.0/go.mod h1:IUyH9l/+uyhIYQ/PXVA41Rexl+kOkAPDdXEYns6fzUY=
181+
github.com/go-openapi/jsonpointer v0.21.1 h1:whnzv/pNXtK2FbX/W9yJfRmE2gsmkfahjMKB0fZvcic=
182+
github.com/go-openapi/jsonpointer v0.21.1/go.mod h1:50I1STOfbY1ycR8jGz8DaMeLCdXiI6aDteEdRNNzpdk=
183183
github.com/go-openapi/jsonreference v0.21.0 h1:Rs+Y7hSXT83Jacb7kFyjn4ijOuVGSvOdF2+tg1TRrwQ=
184184
github.com/go-openapi/jsonreference v0.21.0/go.mod h1:LmZmgsrTkVg9LG4EaHeY8cBDslNPMo06cago5JNLkm4=
185185
github.com/go-openapi/loads v0.22.0 h1:ECPGd4jX1U6NApCGG1We+uEozOAvXvJSF4nnwHZ8Aco=
@@ -436,13 +436,13 @@ github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p
436436
github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
437437
github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4=
438438
github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc=
439-
github.com/prometheus/common v0.62.0 h1:xasJaQlnWAeyHdUBeGjXmutelfJHWMRr+Fg4QszZ2Io=
440-
github.com/prometheus/common v0.62.0/go.mod h1:vyBcEuLSvWos9B1+CyL7JZ2up+uFzXhkqml0W5zIY1I=
439+
github.com/prometheus/common v0.63.0 h1:YR/EIY1o3mEFP/kZCD7iDMnLPlGyuU2Gb3HIcXnA98k=
440+
github.com/prometheus/common v0.63.0/go.mod h1:VVFF/fBIoToEnWRVkYoXEkq3R3paCoxG9PXP74SnV18=
441441
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
442442
github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
443443
github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ=
444-
github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc=
445-
github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk=
444+
github.com/prometheus/procfs v0.16.0 h1:xh6oHhKwnOJKMYiYBDWmkHqQPyiY40sny36Cmx2bbsM=
445+
github.com/prometheus/procfs v0.16.0/go.mod h1:8veyXUu3nGP7oaCxhX6yeaM5u4stL2FeMXnCqhDthZg=
446446
github.com/redis/go-redis/extra/rediscmd/v9 v9.0.5 h1:EaDatTxkdHG+U3Bk4EUr+DZ7fOGwTfezUiUJMaIcaho=
447447
github.com/redis/go-redis/extra/rediscmd/v9 v9.0.5/go.mod h1:fyalQWdtzDBECAQFBJuQe5bzQ02jGd5Qcbgb97Flm7U=
448448
github.com/redis/go-redis/extra/redisotel/v9 v9.0.5 h1:EfpWLLCyXw8PSM2/XNJLjI3Pb27yVE+gIAfeqp8LUCc=
@@ -803,8 +803,6 @@ k8s.io/utils v0.0.0-20241210054802-24370beab758 h1:sdbE21q2nlQtFh65saZY+rRM6x6aJ
803803
k8s.io/utils v0.0.0-20241210054802-24370beab758/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
804804
oras.land/oras-go v1.2.5 h1:XpYuAwAb0DfQsunIyMfeET92emK8km3W4yEzZvUbsTo=
805805
oras.land/oras-go v1.2.5/go.mod h1:PuAwRShRZCsZb7g8Ar3jKKQR/2A/qN+pkYxIOd/FAoo=
806-
pkg.package-operator.run/boxcutter v0.1.0 h1:SXTrkqe19ikGrRuUgbOJUFvd/U5h928o5SWr3mTRAbo=
807-
pkg.package-operator.run/boxcutter v0.1.0/go.mod h1:1vqTF3YbUHfyuQGrFUB9Glj8xokcncIjhzePH++02SM=
808806
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.31.0 h1:CPT0ExVicCzcpeN4baWEV2ko2Z/AsiZgEdwgcfwLgMo=
809807
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.31.0/go.mod h1:Ve9uj1L+deCXFrPOk1LpFXqTg7LCFzFso6PA48q/XZw=
810808
sigs.k8s.io/controller-runtime v0.20.3 h1:I6Ln8JfQjHH7JbtCD2HCYHoIzajoRxPNuvhvcDbZgkI=

internal/operator-controller/applier/boxcutter.go

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ func (bc *Boxcutter) apply(
103103
// Build desired revision
104104
desiredRevision := &ocv1.ClusterExtensionRevision{
105105
ObjectMeta: metav1.ObjectMeta{
106+
Annotations: map[string]string{},
106107
Labels: map[string]string{
107108
controllers.ClusterExtensionRevisionOwnerLabel: ext.Name,
108109
},
@@ -144,8 +145,9 @@ func (bc *Boxcutter) apply(
144145
revisionNumber++
145146

146147
newRevision := desiredRevision
148+
newRevision.Name = fmt.Sprintf("%s-%d", ext.Name, revisionNumber)
149+
newRevision.Annotations[revisionHashAnnotation] = desiredHash
147150
newRevision.Spec.Revision = revisionNumber
148-
// newRevision.Spec.Previous
149151
for _, prevRevision := range prevRevisions {
150152
newRevision.Spec.Previous = append(newRevision.Spec.Previous, ocv1.ClusterExtensionRevisionPrevious{
151153
Name: prevRevision.Name,

internal/operator-controller/controllers/clusterextension_controller.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -409,6 +409,7 @@ func (r *ClusterExtensionReconciler) SetupWithManager(mgr ctrl.Manager) error {
409409
controller, err := ctrl.NewControllerManagedBy(mgr).
410410
For(&ocv1.ClusterExtension{}).
411411
Named("controller-operator-cluster-extension-controller").
412+
Owns(&ocv1.ClusterExtensionRevision{}).
412413
Watches(&ocv1.ClusterCatalog{},
413414
crhandler.EnqueueRequestsFromMapFunc(clusterExtensionRequestsForCatalog(mgr.GetClient(), mgr.GetLogger())),
414415
builder.WithPredicates(predicate.Funcs{

internal/operator-controller/controllers/clusterextensionrevision_controller.go

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ type accessManager interface {
5959
Source(handler.EventHandler, ...predicate.Predicate) source.Source
6060
}
6161

62-
//+kubebuilder:rbac:groups=olm.operatorframework.io,resources=clusterextensionrevisions,verbs=get;list;watch;update;patch
62+
//+kubebuilder:rbac:groups=olm.operatorframework.io,resources=clusterextensionrevisions,verbs=get;list;watch;update;patch;create;delete
6363
//+kubebuilder:rbac:groups=olm.operatorframework.io,resources=clusterextensionrevisions/status,verbs=update;patch
6464
//+kubebuilder:rbac:groups=olm.operatorframework.io,resources=clusterextensionrevisions/finalizers,verbs=update
6565

@@ -118,6 +118,18 @@ func (c *ClusterExtensionRevisionReconciler) reconcile(
118118
objects = append(objects, &pobj)
119119
}
120120
}
121+
122+
// THIS IS STUPID, PLEASE FIX!
123+
// Revisions need individual finalizers on the ClusterExtension to prevent it's premature deletion.
124+
if rev.DeletionTimestamp.IsZero() &&
125+
rev.Spec.LifecycleState != ocv1.ClusterExtensionRevisionLifecycleStateArchived {
126+
// We can't lookup the complete ClusterExtension when it's already deleted.
127+
// This only works when the controller-manager is not restarted during teardown.
128+
if err := c.Client.Get(ctx, client.ObjectKeyFromObject(ce), ce); err != nil {
129+
return res, err
130+
}
131+
}
132+
121133
accessor, err := c.AccessManager.GetWithUser(ctx, ce, rev, objects)
122134
if err != nil {
123135
return res, fmt.Errorf("get cache: %w", err)
@@ -280,7 +292,7 @@ func (c *ClusterExtensionRevisionReconciler) SetupWithManager(mgr ctrl.Manager)
280292
).
281293
WatchesRawSource(
282294
c.AccessManager.Source(
283-
handler.EnqueueRequestForOwner(mgr.GetScheme(), mgr.GetRESTMapper(), &ocv1.ClusterExtension{}),
295+
handler.EnqueueRequestForOwner(mgr.GetScheme(), mgr.GetRESTMapper(), &ocv1.ClusterExtensionRevision{}),
284296
predicate.ResourceVersionChangedPredicate{},
285297
),
286298
).

0 commit comments

Comments
 (0)