Skip to content

Commit 9f9dba7

Browse files
committed
ESO-49: Implement the functionality to ensure RBAC specific resources stay in desired state
1 parent aaa9030 commit 9f9dba7

22 files changed

+1108
-116
lines changed

Dockerfile

Lines changed: 1 addition & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,7 @@ ARG TARGETOS
44
ARG TARGETARCH
55

66
WORKDIR /workspace
7-
# Copy the Go Modules manifests
8-
COPY go.mod go.mod
9-
COPY go.sum go.sum
10-
# cache deps before building and copying source so that we don't need to re-download as much
11-
# and so that source changes don't invalidate our downloaded layer
12-
RUN go mod download
13-
14-
# Copy the go source
15-
COPY cmd/external-secrets-operator/main.go cmd/external-secrets-operator/main.go
16-
COPY api/ api/
17-
COPY pkg/controller/ pkg/controller/
7+
COPY . .
188

199
# Build
2010
# the GOARCH has not a default value to allow the binary be built according to the host where the command

bundle/manifests/external-secrets-operator.clusterserviceversion.yaml

Lines changed: 91 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ metadata:
3333
categories: Security
3434
console.openshift.io/disable-operand-delete: "true"
3535
containerImage: ""
36-
createdAt: "2025-05-27T10:56:51Z"
36+
createdAt: "2025-06-02T08:50:05Z"
3737
features.operators.openshift.io/cnf: "false"
3838
features.operators.openshift.io/cni: "false"
3939
features.operators.openshift.io/csi: "false"
@@ -175,6 +175,7 @@ spec:
175175
- apiGroups:
176176
- ""
177177
resources:
178+
- configmaps
178179
- events
179180
- secrets
180181
- serviceaccounts
@@ -187,6 +188,22 @@ spec:
187188
- patch
188189
- update
189190
- watch
191+
- apiGroups:
192+
- ""
193+
resources:
194+
- endpoints
195+
- namespaces
196+
verbs:
197+
- create
198+
- get
199+
- list
200+
- watch
201+
- apiGroups:
202+
- ""
203+
resources:
204+
- serviceaccounts/token
205+
verbs:
206+
- create
190207
- apiGroups:
191208
- admissionregistration.k8s.io
192209
resources:
@@ -199,6 +216,18 @@ spec:
199216
- patch
200217
- update
201218
- watch
219+
- apiGroups:
220+
- apiextensions.k8s.io
221+
resources:
222+
- customresourcedefinitions
223+
verbs:
224+
- create
225+
- delete
226+
- get
227+
- list
228+
- patch
229+
- update
230+
- watch
202231
- apiGroups:
203232
- apps
204233
resources:
@@ -235,10 +264,71 @@ spec:
235264
- patch
236265
- update
237266
- watch
267+
- apiGroups:
268+
- external-secrets.io
269+
resources:
270+
- clusterexternalsecrets
271+
- clustersecretstores
272+
- externalsecrets
273+
- pushsecrets
274+
- secretstores
275+
verbs:
276+
- create
277+
- delete
278+
- deletecollection
279+
- get
280+
- list
281+
- patch
282+
- update
283+
- watch
284+
- apiGroups:
285+
- external-secrets.io
286+
resources:
287+
- clusterexternalsecrets/finalizers
288+
- clusterexternalsecrets/status
289+
- clustersecretstores/finalizers
290+
- clustersecretstores/status
291+
- externalsecrets/finalizers
292+
- externalsecrets/status
293+
- pushsecrets/finalizers
294+
- pushsecrets/status
295+
- secretstores/finalizers
296+
- secretstores/status
297+
verbs:
298+
- get
299+
- patch
300+
- update
301+
- apiGroups:
302+
- generators.external-secrets.io
303+
resources:
304+
- acraccesstokens
305+
- clustergenerators
306+
- ecrauthorizationtokens
307+
- fakes
308+
- gcraccesstokens
309+
- generatorstates
310+
- githubaccesstokens
311+
- grafanas
312+
- passwords
313+
- quayaccesstokens
314+
- stssessiontokens
315+
- uuids
316+
- vaultdynamicsecrets
317+
- webhooks
318+
verbs:
319+
- create
320+
- delete
321+
- deletecollection
322+
- get
323+
- list
324+
- patch
325+
- update
326+
- watch
238327
- apiGroups:
239328
- operator.openshift.io
240329
resources:
241330
- externalsecrets
331+
- externalsecretsmanagers
242332
verbs:
243333
- create
244334
- delete

