Skip to content

Commit a15aa2a

Browse files
Add multicluster-awareness to factory (#1214)
* Add multicluster-awareness to factory * taskfile: Import more containers to speed up tests * operator: Change k3d package with testenv to speed up tests * Add locally build operator container to k3d cluster * Skip namespaced client * Fix namespace resolution in v1 test --------- Co-authored-by: Rafal Korepta <rafal.korepta@gmail.com>
1 parent 8a802e6 commit a15aa2a

28 files changed

+866
-347
lines changed

Taskfile.yml

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,7 @@ tasks:
186186
vars:
187187
CLI_ARGS: '' # Don't forward CLI args to build:image
188188
- task: build:charts
189+
- task: test:pull-images
189190
vars:
190191
RUN: '{{ default `"^TestIntegration"` .RUN }}'
191192
cmds:
@@ -219,25 +220,42 @@ tasks:
219220
test:pull-images:
220221
vars:
221222
DEFAULT_TEST_CERTMANAGER_VERSION: v1.14.2
223+
DEFAULT_SECOND_TEST_CERTMANAGER_VERSION: v1.8.0
222224
DEFAULT_TEST_REDPANDA_REPO: docker.redpanda.com/redpandadata/redpanda
223225
DEFAULT_TEST_REDPANDA_VERSION: v25.3.1
224226
DEFAULT_TEST_UPGRADE_REDPANDA_REPO: docker.redpanda.com/redpandadata/redpanda
225227
DEFAULT_TEST_UPGRADE_REDPANDA_VERSION: v24.3.11
226228
DEFAULT_TEST_UPGRADE_OPERATOR_VERSION: v2.3.9-24.3.11
229+
DEFAULT_TEST_VCLUSTER_VERSION: 0.23.0
230+
DEFAULT_TEST_KUBE_VERSION: v1.29.6
231+
DEFAULT_TEST_COREDNS_VERSION: 1.11.1
227232
TEST_CERTMANAGER_VERSION: '{{ .TEST_CERTMANAGER_VERSION | default .DEFAULT_TEST_CERTMANAGER_VERSION }}'
233+
SECOND_TEST_CERTMANAGER_VERSION: '{{ .SECOND_TEST_CERTMANAGER_VERSION | default .DEFAULT_SECOND_TEST_CERTMANAGER_VERSION }}'
228234
TEST_REDPANDA_REPO: '{{ .TEST_REDPANDA_REPO | default .DEFAULT_TEST_REDPANDA_REPO }}'
229235
TEST_REDPANDA_VERSION: '{{ .TEST_REDPANDA_VERSION | default .DEFAULT_TEST_REDPANDA_VERSION }}'
230236
TEST_UPGRADE_REDPANDA_REPO: '{{ .TEST_UPGRADE_REDPANDA_REPO | default .DEFAULT_TEST_UPGRADE_REDPANDA_REPO }}'
231237
TEST_UPGRADE_REDPANDA_VERSION: '{{ .TEST_UPGRADE_REDPANDA_VERSION | default .DEFAULT_TEST_UPGRADE_REDPANDA_VERSION }}'
232238
TEST_UPGRADE_OPERATOR_VERSION: '{{ .TEST_UPGRADE_OPERATOR_VERSION | default .DEFAULT_TEST_UPGRADE_OPERATOR_VERSION }}'
239+
TEST_VCLUSTER_VERSION: '{{ .TEST_VCLUSTER_VERSION | default .DEFAULT_TEST_VCLUSTER_VERSION }}'
240+
TEST_KUBE_VERSION: '{{ .TEST_KUBE_VERSION | default .DEFAULT_TEST_KUBE_VERSION }}'
241+
TEST_COREDNS_VERSION: '{{ .TEST_COREDNS_VERSION | default .DEFAULT_TEST_COREDNS_VERSION }}'
233242
IMAGES:
234243
- quay.io/jetstack/cert-manager-controller:{{.TEST_CERTMANAGER_VERSION}}
235244
- quay.io/jetstack/cert-manager-cainjector:{{.TEST_CERTMANAGER_VERSION}}
236245
- quay.io/jetstack/cert-manager-startupapicheck:{{.TEST_CERTMANAGER_VERSION}}
237246
- quay.io/jetstack/cert-manager-webhook:{{.TEST_CERTMANAGER_VERSION}}
247+
- quay.io/jetstack/cert-manager-controller:{{.SECOND_TEST_CERTMANAGER_VERSION}}
248+
- quay.io/jetstack/cert-manager-cainjector:{{.SECOND_TEST_CERTMANAGER_VERSION}}
249+
- quay.io/jetstack/cert-manager-webhook:{{.SECOND_TEST_CERTMANAGER_VERSION}}
238250
- '{{.TEST_REDPANDA_REPO}}:{{.TEST_REDPANDA_VERSION}}'
239251
- '{{.DEFAULT_TEST_UPGRADE_REDPANDA_REPO}}:{{.TEST_UPGRADE_REDPANDA_VERSION}}'
240252
- docker.redpanda.com/redpandadata/redpanda-operator:{{.TEST_UPGRADE_OPERATOR_VERSION}}
253+
- ghcr.io/loft-sh/vcluster-pro:{{.TEST_VCLUSTER_VERSION}}
254+
- registry.k8s.io/kube-controller-manager:{{.TEST_KUBE_VERSION}}
255+
- registry.k8s.io/kube-apiserver:{{.TEST_KUBE_VERSION}}
256+
- coredns/coredns:{{.TEST_COREDNS_VERSION}}
257+
- redpandadata/redpanda-unstable:v24.3.1-rc8
258+
- redpandadata/redpanda-unstable:v25.3.1-rc2
241259

242260
cmds:
243261
- for: {var: IMAGES}

acceptance/go.mod

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,7 @@ require (
114114
github.com/gofrs/uuid v4.4.0+incompatible // indirect
115115
github.com/gogo/protobuf v1.3.2 // indirect
116116
github.com/golang-jwt/jwt/v5 v5.3.0 // indirect
117+
github.com/golang/protobuf v1.5.4 // indirect
117118
github.com/gonvenience/bunt v1.3.5 // indirect
118119
github.com/gonvenience/neat v1.3.13 // indirect
119120
github.com/gonvenience/term v1.0.2 // indirect
@@ -236,6 +237,7 @@ require (
236237
github.com/wk8/go-ordered-map/v2 v2.1.8 // indirect
237238
github.com/x448/float16 v0.8.4 // indirect
238239
github.com/xlab/treeprint v1.2.0 // indirect
240+
go.etcd.io/raft/v3 v3.6.0 // indirect
239241
go.opentelemetry.io/auto/sdk v1.2.1 // indirect
240242
go.opentelemetry.io/collector/pdata v1.32.0 // indirect
241243
go.opentelemetry.io/contrib/bridges/prometheus v0.61.0 // indirect
@@ -294,6 +296,7 @@ require (
294296
sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8 // indirect
295297
sigs.k8s.io/kustomize/api v0.19.0 // indirect
296298
sigs.k8s.io/kustomize/kyaml v0.19.0 // indirect
299+
sigs.k8s.io/multicluster-runtime v0.22.4-beta.1 // indirect
297300
sigs.k8s.io/randfill v1.0.0 // indirect
298301
sigs.k8s.io/structured-merge-diff/v6 v6.3.0 // indirect
299302
)

acceptance/go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,8 @@ github.com/cisco-open/k8s-objectmatcher v1.9.0 h1:/sfuO0BD09fpynZjXsqeZrh28Juc4V
142142
github.com/cisco-open/k8s-objectmatcher v1.9.0/go.mod h1:CH4E6qAK+q+JwKFJn0DaTNqxrbmWCaDQzGthKLK4nZ0=
143143
github.com/cloudhut/common v0.11.0 h1:N9yDk2fHhKjhzhKlZeMzrF5v1Q2kUm1EpnExAWAP+pc=
144144
github.com/cloudhut/common v0.11.0/go.mod h1:VVehSv0ZPulx35rzCXdwjkjQ3pRKZQAXk2/v3EE+6WU=
145+
github.com/cockroachdb/datadriven v1.0.2 h1:H9MtNqVoVhvd9nCBwOyDjUEdZCREqbIdCJD93PBm/jA=
146+
github.com/cockroachdb/datadriven v1.0.2/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU=
145147
github.com/cockroachdb/errors v1.11.3 h1:5bA+k2Y6r+oz/6Z/RFlNeVCesGARKuC6YymtcDrbC/I=
146148
github.com/cockroachdb/errors v1.11.3/go.mod h1:m4UIW4CDjx+R5cybPsNrRbreomiFqt8o1h1wUVazSd8=
147149
github.com/cockroachdb/logtags v0.0.0-20230118201751-21c54148d20b h1:r6VH0faHjZeQy818SGhaone5OnYfxFR/+AzdY3sf5aE=

acceptance/steps/helpers.go

Lines changed: 27 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,10 @@ import (
3535
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
3636
"k8s.io/apimachinery/pkg/labels"
3737
"k8s.io/client-go/kubernetes"
38+
"k8s.io/client-go/rest"
3839
"k8s.io/utils/ptr"
3940
runtimeclient "sigs.k8s.io/controller-runtime/pkg/client"
41+
"sigs.k8s.io/controller-runtime/pkg/manager"
4042

4143
framework "github.com/redpanda-data/redpanda-operator/harpoon"
4244
redpandav1alpha2 "github.com/redpanda-data/redpanda-operator/operator/api/redpanda/v1alpha2"
@@ -46,6 +48,7 @@ import (
4648
"github.com/redpanda-data/redpanda-operator/operator/pkg/client/roles"
4749
"github.com/redpanda-data/redpanda-operator/operator/pkg/client/users"
4850
"github.com/redpanda-data/redpanda-operator/pkg/kube"
51+
"github.com/redpanda-data/redpanda-operator/pkg/multicluster"
4952
)
5053

5154
type delayedLog func() string
@@ -340,6 +343,24 @@ func versionedClientsForCluster(ctx context.Context, version, cluster string) *c
340343
return clientsForCluster(ctx, cluster)
341344
}
342345

346+
func setupTestManager(ctx context.Context, cfg *rest.Config, c runtimeclient.Client) multicluster.Manager {
347+
t := framework.T(ctx)
348+
349+
mgr, err := multicluster.NewSingleClusterManager(cfg, manager.Options{
350+
LeaderElection: false,
351+
NewClient: func(_ *rest.Config, _ runtimeclient.Options) (runtimeclient.Client, error) {
352+
return c, nil
353+
},
354+
})
355+
if err != nil {
356+
t.Fatalf("initializing manager: %v", err)
357+
}
358+
go mgr.Start(ctx)
359+
<-mgr.Elected()
360+
361+
return mgr
362+
}
363+
343364
func clientsForCluster(ctx context.Context, cluster string) *clusterClients {
344365
t := framework.T(ctx)
345366

@@ -371,7 +392,9 @@ func clientsForCluster(ctx context.Context, cluster string) *clusterClients {
371392
t.Logf("Created fake user %q looking for cluster %q in namespace %q", referencer.Name, cluster, t.Namespace())
372393
t.Logf("Fake user cluster ref: name=%q", referencer.Spec.ClusterSource.ClusterRef.Name)
373394

374-
factory := client.NewFactory(t.RestConfig(), t, nil).WithDialer(kube.NewPodDialer(t.RestConfig()).DialContext)
395+
mgr := setupTestManager(ctx, t.RestConfig(), t)
396+
397+
factory := client.NewFactory(mgr, nil).WithDialer(kube.NewPodDialer(t.RestConfig()).DialContext)
375398

376399
clients := &clusterClients{
377400
resourceTarget: referencer,
@@ -416,7 +439,9 @@ func v1ClientsForCluster(ctx context.Context, cluster string) *clusterClients {
416439
t.Logf("Created fake user %q looking for cluster %q in namespace %q", referencer.Name, cluster, t.Namespace())
417440
t.Logf("Fake v1 user cluster ref: name=%q", referencer.Spec.ClusterSource.ClusterRef.Name)
418441

419-
factory := client.NewFactory(t.RestConfig(), t, nil).WithDialer(kube.NewPodDialer(t.RestConfig()).DialContext)
442+
mgr := setupTestManager(ctx, t.RestConfig(), t)
443+
444+
factory := client.NewFactory(mgr, nil).WithDialer(kube.NewPodDialer(t.RestConfig()).DialContext)
420445

421446
clients := &clusterClients{
422447
resourceTarget: referencer,

0 commit comments

Comments
 (0)