traefik-certs-dumper/dumper/kv/kv.go
2019-04-20 17:19:45 +02:00

57 lines
1.1 KiB
Go

package kv
import (
"bytes"
"compress/gzip"
"encoding/json"
"io/ioutil"
"github.com/abronan/valkeyrie"
"github.com/abronan/valkeyrie/store"
"github.com/ldez/traefik-certs-dumper/dumper"
)
// FIXME prefix
const storeKey = "traefik/acme/account/object"
// Dump FIXME
func Dump(config *Config, baseConfig *dumper.BaseConfig) error {
kvStore, err := valkeyrie.NewStore(config.Backend, config.Endpoints, config.Options)
if err != nil {
return err
}
pair, err := kvStore.Get(storeKey, nil)
if err != nil {
return err
}
data, err := getStoredDataFromGzip(pair)
if err != nil {
return err
}
return dumper.Dump(data, baseConfig)
}
func getStoredDataFromGzip(pair *store.KVPair) (*dumper.StoredData, error) {
data := &dumper.StoredData{}
reader, err := gzip.NewReader(bytes.NewBuffer(pair.Value))
if err != nil {
return data, err
}
acmeData, err := ioutil.ReadAll(reader)
if err != nil {
return data, err
}
storedData := &dumper.StoredData{}
if err := json.Unmarshal(acmeData, &storedData); err != nil {
return data, err
}
return storedData, nil
}