New Upstream Snapshot - consulfs
Ready changes
Summary
Merged new upstream version: 0.2.1+git20210406.1.3b6905d+ds (was: 0.2.1).
Resulting package
Built on 2023-01-19T00:59 (took 6m27s)
The resulting binary packages can be installed (if you have the apt repository enabled) by running one of:
apt install -t fresh-snapshots consulfs
Lintian Result
Diff
diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index 61ead86..0000000
--- a/.gitignore
+++ /dev/null
@@ -1 +0,0 @@
-/vendor
diff --git a/cmd/consulfs/main.go b/cmd/consulfs/main.go
index 0407e63..66c6ddb 100644
--- a/cmd/consulfs/main.go
+++ b/cmd/consulfs/main.go
@@ -54,6 +54,7 @@ func main() {
ro := flag.Bool("ro", false, "mount the filesystem read-only")
root := flag.String("root", "", "path in Consul to the root of the filesystem")
timeout := flag.String("timeout", defaultTimeout, "timeout for Consul requests")
+ tokenFile := flag.String("token-file", "", "use the ACL token from this file to connect to Consul")
uid := flag.Int("uid", os.Getuid(), "set the UID that should own all files")
flag.Parse()
@@ -62,7 +63,10 @@ func main() {
logger.Level = logrus.DebugLevel
}
- consulConfig := &consul.Config{}
+ consulConfig := consul.DefaultConfig()
+ if *tokenFile != "" {
+ consulConfig.TokenFile = *tokenFile
+ }
var mountPoint string
switch flag.NArg() {
case 1:
@@ -134,10 +138,7 @@ func main() {
},
})
f := &consulfs.ConsulFS{
- Consul: &consulfs.CancelConsulKV{
- Client: client,
- Logger: logger,
- },
+ Client: client,
Logger: logger,
UID: uint32(*uid),
GID: uint32(*gid),
diff --git a/consul.go b/consul.go
deleted file mode 100644
index 0abb9bf..0000000
--- a/consul.go
+++ /dev/null
@@ -1,145 +0,0 @@
-package consulfs
-
-import (
- consul "github.com/hashicorp/consul/api"
- "github.com/sirupsen/logrus"
- "golang.org/x/net/context"
-)
-
-// ConsulCanceler defines an API for accessing a Consul Key-Value store. It's mostly a
-// clone of `github.com/hashicorp/consul/api.KV`, but it adds a parameter for a context
-// to method signatures.
-//
-// Using this interface is deprecated. As of v0.9.0, the official Consul API package
-// allows API calls be canceled using a Context, making this interface unnecessary.
-type ConsulCanceler interface {
- CAS(
- ctx context.Context,
- p *consul.KVPair,
- q *consul.WriteOptions,
- ) (bool, *consul.WriteMeta, error)
-
- Delete(
- ctx context.Context,
- key string,
- w *consul.WriteOptions,
- ) (*consul.WriteMeta, error)
-
- Get(
- ctx context.Context,
- key string,
- q *consul.QueryOptions,
- ) (*consul.KVPair, *consul.QueryMeta, error)
-
- Keys(
- ctx context.Context,
- prefix string,
- separator string,
- q *consul.QueryOptions,
- ) ([]string, *consul.QueryMeta, error)
-
- Put(
- ctx context.Context,
- p *consul.KVPair,
- q *consul.WriteOptions,
- ) (*consul.WriteMeta, error)
-}
-
-// CancelConsulKV is the concrete implementation of ConsulCanceler. It takes a Consul
-// `Client` object and performs all operations using that client.
-type CancelConsulKV struct {
- // The Consul client to use for executing operations.
- Client *consul.Client
- // Logger gets all the logging messages
- Logger *logrus.Logger
-}
-
-// CAS performs a compare-and-swap on a key
-func (cckv *CancelConsulKV) CAS(
- ctx context.Context,
- p *consul.KVPair,
- q *consul.WriteOptions,
-) (bool, *consul.WriteMeta, error) {
- cckv.Logger.WithField("key", p.Key).Debug(" => CAS")
- success, meta, err := cckv.Client.KV().CAS(p, q.WithContext(ctx))
- cckv.Logger.WithFields(logrus.Fields{
- "key": p.Key,
- "kv": p,
- "success": success,
- "meta": meta,
- logrus.ErrorKey: err,
- }).Debug(" <= CAS")
- return success, meta, err
-}
-
-// Delete removes a key and its data.
-func (cckv *CancelConsulKV) Delete(
- ctx context.Context,
- key string,
- w *consul.WriteOptions,
-) (*consul.WriteMeta, error) {
- cckv.Logger.WithField("key", key).Debug(" => Delete")
- meta, err := cckv.Client.KV().Delete(key, w.WithContext(ctx))
- cckv.Logger.WithFields(logrus.Fields{
- "key": key,
- "options": w,
- "meta": meta,
- logrus.ErrorKey: err,
- }).Debug(" <= Delete")
- return meta, err
-}
-
-// Get returns the current value of a key.
-func (cckv *CancelConsulKV) Get(
- ctx context.Context,
- key string,
- q *consul.QueryOptions,
-) (*consul.KVPair, *consul.QueryMeta, error) {
- cckv.Logger.WithField("key", key).Debug(" => Get")
- pair, meta, err := cckv.Client.KV().Get(key, q.WithContext(ctx))
- cckv.Logger.WithFields(logrus.Fields{
- "key": key,
- "options": q,
- "kv": pair,
- "meta": meta,
- logrus.ErrorKey: err,
- }).Debug(" <= Get")
- return pair, meta, err
-}
-
-// Keys lists all keys under a prefix
-func (cckv *CancelConsulKV) Keys(
- ctx context.Context,
- prefix string,
- separator string,
- q *consul.QueryOptions,
-) ([]string, *consul.QueryMeta, error) {
- cckv.Logger.WithField("prefix", prefix).Debug(" => Keys")
- keys, meta, err := cckv.Client.KV().Keys(prefix, separator, q.WithContext(ctx))
- cckv.Logger.WithFields(logrus.Fields{
- "prefix": prefix,
- "options": q,
- "keys": keys,
- "meta": meta,
- logrus.ErrorKey: err,
- }).Debug(" <= Keys")
- return keys, meta, err
-}
-
-// Put writes a key-value pair to the store
-func (cckv *CancelConsulKV) Put(
- ctx context.Context,
- p *consul.KVPair,
- q *consul.WriteOptions,
-) (*consul.WriteMeta, error) {
- cckv.Logger.WithField("key", p.Key).Debug(" => Put")
- meta, err := cckv.Client.KV().Put(p, q.WithContext(ctx))
- cckv.Logger.WithFields(logrus.Fields{
- "key": p.Key,
- "kv": p,
- "options": q,
- "meta": meta,
- logrus.ErrorKey: err,
- }).Debug(" <= Put")
- return meta, err
-}
diff --git a/debian/changelog b/debian/changelog
index 5f63c2d..49d5bc5 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+consulfs (0.2.1+git20210406.1.3b6905d+ds-1) UNRELEASED; urgency=low
+
+ * New upstream snapshot.
+
+ -- Debian Janitor <janitor@jelmer.uk> Thu, 19 Jan 2023 00:53:55 -0000
+
consulfs (0.2.1-2) unstable; urgency=medium
[ Debian Janitor ]
diff --git a/fs.go b/fs.go
index 6746095..a12a6f6 100644
--- a/fs.go
+++ b/fs.go
@@ -113,7 +113,7 @@ func (file *consulFile) SetDeleted(ctx context.Context) error {
file.Mutex.Unlock()
// Get a copy of the value to cache
- pair, _, err := file.ConsulFS.Consul.Get(ctx, file.Key, nil)
+ pair, _, err := file.ConsulFS.get(ctx, file.Key, nil)
file.Mutex.Lock()
defer file.Mutex.Unlock()
@@ -177,7 +177,7 @@ func (file *consulFile) readSession(ctx context.Context) ([]byte, error) {
if file.deletedUnlocked() {
return nil, nil
}
- pair, _, err := file.ConsulFS.Consul.Get(ctx, file.Key, nil)
+ pair, _, err := file.ConsulFS.get(ctx, file.Key, nil)
if file.deletedUnlocked() {
return nil, nil
}
@@ -276,7 +276,7 @@ func (file *consulFile) readAll(ctx context.Context) ([]byte, error) {
// could be used to distinguish a file's generation.
// Query Consul for the full value for the file's key
- pair, _, err := file.ConsulFS.Consul.Get(ctx, file.Key, nil)
+ pair, _, err := file.ConsulFS.get(ctx, file.Key, nil)
if data, ok := file.BufferRead(); ok {
return data, nil
}
@@ -343,7 +343,7 @@ func (file *consulFile) Write(
if file.bufferWrite(req, resp) {
return nil
}
- pair, _, err := file.ConsulFS.Consul.Get(ctx, file.Key, nil)
+ pair, _, err := file.ConsulFS.get(ctx, file.Key, nil)
if file.bufferWrite(req, resp) {
return nil
}
@@ -363,7 +363,7 @@ func (file *consulFile) Write(
pair.Value = doWrite(req.Offset, req.Data, pair.Value)
// Write it back!
- success, _, err := file.ConsulFS.Consul.CAS(ctx, pair, nil)
+ success, _, err := file.ConsulFS.cas(ctx, pair, nil)
if file.bufferWrite(req, resp) {
return nil
}
@@ -439,7 +439,7 @@ func (file *consulFile) Truncate(
return nil
}
// Read the contents of the key
- pair, _, err := file.ConsulFS.Consul.Get(ctx, file.Key, nil)
+ pair, _, err := file.ConsulFS.get(ctx, file.Key, nil)
if file.bufferTruncate(size) {
return nil
}
@@ -463,7 +463,7 @@ func (file *consulFile) Truncate(
}
// Write the results back
- success, _, err := file.ConsulFS.Consul.CAS(ctx, pair, nil)
+ success, _, err := file.ConsulFS.cas(ctx, pair, nil)
if file.bufferTruncate(size) {
return nil
}
@@ -668,7 +668,7 @@ func (dir *consulDir) refresh(ctx context.Context) error {
// Call Consul to get an updated listing. This could block for a while, so
// do not hold the dir lock while calling.
- keys, meta, err := dir.ConsulFS.Consul.Keys(ctx, dir.Prefix, "/", nil)
+ keys, meta, err := dir.ConsulFS.keys(ctx, dir.Prefix, "/", nil)
if err == context.Canceled || err == context.DeadlineExceeded {
return fuse.EINTR
} else if err != nil {
@@ -783,7 +783,7 @@ func (dir *consulDir) Create(
Flags: 0,
Value: []byte{},
}
- success, _, err := dir.ConsulFS.Consul.CAS(ctx, pair, nil)
+ success, _, err := dir.ConsulFS.cas(ctx, pair, nil)
if err == context.Canceled || err == context.DeadlineExceeded {
return nil, nil, fuse.EINTR
} else if err != nil {
@@ -887,7 +887,7 @@ func (dir *consulDir) RemoveFile(ctx context.Context, req *fuse.RemoveRequest) e
// Finally, remove the file's key from Consul. Errors at this step are horrible.
// Any process that had the file open already will be working on its own forked
// copy, but the key will still exist on the server.
- _, err = dir.ConsulFS.Consul.Delete(ctx, file.Key, nil)
+ _, err = dir.ConsulFS.delete(ctx, file.Key, nil)
if err == context.Canceled || err == context.DeadlineExceeded {
dir.ConsulFS.Logger.WithField("key", file.Key).Error("delete interrupted at a bad time")
return fuse.EINTR
@@ -1016,8 +1016,8 @@ func (dir *consulDir) Rename(
// ConsulFS is the main file system object that represents a Consul Key-Value store.
type ConsulFS struct {
- // Consul contains a referene to the ConsulCanceler that should be used for all operations.
- Consul ConsulCanceler
+ // Client is used to make all calls to Consul.
+ Client *consul.Client
// UID contains the UID that will own all the files in the file system.
UID uint32
@@ -1063,3 +1063,75 @@ func (f *ConsulFS) rootPath() string {
}
return f.RootPath + "/"
}
+
+// cas performs a compare-and-swap on a key.
+func (f *ConsulFS) cas(
+ ctx context.Context,
+ p *consul.KVPair,
+ q *consul.WriteOptions,
+) (bool, *consul.WriteMeta, error) {
+ f.Logger.WithField("key", p.Key).Debug(" => CAS")
+ success, meta, err := f.Client.KV().CAS(p, q.WithContext(ctx))
+ f.Logger.WithFields(logrus.Fields{
+ "key": p.Key,
+ "kv": p,
+ "success": success,
+ "meta": meta,
+ logrus.ErrorKey: err,
+ }).Debug(" <= CAS")
+ return success, meta, err
+}
+
+// delete removes a key and its data.
+func (f *ConsulFS) delete(
+ ctx context.Context,
+ key string,
+ w *consul.WriteOptions,
+) (*consul.WriteMeta, error) {
+ f.Logger.WithField("key", key).Debug(" => Delete")
+ meta, err := f.Client.KV().Delete(key, w.WithContext(ctx))
+ f.Logger.WithFields(logrus.Fields{
+ "key": key,
+ "options": w,
+ "meta": meta,
+ logrus.ErrorKey: err,
+ }).Debug(" <= Delete")
+ return meta, err
+}
+
+// get returns the current value of a key.
+func (f *ConsulFS) get(
+ ctx context.Context,
+ key string,
+ q *consul.QueryOptions,
+) (*consul.KVPair, *consul.QueryMeta, error) {
+ f.Logger.WithField("key", key).Debug(" => Get")
+ pair, meta, err := f.Client.KV().Get(key, q.WithContext(ctx))
+ f.Logger.WithFields(logrus.Fields{
+ "key": key,
+ "options": q,
+ "kv": pair,
+ "meta": meta,
+ logrus.ErrorKey: err,
+ }).Debug(" <= Get")
+ return pair, meta, err
+}
+
+// keys lists all keys under a prefix
+func (f *ConsulFS) keys(
+ ctx context.Context,
+ prefix string,
+ separator string,
+ q *consul.QueryOptions,
+) ([]string, *consul.QueryMeta, error) {
+ f.Logger.WithField("prefix", prefix).Debug(" => Keys")
+ keys, meta, err := f.Client.KV().Keys(prefix, separator, q.WithContext(ctx))
+ f.Logger.WithFields(logrus.Fields{
+ "prefix": prefix,
+ "options": q,
+ "keys": keys,
+ "meta": meta,
+ logrus.ErrorKey: err,
+ }).Debug(" <= Keys")
+ return keys, meta, err
+}
diff --git a/go.mod b/go.mod
index e5f1222..374bd1e 100644
--- a/go.mod
+++ b/go.mod
@@ -1,31 +1,10 @@
module github.com/bwester/consulfs
+go 1.15
+
require (
- bazil.org/fuse v0.0.0-20160811212531-371fbbdaa898
- github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da // indirect
- github.com/hashicorp/consul v0.9.0
- github.com/hashicorp/go-cleanhttp v0.0.0-20170211013415-3573b8b52aa7 // indirect
- github.com/hashicorp/go-immutable-radix v1.0.0 // indirect
- github.com/hashicorp/go-msgpack v0.0.0-20150518234257-fa3f63826f7c // indirect
- github.com/hashicorp/go-multierror v1.0.0 // indirect
- github.com/hashicorp/go-rootcerts v0.0.0-20160503143440-6bb64b370b90 // indirect
- github.com/hashicorp/go-sockaddr v0.0.0-20180320115054-6d291a969b86 // indirect
- github.com/hashicorp/memberlist v0.1.0 // indirect
- github.com/hashicorp/serf v0.0.0-20170525231504-c2e4be24cdc9 // indirect
- github.com/kr/pretty v0.1.0 // indirect
- github.com/miekg/dns v1.1.1 // indirect
- github.com/mitchellh/go-homedir v0.0.0-20161203194507-b8bc1bf76747 // indirect
- github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c // indirect
- github.com/pkg/errors v0.8.0 // indirect
- github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 // indirect
- github.com/sirupsen/logrus v1.2.0
- golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9 // indirect
- golang.org/x/net v0.0.0-20180724234803-3673e40ba225
- golang.org/x/sync v0.0.0-20181108010431-42b317875d0f // indirect
- golang.org/x/sys v0.0.0-20181210030007-2a47403f2ae5 // indirect
- google.golang.org/appengine v1.3.0 // indirect
- gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 // indirect
- gopkg.in/vmihailenco/msgpack.v2 v2.9.1 // indirect
- labix.org/v2/mgo v0.0.0-20140701140051-000000000287 // indirect
- launchpad.net/gocheck v0.0.0-20140225173054-000000000087 // indirect
+ bazil.org/fuse v0.0.0-20200117220432-d6840b2e5583
+ github.com/hashicorp/consul/api v1.7.0
+ github.com/sirupsen/logrus v1.7.0
+ golang.org/x/net v0.0.0-20201110031124-69a78807bb2b
)
diff --git a/go.sum b/go.sum
index 328d3db..2b36d20 100644
--- a/go.sum
+++ b/go.sum
@@ -1,77 +1,140 @@
-bazil.org/fuse v0.0.0-20160811212531-371fbbdaa898 h1:SC+c6A1qTFstO9qmB86mPV2IpYme/2ZoEQ0hrP+wo+Q=
-bazil.org/fuse v0.0.0-20160811212531-371fbbdaa898/go.mod h1:Xbm+BRKSBEpa4q4hTSxohYNQpsxXPbPry4JJWOB3LB8=
+bazil.org/fuse v0.0.0-20200117220432-d6840b2e5583 h1:Gs44vb0fXEpAcOKFwHdvi2zUe46jxgus/eVahufqpOo=
+bazil.org/fuse v0.0.0-20200117220432-d6840b2e5583/go.mod h1:FbcW6z/2VytnFDhZfumh8Ss8zxHE6qpMP5sHTRe0EaM=
+github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o=
github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da h1:8GUt8eRujhVEGZFFEjBj46YV4rDjvGrNxb0KMWYkL2I=
github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY=
+github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
+github.com/armon/go-radix v1.0.0/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8=
+github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
+github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/golang/protobuf v1.2.0 h1:P3YflyNX/ehuJFLhxviNdFxQPkGK5cDcApsge1SqnvM=
-github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U=
-github.com/hashicorp/consul v0.9.0 h1:0tJQyq4G00gQ1Suf5NMyhVZ8Z/fi/jk3M5tnqu/mCAQ=
-github.com/hashicorp/consul v0.9.0/go.mod h1:mFrjN1mfidgJfYP1xrJCF+AfRhr6Eaqhb2+sfyn/OOI=
+github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4=
+github.com/fatih/color v1.9.0 h1:8xPHl4/q1VyqGIPif1F+1V3Y3lSmrq01EabUW3CoW5s=
+github.com/fatih/color v1.9.0/go.mod h1:eQcE1qtQxscV5RaZvpXrrb8Drkc3/DdQ+uUYCNjL+zU=
+github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c h1:964Od4U6p2jUkFxvCydnIczKteheJEzHRToSGK3Bnlw=
+github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
+github.com/hashicorp/consul/api v1.7.0 h1:tGs8Oep67r8CcA2Ycmb/8BLBcJ70St44mF2X10a/qPg=
+github.com/hashicorp/consul/api v1.7.0/go.mod h1:1NSuaUUkFaJzMasbfq/11wKYWSR67Xn6r2DXKhuDNFg=
+github.com/hashicorp/consul/sdk v0.6.0 h1:FfhMEkwvQl57CildXJyGHnwGGM4HMODGyfjGwNM1Vdw=
+github.com/hashicorp/consul/sdk v0.6.0/go.mod h1:fY08Y9z5SvJqevyZNy6WWPXiG3KwBPAvlcdx16zZ0fM=
github.com/hashicorp/errwrap v1.0.0 h1:hLrqtEDnRye3+sgx6z4qVLNuviH3MR5aQ0ykNJa/UYA=
github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4=
-github.com/hashicorp/go-cleanhttp v0.0.0-20170211013415-3573b8b52aa7 h1:67fHcS+inUoiIqWCKIqeDuq2AlPHNHPiTqp97LdQ+bc=
-github.com/hashicorp/go-cleanhttp v0.0.0-20170211013415-3573b8b52aa7/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80=
+github.com/hashicorp/go-cleanhttp v0.5.1 h1:dH3aiDG9Jvb5r5+bYHsikaOUIpcM0xvgMXVoDkXMzJM=
+github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80=
+github.com/hashicorp/go-hclog v0.12.0 h1:d4QkX8FRTYaKaCZBoXYY8zJX2BXjWxurN/GA2tkrmZM=
+github.com/hashicorp/go-hclog v0.12.0/go.mod h1:whpDNt7SSdeAju8AWKIWsul05p54N/39EeqMAyrmvFQ=
github.com/hashicorp/go-immutable-radix v1.0.0 h1:AKDB1HM5PWEA7i4nhcpwOrO2byshxBjXVn/J/3+z5/0=
github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60=
-github.com/hashicorp/go-msgpack v0.0.0-20150518234257-fa3f63826f7c h1:BTAbnbegUIMB6xmQCwWE8yRzbA4XSpnZY5hvRJC188I=
-github.com/hashicorp/go-msgpack v0.0.0-20150518234257-fa3f63826f7c/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM=
+github.com/hashicorp/go-msgpack v0.5.3 h1:zKjpN5BK/P5lMYrLmBHdBULWbJ0XpYR+7NGzqkZzoD4=
+github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM=
github.com/hashicorp/go-multierror v1.0.0 h1:iVjPR7a6H0tWELX5NxNe7bYopibicUzc7uPribsnS6o=
github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk=
-github.com/hashicorp/go-rootcerts v0.0.0-20160503143440-6bb64b370b90 h1:9HVkPxOpo+yO93Ah4yrO67d/qh0fbLLWbKqhYjyHq9A=
-github.com/hashicorp/go-rootcerts v0.0.0-20160503143440-6bb64b370b90/go.mod h1:o4zcYY1e0GEZI6eSEr+43QDYmuGglw1qSO6qdHUHCgg=
-github.com/hashicorp/go-sockaddr v0.0.0-20180320115054-6d291a969b86 h1:7YOlAIO2YWnJZkQp7B5eFykaIY7C9JndqAFQyVV5BhM=
-github.com/hashicorp/go-sockaddr v0.0.0-20180320115054-6d291a969b86/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU=
+github.com/hashicorp/go-multierror v1.1.0 h1:B9UzwGQJehnUY1yNrnwREHc3fGbC2xefo8g4TbElacI=
+github.com/hashicorp/go-multierror v1.1.0/go.mod h1:spPvp8C1qA32ftKqdAHm4hHTbPw+vmowP0z+KUhOZdA=
+github.com/hashicorp/go-rootcerts v1.0.2 h1:jzhAVGtqPKbwpyCPELlgNWhE1znq+qwJtW5Oi2viEzc=
+github.com/hashicorp/go-rootcerts v1.0.2/go.mod h1:pqUvnprVnM5bf7AOirdbb01K4ccR319Vf4pU3K5EGc8=
+github.com/hashicorp/go-sockaddr v1.0.0 h1:GeH6tui99pF4NJgfnhp+L6+FfobzVW3Ah46sLo0ICXs=
+github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU=
+github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4=
github.com/hashicorp/go-uuid v1.0.0 h1:RS8zrF7PhGwyNPOtxSClXXj9HA8feRnJzgnI1RJCSnM=
github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
+github.com/hashicorp/go-uuid v1.0.1 h1:fv1ep09latC32wFoVwnqcnKJGnMSdBanPczbHAYm1BE=
+github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro=
github.com/hashicorp/golang-lru v0.5.0 h1:CL2msUPvZTLb5O648aiLNJw3hnBxN2+1Jq8rCOH9wdo=
github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8=
-github.com/hashicorp/memberlist v0.1.0 h1:qSsCiC0WYD39lbSitKNt40e30uorm2Ss/d4JGU1hzH8=
-github.com/hashicorp/memberlist v0.1.0/go.mod h1:ncdBp14cuox2iFOq3kDiquKU6fqsTBc3W6JvZwjxxsE=
-github.com/hashicorp/serf v0.0.0-20170525231504-c2e4be24cdc9 h1:UQvp+7/nwPpm58F0YU/mKBxKxfKgHg+yPDisaQdzJIk=
-github.com/hashicorp/serf v0.0.0-20170525231504-c2e4be24cdc9/go.mod h1:h/Ru6tmZazX7WO/GDmwdpS975F019L4t5ng5IgwbNrE=
-github.com/konsorten/go-windows-terminal-sequences v1.0.1 h1:mweAR1A6xJ3oS2pRaGiHgQ4OO8tzTaLawm8vnODuwDk=
-github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
-github.com/kr/pretty v0.1.0 h1:L/CwN0zerZDmRFUapSPitk6f+Q3+0za1rQkzVuMiMFI=
-github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
+github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64=
+github.com/hashicorp/mdns v1.0.1/go.mod h1:4gW7WsVCke5TE7EPeYliwHlRUyBtfCwuFwuMg2DmyNY=
+github.com/hashicorp/memberlist v0.2.2 h1:5+RffWKwqJ71YPu9mWsF7ZOscZmwfasdA8kbdC7AO2g=
+github.com/hashicorp/memberlist v0.2.2/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE=
+github.com/hashicorp/serf v0.9.3 h1:AVF6JDQQens6nMHT9OGERBvK0f8rPrAGILnsKLr6lzM=
+github.com/hashicorp/serf v0.9.3/go.mod h1:UWDWwZeL5cuWDJdl0C6wrvrUwEqtQ4ZKBKKENpqIUyk=
+github.com/kr/pretty v0.2.0 h1:s5hAObm+yFO5uHYt5dYjxi2rXrsnmRpJx4OYvIWUaQs=
+github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0 h1:45sCR5RtlFHMR4UwH9sdQ5TC8v0qDQCHnXt+kaKSTVE=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
-github.com/miekg/dns v1.1.1 h1:DVkblRdiScEnEr0LR9nTnEQqHYycjkXW9bOjd+2EL2o=
-github.com/miekg/dns v1.1.1/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
-github.com/mitchellh/go-homedir v0.0.0-20161203194507-b8bc1bf76747 h1:eQox4Rh4ewJF+mqYPxCkmBAirRnPaHEB26UkNuPyjlk=
-github.com/mitchellh/go-homedir v0.0.0-20161203194507-b8bc1bf76747/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
+github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU=
+github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE=
+github.com/mattn/go-colorable v0.1.6 h1:6Su7aK7lXmJ/U79bYtBjLNaha4Fs1Rg9plHpcH+vvnE=
+github.com/mattn/go-colorable v0.1.6/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc=
+github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4=
+github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s=
+github.com/mattn/go-isatty v0.0.10/go.mod h1:qgIWMr58cqv1PHHyhnkY9lrL7etaEgOFcMEpPG5Rm84=
+github.com/mattn/go-isatty v0.0.11/go.mod h1:PhnuNfih5lzO57/f3n+odYbM4JtupLOxQOAqxQCu2WE=
+github.com/mattn/go-isatty v0.0.12 h1:wuysRhFDzyxgEmMf5xjvJ2M9dZoWAXNNr5LSBS7uHXY=
+github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU=
+github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
+github.com/miekg/dns v1.1.26 h1:gPxPSwALAeHJSjarOs00QjVdV9QoBvc1D2ujQUr5BzU=
+github.com/miekg/dns v1.1.26/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso=
+github.com/mitchellh/cli v1.1.0/go.mod h1:xcISNoH86gajksDmfB23e/pu+B+GeFRMYmoHXxx3xhI=
+github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
+github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
+github.com/mitchellh/go-testing-interface v1.0.0 h1:fzU/JVNcaqHQEcVFAKeR41fkiLdIPrefOvVG1VZ96U0=
+github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI=
+github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
+github.com/mitchellh/mapstructure v1.1.2 h1:fmNYVwqnSfB9mZU6OS2O6GsXM+wcskZDuKQzvN1EDeE=
+github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y=
github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c h1:Lgl0gzECD8GnQ5QCWA8o6BtfL6mDH5rQgM4/fX3avOs=
github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
-github.com/pkg/errors v0.8.0 h1:WdK/asTD0HN+q6hsWO3/vpuAkAr+tw6aNJNDFFf0+qw=
-github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
+github.com/pkg/errors v0.8.1 h1:iURUrRGxPUNPdy5/HRSm+Yj6okJ6UtLINN0Q9M4+h3I=
+github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI=
+github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s=
+github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts=
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529 h1:nn5Wsu0esKSJiIVhscUtVbo7ada43DJhG55ua/hjS5I=
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
-github.com/sirupsen/logrus v1.2.0 h1:juTguoYk5qI21pwyTXY3B3Y5cOTH3ZUyZCg1v/mihuo=
-github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
-github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
+github.com/sirupsen/logrus v1.7.0 h1:ShrD1U9pZB12TX0cVy0DtePoCH97K8EtX+mg7ZARUtM=
+github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
+github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
github.com/stretchr/testify v1.2.2 h1:bSDNvY7ZPG5RlJ8otE/7V6gMiyenm9RtJ7IUVIAoJ1w=
github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
-golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
-golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9 h1:mKdxBk7AujPs8kU4m80U72y/zjbZ3UcXC7dClwKbUI0=
-golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
-golang.org/x/net v0.0.0-20180724234803-3673e40ba225 h1:kNX+jCowfMYzvlSvJu5pQWEmyWFrBXJ3PBy10xKMXK8=
-golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
-golang.org/x/sync v0.0.0-20181108010431-42b317875d0f h1:Bl/8QSvNqXvPGPGXa2z5xUTmV7VDcZyvRZ+QQXkXTZQ=
-golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20181210030007-2a47403f2ae5 h1:SlFRMb9PEnqzqnBRCynVOhxv4vHjB2lnIoxK6p5nzFM=
-golang.org/x/sys v0.0.0-20181210030007-2a47403f2ae5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+github.com/stretchr/testify v1.4.0 h1:2E4SXV/wtOkTonXsotYi4li6zVWxYlZuYNCXe9XRJyk=
+github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4=
+github.com/tv42/httpunix v0.0.0-20191220191345-2ba4b9c3382c h1:u6SKchux2yDvFQnDHS3lPnIRmfVJ5Sxy3ao2SIdysLQ=
+github.com/tv42/httpunix v0.0.0-20191220191345-2ba4b9c3382c/go.mod h1:hzIxponao9Kjc7aWznkXaL4U4TWaDSs8zcsY4Ka08nM=
+golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
+golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
+golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY=
+golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI=
+golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
+golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
+golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20190923162816-aa69164e4478/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
+golang.org/x/net v0.0.0-20201110031124-69a78807bb2b h1:uwuIcX0g4Yl1NC5XAz37xsr2lTtcqevgzYNVt49waME=
+golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
+golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4 h1:YUO/7uOKsKeq9UokNS62b8FYywz3ker1l1vDZRCRefw=
+golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sync v0.0.0-20190423024810-112230192c58 h1:8gQV6CLnAEikrhgkHFbMAEhagSSnXWGV915qUMm9mrU=
+golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
+golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
+golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191008105621-543471e840be/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20191210023423-ac6580df4449 h1:gSbV7h1NRL2G1xTg/owz62CST1oJBmxy4QpMMregXVQ=
+golang.org/x/sys v0.0.0-20191210023423-ac6580df4449/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200124204421-9fbb57f87de9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
+golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f h1:+Nyd8tzPX9R7BWHguqsrbFdRx3WQ/1ib8I44HXV5yTA=
+golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
-google.golang.org/appengine v1.3.0 h1:FBSsiFRMz3LBeXIomRnVzrQwSDj4ibvcRexLG0LZGQk=
-google.golang.org/appengine v1.3.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
-gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127 h1:qIbj1fsPNlZgppZ+VLlY7N33q108Sa+fhmuc+sWQYwY=
-gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
-gopkg.in/vmihailenco/msgpack.v2 v2.9.1 h1:kb0VV7NuIojvRfzwslQeP3yArBqJHW9tOl4t38VS1jM=
-gopkg.in/vmihailenco/msgpack.v2 v2.9.1/go.mod h1:/3Dn1Npt9+MYyLpYYXjInO/5jvMLamn+AEGwNEOatn8=
-labix.org/v2/mgo v0.0.0-20140701140051-000000000287 h1:L0cnkNl4TfAXzvdrqsYEmxOHOCv2p5I3taaReO8BWFs=
-labix.org/v2/mgo v0.0.0-20140701140051-000000000287/go.mod h1:Lg7AYkt1uXJoR9oeSZ3W/8IXLdvOfIITgZnommstyz4=
-launchpad.net/gocheck v0.0.0-20140225173054-000000000087 h1:Izowp2XBH6Ya6rv+hqbceQyw/gSGoXfH/UPoTGduL54=
-launchpad.net/gocheck v0.0.0-20140225173054-000000000087/go.mod h1:hj7XX3B/0A+80Vse0e+BUHsHMTEhd0O4cpUHr/e/BUM=
+golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
+golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
+golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
+golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
+golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
+gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15 h1:YR8cESwS4TdDjEe65xsg0ogRM/Nc3DYOhEAlW+xobZo=
+gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
+gopkg.in/yaml.v2 v2.2.8 h1:obN1ZagJSUGI0Ek/LBmuj4SNLPfIny3KsKFopxRdj10=
+gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI=
Debdiff
File lists identical (after any substitutions)
Control files: lines which differ (wdiff format)
Built-Using: consul (= 1.8.7+dfsg1-6), golang-bazil-fuse (= 0.0~git20160811.0.371fbbd-4), 0.0~git20160811.0.371fbbd-4~jan+unchanged1), golang-github-armon-go-metrics (= 0.3.4-1), golang-github-fatih-color (= 1.7.0-1~jan+lint1), 1.13.0-1~jan+nur1), golang-github-hashicorp-go-cleanhttp (= 0.5.2-2~jan+lint2), 0.5.2-1), golang-github-hashicorp-go-hclog (= 0.11.0-1), golang-github-hashicorp-go-immutable-radix (= 1.3.1-3), 1.3.1-2~jan+unchanged1), golang-github-hashicorp-go-rootcerts (= 1.0.2-3~jan+lint1), 1.0.2+git20191216.1.c8a9a31-1~jan+nus1), golang-github-hashicorp-golang-lru (= 0.5.4-3~jan+lint2), 0.5.4-3~jan+unchanged1), golang-github-hashicorp-serf (= 0.9.4~ds1-2~jan+lint2), 0.9.4~ds1-1), golang-github-mattn-go-colorable (= 0.1.13-1), 0.1.13-1~jan+unchanged1), golang-github-mattn-go-isatty (= 0.0.16-1~jan+lint1), 0.0.16-2), golang-github-mitchellh-mapstructure (= 1.5.0-2), golang-golang-x-net (= 1:0.4.0+dfsg-1), golang-golang-x-sys (= 0.3.0-1), golang-logrus (= 1.9.0-1)