From 64041c1f7038d4ddbf8b78ca130d00b6e564b5bb Mon Sep 17 00:00:00 2001 From: Dave Henderson Date: Fri, 18 May 2018 15:43:24 -0400 Subject: Adding vault list support Signed-off-by: Dave Henderson --- data/datasource_vault.go | 66 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 66 insertions(+) create mode 100644 data/datasource_vault.go (limited to 'data/datasource_vault.go') diff --git a/data/datasource_vault.go b/data/datasource_vault.go new file mode 100644 index 00000000..9033a804 --- /dev/null +++ b/data/datasource_vault.go @@ -0,0 +1,66 @@ +package data + +import ( + "net/url" + "strings" + + "github.com/pkg/errors" + + "github.com/hairyhenderson/gomplate/vault" +) + +func parseVaultParams(sourceURL *url.URL, args []string) (params map[string]interface{}, p string, err error) { + p = sourceURL.Path + params = make(map[string]interface{}) + for key, val := range sourceURL.Query() { + params[key] = strings.Join(val, " ") + } + + if len(args) == 1 { + parsed, err := url.Parse(args[0]) + if err != nil { + return nil, "", err + } + + if parsed.Path != "" { + p = p + "/" + parsed.Path + } + + for key, val := range parsed.Query() { + params[key] = strings.Join(val, " ") + } + } + return params, p, nil +} + +func readVault(source *Source, args ...string) ([]byte, error) { + if source.VC == nil { + source.VC = vault.New(source.URL) + source.VC.Login() + } + + params, p, err := parseVaultParams(source.URL, args) + if err != nil { + return nil, err + } + + var data []byte + + source.Type = "application/json" + if len(params) > 0 { + data, err = source.VC.Write(p, params) + } else if strings.HasSuffix(p, "/") { + source.Type = "application/array+json" + data, err = source.VC.List(p) + } else { + data, err = source.VC.Read(p) + } + if err != nil { + return nil, err + } + if len(data) == 0 { + return nil, errors.Errorf("no value found for path %s", p) + } + + return data, nil +} -- cgit v1.2.3