github.com/wynshop-open-source/gomplate@v3.5.0+incompatible/data/datasource_vault.go (about) 1 package data 2 3 import ( 4 "net/url" 5 "strings" 6 7 "github.com/pkg/errors" 8 9 "github.com/hairyhenderson/gomplate/vault" 10 ) 11 12 func parseVaultParams(sourceURL *url.URL, args []string) (params map[string]interface{}, p string, err error) { 13 p = sourceURL.Path 14 params = make(map[string]interface{}) 15 for key, val := range sourceURL.Query() { 16 params[key] = strings.Join(val, " ") 17 } 18 19 if len(args) == 1 { 20 parsed, err := url.Parse(args[0]) 21 if err != nil { 22 return nil, "", err 23 } 24 25 if parsed.Path != "" { 26 p = p + "/" + parsed.Path 27 } 28 29 for key, val := range parsed.Query() { 30 params[key] = strings.Join(val, " ") 31 } 32 } 33 return params, p, nil 34 } 35 36 func readVault(source *Source, args ...string) (data []byte, err error) { 37 if source.vc == nil { 38 source.vc, err = vault.New(source.URL) 39 if err != nil { 40 return nil, err 41 } 42 err = source.vc.Login() 43 if err != nil { 44 return nil, err 45 } 46 } 47 48 params, p, err := parseVaultParams(source.URL, args) 49 if err != nil { 50 return nil, err 51 } 52 53 source.mediaType = jsonMimetype 54 switch { 55 case len(params) > 0: 56 data, err = source.vc.Write(p, params) 57 case strings.HasSuffix(p, "/"): 58 source.mediaType = jsonArrayMimetype 59 data, err = source.vc.List(p) 60 default: 61 data, err = source.vc.Read(p) 62 } 63 if err != nil { 64 return nil, err 65 } 66 67 if len(data) == 0 { 68 return nil, errors.Errorf("no value found for path %s", p) 69 } 70 71 return data, nil 72 }