summaryrefslogtreecommitdiff
path: root/data/datasource_vault.go
diff options
context:
space:
mode:
authorDave Henderson <dhenderson@gmail.com>2018-05-18 15:43:24 -0400
committerDave Henderson <dhenderson@gmail.com>2018-05-20 21:12:21 -0400
commit64041c1f7038d4ddbf8b78ca130d00b6e564b5bb (patch)
tree6a43266860ccac75f4d97d9c102faf694ce53dfe /data/datasource_vault.go
parentb9cda02a8ac4809d9df1b244d2e711a4c0adcd56 (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.go66
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
+}