Skip to content

Commit 3ff47dd

Browse files
committed
pkg/kube: extract Syncer from lifecycle client
Extract the simple syncing logic from `lifecycle.ResourceClient` into a generic and dedicated `kube.Syncer` struct. Future work (Console CR) will utilize this new struct to implement the bulk of its logic. Additionally fix a subtle bug in the existing sync algorithm. As `client.InNamespace` was never provided to the `ResourceClient`'s `List` calls, it would default to `"default"`. As the tests used the default namespace, this issue wasn't visible. The primary trouble is that `Sync` would not correct delete resources due to `List` not returning them. It's likely NodePools were affected in some way but how is unclear. (cherry picked from commit 4cf6660)
1 parent 532a4fc commit 3ff47dd

File tree

17 files changed

+765
-360
lines changed

17 files changed

+765
-360
lines changed

Taskfile.yml

Lines changed: 11 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -218,14 +218,18 @@ tasks:
218218
TEST_REDPANDA_VERSION: '{{ .TEST_REDPANDA_VERSION | default .DEFAULT_TEST_REDPANDA_VERSION }}'
219219
TEST_UPGRADE_REDPANDA_VERSION: '{{ .TEST_UPGRADE_REDPANDA_VERSION | default .DEFAULT_TEST_UPGRADE_REDPANDA_VERSION }}'
220220
TEST_UPGRADE_OPERATOR_VERSION: '{{ .TEST_UPGRADE_OPERATOR_VERSION | default .DEFAULT_TEST_UPGRADE_OPERATOR_VERSION }}'
221+
IMAGES:
222+
- quay.io/jetstack/cert-manager-controller:{{.TEST_CERTMANAGER_VERSION}}
223+
- quay.io/jetstack/cert-manager-cainjector:{{.TEST_CERTMANAGER_VERSION}}
224+
- quay.io/jetstack/cert-manager-startupapicheck:{{.TEST_CERTMANAGER_VERSION}}
225+
- quay.io/jetstack/cert-manager-webhook:{{.TEST_CERTMANAGER_VERSION}}
226+
- docker.redpanda.com/redpandadata/redpanda:{{.TEST_REDPANDA_VERSION}}
227+
- docker.redpanda.com/redpandadata/redpanda:{{.TEST_UPGRADE_REDPANDA_VERSION}}
228+
- docker.redpanda.com/redpandadata/redpanda-operator:{{.TEST_UPGRADE_OPERATOR_VERSION}}
229+
221230
cmds:
222-
- docker pull quay.io/jetstack/cert-manager-controller:{{.TEST_CERTMANAGER_VERSION}}
223-
- docker pull quay.io/jetstack/cert-manager-cainjector:{{.TEST_CERTMANAGER_VERSION}}
224-
- docker pull quay.io/jetstack/cert-manager-startupapicheck:{{.TEST_CERTMANAGER_VERSION}}
225-
- docker pull quay.io/jetstack/cert-manager-webhook:{{.TEST_CERTMANAGER_VERSION}}
226-
- docker pull docker.redpanda.com/redpandadata/redpanda:{{.TEST_REDPANDA_VERSION}}
227-
- docker pull docker.redpanda.com/redpandadata/redpanda:{{.TEST_UPGRADE_REDPANDA_VERSION}}
228-
- docker pull docker.redpanda.com/redpandadata/redpanda-operator:{{.TEST_UPGRADE_OPERATOR_VERSION}}
231+
- for: {var: IMAGES}
232+
cmd: docker inspect {{.ITEM}} > /dev/null || docker pull {{.ITEM}}
229233

230234
pending-prs:
231235
desc: "Get all pending PRs for watched branches"

