mirror of
https://github.com/ipedrazas/drone-helm.git
synced 2026-06-04 18:24:13 +08:00
fixed multiple keys with secrets
This commit is contained in:
@@ -66,8 +66,9 @@ Then you have to define values as
|
||||
image: quay.io/ipedrazas/drone-helm
|
||||
chart: stable/jenkins
|
||||
release: my-dear-jenkins
|
||||
values: webhook.token=MYSECRET
|
||||
secrets: MYSECRET
|
||||
values: webhook.token=${MYSECRET},webhook.key=$KEY
|
||||
api_server: ${STAGING_API_SERVER}
|
||||
secrets: MYSECRET,STAGING_API_SERVER,KEY
|
||||
|
||||
You have to do this because from 0.5 version fo Drone, secrets are not expanded in plugins. This means that there's
|
||||
no possibility of passing secret parameters as part of a value to the plugin.
|
||||
|
||||
@@ -105,10 +105,21 @@ func runCommand(params []string) error {
|
||||
func resolveSecrets(p *Plugin) {
|
||||
if len(p.Config.Secrets) > 0 {
|
||||
for _, secret := range p.Config.Secrets {
|
||||
if strings.Contains(p.Config.Values, secret) {
|
||||
envval := os.Getenv(secret)
|
||||
p.Config.Values = strings.Replace(p.Config.Values, secret, envval, -1)
|
||||
}
|
||||
envval := os.Getenv(secret)
|
||||
p.Config.Values = resolveEnvVar(p.Config.Values, secret, envval)
|
||||
p.Config.APIServer = resolveEnvVar(p.Config.APIServer, secret, envval)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// this functions checks if $VAR or ${VAR} exists and
|
||||
// returns the text with resolved vars
|
||||
func resolveEnvVar(key string, envvar string, envval string) string {
|
||||
if strings.Contains(key, "$"+envvar) {
|
||||
key = strings.Replace(key, "$"+envvar, envval, -1)
|
||||
}
|
||||
if strings.Contains(key, "${"+envvar+"}") {
|
||||
key = strings.Replace(key, "${"+envvar+"}", envval, -1)
|
||||
}
|
||||
return key
|
||||
}
|
||||
|
||||
+6
-3
@@ -74,7 +74,7 @@ func TestResolveSecrets(t *testing.T) {
|
||||
|
||||
plugin := &Plugin{
|
||||
Config: Config{
|
||||
APIServer: "http://myapiserver",
|
||||
APIServer: "${API_SERVER}",
|
||||
Token: "secret-token",
|
||||
HelmCommand: nil,
|
||||
Namespace: "default",
|
||||
@@ -83,7 +83,7 @@ func TestResolveSecrets(t *testing.T) {
|
||||
DryRun: true,
|
||||
Chart: "./chart/test",
|
||||
Release: "test-release",
|
||||
Values: "image.tag=TAG,api=API_SERVER,nameOverride=my-over-app,second.tag=TAG",
|
||||
Values: "image.tag=$TAG,api=${API_SERVER},nameOverride=my-over-app,second.tag=${TAG}",
|
||||
Secrets: secrets,
|
||||
},
|
||||
}
|
||||
@@ -101,5 +101,8 @@ func TestResolveSecrets(t *testing.T) {
|
||||
if strings.Contains(plugin.Config.Values, secrets[1]) {
|
||||
t.Errorf("env var %s not resolved %s", secrets[1], api)
|
||||
}
|
||||
|
||||
// // test that the subsitution works with more than one envvar
|
||||
if strings.Contains(plugin.Config.APIServer, secrets[1]) {
|
||||
t.Errorf("env var %s not resolved %s", secrets[1], api)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user