diff --git a/README.md b/README.md index 9d8ca08..9f21940 100644 --- a/README.md +++ b/README.md @@ -395,6 +395,7 @@ Examples: - `ref+gcpsecrets://PROJECT/SECRET[?version=VERSION]` - `ref+gcpsecrets://PROJECT/SECRET[?version=VERSION]#/yaml_or_json_key/in/secret` +- `ref+gcpsecrets://PROJECT/SECRET[?version=VERSION][&fallback=valuewhenkeyisnotfound][&optional=true][&trim_nl=true]#/yaml_or_json_key/in/secret` Examples: diff --git a/pkg/providers/gcpsecrets/gcpsecrets.go b/pkg/providers/gcpsecrets/gcpsecrets.go index db17db0..a4fe99f 100644 --- a/pkg/providers/gcpsecrets/gcpsecrets.go +++ b/pkg/providers/gcpsecrets/gcpsecrets.go @@ -14,11 +14,12 @@ import ( "github.com/helmfile/vals/pkg/api" ) -// Format: ref+gcpsecrets://project/mykey[?version=VERSION][&fallback=value=valuewhenkeyisnotfound][&optional=true]#/yaml_or_json_key/in/secret +// Format: ref+gcpsecrets://project/mykey[?version=VERSION][&fallback=valuewhenkeyisnotfound][&optional=true][&trim_nl=true]#/yaml_or_json_key/in/secret type provider struct { version string optional bool fallback *string + trim_nl bool } func New(cfg api.StaticConfig) *provider { @@ -26,6 +27,7 @@ func New(cfg api.StaticConfig) *provider { version: "latest", optional: false, fallback: nil, + trim_nl: false, } if v := cfg.String("version"); v != "" { p.version = v @@ -36,6 +38,9 @@ func New(cfg api.StaticConfig) *provider { if v := cfg.String("fallback_value"); cfg.Exists("fallback_value") { p.fallback = &v } + if v := cfg.String("trim_nl"); v != "" { + p.trim_nl, _ = strconv.ParseBool(v) + } return p } @@ -80,5 +85,10 @@ func (p *provider) getSecret(ctx context.Context, key string) ([]byte, error) { return nil, fmt.Errorf("failed to get secret: %w", err) } - return secret.GetPayload().GetData(), nil + + buf := secret.GetPayload().GetData() + if p.trim_nl { + buf = []byte(strings.TrimSuffix(string(buf), "\n")) + } + return buf, nil } diff --git a/vals_gcpsecrets_test.go b/vals_gcpsecrets_test.go index a0339cd..89e1213 100644 --- a/vals_gcpsecrets_test.go +++ b/vals_gcpsecrets_test.go @@ -148,6 +148,23 @@ func TestValues_GCPSecretsManager(t *testing.T) { }, }, }, + { + "trim_nl string", + map[string]string{"valstestvar": "foo: bar\n"}, + map[string]interface{}{ + "provider": map[string]interface{}{ + "name": "gcpsecrets", + "version": "latest", + "type": "string", + "path": projectId, + "trim_nl": true, + }, + "inline": map[string]interface{}{ + "valstestvar": "valstestvar", + }, + }, + map[string]interface{}{"valstestvar": "foo: bar"}, + }, } for i := range tests {