Skip to content

Commit eeef91a

Browse files
committed
Update controller-runtime (v0.15) and K8s (v1.27)
This deals with various breaking changes in controller-runtime, as documented in the release notes: https://github.com/kubernetes-sigs/controller-runtime/releases/tag/v0.15.0 In short: - `Watches` now use a `client.Object` instead of a `source.Kind`. - `handler.MapFunc` signature accepts a Go context, which is used to log any errors, instead of silently ignoring them and/or panicking. - Fake clients used in tests are now configured using `WithStatusSubresource` to enable the correct behavior for status updates and patches. - Max concurrent reconciles is configured on the manager, instead of configuring them per reconciler instance. - Various manager configuration options have been moved to new structures and/or fields. In addition to this, all other dependencies which had updates are updated to their latest (compatible) versions as well. Signed-off-by: Hidde Beydals <[email protected]>
1 parent fc0df4d commit eeef91a

24 files changed

+559
-450
lines changed

Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,7 @@ FUZZ_TIME ?= 1m
3838
GO_STATIC_FLAGS=-ldflags "-s -w" -tags 'netgo,osusergo,static_build$(addprefix ,,$(GO_TAGS))'
3939

4040
# API (doc) generation utilities
41-
CONTROLLER_GEN_VERSION ?= v0.11.1
41+
CONTROLLER_GEN_VERSION ?= v0.12.0
4242
GEN_API_REF_DOCS_VERSION ?= e327d0730470cbd61b06300f81c5fcf91c23c113
4343

4444
# If gobin not set, create one on ./build and add to path.

config/crd/bases/source.toolkit.fluxcd.io_buckets.yaml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,7 @@ apiVersion: apiextensions.k8s.io/v1
33
kind: CustomResourceDefinition
44
metadata:
55
annotations:
6-
controller-gen.kubebuilder.io/version: v0.11.1
7-
creationTimestamp: null
6+
controller-gen.kubebuilder.io/version: v0.12.0
87
name: buckets.source.toolkit.fluxcd.io
98
spec:
109
group: source.toolkit.fluxcd.io

config/crd/bases/source.toolkit.fluxcd.io_gitrepositories.yaml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,7 @@ apiVersion: apiextensions.k8s.io/v1
33
kind: CustomResourceDefinition
44
metadata:
55
annotations:
6-
controller-gen.kubebuilder.io/version: v0.11.1
7-
creationTimestamp: null
6+
controller-gen.kubebuilder.io/version: v0.12.0
87
name: gitrepositories.source.toolkit.fluxcd.io
98
spec:
109
group: source.toolkit.fluxcd.io

config/crd/bases/source.toolkit.fluxcd.io_helmcharts.yaml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,7 @@ apiVersion: apiextensions.k8s.io/v1
33
kind: CustomResourceDefinition
44
metadata:
55
annotations:
6-
controller-gen.kubebuilder.io/version: v0.11.1
7-
creationTimestamp: null
6+
controller-gen.kubebuilder.io/version: v0.12.0
87
name: helmcharts.source.toolkit.fluxcd.io
98
spec:
109
group: source.toolkit.fluxcd.io

config/crd/bases/source.toolkit.fluxcd.io_helmrepositories.yaml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,7 @@ apiVersion: apiextensions.k8s.io/v1
33
kind: CustomResourceDefinition
44
metadata:
55
annotations:
6-
controller-gen.kubebuilder.io/version: v0.11.1
7-
creationTimestamp: null
6+
controller-gen.kubebuilder.io/version: v0.12.0
87
name: helmrepositories.source.toolkit.fluxcd.io
98
spec:
109
group: source.toolkit.fluxcd.io

config/crd/bases/source.toolkit.fluxcd.io_ocirepositories.yaml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,7 @@ apiVersion: apiextensions.k8s.io/v1
33
kind: CustomResourceDefinition
44
metadata:
55
annotations:
6-
controller-gen.kubebuilder.io/version: v0.11.1
7-
creationTimestamp: null
6+
controller-gen.kubebuilder.io/version: v0.12.0
87
name: ocirepositories.source.toolkit.fluxcd.io
98
spec:
109
group: source.toolkit.fluxcd.io

config/rbac/role.yaml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
apiVersion: rbac.authorization.k8s.io/v1
33
kind: ClusterRole
44
metadata:
5-
creationTimestamp: null
65
name: manager-role
76
rules:
87
- apiGroups:

go.mod

Lines changed: 83 additions & 77 deletions
Large diffs are not rendered by default.

go.sum

Lines changed: 171 additions & 166 deletions
Large diffs are not rendered by default.

internal/controller/bucket_controller.go

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -127,8 +127,7 @@ type BucketReconciler struct {
127127
}
128128

