Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
57 commits
Select commit Hold shift + click to select a range
cef933b
Add Connect CRD and controller for Redpanda Connect pipeline management
david-yu Mar 23, 2026
b069456
fix: align generated files with CI generate output
david-yu Mar 23, 2026
b9b64d0
bump default Connect image tag to 4.84.1
david-yu Mar 23, 2026
52d3681
fix: add Connect to CRD test + Cloud migration fields
david-yu Mar 23, 2026
40d67fb
fix: add new Connect fields to crd-docs.adoc
david-yu Mar 24, 2026
17a36ad
Add availability zone support to Connect CRD
david-yu Mar 24, 2026
481df30
fix: align CRD YAML and docs with controller-gen output
david-yu Mar 24, 2026
0a05c3b
Enable Connect controller by default with helm chart opt-out
david-yu Mar 24, 2026
f46b4d2
Add changelog for Connect controller enabled by default
david-yu Mar 24, 2026
8d556ab
fix: update generated files for connectController helm value
david-yu Mar 24, 2026
a0f4691
Allow operator-level license for Connect CRs
david-yu Mar 24, 2026
d2a4f5a
Remove per-CR license, disable connect by default, add tests
david-yu Mar 24, 2026
c30261c
Update changelog: remove unnecessary license detail
david-yu Mar 24, 2026
670aa5b
fix: update README connectController default to false
david-yu Mar 24, 2026
26f279b
Rename Connect CRD to Pipeline, add secretRef for pipeline secrets
david-yu Mar 24, 2026
f00add3
Rename pipelineController back to connectController in Helm chart
david-yu Mar 24, 2026
ec0dd42
fix: alphabetize import ordering in run.go
david-yu Mar 24, 2026
97f26d8
Regenerate all generated files via nix controller-gen, register-gen, …
david-yu Mar 24, 2026
7d96f17
fix: import ordering in deprecations test
david-yu Mar 24, 2026
360e22e
fix: update CRD test for connects -> pipelines rename
david-yu Mar 24, 2026
6bc6238
fix: improve operator readiness check + bump upgrade-from to v25.3.1
david-yu Mar 24, 2026
5b2a115
refactor: address review feedback for Pipeline CRD
david-yu Apr 8, 2026
344de62
fix: remove unused writeLicenseFile function (lint)
david-yu Apr 8, 2026
823b89b
fix: move commonAnnotations from Pipeline CRD to operator values.yaml
david-yu Apr 8, 2026
0cb59ca
chore: bump default RPCN image to connect:4.86.0
david-yu Apr 8, 2026
44c057f
fix: regenerate files, fix lint and unit test failures
david-yu Apr 8, 2026
cdf8420
docs: update CLAUDE.md with golden file and gotohelm learnings
david-yu Apr 8, 2026
0623b78
feat: add PodMonitor support for Pipeline (RPCN) monitoring
david-yu Apr 8, 2026
08f2eb0
fix: fix acceptance test failures for pipeline CRDs and field manager…
david-yu Apr 9, 2026
28a2717
fix: bump RPCN image to connect:4.87.0 and fix binary path
david-yu Apr 9, 2026
6173abf
Merge remote-tracking branch 'origin/main' into feat/connect-crd
david-yu Apr 9, 2026
ed6a4e6
fix: regenerate chart template golden files after main merge
david-yu Apr 10, 2026
bad2c70
feat: add spec.annotations for per-pipeline pod annotations
david-yu Apr 10, 2026
4a8c0ad
feat: add config lint validation and pipeline lifecycle acceptance tests
david-yu Apr 10, 2026
6ada3dc
docs: update CLAUDE.md with RBAC regeneration workflow
david-yu Apr 10, 2026
5a47fcc
fix: fix import ordering for gci linter
david-yu Apr 10, 2026
5c14cdf
fix: align Pipeline controller with Console CRD conventions
david-yu Apr 10, 2026
574e722
fix: fix import ordering to match gci linter expectations
david-yu Apr 10, 2026
d60947f
docs: add local lint workflow to CLAUDE.md
david-yu Apr 10, 2026
69503ff
fix: fix Pipeline acceptance test failures for SSA conflicts and lint…
david-yu Apr 10, 2026
3fea052
feat: add clusterRef support to Pipeline CRD for Redpanda cluster con…
david-yu Apr 10, 2026
f574c0a
feat: add credentials field to Pipeline for least-privilege SASL auth
david-yu Apr 10, 2026
8ab5ab7
feat: use ValueSource for Pipeline credentials password field
david-yu Apr 10, 2026
e602f8d
fix: use distinct env var names for user credentials vs admin credent…
david-yu Apr 10, 2026
015231d
docs: add ClusterRef and ValueSource documentation to CLAUDE.md
david-yu Apr 10, 2026
125bc11
fix: add generated deepcopy for PipelineSASLCredentials and fix lint …
david-yu Apr 10, 2026
3488cbb
fix: regenerate CRD YAML, CRD docs, and RBAC for PipelineSASLCredentials
david-yu Apr 10, 2026
8694efb
docs: add rule to never hand-edit generated files in CLAUDE.md
david-yu Apr 10, 2026
6d80160
refactor: remove spec.credentials from Pipeline CRD
david-yu Apr 10, 2026
adee691
fix: pass through RPK_* env var interpolations in acceptance test man…
david-yu Apr 10, 2026
026d073
fix: pass env vars to lint init container for clusterRef interpolation
david-yu Apr 10, 2026
d46f37b
fix: pre-create topic in produce acceptance test and harden controller
david-yu Apr 11, 2026
5ca7350
operator: add PodDisruptionBudget support to Pipeline CRD
david-yu Apr 14, 2026
1134f87
fix: gci import ordering in generated deprecations test
david-yu Apr 14, 2026
169d51b
docs: update CLAUDE.md to reflect pipeline RBAC is now generated
david-yu Apr 14, 2026
b565d71
operator: simplify PipelineBudget to maxUnavailable int only
david-yu Apr 14, 2026
60e4030
operator: fix pipeline invalid-state cleanup
david-yu Apr 17, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
kind: Added
body: Add Pipeline CRD and controller for managing Redpanda Connect pipelines via the operator, gated by enterprise license validation.
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
project: operator
kind: Changed
body: |
The Redpanda Connect controller can now be enabled via the operator Helm chart
by setting `connectController.enabled: true`. The controller is disabled by default.
The enterprise license is configured at the operator level via
`enterprise.licenseSecretRef` in the Helm chart values.

To enable the Connect controller:

```
helm install redpanda-operator redpanda/operator \
--set connectController.enabled=true \
--set enterprise.licenseSecretRef.name=redpanda-license \
--set enterprise.licenseSecretRef.key=license
```
time: 2026-03-23T15:00:00.000000-04:00
186 changes: 173 additions & 13 deletions CLAUDE.md

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions acceptance/features/console-upgrades.feature
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
Feature: Upgrading the operator with Console installed
@skip:gke @skip:aks @skip:eks
Scenario: Console v2 to v3 no warnings
Given I helm install "redpanda-operator" "redpanda/operator" --version v25.1.3 with values:
Given I helm install "redpanda-operator" "redpanda/operator" --version v25.3.1 with values:
"""
image:
repository: redpandadata/redpanda-operator
Expand Down Expand Up @@ -49,7 +49,7 @@ Feature: Upgrading the operator with Console installed

@skip:gke @skip:aks @skip:eks
Scenario: Console v2 to v3 with warnings
Given I helm install "redpanda-operator" "redpanda/operator" --version v25.1.3 with values:
Given I helm install "redpanda-operator" "redpanda/operator" --version v25.3.1 with values:
"""
image:
repository: redpandadata/redpanda-operator
Expand Down
4 changes: 2 additions & 2 deletions acceptance/features/operator-upgrades.feature
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
@vcluster
Feature: Upgrading the operator
@skip:gke @skip:aks @skip:eks
Scenario: Operator upgrade from 25.2.2
Given I helm install "redpanda-operator" "redpanda/operator" --version v25.2.2 with values:
Scenario: Operator upgrade from 25.3.1
Given I helm install "redpanda-operator" "redpanda/operator" --version v25.3.1 with values:
"""
image:
repository: redpandadata/redpanda-operator
Expand Down
263 changes: 263 additions & 0 deletions acceptance/features/pipeline-crds.feature
Original file line number Diff line number Diff line change
@@ -0,0 +1,263 @@
@cluster:basic
Feature: Pipeline CRDs
Background: Cluster available
Given cluster "basic" is available

Scenario: Create and run a Pipeline
When I apply Kubernetes manifest:
"""
---
apiVersion: cluster.redpanda.com/v1alpha2
kind: Pipeline
metadata:
name: demo-pipeline
spec:
configYaml: |
input:
generate:
mapping: 'root.message = "hello world"'
interval: "5s"
output:
stdout: {}
replicas: 1
"""
Then pipeline "demo-pipeline" is successfully running

Scenario: Delete a Pipeline
When I apply Kubernetes manifest:
"""
---
apiVersion: cluster.redpanda.com/v1alpha2
kind: Pipeline
metadata:
name: delete-pipeline
spec:
configYaml: |
input:
generate:
mapping: 'root.message = "hello"'
interval: "5s"
output:
stdout: {}
replicas: 1
"""
And pipeline "delete-pipeline" is successfully running
When I delete the CRD pipeline "delete-pipeline"
Then pipeline "delete-pipeline" does not exist

Scenario: Update a Pipeline config
When I apply Kubernetes manifest:
"""
---
apiVersion: cluster.redpanda.com/v1alpha2
kind: Pipeline
metadata:
name: update-pipeline
spec:
configYaml: |
input:
generate:
mapping: 'root.message = "original"'
interval: "5s"
output:
stdout: {}
replicas: 1
"""
And pipeline "update-pipeline" is successfully running
When I apply Kubernetes manifest:
"""
---
apiVersion: cluster.redpanda.com/v1alpha2
kind: Pipeline
metadata:
name: update-pipeline
spec:
configYaml: |
input:
generate:
mapping: 'root.message = "updated"'
interval: "5s"
output:
stdout: {}
replicas: 1
"""
Then pipeline "update-pipeline" is successfully running

Scenario: Stop a Pipeline
When I apply Kubernetes manifest:
"""
---
apiVersion: cluster.redpanda.com/v1alpha2
kind: Pipeline
metadata:
name: stop-pipeline
spec:
configYaml: |
input:
generate:
mapping: 'root.message = "hello"'
interval: "5s"
output:
stdout: {}
replicas: 1
"""
And pipeline "stop-pipeline" is successfully running
When I apply Kubernetes manifest:
"""
---
apiVersion: cluster.redpanda.com/v1alpha2
kind: Pipeline
metadata:
name: stop-pipeline
spec:
configYaml: |
input:
generate:
mapping: 'root.message = "hello"'
interval: "5s"
output:
stdout: {}
replicas: 1
paused: true
"""
Then pipeline "stop-pipeline" is stopped

Scenario: Resume a stopped Pipeline
When I apply Kubernetes manifest:
"""
---
apiVersion: cluster.redpanda.com/v1alpha2
kind: Pipeline
metadata:
name: resume-pipeline
spec:
configYaml: |
input:
generate:
mapping: 'root.message = "hello"'
interval: "5s"
output:
stdout: {}
replicas: 1
"""
And pipeline "resume-pipeline" is successfully running
When I apply Kubernetes manifest:
"""
---
apiVersion: cluster.redpanda.com/v1alpha2
kind: Pipeline
metadata:
name: resume-pipeline
spec:
configYaml: |
input:
generate:
mapping: 'root.message = "hello"'
interval: "5s"
output:
stdout: {}
replicas: 1
paused: true
"""
And pipeline "resume-pipeline" is stopped
When I apply Kubernetes manifest:
"""
---
apiVersion: cluster.redpanda.com/v1alpha2
kind: Pipeline
metadata:
name: resume-pipeline
spec:
configYaml: |
input:
generate:
mapping: 'root.message = "hello"'
interval: "5s"
output:
stdout: {}
replicas: 1
paused: false
"""
Then pipeline "resume-pipeline" is successfully running

Scenario: Invalid Pipeline config detected by lint
When I apply Kubernetes manifest:
"""
---
apiVersion: cluster.redpanda.com/v1alpha2
kind: Pipeline
metadata:
name: invalid-pipeline
spec:
configYaml: |
input:
not_a_real_input:
mapping: 'root = "broken"'
output:
stdout: {}
replicas: 1
"""
Then pipeline "invalid-pipeline" has invalid config

Scenario: Pipeline produces to Redpanda via clusterRef
Given I create topic "pipeline-produce-test" in cluster "basic"
When I apply Kubernetes manifest:
"""
---
apiVersion: cluster.redpanda.com/v1alpha2
kind: Pipeline
metadata:
name: producer-pipeline
spec:
cluster:
clusterRef:
name: basic
configYaml: |
input:
generate:
count: 0
interval: "1s"
mapping: 'root.message = "hello from pipeline"'
output:
redpanda:
seed_brokers:
- "${RPK_BROKERS}"
tls:
enabled: ${RPK_TLS_ENABLED}
root_cas_file: "${RPK_TLS_ROOT_CAS_FILE}"
topic: "pipeline-produce-test"
replicas: 1
"""
Then pipeline "producer-pipeline" is successfully running
And topic "pipeline-produce-test" has messages in cluster "basic"

Scenario: Pipeline reads from Redpanda via clusterRef
Given I create topic "pipeline-consume-test" in cluster "basic"
And I produce messages to "pipeline-consume-test" in cluster "basic"
When I apply Kubernetes manifest:
"""
---
apiVersion: cluster.redpanda.com/v1alpha2
kind: Pipeline
metadata:
name: consumer-pipeline
spec:
cluster:
clusterRef:
name: basic
configYaml: |
input:
redpanda:
seed_brokers:
- "${RPK_BROKERS}"
tls:
enabled: ${RPK_TLS_ENABLED}
root_cas_file: "${RPK_TLS_ROOT_CAS_FILE}"
topics:
- "pipeline-consume-test"
consumer_group: "pipeline-consumer-group"
output:
drop: {}
replicas: 1
"""
Then pipeline "consumer-pipeline" is successfully running
2 changes: 2 additions & 0 deletions acceptance/go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -604,6 +604,8 @@ github.com/redpanda-data/common-go/goldenfile v0.0.0-20260109170727-1dd9f5d22ee1
github.com/redpanda-data/common-go/goldenfile v0.0.0-20260109170727-1dd9f5d22ee1/go.mod h1:V3OBV2kcF/BDDytUZuKvIygbaXoGPT5VO3KmMAz+mBM=
github.com/redpanda-data/common-go/kube v0.0.0-20260408144400-efba9928bb27 h1:735zfoMDegKzXO+mipLeEJhjvoboMiOwlZiEfWTs9IY=
github.com/redpanda-data/common-go/kube v0.0.0-20260408144400-efba9928bb27/go.mod h1:87/jKBvBse9m7PBwCxzISdxOpHblNKTqxZZNa1U1utM=
github.com/redpanda-data/common-go/license v0.0.0-20260120073450-935d3dd3d6c1 h1:6aPxMthcrAljux5bgqU78yHxM8BK1ITqh9G9H+s707U=
github.com/redpanda-data/common-go/license v0.0.0-20260120073450-935d3dd3d6c1/go.mod h1:F1fp8xVNS2UwWFosOjJ9+5jaEZnXSjB9AdHk2R9XlpI=
github.com/redpanda-data/common-go/net v0.1.1-0.20240429123545-4da3d2b371f7 h1:MXLdjFdFjOtyuUR4TdVVsqFP8xnru2YDwzH9bJTUr1M=
github.com/redpanda-data/common-go/net v0.1.1-0.20240429123545-4da3d2b371f7/go.mod h1:UJIi/yUxGOBYXUrfUsOkxfYxcb/ll7mZrwae/i+U2kc=
github.com/redpanda-data/common-go/otelutil v0.0.0-20260109170727-1dd9f5d22ee1 h1:fLBU7IJZq8PR88AkEdI5G+yyBsftionGapvAOMPW9hg=
Expand Down
Loading
Loading