Skip to content

Commit 41e76ab

Browse files
feat: Add reading helm username and password from a secret (#95)
* feat: Add reading helm username and password from a secret * feat: update chart and fix redis config for local testing wandb setup
1 parent f595930 commit 41e76ab

5 files changed

Lines changed: 346 additions & 7 deletions

File tree

config/rbac/role.yaml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,8 +116,11 @@ rules:
116116
- cronjobs
117117
- jobs
118118
verbs:
119+
- create
120+
- delete
119121
- get
120122
- list
123+
- patch
121124
- watch
122125
- apiGroups:
123126
- cloud.google.com

controllers/weightsandbiases_controller.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ type WeightsAndBiasesReconciler struct {
7070
//+kubebuilder:rbac:groups=apps,resources=deployments;controllerrevisions;daemonsets;replicasets;statefulsets,verbs=update;delete;get;list;create;patch;watch
7171
//+kubebuilder:rbac:groups=apps,resources=deployments/status;daemonsets/status;replicasets/status;statefulsets/status,verbs=get
7272
//+kubebuilder:rbac:groups=autoscaling,resources=horizontalpodautoscalers,verbs=update;delete;get;list;patch;create;watch
73-
//+kubebuilder:rbac:groups=batch,resources=cronjobs;jobs,verbs=get;list;watch
73+
//+kubebuilder:rbac:groups=batch,resources=cronjobs;jobs,verbs=get;list;watch;create;delete;patch
7474
//+kubebuilder:rbac:groups=events.k8s.io,resources=events,verbs=list;watch
7575
//+kubebuilder:rbac:groups=cloud.google.com,resources=backendconfigs,verbs=update;delete;get;list;patch;create;watch
7676
//+kubebuilder:rbac:groups=networking.k8s.io,resources=ingresses;ingresses/status;networkpolicies,verbs=update;delete;get;list;create;patch;watch

hack/testing-manifests/wandb/default.yaml

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ spec:
1313
chart:
1414
url: https://charts.wandb.ai
1515
name: "operator-wandb"
16-
version: "0.26.3"
16+
version: "0.32.4"
1717
values:
1818
global:
1919
bucket:
@@ -60,8 +60,6 @@ spec:
6060

6161
redis:
6262
install: true
63-
auth:
64-
enabled: true
6563
resources:
6664
requests:
6765
cpu: "100m"

pkg/wandb/spec/charts/repo.go

Lines changed: 38 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@ package charts
33
import (
44
"context"
55
"fmt"
6+
corev1 "k8s.io/api/core/v1"
67
"net/url"
78
"os"
89
"path/filepath"
@@ -22,6 +23,9 @@ import (
2223
ctrllog "sigs.k8s.io/controller-runtime/pkg/log"
2324
)
2425

26+
const CredentialUsernameKey = "HELM_USERNAME"
27+
const CredentialPasswordKey = "HELM_PASSWORD"
28+
2529
type RepoRelease struct {
2630
URL string `validate:"required,url" json:"url"`
2731
Name string `validate:"required" json:"name"`
@@ -32,9 +36,17 @@ type RepoRelease struct {
3236
// Optional repository name override. If not set, will be derived from URL.
3337
RepoName string `json:"repoName,omitempty"`
3438

35-
Password string `json:"password"`
36-
Username string `json:"username"`
37-
Debug bool `json:"debug"`
39+
CredentialSecret *CredentialSecret `json:"credentialSecret,omitempty"`
40+
Password string `json:"password"`
41+
Username string `json:"username"`
42+
43+
Debug bool `json:"debug"`
44+
}
45+
46+
type CredentialSecret struct {
47+
Name string `json:"name"`
48+
UsernameKey string `json:"usernameKey"`
49+
PasswordKey string `json:"passwordKey"`
3850
}
3951

4052
// deriveRepoName generates a repository name from the URL if one isn't explicitly set
@@ -87,6 +99,29 @@ func (r RepoRelease) Apply(
8799
scheme *runtime.Scheme,
88100
config spec.Values,
89101
) error {
102+
log := ctrllog.Log.WithName("chart-repo")
103+
if r.CredentialSecret != nil {
104+
if r.CredentialSecret.UsernameKey == "" {
105+
r.CredentialSecret.UsernameKey = CredentialUsernameKey
106+
}
107+
if r.CredentialSecret.PasswordKey == "" {
108+
r.CredentialSecret.PasswordKey = CredentialPasswordKey
109+
}
110+
log.Info("Retrieving credentials from secret",
111+
"name", r.CredentialSecret.Name,
112+
"usernameKey", r.CredentialSecret.UsernameKey,
113+
"passwordKey", r.CredentialSecret.PasswordKey)
114+
115+
secret := &corev1.Secret{}
116+
err := c.Get(ctx, client.ObjectKey{Name: r.CredentialSecret.Name, Namespace: wandb.Namespace}, secret)
117+
if err != nil {
118+
log.Error(err, "Failed to get credentials from secret")
119+
return err
120+
}
121+
r.Username = string(secret.Data[r.CredentialSecret.UsernameKey])
122+
r.Password = string(secret.Data[r.CredentialSecret.PasswordKey])
123+
}
124+
90125
local, err := r.ToLocalRelease()
91126
if err != nil {
92127
return err

0 commit comments

Comments
 (0)