129129
type BucketReconcilerOptions struct {
130-
MaxConcurrentReconciles int
131-
RateLimiter ratelimiter.RateLimiter
130+
RateLimiter ratelimiter.RateLimiter
132131
}
133132

134133
// BucketProvider is an interface for fetching objects from a storage provider
@@ -169,8 +168,7 @@ func (r *BucketReconciler) SetupWithManagerAndOptions(mgr ctrl.Manager, opts Buc
169168
For(&bucketv1.Bucket{}).
170169
WithEventFilter(predicate.Or(predicate.GenerationChangedPredicate{}, predicates.ReconcileRequestedPredicate{})).
171170
WithOptions(controller.Options{
172-
MaxConcurrentReconciles: opts.MaxConcurrentReconciles,
173-
RateLimiter: opts.RateLimiter,
171+
RateLimiter: opts.RateLimiter,
174172
}).
175173
Complete(r)
176174
}

internal/controller/bucket_controller_test.go

Lines changed: 36 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@ import (
3434
"k8s.io/client-go/tools/record"
3535
kstatus "sigs.k8s.io/cli-utils/pkg/kstatus/status"
3636
"sigs.k8s.io/controller-runtime/pkg/client"
37-
"sigs.k8s.io/controller-runtime/pkg/client/fake"
3837
fakeclient "sigs.k8s.io/controller-runtime/pkg/client/fake"
3938

4039
"github.com/fluxcd/pkg/apis/meta"
@@ -341,7 +340,10 @@ func TestBucketReconciler_reconcileStorage(t *testing.T) {
341340
}()
342341

343342
r := &BucketReconciler{
344-
Client: fakeclient.NewClientBuilder().WithScheme(testEnv.GetScheme()).Build(),
343+
Client: fakeclient.NewClientBuilder().
344+
WithScheme(testEnv.GetScheme()).
345+
WithStatusSubresource(&bucketv1.Bucket{}).
346+
Build(),
345347
EventRecorder: record.NewFakeRecorder(32),
346348
Storage: testStorage,
347349
patchOptions: getPatchOptions(bucketReadyCondition.Owned, "sc"),
@@ -653,25 +655,26 @@ func TestBucketReconciler_reconcileSource_generic(t *testing.T) {
653655
t.Run(tt.name, func(t *testing.T) {
654656
g := NewWithT(t)
655657

656-
builder := fakeclient.NewClientBuilder().WithScheme(testEnv.Scheme())
658+
clientBuilder := fakeclient.NewClientBuilder().
659+
WithScheme(testEnv.Scheme()).
660+
WithStatusSubresource(&bucketv1.Bucket{})
661+
657662
if tt.secret != nil {
658-
builder.WithObjects(tt.secret)
663+
clientBuilder.WithObjects(tt.secret)
659664
}
665+
660666
r := &BucketReconciler{
661667
EventRecorder: record.NewFakeRecorder(32),
662-
Client: builder.Build(),
668+
Client: clientBuilder.Build(),
663669
Storage: testStorage,
664670
patchOptions: getPatchOptions(bucketReadyCondition.Owned, "sc"),
665671
}
666672
tmpDir := t.TempDir()
667673

668674
obj := &bucketv1.Bucket{
669-
TypeMeta: metav1.TypeMeta{
670-
Kind: bucketv1.BucketKind,
671-
},
672675
ObjectMeta: metav1.ObjectMeta{
673-
Name: "test-bucket",
674-
Generation: 1,
676+
GenerateName: "test-bucket-",
677+
Generation: 1,
675678
},
676679
Spec: bucketv1.BucketSpec{
677680
Timeout: &metav1.Duration{Duration: timeout},
@@ -996,26 +999,27 @@ func TestBucketReconciler_reconcileSource_gcs(t *testing.T) {
996999
t.Run(tt.name, func(t *testing.T) {
9971000
g := NewWithT(t)
9981001

999-
builder := fakeclient.NewClientBuilder().WithScheme(testEnv.Scheme())
1002+
clientBuilder := fakeclient.NewClientBuilder().
1003+
WithScheme(testEnv.Scheme()).
1004+
WithStatusSubresource(&bucketv1.Bucket{})
1005+
10001006
if tt.secret != nil {
1001-
builder.WithObjects(tt.secret)
1007+
clientBuilder.WithObjects(tt.secret)
10021008
}
1009+
10031010
r := &BucketReconciler{
10041011
EventRecorder: record.NewFakeRecorder(32),
1005-
Client: builder.Build(),
1012+
Client: clientBuilder.Build(),
10061013
Storage: testStorage,
10071014
patchOptions: getPatchOptions(bucketReadyCondition.Owned, "sc"),
10081015
}
10091016
tmpDir := t.TempDir()
10101017

10111018
// Test bucket object.
10121019
obj := &bucketv1.Bucket{
1013-
TypeMeta: metav1.TypeMeta{
1014-
Kind: bucketv1.BucketKind,
1015-
},
10161020
ObjectMeta: metav1.ObjectMeta{
1017-
Name: "test-bucket",
1018-
Generation: 1,
1021+
GenerateName: "test-bucket-",
1022+
Generation: 1,
10191023
},
10201024
Spec: bucketv1.BucketSpec{
10211025
BucketName: tt.bucketName,
@@ -1191,19 +1195,18 @@ func TestBucketReconciler_reconcileArtifact(t *testing.T) {
11911195
t.Run(tt.name, func(t *testing.T) {
11921196
g := NewWithT(t)
11931197

1198+
clientBuilder := fakeclient.NewClientBuilder().
1199+
WithScheme(testEnv.GetScheme()).
1200+
WithStatusSubresource(&bucketv1.Bucket{})
1201+
11941202
r := &BucketReconciler{
1195-
Client: fakeclient.NewClientBuilder().WithScheme(testEnv.GetScheme()).Build(),
1203+
Client: clientBuilder.Build(),
11961204
EventRecorder: record.NewFakeRecorder(32),
11971205
Storage: testStorage,
11981206
patchOptions: getPatchOptions(bucketReadyCondition.Owned, "sc"),
11991207
}
12001208

1201-
tmpDir := t.TempDir()
1202-
12031209
obj := &bucketv1.Bucket{
1204-
TypeMeta: metav1.TypeMeta{
1205-
Kind: bucketv1.BucketKind,
1206-
},
12071210
ObjectMeta: metav1.ObjectMeta{
12081211
GenerateName: "test-bucket-",
12091212
Generation: 1,
@@ -1214,6 +1217,7 @@ func TestBucketReconciler_reconcileArtifact(t *testing.T) {
12141217
},
12151218
}
12161219

1220+
tmpDir := t.TempDir()
12171221
index := index.NewDigester()
12181222

12191223
if tt.beforeFunc != nil {
@@ -1296,17 +1300,20 @@ func TestBucketReconciler_statusConditions(t *testing.T) {
12961300

12971301
obj := &bucketv1.Bucket{
12981302
TypeMeta: metav1.TypeMeta{
1303+
APIVersion: bucketv1.GroupVersion.String(),
12991304
Kind: bucketv1.BucketKind,
1300-
APIVersion: "source.toolkit.fluxcd.io/v1beta2",
13011305
},
13021306
ObjectMeta: metav1.ObjectMeta{
1303-
Name: "bucket",
1307+
Name: "test-bucket",
13041308
Namespace: "foo",
13051309
},
13061310
}
1307-
clientBuilder := fake.NewClientBuilder()
1308-
clientBuilder.WithObjects(obj)
1309-
c := clientBuilder.Build()
1311+
1312+
c := fakeclient.NewClientBuilder().
1313+
WithScheme(testEnv.Scheme()).
1314+
WithObjects(obj).
1315+
WithStatusSubresource(&bucketv1.Bucket{}).
1316+
Build()
13101317

13111318
serialPatcher := patch.NewSerialPatcher(obj, c)
13121319

internal/controller/gitrepository_controller.go

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -134,7 +134,6 @@ type GitRepositoryReconciler struct {
134134
}
135135

136136
type GitRepositoryReconcilerOptions struct {
137-
MaxConcurrentReconciles int
138137
DependencyRequeueInterval time.Duration
139138
RateLimiter ratelimiter.RateLimiter
140139
}
@@ -161,8 +160,7 @@ func (r *GitRepositoryReconciler) SetupWithManagerAndOptions(mgr ctrl.Manager, o
161160
predicate.Or(predicate.GenerationChangedPredicate{}, predicates.ReconcileRequestedPredicate{}),
162161
)).
163162
WithOptions(controller.Options{
164-
MaxConcurrentReconciles: opts.MaxConcurrentReconciles,
165-
RateLimiter: opts.RateLimiter,
163+
RateLimiter: opts.RateLimiter,
166164
}).
167165
Complete(r)
168166
}
@@ -787,7 +785,7 @@ func (r *GitRepositoryReconciler) gitCheckout(ctx context.Context,
787785
obj *sourcev1.GitRepository, authOpts *git.AuthOptions, dir string,
788786
optimized bool) (*git.Commit, error) {
789787
// Configure checkout strategy.
790-
cloneOpts := repository.CloneOptions{
788+
cloneOpts := repository.CloneConfig{
791789
RecurseSubmodules: obj.Spec.RecurseSubmodules,
792790
ShallowClone: true,
793791
}

0 commit comments

Comments
 (0)