diff options
| author | Dave Henderson <dhenderson@gmail.com> | 2018-05-18 15:43:24 -0400 |
|---|---|---|
| committer | Dave Henderson <dhenderson@gmail.com> | 2018-05-20 21:12:21 -0400 |
| commit | 64041c1f7038d4ddbf8b78ca130d00b6e564b5bb (patch) | |
| tree | 6a43266860ccac75f4d97d9c102faf694ce53dfe /data/datasource_vault.go | |
| parent | b9cda02a8ac4809d9df1b244d2e711a4c0adcd56 (diff) | |
Adding vault list support
Signed-off-by: Dave Henderson <dhenderson@gmail.com>
Diffstat (limited to 'data/datasource_vault.go')
| -rw-r--r-- | data/datasource_vault.go | 66 |
1 files changed, 66 insertions, 0 deletions
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 +} |