bundle/manifests/operator.openshift.io_externalsecrets.yaml

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1285,6 +1285,10 @@ spec:
12851285
x-kubernetes-list-map-keys:
12861286
- type
12871287
x-kubernetes-list-type: map
1288+
externalSecretsImage:
1289+
description: externalSecretsImage is the name of the image and the
1290+
tag used for deploying external-secrets.
1291+
type: string
12881292
type: object
12891293
type: object
12901294
x-kubernetes-validations:

cmd/external-secrets-operator/main.go

Lines changed: 12 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -21,20 +21,21 @@ import (
2121
"flag"
2222
"os"
2323

24+
appsv1 "k8s.io/api/apps/v1"
25+
corev1 "k8s.io/api/core/v1"
26+
rbacv1 "k8s.io/api/rbac/v1"
2427
"k8s.io/apimachinery/pkg/runtime"
2528
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
2629
clientgoscheme "k8s.io/client-go/kubernetes/scheme"
30+
"k8s.io/klog/v2/textlogger"
2731
ctrl "sigs.k8s.io/controller-runtime"
2832
"sigs.k8s.io/controller-runtime/pkg/healthz"
29-
"sigs.k8s.io/controller-runtime/pkg/log/zap"
3033
"sigs.k8s.io/controller-runtime/pkg/metrics/filters"
3134
metricsserver "sigs.k8s.io/controller-runtime/pkg/metrics/server"
3235
"sigs.k8s.io/controller-runtime/pkg/webhook"
3336

34-
zaplog "go.uber.org/zap"
35-
"go.uber.org/zap/zapcore"
36-
3737
certmanagerv1 "github.com/cert-manager/cert-manager/pkg/apis/certmanager/v1"
38+
3839
operatorv1alpha1 "github.com/openshift/external-secrets-operator/api/v1alpha1"
3940
externalsecretscontroller "github.com/openshift/external-secrets-operator/pkg/controller"
4041
// +kubebuilder:scaffold:imports
@@ -47,9 +48,12 @@ var (
4748

4849
func init() {
4950
utilruntime.Must(clientgoscheme.AddToScheme(scheme))
51+
utilruntime.Must(appsv1.AddToScheme(scheme))
52+
utilruntime.Must(corev1.AddToScheme(scheme))
53+
utilruntime.Must(rbacv1.AddToScheme(scheme))
54+
utilruntime.Must(certmanagerv1.AddToScheme(scheme))
5055

5156
utilruntime.Must(operatorv1alpha1.AddToScheme(scheme))
52-
utilruntime.Must(certmanagerv1.AddToScheme(scheme))
5357
// +kubebuilder:scaffold:scheme
5458
}
5559

@@ -73,16 +77,8 @@ func main() {
7377
"If set, HTTP/2 will be enabled for the metrics and webhook servers")
7478
flag.IntVar(&logLevel, "v", 1, "operator log verbosity")
7579

76-
opts := zap.Options{
77-
Development: true,
78-
ZapOpts: []zaplog.Option{zaplog.AddCaller()},
79-
TimeEncoder: zapcore.ISO8601TimeEncoder,
80-
Level: zaplog.NewAtomicLevelAt(zapcore.Level(logLevel)),
81-
}
82-
opts.BindFlags(flag.CommandLine)
83-
flag.Parse()
84-
85-
ctrl.SetLogger(zap.New(zap.UseFlagOptions(&opts)))
80+
logConfig := textlogger.NewConfig(textlogger.Verbosity(logLevel))
81+
ctrl.SetLogger(textlogger.NewLogger(logConfig))
8682

8783
// if the enable-http2 flag is false (the default), http/2 should be disabled
8884
// due to its vulnerabilities. More specifically, disabling http/2 will
@@ -134,6 +130,7 @@ func main() {
134130
HealthProbeBindAddress: probeAddr,
135131
LeaderElection: enableLeaderElection,
136132
LeaderElectionID: "de6a4747.operator.openshift.io",
133+
Logger: ctrl.Log.WithName("operator-manager"),
137134
})
138135
if err != nil {
139136
setupLog.Error(err, "failed to create controller manager")

config/crd/bases/operator.openshift.io_externalsecrets.yaml

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1289,9 +1289,6 @@ spec:
12891289
description: externalSecretsImage is the name of the image and the
12901290
tag used for deploying external-secrets.
12911291
type: string
1292-
serviceAccount:
1293-
description: serviceAccount created by the controller for the external-secrets.
1294-
type: string
12951292
type: object
12961293
type: object
12971294
x-kubernetes-validations:

config/rbac/role.yaml

Lines changed: 90 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ rules:
77
- apiGroups:
88
- ""
99
resources:
10+
- configmaps
1011
- events
1112
- secrets
1213
- serviceaccounts
@@ -19,6 +20,22 @@ rules:
1920
- patch
2021
- update
2122
- watch
23+
- apiGroups:
24+
- ""
25+
resources:
26+
- endpoints
27+
- namespaces
28+
verbs:
29+
- create
30+
- get
31+
- list
32+
- watch
33+
- apiGroups:
34+
- ""
35+
resources:
36+
- serviceaccounts/token
37+
verbs:
38+
- create
2239
- apiGroups:
2340
- admissionregistration.k8s.io
2441
resources:
@@ -31,6 +48,18 @@ rules:
3148
- patch
3249
- update
3350
- watch
51+
- apiGroups:
52+
- apiextensions.k8s.io
53+
resources:
54+
- customresourcedefinitions
55+
verbs:
56+
- create
57+
- delete
58+
- get
59+
- list
60+
- patch
61+
- update
62+
- watch
3463
- apiGroups:
3564
- apps
3665
resources:
@@ -67,10 +96,71 @@ rules:
6796
- patch
6897
- update
6998
- watch
99+
- apiGroups:
100+
- external-secrets.io
101+
resources:
102+
- clusterexternalsecrets
103+
- clustersecretstores
104+
- externalsecrets
105+
- pushsecrets
106+
- secretstores
107+
verbs:
108+
- create
109+
- delete
110+
- deletecollection
111+
- get
112+
- list
113+
- patch
114+
- update
115+
- watch
116+
- apiGroups:
117+
- external-secrets.io
118+
resources:
119+
- clusterexternalsecrets/finalizers
120+
- clusterexternalsecrets/status
121+
- clustersecretstores/finalizers
122+
- clustersecretstores/status
123+
- externalsecrets/finalizers
124+
- externalsecrets/status
125+
- pushsecrets/finalizers
126+
- pushsecrets/status
127+
- secretstores/finalizers
128+
- secretstores/status
129+
verbs:
130+
- get
131+
- patch
132+
- update
133+
- apiGroups:
134+
- generators.external-secrets.io
135+
resources:
136+
- acraccesstokens
137+
- clustergenerators
138+
- ecrauthorizationtokens
139+
- fakes
140+
- gcraccesstokens
141+
- generatorstates
142+
- githubaccesstokens
143+
- grafanas
144+
- passwords
145+
- quayaccesstokens
146+
- stssessiontokens
147+
- uuids
148+
- vaultdynamicsecrets
149+
- webhooks
150+
verbs:
151+
- create
152+
- delete
153+
- deletecollection
154+
- get
155+
- list
156+
- patch
157+
- update
158+
- watch
70159
- apiGroups:
71160
- operator.openshift.io
72161
resources:
73162
- externalsecrets
163+
- externalsecretsmanagers
74164
verbs:
75165
- create
76166
- delete

go.mod

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ go 1.23.6
55
require (
66
github.com/cert-manager/cert-manager v1.16.4
77
github.com/go-bindata/go-bindata v3.1.2+incompatible
8-
github.com/go-logr/logr v1.4.2
8+
github.com/go-logr/logr v1.4.3
99
github.com/golangci/golangci-lint v1.59.1
1010
github.com/maxbrunsfeld/counterfeiter/v6 v6.11.2
1111
github.com/onsi/ginkgo/v2 v2.22.0
@@ -15,7 +15,9 @@ require (
1515
k8s.io/api v0.32.1
1616
k8s.io/apimachinery v0.32.1
1717
k8s.io/client-go v0.32.1
18+
k8s.io/klog/v2 v2.130.1
1819
k8s.io/kubernetes v1.32.1
20+
k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738
1921
sigs.k8s.io/controller-runtime v0.20.1
2022
sigs.k8s.io/controller-runtime/tools/setup-envtest v0.0.0-20250308055145-5fe7bb3edc86
2123
sigs.k8s.io/controller-tools v0.16.1
@@ -275,11 +277,9 @@ require (
275277
k8s.io/component-base v0.32.1 // indirect
276278
k8s.io/component-helpers v0.32.1 // indirect
277279
k8s.io/controller-manager v0.32.1 // indirect
278-
k8s.io/klog/v2 v2.130.1 // indirect
279280
k8s.io/kms v0.32.1 // indirect
280281
k8s.io/kube-openapi v0.0.0-20241105132330-32ad38e42d3f // indirect
281282
k8s.io/kubelet v0.32.1 //indirect
282-
k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738 // indirect
283283
mvdan.cc/gofumpt v0.6.0 // indirect
284284
mvdan.cc/unparam v0.0.0-20240528143540-8a5130ca722f // indirect
285285
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.31.1 // indirect

0 commit comments

Comments
 (0)