diff --git a/README.md b/README.md index cc25806..5c7d314 100644 --- a/README.md +++ b/README.md @@ -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. diff --git a/plugin.go b/plugin.go index ecfa138..a398941 100644 --- a/plugin.go +++ b/plugin.go @@ -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 +} diff --git a/plugin_test.go b/plugin_test.go index 0a5b69e..7e19ca4 100644 --- a/plugin_test.go +++ b/plugin_test.go @@ -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) + } }