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)

More details

Full run details