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  }