harpoon/go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -93,6 +93,7 @@ require (
9393
github.com/mattn/go-colorable v0.1.14 // indirect
9494
github.com/mattn/go-isatty v0.0.20 // indirect
9595
github.com/mattn/go-runewidth v0.0.16 // indirect
96+
github.com/miekg/dns v1.1.58 // indirect
9697
github.com/mitchellh/copystructure v1.2.0 // indirect
9798
github.com/mitchellh/go-ps v1.0.0 // indirect
9899
github.com/mitchellh/go-wordwrap v1.0.1 // indirect

harpoon/go.sum

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@ github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK3
3636
github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE=
3737
github.com/cenkalti/backoff/v5 v5.0.2 h1:rIfFVxEf1QsI7E1ZHfp/B4DF/6QBAUhmgkxc0H7Zss8=
3838
github.com/cenkalti/backoff/v5 v5.0.2/go.mod h1:rkhZdG3JZukswDf7f0cwqPNk4K0sa+F97BxZthm/crw=
39+
github.com/cert-manager/cert-manager v1.14.5 h1:uuM1O2g2S80nxiH3eW2cZYMGiL2zmDFVdAzg8sibWuc=
40+
github.com/cert-manager/cert-manager v1.14.5/go.mod h1:fmr/cU5jiLxWj69CroDggSOa49RljUK+dU583TaQUXM=
3941
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
4042
github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
4143
github.com/chai2010/gettext-go v1.0.2 h1:1Lwwip6Q2QGsAdl/ZKPCwTe9fe0CjlUbqj5bFNSjIRk=
@@ -575,6 +577,8 @@ pgregory.net/rapid v1.1.0 h1:CMa0sjHSru3puNx+J0MIAuiiEV4N0qj8/cMWGBBCsjw=
575577
pgregory.net/rapid v1.1.0/go.mod h1:PY5XlDGj0+V1FCq0o192FdRhpKHGTRIWBgqjDBTrq04=
576578
sigs.k8s.io/controller-runtime v0.20.4 h1:X3c+Odnxz+iPTRobG4tp092+CvBU9UK0t/bRf+n0DGU=
577579
sigs.k8s.io/controller-runtime v0.20.4/go.mod h1:xg2XB0K5ShQzAgsoujxuKN4LNXR2LfwwHsPj7Iaw+XY=
580+
sigs.k8s.io/gateway-api v1.1.0 h1:DsLDXCi6jR+Xz8/xd0Z1PYl2Pn0TyaFMOPPZIj4inDM=
581+
sigs.k8s.io/gateway-api v1.1.0/go.mod h1:ZH4lHrL2sDi0FHZ9jjneb8kKnGzFWyrTya35sWUTrRs=
578582
sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8 h1:gBQPwqORJ8d8/YNZWEjoZs7npUVDpVXUUOFfW6CgAqE=
579583
sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8/go.mod h1:mdzfpAEoE6DHQEN0uh9ZbOCuHbLK5wOm7dK4ctXE9Tg=
580584
sigs.k8s.io/kustomize/api v0.19.0 h1:F+2HB2mU1MSiR9Hp1NEgoU2q9ItNOaBJl0I4Dlus5SQ=

operator/internal/controller/redpanda/resource_controller.go

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -22,12 +22,11 @@ import (
2222
"sigs.k8s.io/controller-runtime/pkg/controller/controllerutil"
2323

2424
redpandav1alpha2 "github.com/redpanda-data/redpanda-operator/operator/api/redpanda/v1alpha2"
25+
"github.com/redpanda-data/redpanda-operator/operator/internal/lifecycle"
2526
internalclient "github.com/redpanda-data/redpanda-operator/operator/pkg/client"
2627
"github.com/redpanda-data/redpanda-operator/pkg/otelutil/log"
2728
)
2829

29-
const fieldOwner client.FieldOwner = "redpanda-operator"
30-
3130
type Resource[T any] interface {
3231
*T
3332
client.Object
@@ -100,7 +99,7 @@ func (r *ResourceController[T, U]) Reconcile(ctx context.Context, req ctrl.Reque
10099
if !controllerutil.ContainsFinalizer(object, FinalizerKey) {
101100
patch := r.reconciler.FinalizerPatch(request)
102101
if patch != nil {
103-
if err := r.Patch(ctx, object, patch, client.ForceOwnership, fieldOwner); err != nil {
102+
if err := r.Patch(ctx, object, patch, client.ForceOwnership, lifecycle.DefaultFieldOwner); err != nil {
104103
return ctrl.Result{}, err
105104
}
106105
}
@@ -109,7 +108,7 @@ func (r *ResourceController[T, U]) Reconcile(ctx context.Context, req ctrl.Reque
109108
patch, err := r.reconciler.SyncResource(ctx, request)
110109
var syncError error
111110
if patch != nil {
112-
syncError = r.Status().Patch(ctx, object, patch, client.ForceOwnership, fieldOwner)
111+
syncError = r.Status().Patch(ctx, object, patch, client.ForceOwnership, lifecycle.DefaultFieldOwner)
113112
}
114113

115114
result := ctrl.Result{}

0 commit comments

Comments
 (0)