update repo
This commit is contained in:
@@ -0,0 +1,18 @@
|
||||
version: '3'
|
||||
|
||||
services:
|
||||
consul-kv:
|
||||
image: consul
|
||||
ports:
|
||||
- "8500:8500"
|
||||
|
||||
zookeeper-kv:
|
||||
image: zookeeper
|
||||
ports:
|
||||
- "2181:2181"
|
||||
|
||||
etcd-kv:
|
||||
image: quay.io/coreos/etcd:v3.3.12
|
||||
command: etcd --listen-client-urls http://0.0.0.0:2379 --advertise-client-urls http://0.0.0.0:2380
|
||||
ports:
|
||||
- "2379:2379"
|
121
traefik/traefik-certs-dumper/integrationtest/loader.go
Normal file
121
traefik/traefik-certs-dumper/integrationtest/loader.go
Normal file
@@ -0,0 +1,121 @@
|
||||
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
|
||||
}
|
54
traefik/traefik-certs-dumper/integrationtest/readme.md
Normal file
54
traefik/traefik-certs-dumper/integrationtest/readme.md
Normal file
@@ -0,0 +1,54 @@
|
||||
# Integration testing
|
||||
|
||||
## Preparation
|
||||
|
||||
- Create valid ACME file `./acme.json`
|
||||
|
||||
- Start backends using docker
|
||||
|
||||
```bash
|
||||
docker-compose -f integrationtest/docker-compose.yml up
|
||||
```
|
||||
|
||||
- Initialize backends
|
||||
|
||||
```bash
|
||||
go run integrationtest/loader.go
|
||||
```
|
||||
|
||||
## Run certs dumper without watching
|
||||
|
||||
```bash
|
||||
traefik-certs-dumper file
|
||||
|
||||
# http://localhost:8500/ui/
|
||||
traefik-certs-dumper kv consul --endpoints localhost:8500
|
||||
|
||||
traefik-certs-dumper kv etcd --endpoints localhost:2379
|
||||
|
||||
traefik-certs-dumper kv boltdb --endpoints /tmp/test-traefik-certs-dumper.db
|
||||
|
||||
traefik-certs-dumper kv zookeeper --endpoints localhost:2181
|
||||
```
|
||||
|
||||
## Run certs dumper with watching
|
||||
|
||||
While watching is enabled, manipulate `./acme.json` for file backend or run `loader.go` again for KV backends so that change events are triggered.
|
||||
|
||||
```bash
|
||||
traefik-certs-dumper file --watch
|
||||
|
||||
traefik-certs-dumper kv consul --watch --endpoints localhost:8500
|
||||
|
||||
traefik-certs-dumper kv etcd --watch --endpoints localhost:2379
|
||||
|
||||
traefik-certs-dumper kv zookeeper --watch --endpoints localhost:2181
|
||||
```
|
||||
|
||||
## Cleanup
|
||||
|
||||
- Stop backends
|
||||
|
||||
```bash
|
||||
docker-compose -f integrationtest/docker-compose.yml down
|
||||
```
|
Reference in New Issue
Block a user