Skip to content

Commit a1ecd0c

Browse files
authored
Implement secret references provided by stream classes (#205)
* Implement secret references provided by stream classes * Fix go.mod * Fix * Fix linter * Fix units * Fix more tests * Fix again * Bump mock version
1 parent 52019dc commit a1ecd0c

20 files changed

+836
-57
lines changed

go.mod

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,15 @@ go 1.25.0
55
require (
66
github.com/DataDog/datadog-api-client-go/v2 v2.50.0
77
github.com/DataDog/datadog-go/v5 v5.8.1
8-
github.com/SneaksAndData/arcane-stream-mock v1.0.2
8+
github.com/SneaksAndData/arcane-stream-mock v1.0.4-0.20260127103655-b8229926a980
99
github.com/go-logr/logr v1.4.3
1010
github.com/google/uuid v1.6.0
1111
github.com/samber/slog-datadog/v2 v2.10.2
1212
github.com/samber/slog-multi v1.6.0
1313
github.com/spf13/viper v1.21.0
1414
github.com/stretchr/testify v1.11.1
1515
go.uber.org/mock v0.6.0
16-
golang.org/x/sync v0.18.0
16+
golang.org/x/sync v0.19.0
1717
k8s.io/api v0.35.0
1818
k8s.io/apimachinery v0.35.0
1919
k8s.io/client-go v0.35.0
@@ -64,14 +64,14 @@ require (
6464
github.com/x448/float16 v0.8.4 // indirect
6565
go.yaml.in/yaml/v2 v2.4.3 // indirect
6666
go.yaml.in/yaml/v3 v3.0.4 // indirect
67-
golang.org/x/mod v0.29.0 // indirect
68-
golang.org/x/net v0.47.0 // indirect
67+
golang.org/x/mod v0.31.0 // indirect
68+
golang.org/x/net v0.49.0 // indirect
6969
golang.org/x/oauth2 v0.30.0 // indirect
70-
golang.org/x/sys v0.38.0 // indirect
71-
golang.org/x/term v0.37.0 // indirect
72-
golang.org/x/text v0.31.0 // indirect
70+
golang.org/x/sys v0.40.0 // indirect
71+
golang.org/x/term v0.39.0 // indirect
72+
golang.org/x/text v0.33.0 // indirect
7373
golang.org/x/time v0.9.0 // indirect
74-
golang.org/x/tools v0.38.0 // indirect
74+
golang.org/x/tools v0.40.0 // indirect
7575
gomodules.xyz/jsonpatch/v2 v2.4.0 // indirect
7676
google.golang.org/protobuf v1.36.8 // indirect
7777
gopkg.in/evanphx/json-patch.v4 v4.13.0 // indirect
@@ -80,8 +80,8 @@ require (
8080
k8s.io/apiextensions-apiserver v0.34.1 // indirect
8181
k8s.io/code-generator v0.35.0 // indirect
8282
k8s.io/gengo/v2 v2.0.0-20250922181213-ec3ebc5fd46b // indirect
83-
k8s.io/kube-openapi v0.0.0-20250910181357-589584f1c912 // indirect
84-
k8s.io/utils v0.0.0-20251002143259-bc988d571ff4 // indirect
83+
k8s.io/kube-openapi v0.0.0-20251125145642-4e65d59e963e // indirect
84+
k8s.io/utils v0.0.0-20260108192941-914a6e750570 // indirect
8585
sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730 // indirect
8686
sigs.k8s.io/randfill v1.0.0 // indirect
8787
sigs.k8s.io/yaml v1.6.0 // indirect

go.sum

Lines changed: 22 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,10 @@ github.com/Microsoft/go-winio v0.5.0 h1:Elr9Wn+sGKPlkaBvwu4mTrxtmOp3F3yV9qhaHbXG
1010
github.com/Microsoft/go-winio v0.5.0/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84=
1111
github.com/SneaksAndData/arcane-stream-mock v1.0.2 h1:FrY/UBNpooo5HIz5n43xMwro83HG6Png6/33WFXhOLk=
1212
github.com/SneaksAndData/arcane-stream-mock v1.0.2/go.mod h1:1bhteY08cwwk63Elee0NCNDpylQUrzVkJXyEslhpW6M=
13+
github.com/SneaksAndData/arcane-stream-mock v1.0.4-0.20260127102128-febded624181 h1:5O+a27JcgiTdp7tRQTuZYNFXiqXk/MMhRdKmlvNS2bs=
14+
github.com/SneaksAndData/arcane-stream-mock v1.0.4-0.20260127102128-febded624181/go.mod h1:1bhteY08cwwk63Elee0NCNDpylQUrzVkJXyEslhpW6M=
15+
github.com/SneaksAndData/arcane-stream-mock v1.0.4-0.20260127103655-b8229926a980 h1:aMLFdL43vcAF3exGMsHEiBbDmX/NlO1ceOdtn3vtvaw=
16+
github.com/SneaksAndData/arcane-stream-mock v1.0.4-0.20260127103655-b8229926a980/go.mod h1:1bhteY08cwwk63Elee0NCNDpylQUrzVkJXyEslhpW6M=
1317
github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
1418
github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
1519
github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
@@ -169,23 +173,23 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh
169173
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
170174
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
171175
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
172-
golang.org/x/mod v0.29.0 h1:HV8lRxZC4l2cr3Zq1LvtOsi/ThTgWnUk/y64QSs8GwA=
173-
golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w=
176+
golang.org/x/mod v0.31.0 h1:HaW9xtz0+kOcWKwli0ZXy79Ix+UW/vOfmWI5QVd2tgI=
177+
golang.org/x/mod v0.31.0/go.mod h1:43JraMp9cGx1Rx3AqioxrbrhNsLl2l/iNAvuBkrezpg=
174178
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
175179
golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
176180
golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
177181
golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
178182
golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
179-
golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY=
180-
golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU=
183+
golang.org/x/net v0.49.0 h1:eeHFmOGUTtaaPSGNmjBKpbng9MulQsJURQUAfUwY++o=
184+
golang.org/x/net v0.49.0/go.mod h1:/ysNB2EvaqvesRkuLAyjI1ycPZlQHM3q01F02UY/MV8=
181185
golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI=
182186
golang.org/x/oauth2 v0.30.0/go.mod h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU=
183187
golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
184188
golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
185189
golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
186190
golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
187-
golang.org/x/sync v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I=
188-
golang.org/x/sync v0.18.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
191+
golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4=
192+
golang.org/x/sync v0.19.0/go.mod h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
189193
golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
190194
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
191195
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -194,24 +198,24 @@ golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7w
194198
golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
195199
golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
196200
golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
197-
golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc=
198-
golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
201+
golang.org/x/sys v0.40.0 h1:DBZZqJ2Rkml6QMQsZywtnjnnGvHza6BTfYFWY9kjEWQ=
202+
golang.org/x/sys v0.40.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
199203
golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
200-
golang.org/x/term v0.37.0 h1:8EGAD0qCmHYZg6J17DvsMy9/wJ7/D/4pV/wfnld5lTU=
201-
golang.org/x/term v0.37.0/go.mod h1:5pB4lxRNYYVZuTLmy8oR2BH8dflOR+IbTYFD8fi3254=
204+
golang.org/x/term v0.39.0 h1:RclSuaJf32jOqZz74CkPA9qFuVTX7vhLlpfj/IGWlqY=
205+
golang.org/x/term v0.39.0/go.mod h1:yxzUCTP/U+FzoxfdKmLaA0RV1WgE0VY7hXBwKtY/4ww=
202206
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
203207
golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
204-
golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM=
205-
golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM=
208+
golang.org/x/text v0.33.0 h1:B3njUFyqtHDUI5jMn1YIr5B0IE2U0qck04r6d4KPAxE=
209+
golang.org/x/text v0.33.0/go.mod h1:LuMebE6+rBincTi9+xWTY8TztLzKHc/9C1uBCG27+q8=
206210
golang.org/x/time v0.9.0 h1:EsRrnYcQiGH+5FfbgvV4AP7qEZstoyrHB0DzarOQ4ZY=
207211
golang.org/x/time v0.9.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
208212
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
209213
golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
210214
golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
211215
golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
212216
golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
213-
golang.org/x/tools v0.38.0 h1:Hx2Xv8hISq8Lm16jvBZ2VQf+RLmbd7wVUsALibYI/IQ=
214-
golang.org/x/tools v0.38.0/go.mod h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs=
217+
golang.org/x/tools v0.40.0 h1:yLkxfA+Qnul4cs9QA3KnlFu0lVmd8JJfoq+E41uSutA=
218+
golang.org/x/tools v0.40.0/go.mod h1:Ik/tzLRlbscWpqqMRjyWYDisX8bG13FrdXp3o4Sr9lc=
215219
golang.org/x/tools/go/expect v0.1.1-deprecated h1:jpBZDwmgPhXsKZC6WhL20P4b/wmnpsEAGHaNy0n/rJM=
216220
golang.org/x/tools/go/expect v0.1.1-deprecated/go.mod h1:eihoPOH+FgIqa3FpoTwguz/bVUSGBlGQU67vpBeOrBY=
217221
golang.org/x/tools/go/packages/packagestest v0.1.1-deprecated h1:1h2MnaIAIXISqTFKdENegdpAgUXz6NrPEsbIeWaBRvM=
@@ -248,10 +252,10 @@ k8s.io/gengo/v2 v2.0.0-20250922181213-ec3ebc5fd46b h1:gMplByicHV/TJBizHd9aVEsTYo
248252
k8s.io/gengo/v2 v2.0.0-20250922181213-ec3ebc5fd46b/go.mod h1:CgujABENc3KuTrcsdpGmrrASjtQsWCT7R99mEV4U/fM=
249253
k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk=
250254
k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE=
251-
k8s.io/kube-openapi v0.0.0-20250910181357-589584f1c912 h1:Y3gxNAuB0OBLImH611+UDZcmKS3g6CthxToOb37KgwE=
252-
k8s.io/kube-openapi v0.0.0-20250910181357-589584f1c912/go.mod h1:kdmbQkyfwUagLfXIad1y2TdrjPFWp2Q89B3qkRwf/pQ=
253-
k8s.io/utils v0.0.0-20251002143259-bc988d571ff4 h1:SjGebBtkBqHFOli+05xYbK8YF1Dzkbzn+gDM4X9T4Ck=
254-
k8s.io/utils v0.0.0-20251002143259-bc988d571ff4/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
255+
k8s.io/kube-openapi v0.0.0-20251125145642-4e65d59e963e h1:iW9ChlU0cU16w8MpVYjXk12dqQ4BPFBEgif+ap7/hqQ=
256+
k8s.io/kube-openapi v0.0.0-20251125145642-4e65d59e963e/go.mod h1:kdmbQkyfwUagLfXIad1y2TdrjPFWp2Q89B3qkRwf/pQ=
257+
k8s.io/utils v0.0.0-20260108192941-914a6e750570 h1:JT4W8lsdrGENg9W+YwwdLJxklIuKWdRm+BC+xt33FOY=
258+
k8s.io/utils v0.0.0-20260108192941-914a6e750570/go.mod h1:xDxuJ0whA3d0I4mf/C4ppKHxXynQ+fxnkmQH0vTHnuk=
255259
sigs.k8s.io/controller-runtime v0.22.4 h1:GEjV7KV3TY8e+tJ2LCTxUTanW4z/FmNB7l327UfMq9A=
256260
sigs.k8s.io/controller-runtime v0.22.4/go.mod h1:+QX1XUpTXN4mLoblf4tqr5CQcyHPAki2HLXqQMY6vh8=
257261
sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730 h1:IpInykpT6ceI+QxKBbEflcR5EXP7sU1kvOlxwZh5txg=
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
apiVersion: v1
2+
kind: Secret
3+
metadata:
4+
name: test-secret
5+
namespace: default
6+
data:
7+
TEST_SECRET: c2VjcmV0IGRhdGE=
8+
type: Opaque

justfile

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ default:
33

44
fresh: stop up
55

6-
up: start-kind-cluster build-deps integration-tests mock-stream-plugin
6+
up: start-kind-cluster build-deps integration-tests mock-stream-plugin manifests
77

88
start-kind-cluster:
99
kind create cluster
@@ -27,4 +27,7 @@ mock-stream-plugin:
2727
--namespace default \
2828
--set jobTemplateSettings.podFailurePolicySettings.retryOnExitCodes="{120,121}" \
2929
--set jobTemplateSettings.backoffLimit=1 \
30-
--version v1.0.3
30+
--version v1.0.4
31+
32+
manifests:
33+
kubectl apply -f integration_tests/manifests/*.yaml

pkg/apis/streaming/v1/extensions.go

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,13 @@ func (in *StreamClass) TargetResourceGvk() schema.GroupVersionKind {
2626
var _ job.ConfiguratorProvider = (*BackfillRequest)(nil)
2727

2828
// JobConfigurator returns a JobConfigurator for the BackfillRequest
29-
func (in *BackfillRequest) JobConfigurator() job.Configurator {
29+
func (in *BackfillRequest) JobConfigurator() (job.Configurator, error) {
3030
if in == nil {
31-
return nil
31+
return nil, nil
3232
}
33-
return job.NewConfiguratorChainBuilder().
33+
configurator := job.NewConfiguratorChainBuilder().
3434
WithConfigurator(job.NewEnvironmentConfigurator(in.Spec, "OVERRIDE")).
3535
WithConfigurator(job.NewBackfillConfigurator(true)).
3636
Build()
37+
return configurator, nil
3738
}

pkg/test/apis_test/streaming/v1/types.go

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@ type MockStreamDefinitionSpec struct {
2323

2424
// BackfillJobTemplateRef represents a reference to the job template.
2525
BackfillJobTemplateRef v1.ObjectReference `json:"backfillJobTemplateRef"`
26+
27+
// SecretRef
28+
SecretRef v1.LocalObjectReference `json:"secretRef,omitempty"`
2629
}
2730

2831
type MockStreamDefinitionStatus struct {

services/controllers/stream/stream_controller_factory.go

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package stream
22

33
import (
44
"context"
5+
v1 "github.com/SneaksAndData/arcane-operator/pkg/apis/streaming/v1"
56
"github.com/SneaksAndData/arcane-operator/services/controllers/stream_class"
67
"k8s.io/apimachinery/pkg/runtime/schema"
78
"k8s.io/client-go/tools/record"
@@ -19,8 +20,8 @@ type streamControllerFactory struct {
1920
eventRecorder record.EventRecorder
2021
}
2122

22-
func (s streamControllerFactory) CreateStreamController(_ context.Context, gvk schema.GroupVersionKind, className string) (controller.Controller, error) { // coverage-ignore (trivial)
23-
streamReconciler := NewStreamReconciler(s.client, gvk, s.jobBuilder, className, s.eventRecorder)
23+
func (s streamControllerFactory) CreateStreamController(_ context.Context, gvk schema.GroupVersionKind, streamClass *v1.StreamClass) (controller.Controller, error) { // coverage-ignore (trivial)
24+
streamReconciler := NewStreamReconciler(s.client, gvk, s.jobBuilder, streamClass, s.eventRecorder)
2425
unmanaged, err := streamReconciler.SetupUnmanaged(s.manager.GetCache(), s.manager.GetScheme(), s.manager.GetRESTMapper())
2526
return unmanaged, err
2627
}

services/controllers/stream/stream_definition.go

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package stream
33
import (
44
v1 "github.com/SneaksAndData/arcane-operator/pkg/apis/streaming/v1"
55
"github.com/SneaksAndData/arcane-operator/services/job"
6+
corev1 "k8s.io/api/core/v1"
67
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
78
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
89
"k8s.io/apimachinery/pkg/types"
@@ -66,6 +67,9 @@ type Definition interface {
6667

6768
// ComputeConditions computes the conditions for the stream definition based on the backfill request.
6869
ComputeConditions(bfr *v1.BackfillRequest) []metav1.Condition
70+
71+
// GetReferenceForSecret returns a LocalObjectReference for the given secret name.
72+
GetReferenceForSecret(name string) (*corev1.LocalObjectReference, error)
6973
}
7074

7175
func fromUnstructured(obj *unstructured.Unstructured) (Definition, error) {
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package stream
2+
3+
import (
4+
"fmt"
5+
v1 "github.com/SneaksAndData/arcane-operator/pkg/apis/streaming/v1"
6+
"github.com/SneaksAndData/arcane-operator/services/job"
7+
)
8+
9+
var _ job.ConfiguratorProvider = &streamClassMetadataService{}
10+
11+
type streamClassMetadataService struct {
12+
streamClass *v1.StreamClass
13+
streamDefinition Definition
14+
}
15+
16+
func (s streamClassMetadataService) JobConfigurator() (job.Configurator, error) {
17+
builder := job.NewConfiguratorChainBuilder()
18+
19+
for _, secretName := range s.streamClass.Spec.SecretRefs {
20+
name, err := s.streamDefinition.GetReferenceForSecret(secretName)
21+
if err != nil {
22+
return nil, fmt.Errorf("error getting secret reference: %w", err)
23+
}
24+
builder = builder.WithConfigurator(job.NewSecretReferenceConfigurator(name))
25+
}
26+
27+
return builder.Build(), nil
28+
}
29+
30+
func NewStreamMetadataService(streamClass *v1.StreamClass, streamDefinition Definition) job.ConfiguratorProvider {
31+
return &streamClassMetadataService{
32+
streamClass: streamClass,
33+
streamDefinition: streamDefinition,
34+
}
35+
}

0 commit comments

Comments
 (0)