Skip to content

Commit 1b4189d

Browse files
committed
fixup! Support serviceaccount pull secrets
Signed-off-by: Todd Short <[email protected]>
1 parent 1c0e4dd commit 1b4189d

File tree

5 files changed

+40
-33
lines changed

5 files changed

+40
-33
lines changed

config/base/catalogd/rbac/role.yaml

Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,6 @@ kind: ClusterRole
44
metadata:
55
name: manager-role
66
rules:
7-
- apiGroups:
8-
- ""
9-
resources:
10-
- secrets
11-
verbs:
12-
- get
13-
- list
14-
- watch
157
- apiGroups:
168
- olm.operatorframework.io
179
resources:
@@ -48,6 +40,7 @@ rules:
4840
- apiGroups:
4941
- ""
5042
resources:
43+
- secrets
5144
- serviceaccounts
5245
verbs:
5346
- get

go.mod

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ require (
1414
github.com/golang-jwt/jwt/v5 v5.2.2
1515
github.com/google/go-cmp v0.7.0
1616
github.com/google/go-containerregistry v0.20.3
17+
github.com/google/renameio/v2 v2.0.0
1718
github.com/gorilla/handlers v1.5.2
1819
github.com/klauspost/compress v1.18.0
1920
github.com/opencontainers/go-digest v1.0.0

go.sum

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -255,6 +255,8 @@ github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0=
255255
github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
256256
github.com/google/pprof v0.0.0-20250423184734-337e5dd93bb4 h1:gD0vax+4I+mAj+jEChEf25Ia07Jq7kYOFO5PPhAxFl4=
257257
github.com/google/pprof v0.0.0-20250423184734-337e5dd93bb4/go.mod h1:5hDyRhoBCxViHszMt12TnOpEI4VVi+U8Gm9iphldiMA=
258+
github.com/google/renameio/v2 v2.0.0 h1:UifI23ZTGY8Tt29JbYFiuyIU3eX+RNFtUwefq9qAhxg=
259+
github.com/google/renameio/v2 v2.0.0/go.mod h1:BtmJXm5YlszgC+TD4HOEEUFgkJP3nLxehU6hfe7jRt4=
258260
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4=
259261
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ=
260262
github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=

internal/catalogd/controllers/core/clustercatalog_controller.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ type storedCatalogData struct {
7979
//+kubebuilder:rbac:groups=olm.operatorframework.io,resources=clustercatalogs,verbs=get;list;watch;create;update;patch;delete
8080
//+kubebuilder:rbac:groups=olm.operatorframework.io,resources=clustercatalogs/status,verbs=get;update;patch
8181
//+kubebuilder:rbac:groups=olm.operatorframework.io,resources=clustercatalogs/finalizers,verbs=update
82-
//+kubebuilder:rbac:groups=core,resources=secrets,verbs=get;list;watch
82+
//+kubebuilder:rbac:namespace=system,groups=core,resources=secrets,verbs=get;list;watch
8383
//+kubebuilder:rbac:namespace=system,groups=core,resources=serviceaccounts,verbs=get;list;watch
8484

8585
// Reconcile is part of the main kubernetes reconciliation loop which aims to

internal/shared/controllers/pull_secret_controller.go

Lines changed: 35 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ import (
2323
"os"
2424

2525
"github.com/go-logr/logr"
26+
"github.com/google/renameio/v2"
2627
corev1 "k8s.io/api/core/v1"
2728
apierrors "k8s.io/apimachinery/pkg/api/errors"
2829
"k8s.io/apimachinery/pkg/types"
@@ -45,23 +46,18 @@ type PullSecretReconciler struct {
4546
func (r *PullSecretReconciler) Reconcile(ctx context.Context, req ctrl.Request) (ctrl.Result, error) {
4647
logger := log.FromContext(ctx).WithName("pull-secret-reconciler")
4748

48-
logger.Info("processing event", "name", req.NamespacedName)
49-
defer logger.Info("processed event", "name", req.NamespacedName)
49+
logger.Info("processing event", logName(req.NamespacedName)...)
50+
defer logger.Info("processed event", logName(req.NamespacedName)...)
5051

5152
secrets := []*corev1.Secret{}
52-
secret := &corev1.Secret{}
5353

5454
if r.SecretKey != nil { //nolint:nestif
55+
secret, err := r.getSecret(ctx, logger, *r.SecretKey)
56+
if err != nil {
57+
return ctrl.Result{}, err
58+
}
5559
// Add the configured pull secret to the list of secrets
56-
if err := r.Get(ctx, *r.SecretKey, secret); err != nil {
57-
if apierrors.IsNotFound(err) {
58-
logger.Info("secret not found", "name", r.SecretKey)
59-
} else {
60-
logger.Error(err, "failed to get Secret", "name", r.SecretKey)
61-
return ctrl.Result{}, err
62-
}
63-
} else {
64-
logger.Info("global pull secret", "name", *r.SecretKey)
60+
if secret != nil {
6561
secrets = append(secrets, secret)
6662
}
6763
}
@@ -71,9 +67,9 @@ func (r *PullSecretReconciler) Reconcile(ctx context.Context, req ctrl.Request)
7167
logger.Info("serviceaccount", "name", r.ServiceAccountKey)
7268
if err := r.Get(ctx, r.ServiceAccountKey, sa); err != nil { //nolint:nestif
7369
if apierrors.IsNotFound(err) {
74-
logger.Info("serviceaccount not found", "serviceaccount", r.ServiceAccountKey)
70+
logger.Info("serviceaccount not found", logName(r.ServiceAccountKey)...)
7571
} else {
76-
logger.Error(err, "failed to get serviceaccount", "serviceaccount", r.ServiceAccountKey)
72+
logger.Error(err, "failed to get serviceaccount", logName(r.ServiceAccountKey)...)
7773
return ctrl.Result{}, err
7874
}
7975
} else {
@@ -84,16 +80,12 @@ func (r *PullSecretReconciler) Reconcile(ctx context.Context, req ctrl.Request)
8480
// This is to update the list of secrets that we are filtering on
8581
// Add all secrets regardless if they exist or not
8682
pullSecrets = append(pullSecrets, nn)
87-
secret := &corev1.Secret{}
88-
err = r.Get(ctx, nn, secret)
83+
84+
secret, err := r.getSecret(ctx, logger, nn)
8985
if err != nil {
90-
if apierrors.IsNotFound(err) {
91-
logger.Info("serviceaccount pull secret not found", "secret", nn)
92-
} else {
93-
logger.Error(err, "failed to get serviceaccount pull secret", "secret", nn)
94-
return ctrl.Result{}, err
95-
}
96-
} else {
86+
return ctrl.Result{}, err
87+
}
88+
if secret != nil {
9789
secrets = append(secrets, secret)
9890
}
9991
}
@@ -108,6 +100,25 @@ func (r *PullSecretReconciler) Reconcile(ctx context.Context, req ctrl.Request)
108100
return ctrl.Result{}, r.writeSecretToFile(logger, secrets)
109101
}
110102

103+
func (r *PullSecretReconciler) getSecret(ctx context.Context, logger logr.Logger, nn types.NamespacedName) (*corev1.Secret, error) {
104+
secret := &corev1.Secret{}
105+
if err := r.Get(ctx, *r.SecretKey, secret); err != nil {
106+
if apierrors.IsNotFound(err) {
107+
logger.Info("secret not found", logName(nn)...)
108+
return nil, nil
109+
}
110+
logger.Error(err, "failed to get secret", logName(nn)...)
111+
return nil, err
112+
}
113+
logger.Info("found secret", logName(nn)...)
114+
return secret, nil
115+
}
116+
117+
// Helper function to log NamespacedNames
118+
func logName(nn types.NamespacedName) []any {
119+
return []any{"name", nn.Name, "namespace", nn.Namespace}
120+
}
121+
111122
// SetupWithManager sets up the controller with the Manager.
112123
func (r *PullSecretReconciler) SetupWithManager(mgr ctrl.Manager) error {
113124
_, err := ctrl.NewControllerManagedBy(mgr).
@@ -205,7 +216,7 @@ func (r *PullSecretReconciler) writeSecretToFile(logger logr.Logger, secrets []*
205216
if err != nil {
206217
return fmt.Errorf("failed to marshal secret data: %w", err)
207218
}
208-
err = os.WriteFile(r.AuthFilePath, data, 0600)
219+
err = renameio.WriteFile(r.AuthFilePath, data, 0600)
209220
if err != nil {
210221
return fmt.Errorf("failed to write secret data to file: %w", err)
211222
}

0 commit comments

Comments
 (0)