Better support on same prefix at the same level in the KV
This commit is contained in:
parent
ec6e46e2cb
commit
5eda08e9b8
5 changed files with 191 additions and 153 deletions
51
vendor/github.com/containous/staert/kv.go
generated
vendored
51
vendor/github.com/containous/staert/kv.go
generated
vendored
|
@ -46,16 +46,16 @@ func (kv *KvSource) Parse(cmd *flaeg.Command) (*flaeg.Command, error) {
|
|||
|
||||
// LoadConfig loads data from the KV Store into the config structure (given by reference)
|
||||
func (kv *KvSource) LoadConfig(config interface{}) error {
|
||||
pairs := map[string][]byte{}
|
||||
if err := kv.ListRecursive(kv.Prefix, pairs); err != nil {
|
||||
pairs, err := kv.ListValuedPairWithPrefix(kv.Prefix)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
// fmt.Printf("pairs : %#v\n", pairs)
|
||||
|
||||
mapStruct, err := generateMapstructure(convertPairs(pairs), kv.Prefix)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
// fmt.Printf("mapStruct : %#v\n", mapStruct)
|
||||
|
||||
configDecoder := &mapstructure.DecoderConfig{
|
||||
Metadata: nil,
|
||||
Result: config,
|
||||
|
@ -77,11 +77,11 @@ func generateMapstructure(pairs []*store.KVPair, prefix string) (map[string]inte
|
|||
for _, p := range pairs {
|
||||
// Trim the prefix off our key first
|
||||
key := strings.TrimPrefix(strings.Trim(p.Key, "/"), strings.Trim(prefix, "/")+"/")
|
||||
raw, err := processKV(key, p.Value, raw)
|
||||
var err error
|
||||
raw, err = processKV(key, p.Value, raw)
|
||||
if err != nil {
|
||||
return raw, err
|
||||
}
|
||||
|
||||
}
|
||||
return raw, nil
|
||||
}
|
||||
|
@ -313,15 +313,23 @@ func collateKvRecursive(objValue reflect.Value, kv map[string]string, key string
|
|||
func writeCompressedData(data []byte) (string, error) {
|
||||
var buffer bytes.Buffer
|
||||
gzipWriter := gzip.NewWriter(&buffer)
|
||||
|
||||
_, err := gzipWriter.Write(data)
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
gzipWriter.Close()
|
||||
|
||||
err = gzipWriter.Close()
|
||||
if err != nil {
|
||||
return "", err
|
||||
}
|
||||
|
||||
return buffer.String(), nil
|
||||
}
|
||||
|
||||
// ListRecursive lists all key value children under key
|
||||
// Replaced by ListValuedPairWithPrefix
|
||||
// Deprecated
|
||||
func (kv *KvSource) ListRecursive(key string, pairs map[string][]byte) error {
|
||||
pairsN1, err := kv.List(key, nil)
|
||||
if err == store.ErrKeyNotFound {
|
||||
|
@ -342,14 +350,37 @@ func (kv *KvSource) ListRecursive(key string, pairs map[string][]byte) error {
|
|||
return nil
|
||||
}
|
||||
for _, p := range pairsN1 {
|
||||
err := kv.ListRecursive(p.Key, pairs)
|
||||
if err != nil {
|
||||
return err
|
||||
if p.Key != key {
|
||||
err := kv.ListRecursive(p.Key, pairs)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
// ListValuedPairWithPrefix lists all key value children under key
|
||||
func (kv *KvSource) ListValuedPairWithPrefix(key string) (map[string][]byte, error) {
|
||||
pairs := make(map[string][]byte)
|
||||
|
||||
pairsN1, err := kv.List(key, nil)
|
||||
if err == store.ErrKeyNotFound {
|
||||
return pairs, nil
|
||||
}
|
||||
if err != nil {
|
||||
return pairs, err
|
||||
}
|
||||
|
||||
for _, p := range pairsN1 {
|
||||
if len(p.Value) > 0 {
|
||||
pairs[p.Key] = p.Value
|
||||
}
|
||||
}
|
||||
|
||||
return pairs, nil
|
||||
}
|
||||
|
||||
func convertPairs(pairs map[string][]byte) []*store.KVPair {
|
||||
slicePairs := make([]*store.KVPair, len(pairs))
|
||||
i := 0
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue