122 lines
2.1 KiB
Go
122 lines
2.1 KiB
Go
package main
|
|
|
|
import (
|
|
"bytes"
|
|
"compress/gzip"
|
|
"io/ioutil"
|
|
"log"
|
|
"time"
|
|
|
|
"github.com/abronan/valkeyrie"
|
|
"github.com/abronan/valkeyrie/store"
|
|
"github.com/abronan/valkeyrie/store/boltdb"
|
|
"github.com/abronan/valkeyrie/store/consul"
|
|
etcdv3 "github.com/abronan/valkeyrie/store/etcd/v3"
|
|
"github.com/abronan/valkeyrie/store/zookeeper"
|
|
)
|
|
|
|
const storeKey = "traefik/acme/account/object"
|
|
|
|
func main() {
|
|
log.SetFlags(log.Lshortfile)
|
|
|
|
source := "./acme.json"
|
|
err := loadData(source)
|
|
if err != nil {
|
|
log.Fatal(err)
|
|
}
|
|
}
|
|
|
|
func loadData(source string) error {
|
|
content, err := readFile(source)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
// Consul
|
|
err = putData(store.CONSUL, []string{"localhost:8500"}, content)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
// ETCD v3
|
|
err = putData(store.ETCDV3, []string{"localhost:2379"}, content)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
// Zookeeper
|
|
err = putData(store.ZK, []string{"localhost:2181"}, content)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
// BoltDB
|
|
err = putData(store.BOLTDB, []string{"/tmp/test-traefik-certs-dumper.db"}, content)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
return nil
|
|
}
|
|
|
|
func putData(backend store.Backend, addrs []string, content []byte) error {
|
|
storeConfig := &store.Config{
|
|
ConnectionTimeout: 3 * time.Second,
|
|
Bucket: "traefik",
|
|
}
|
|
|
|
switch backend {
|
|
case store.CONSUL:
|
|
consul.Register()
|
|
case store.ETCDV3:
|
|
etcdv3.Register()
|
|
case store.ZK:
|
|
zookeeper.Register()
|
|
case store.BOLTDB:
|
|
boltdb.Register()
|
|
}
|
|
|
|
kvStore, err := valkeyrie.NewStore(backend, addrs, storeConfig)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
if err := kvStore.Put(storeKey, content, nil); err != nil {
|
|
return err
|
|
}
|
|
|
|
log.Printf("Successfully updated %s.\n", backend)
|
|
return nil
|
|
}
|
|
|
|
func readFile(source string) ([]byte, error) {
|
|
content, err := ioutil.ReadFile(source)
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
var b bytes.Buffer
|
|
gz := gzip.NewWriter(&b)
|
|
|
|
defer func() {
|
|
if errC := gz.Close(); errC != nil {
|
|
log.Println(errC)
|
|
}
|
|
}()
|
|
|
|
if _, err = gz.Write(content); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if err = gz.Flush(); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
if err := gz.Close(); err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
return b.Bytes(), nil
|
|
}
|