feat: retrieve repository's username/password from environment
Signed-off-by: Kevin Leturc <kevinleturc@users.noreply.github.com>
This commit is contained in:
parent
b5d54d6921
commit
422852dd9a
|
|
@ -148,7 +148,9 @@ repositories:
|
||||||
url: http://roboll.io/charts
|
url: http://roboll.io/charts
|
||||||
certFile: optional_client_cert
|
certFile: optional_client_cert
|
||||||
keyFile: optional_client_key
|
keyFile: optional_client_key
|
||||||
|
# username is retrieve from the environment with the format <registryNameUpperCase>_USERNAME for CI usage, here ROBOLL_USERNAME
|
||||||
username: optional_username
|
username: optional_username
|
||||||
|
# username is retrieve from the environment with the format <registryNameUpperCase>_PASSWORD for CI usage, here ROBOLL_PASSWORD
|
||||||
password: optional_password
|
password: optional_password
|
||||||
oci: true
|
oci: true
|
||||||
passCredentials: true
|
passCredentials: true
|
||||||
|
|
|
||||||
|
|
@ -433,14 +433,14 @@ func (st *HelmState) SyncRepos(helm RepoUpdater, shouldSkip map[string]bool) ([]
|
||||||
if shouldSkip[repo.Name] {
|
if shouldSkip[repo.Name] {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
username, password := gatherUsernamePassword(repo.Name, repo.Username, repo.Password)
|
||||||
var err error
|
var err error
|
||||||
if repo.OCI {
|
if repo.OCI {
|
||||||
username, password := gatherOCIUsernamePassword(repo.Name, repo.Username, repo.Password)
|
|
||||||
if username != "" && password != "" {
|
if username != "" && password != "" {
|
||||||
err = helm.RegistryLogin(repo.URL, username, password)
|
err = helm.RegistryLogin(repo.URL, username, password)
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
err = helm.AddRepo(repo.Name, repo.URL, repo.CaFile, repo.CertFile, repo.KeyFile, repo.Username, repo.Password, repo.Managed, repo.PassCredentials, repo.SkipTLSVerify)
|
err = helm.AddRepo(repo.Name, repo.URL, repo.CaFile, repo.CertFile, repo.KeyFile, username, password, repo.Managed, repo.PassCredentials, repo.SkipTLSVerify)
|
||||||
}
|
}
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
@ -453,7 +453,7 @@ func (st *HelmState) SyncRepos(helm RepoUpdater, shouldSkip map[string]bool) ([]
|
||||||
return updated, nil
|
return updated, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func gatherOCIUsernamePassword(repoName string, username string, password string) (string, string) {
|
func gatherUsernamePassword(repoName string, username string, password string) (string, string) {
|
||||||
var user, pass string
|
var user, pass string
|
||||||
|
|
||||||
replacedRepoName := strings.ToUpper(strings.Replace(repoName, "-", "_", -1))
|
replacedRepoName := strings.ToUpper(strings.Replace(repoName, "-", "_", -1))
|
||||||
|
|
|
||||||
|
|
@ -964,6 +964,48 @@ func TestHelmState_SyncRepos(t *testing.T) {
|
||||||
helm: &exectest.Helm{},
|
helm: &exectest.Helm{},
|
||||||
want: []string{"name", "http://example.com/", "", "", "", "example_user", "example_password", "", "true", ""},
|
want: []string{"name", "http://example.com/", "", "", "", "example_user", "example_password", "", "true", ""},
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "repository without username and password and environment with username and password",
|
||||||
|
repos: []RepositorySpec{
|
||||||
|
{
|
||||||
|
Name: "name",
|
||||||
|
URL: "http://example.com/",
|
||||||
|
CertFile: "",
|
||||||
|
KeyFile: "",
|
||||||
|
Username: "",
|
||||||
|
Password: "",
|
||||||
|
PassCredentials: "",
|
||||||
|
SkipTLSVerify: "",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
envs: map[string]string{
|
||||||
|
"NAME_USERNAME": "example_user",
|
||||||
|
"NAME_PASSWORD": "example_password",
|
||||||
|
},
|
||||||
|
helm: &exectest.Helm{},
|
||||||
|
want: []string{"name", "http://example.com/", "", "", "", "example_user", "example_password", "", "", ""},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
name: "repository with username and password and environment with username and password",
|
||||||
|
repos: []RepositorySpec{
|
||||||
|
{
|
||||||
|
Name: "name",
|
||||||
|
URL: "http://example.com/",
|
||||||
|
CertFile: "",
|
||||||
|
KeyFile: "",
|
||||||
|
Username: "example_user1",
|
||||||
|
Password: "example_password1",
|
||||||
|
PassCredentials: "",
|
||||||
|
SkipTLSVerify: "",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
envs: map[string]string{
|
||||||
|
"NAME_USERNAME": "example_user2",
|
||||||
|
"NAME_PASSWORD": "example_password2",
|
||||||
|
},
|
||||||
|
helm: &exectest.Helm{},
|
||||||
|
want: []string{"name", "http://example.com/", "", "", "", "example_user1", "example_password1", "", "", ""},
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: "repository with skip-tls-verify",
|
name: "repository with skip-tls-verify",
|
||||||
repos: []RepositorySpec{
|
repos: []RepositorySpec{
|
||||||
|
|
@ -2432,7 +2474,7 @@ func TestReverse(t *testing.T) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func Test_gatherOCIUsernamePassword(t *testing.T) {
|
func Test_gatherUsernamePassword(t *testing.T) {
|
||||||
type args struct {
|
type args struct {
|
||||||
repoName string
|
repoName string
|
||||||
username string
|
username string
|
||||||
|
|
@ -2451,7 +2493,7 @@ func Test_gatherOCIUsernamePassword(t *testing.T) {
|
||||||
{
|
{
|
||||||
name: "pass username/password from args",
|
name: "pass username/password from args",
|
||||||
args: args{
|
args: args{
|
||||||
repoName: "myOCIRegistry",
|
repoName: "myRegistry",
|
||||||
username: "username1",
|
username: "username1",
|
||||||
password: "password1",
|
password: "password1",
|
||||||
},
|
},
|
||||||
|
|
@ -2461,11 +2503,11 @@ func Test_gatherOCIUsernamePassword(t *testing.T) {
|
||||||
{
|
{
|
||||||
name: "repoName does not contain hyphen, read username/password from environment variables",
|
name: "repoName does not contain hyphen, read username/password from environment variables",
|
||||||
args: args{
|
args: args{
|
||||||
repoName: "myOCIRegistry",
|
repoName: "myRegistry",
|
||||||
},
|
},
|
||||||
envUsernameKey: "MYOCIREGISTRY_USERNAME",
|
envUsernameKey: "MYREGISTRY_USERNAME",
|
||||||
envUsernameValue: "username2",
|
envUsernameValue: "username2",
|
||||||
envPasswordKey: "MYOCIREGISTRY_PASSWORD",
|
envPasswordKey: "MYREGISTRY_PASSWORD",
|
||||||
envPasswordValue: "password2",
|
envPasswordValue: "password2",
|
||||||
wantUsername: "username2",
|
wantUsername: "username2",
|
||||||
wantPassword: "password2",
|
wantPassword: "password2",
|
||||||
|
|
@ -2473,11 +2515,11 @@ func Test_gatherOCIUsernamePassword(t *testing.T) {
|
||||||
{
|
{
|
||||||
name: "repoName contain hyphen, read username/password from environment variables",
|
name: "repoName contain hyphen, read username/password from environment variables",
|
||||||
args: args{
|
args: args{
|
||||||
repoName: "my-oci-registry",
|
repoName: "my-registry",
|
||||||
},
|
},
|
||||||
envUsernameKey: "MY_OCI_REGISTRY_USERNAME",
|
envUsernameKey: "MY_REGISTRY_USERNAME",
|
||||||
envUsernameValue: "username3",
|
envUsernameValue: "username3",
|
||||||
envPasswordKey: "MY_OCI_REGISTRY_PASSWORD",
|
envPasswordKey: "MY_REGISTRY_PASSWORD",
|
||||||
envPasswordValue: "password3",
|
envPasswordValue: "password3",
|
||||||
wantUsername: "username3",
|
wantUsername: "username3",
|
||||||
wantPassword: "password3",
|
wantPassword: "password3",
|
||||||
|
|
@ -2493,9 +2535,9 @@ func Test_gatherOCIUsernamePassword(t *testing.T) {
|
||||||
t.Setenv(tt.envPasswordKey, tt.envPasswordValue)
|
t.Setenv(tt.envPasswordKey, tt.envPasswordValue)
|
||||||
}
|
}
|
||||||
|
|
||||||
gotUsername, gotPassword := gatherOCIUsernamePassword(tt.args.repoName, tt.args.username, tt.args.password)
|
gotUsername, gotPassword := gatherUsernamePassword(tt.args.repoName, tt.args.username, tt.args.password)
|
||||||
if gotUsername != tt.wantUsername || gotPassword != tt.wantPassword {
|
if gotUsername != tt.wantUsername || gotPassword != tt.wantPassword {
|
||||||
t.Errorf("gatherOCIUsernamePassword() = got username/password %v/%v, want username/password %v/%v", gotUsername, gotPassword, tt.wantUsername, tt.wantPassword)
|
t.Errorf("gatherUsernamePassword() = got username/password %v/%v, want username/password %v/%v", gotUsername, gotPassword, tt.wantUsername, tt.wantPassword)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue