@@ -3,6 +3,7 @@ package charts
33import (
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+
2529type 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