From 222a93162defe2eace2ce012f7fb5243ec6a6f20 Mon Sep 17 00:00:00 2001 From: Andrew Lavery Date: Wed, 15 Apr 2020 18:08:08 -0400 Subject: [PATCH 1/5] allow textAnalyze to run on all files in a dir or matching a prefix --- pkg/analyze/analyzer.go | 98 ++++++++++++++---- pkg/analyze/download.go | 4 +- pkg/analyze/text_analyze.go | 42 ++++++-- pkg/analyze/text_analyze_test.go | 166 +++++++++++++++++++++---------- pkg/preflight/analyze.go | 12 ++- 5 files changed, 239 insertions(+), 83 deletions(-) diff --git a/pkg/analyze/analyzer.go b/pkg/analyze/analyzer.go index f553296d7..002b42ca7 100644 --- a/pkg/analyze/analyzer.go +++ b/pkg/analyze/analyzer.go @@ -36,7 +36,8 @@ func isExcluded(excludeVal multitype.BoolOrString) (bool, error) { return parsed, nil } -func Analyze(analyzer *troubleshootv1beta1.Analyze, getFile getCollectedFileContents, findFiles getChildCollectedFileContents) (*AnalyzeResult, error) { +func Analyze(analyzer *troubleshootv1beta1.Analyze, getFile getCollectedFileContents, findFiles getChildCollectedFileContents) ([]*AnalyzeResult, error) { + results := []*AnalyzeResult{} if analyzer.ClusterVersion != nil { isExcluded, err := isExcluded(analyzer.ClusterVersion.Exclude) if err != nil { @@ -45,7 +46,11 @@ func Analyze(analyzer *troubleshootv1beta1.Analyze, getFile getCollectedFileCont if isExcluded { return nil, nil } - return analyzeClusterVersion(analyzer.ClusterVersion, getFile) + result, err := analyzeClusterVersion(analyzer.ClusterVersion, getFile) + if err != nil { + return nil, err + } + results = append(results, result) } if analyzer.StorageClass != nil { isExcluded, err := isExcluded(analyzer.StorageClass.Exclude) @@ -55,7 +60,11 @@ func Analyze(analyzer *troubleshootv1beta1.Analyze, getFile getCollectedFileCont if isExcluded { return nil, nil } - return analyzeStorageClass(analyzer.StorageClass, getFile) + result, err := analyzeStorageClass(analyzer.StorageClass, getFile) + if err != nil { + return nil, err + } + results = append(results, result) } if analyzer.CustomResourceDefinition != nil { isExcluded, err := isExcluded(analyzer.CustomResourceDefinition.Exclude) @@ -65,7 +74,11 @@ func Analyze(analyzer *troubleshootv1beta1.Analyze, getFile getCollectedFileCont if isExcluded { return nil, nil } - return analyzeCustomResourceDefinition(analyzer.CustomResourceDefinition, getFile) + result, err := analyzeCustomResourceDefinition(analyzer.CustomResourceDefinition, getFile) + if err != nil { + return nil, err + } + results = append(results, result) } if analyzer.Ingress != nil { isExcluded, err := isExcluded(analyzer.Ingress.Exclude) @@ -75,7 +88,11 @@ func Analyze(analyzer *troubleshootv1beta1.Analyze, getFile getCollectedFileCont if isExcluded { return nil, nil } - return analyzeIngress(analyzer.Ingress, getFile) + result, err := analyzeIngress(analyzer.Ingress, getFile) + if err != nil { + return nil, err + } + results = append(results, result) } if analyzer.Secret != nil { isExcluded, err := isExcluded(analyzer.Secret.Exclude) @@ -85,7 +102,11 @@ func Analyze(analyzer *troubleshootv1beta1.Analyze, getFile getCollectedFileCont if isExcluded { return nil, nil } - return analyzeSecret(analyzer.Secret, getFile) + result, err := analyzeSecret(analyzer.Secret, getFile) + if err != nil { + return nil, err + } + results = append(results, result) } if analyzer.ImagePullSecret != nil { isExcluded, err := isExcluded(analyzer.ImagePullSecret.Exclude) @@ -95,7 +116,11 @@ func Analyze(analyzer *troubleshootv1beta1.Analyze, getFile getCollectedFileCont if isExcluded { return nil, nil } - return analyzeImagePullSecret(analyzer.ImagePullSecret, findFiles) + result, err := analyzeImagePullSecret(analyzer.ImagePullSecret, findFiles) + if err != nil { + return nil, err + } + results = append(results, result) } if analyzer.DeploymentStatus != nil { isExcluded, err := isExcluded(analyzer.DeploymentStatus.Exclude) @@ -105,7 +130,11 @@ func Analyze(analyzer *troubleshootv1beta1.Analyze, getFile getCollectedFileCont if isExcluded { return nil, nil } - return analyzeDeploymentStatus(analyzer.DeploymentStatus, getFile) + result, err := analyzeDeploymentStatus(analyzer.DeploymentStatus, getFile) + if err != nil { + return nil, err + } + results = append(results, result) } if analyzer.StatefulsetStatus != nil { isExcluded, err := isExcluded(analyzer.StatefulsetStatus.Exclude) @@ -115,7 +144,11 @@ func Analyze(analyzer *troubleshootv1beta1.Analyze, getFile getCollectedFileCont if isExcluded { return nil, nil } - return analyzeStatefulsetStatus(analyzer.StatefulsetStatus, getFile) + result, err := analyzeStatefulsetStatus(analyzer.StatefulsetStatus, getFile) + if err != nil { + return nil, err + } + results = append(results, result) } if analyzer.ContainerRuntime != nil { isExcluded, err := isExcluded(analyzer.ContainerRuntime.Exclude) @@ -125,7 +158,11 @@ func Analyze(analyzer *troubleshootv1beta1.Analyze, getFile getCollectedFileCont if isExcluded { return nil, nil } - return analyzeContainerRuntime(analyzer.ContainerRuntime, getFile) + result, err := analyzeContainerRuntime(analyzer.ContainerRuntime, getFile) + if err != nil { + return nil, err + } + results = append(results, result) } if analyzer.Distribution != nil { isExcluded, err := isExcluded(analyzer.Distribution.Exclude) @@ -135,7 +172,11 @@ func Analyze(analyzer *troubleshootv1beta1.Analyze, getFile getCollectedFileCont if isExcluded { return nil, nil } - return analyzeDistribution(analyzer.Distribution, getFile) + result, err := analyzeDistribution(analyzer.Distribution, getFile) + if err != nil { + return nil, err + } + results = append(results, result) } if analyzer.NodeResources != nil { isExcluded, err := isExcluded(analyzer.NodeResources.Exclude) @@ -145,7 +186,11 @@ func Analyze(analyzer *troubleshootv1beta1.Analyze, getFile getCollectedFileCont if isExcluded { return nil, nil } - return analyzeNodeResources(analyzer.NodeResources, getFile) + result, err := analyzeNodeResources(analyzer.NodeResources, getFile) + if err != nil { + return nil, err + } + results = append(results, result) } if analyzer.TextAnalyze != nil { isExcluded, err := isExcluded(analyzer.TextAnalyze.Exclude) @@ -155,7 +200,11 @@ func Analyze(analyzer *troubleshootv1beta1.Analyze, getFile getCollectedFileCont if isExcluded { return nil, nil } - return analyzeTextAnalyze(analyzer.TextAnalyze, getFile) + multiResult, err := analyzeTextAnalyze(analyzer.TextAnalyze, findFiles) + if err != nil { + return nil, err + } + results = append(results, multiResult...) } if analyzer.Postgres != nil { isExcluded, err := isExcluded(analyzer.Postgres.Exclude) @@ -165,7 +214,11 @@ func Analyze(analyzer *troubleshootv1beta1.Analyze, getFile getCollectedFileCont if isExcluded { return nil, nil } - return analyzePostgres(analyzer.Postgres, getFile) + result, err := analyzePostgres(analyzer.Postgres, getFile) + if err != nil { + return nil, err + } + results = append(results, result) } if analyzer.Mysql != nil { isExcluded, err := isExcluded(analyzer.Mysql.Exclude) @@ -175,7 +228,11 @@ func Analyze(analyzer *troubleshootv1beta1.Analyze, getFile getCollectedFileCont if isExcluded { return nil, nil } - return analyzeMysql(analyzer.Mysql, getFile) + result, err := analyzeMysql(analyzer.Mysql, getFile) + if err != nil { + return nil, err + } + results = append(results, result) } if analyzer.Redis != nil { isExcluded, err := isExcluded(analyzer.Redis.Exclude) @@ -185,8 +242,15 @@ func Analyze(analyzer *troubleshootv1beta1.Analyze, getFile getCollectedFileCont if isExcluded { return nil, nil } - return analyzeRedis(analyzer.Redis, getFile) + result, err := analyzeRedis(analyzer.Redis, getFile) + if err != nil { + return nil, err + } + results = append(results, result) } - return nil, errors.New("invalid analyzer") + if len(results) == 0 { + return nil, errors.New("invalid analyzer") + } + return results, nil } diff --git a/pkg/analyze/download.go b/pkg/analyze/download.go index 2c40617eb..84b09ef8b 100644 --- a/pkg/analyze/download.go +++ b/pkg/analyze/download.go @@ -63,7 +63,7 @@ func DownloadAndAnalyze(bundleURL string, analyzersSpec string) ([]*AnalyzeResul } if analyzeResult != nil { - analyzeResults = append(analyzeResults, analyzeResult) + analyzeResults = append(analyzeResults, analyzeResult...) } } @@ -192,6 +192,6 @@ func (f fileContentProvider) getFileContents(fileName string) ([]byte, error) { func (f fileContentProvider) getChildFileContents(dirName string) (map[string][]byte, error) { // TODO: walk sub-dirs - // return nil, errors.New("not implemnted") + // return nil, errors.New("not implemented") return map[string][]byte{}, nil } diff --git a/pkg/analyze/text_analyze.go b/pkg/analyze/text_analyze.go index 7e5aa7032..0aeccc423 100644 --- a/pkg/analyze/text_analyze.go +++ b/pkg/analyze/text_analyze.go @@ -10,7 +10,7 @@ import ( troubleshootv1beta1 "github.com/replicatedhq/troubleshoot/pkg/apis/troubleshoot/v1beta1" ) -func analyzeTextAnalyze(analyzer *troubleshootv1beta1.TextAnalyze, getCollectedFileContents func(string) ([]byte, error)) (*AnalyzeResult, error) { +func analyzeTextAnalyze(analyzer *troubleshootv1beta1.TextAnalyze, getCollectedFileContents func(string) (map[string][]byte, error)) ([]*AnalyzeResult, error) { fullPath := filepath.Join(analyzer.CollectorName, analyzer.FileName) collected, err := getCollectedFileContents(fullPath) if err != nil { @@ -22,20 +22,44 @@ func analyzeTextAnalyze(analyzer *troubleshootv1beta1.TextAnalyze, getCollectedF checkName = analyzer.CollectorName } + results := []*AnalyzeResult{} + if analyzer.RegexPattern != "" { - return analyzeRegexPattern(analyzer.RegexPattern, collected, analyzer.Outcomes, checkName) + for _, fileContents := range collected { + result, err := analyzeRegexPattern(analyzer.RegexPattern, fileContents, analyzer.Outcomes, checkName) + if err != nil { + return nil, err + } + if result != nil { + results = append(results, result) + } + } } if analyzer.RegexGroups != "" { - return analyzeRegexGroups(analyzer.RegexGroups, collected, analyzer.Outcomes, checkName) + for _, fileContents := range collected { + result, err := analyzeRegexGroups(analyzer.RegexGroups, fileContents, analyzer.Outcomes, checkName) + if err != nil { + return nil, err + } + if result != nil { + results = append(results, result) + } + } } - return &AnalyzeResult{ - Title: checkName, - IconKey: "kubernetes_text_analyze", - IconURI: "https://troubleshoot.sh/images/analyzer-icons/text-analyze.svg", - IsFail: true, - Message: "Invalid analyzer", + if len(results) > 0 { + return results, nil + } + + return []*AnalyzeResult{ + { + Title: checkName, + IconKey: "kubernetes_text_analyze", + IconURI: "https://troubleshoot.sh/images/analyzer-icons/text-analyze.svg", + IsFail: true, + Message: "Invalid analyzer", + }, }, nil } diff --git a/pkg/analyze/text_analyze_test.go b/pkg/analyze/text_analyze_test.go index 2643a39a3..8916de8fa 100644 --- a/pkg/analyze/text_analyze_test.go +++ b/pkg/analyze/text_analyze_test.go @@ -2,6 +2,7 @@ package analyzer import ( "fmt" + "strings" "testing" troubleshootv1beta1 "github.com/replicatedhq/troubleshoot/pkg/apis/troubleshoot/v1beta1" @@ -14,7 +15,7 @@ func Test_textAnalyze(t *testing.T) { tests := []struct { name string analyzer troubleshootv1beta1.TextAnalyze - expectResult AnalyzeResult + expectResult []AnalyzeResult files map[string][]byte }{ { @@ -36,12 +37,14 @@ func Test_textAnalyze(t *testing.T) { FileName: "cfile-1.txt", RegexPattern: "succeeded", }, - expectResult: AnalyzeResult{ - IsPass: true, - IsWarn: false, - IsFail: false, - Title: "text-collector-1", - Message: "pass", + expectResult: []AnalyzeResult{ + { + IsPass: true, + IsWarn: false, + IsFail: false, + Title: "text-collector-1", + Message: "pass", + }, }, files: map[string][]byte{ "text-collector-1/cfile-1.txt": []byte("Yes it all succeeded"), @@ -66,14 +69,16 @@ func Test_textAnalyze(t *testing.T) { FileName: "cfile-2.txt", RegexPattern: "succeeded", }, - expectResult: AnalyzeResult{ - IsPass: false, - IsWarn: false, - IsFail: true, - Title: "text-collector-2", - Message: "fail", - IconKey: "kubernetes_text_analyze", - IconURI: "https://troubleshoot.sh/images/analyzer-icons/text-analyze.svg", + expectResult: []AnalyzeResult{ + { + IsPass: false, + IsWarn: false, + IsFail: true, + Title: "text-collector-2", + Message: "fail", + IconKey: "kubernetes_text_analyze", + IconURI: "https://troubleshoot.sh/images/analyzer-icons/text-analyze.svg", + }, }, files: map[string][]byte{ "text-collector-2/cfile-2.txt": []byte(""), @@ -98,14 +103,16 @@ func Test_textAnalyze(t *testing.T) { FileName: "cfile-3.txt", RegexPattern: "", }, - expectResult: AnalyzeResult{ - IsPass: false, - IsWarn: false, - IsFail: true, - Title: "text-collector-3", - Message: "Invalid analyzer", - IconKey: "kubernetes_text_analyze", - IconURI: "https://troubleshoot.sh/images/analyzer-icons/text-analyze.svg", + expectResult: []AnalyzeResult{ + { + IsPass: false, + IsWarn: false, + IsFail: true, + Title: "text-collector-3", + Message: "Invalid analyzer", + IconKey: "kubernetes_text_analyze", + IconURI: "https://troubleshoot.sh/images/analyzer-icons/text-analyze.svg", + }, }, files: map[string][]byte{ "text-collector-3/cfile-3.txt": []byte("Connection to service succeeded"), @@ -130,12 +137,14 @@ func Test_textAnalyze(t *testing.T) { FileName: "cfile-5.txt", RegexPattern: "([a-zA-Z0-9\\-_:*\\s])*succe([a-zA-Z0-9\\-_:*\\s!])*", }, - expectResult: AnalyzeResult{ - IsPass: true, - IsWarn: false, - IsFail: false, - Title: "text-collector-5", - Message: "success", + expectResult: []AnalyzeResult{ + { + IsPass: true, + IsWarn: false, + IsFail: false, + Title: "text-collector-5", + Message: "success", + }, }, files: map[string][]byte{ "text-collector-5/cfile-5.txt": []byte("Connection to service succeeded!"), @@ -160,14 +169,16 @@ func Test_textAnalyze(t *testing.T) { FileName: "cfile-4.txt", RegexPattern: "succeeded", }, - expectResult: AnalyzeResult{ - IsPass: false, - IsWarn: false, - IsFail: true, - Title: "text-collector-4", - Message: "fail", - IconKey: "kubernetes_text_analyze", - IconURI: "https://troubleshoot.sh/images/analyzer-icons/text-analyze.svg", + expectResult: []AnalyzeResult{ + { + IsPass: false, + IsWarn: false, + IsFail: true, + Title: "text-collector-4", + Message: "fail", + IconKey: "kubernetes_text_analyze", + IconURI: "https://troubleshoot.sh/images/analyzer-icons/text-analyze.svg", + }, }, files: map[string][]byte{ "text-collector-4/cfile-4.txt": []byte("A different message"), @@ -192,19 +203,64 @@ func Test_textAnalyze(t *testing.T) { FileName: "cfile-6.txt", RegexPattern: "([a-zA-Z0-9\\-_:*\\s])*succe([a-zA-Z0-9\\-_:*\\s!])*", }, - expectResult: AnalyzeResult{ - IsPass: false, - IsWarn: false, - IsFail: true, - Title: "text-collector-6", - Message: "fail", - IconKey: "kubernetes_text_analyze", - IconURI: "https://troubleshoot.sh/images/analyzer-icons/text-analyze.svg", + expectResult: []AnalyzeResult{ + { + IsPass: false, + IsWarn: false, + IsFail: true, + Title: "text-collector-6", + Message: "fail", + IconKey: "kubernetes_text_analyze", + IconURI: "https://troubleshoot.sh/images/analyzer-icons/text-analyze.svg", + }, }, files: map[string][]byte{ "text-collector-6/cfile-6.txt": []byte("A different message"), }, }, + { + name: "multiple results case 1", + analyzer: troubleshootv1beta1.TextAnalyze{ + Outcomes: []*troubleshootv1beta1.Outcome{ + { + Pass: &troubleshootv1beta1.SingleOutcome{ + Message: "pass", + }, + }, + { + Fail: &troubleshootv1beta1.SingleOutcome{ + Message: "fail", + }, + }, + }, + CollectorName: "text-collector-1", + FileName: "cfile", + RegexPattern: "succeeded", + }, + expectResult: []AnalyzeResult{ + { + IsPass: true, + IsWarn: false, + IsFail: false, + Title: "text-collector-1", + Message: "pass", + }, + { + IsPass: false, + IsWarn: false, + IsFail: true, + Title: "text-collector-1", + Message: "fail", + IconKey: "kubernetes_text_analyze", + IconURI: "https://troubleshoot.sh/images/analyzer-icons/text-analyze.svg", + }, + }, + files: map[string][]byte{ + "text-collector-1/cfile-1.txt": []byte("Yes it all succeeded"), + "text-collector-1/cfile-2.txt": []byte("no success here"), + "text-collector-2/cfile-3.txt": []byte("Yes it all succeeded"), + }, + }, } for _, test := range tests { @@ -213,17 +269,27 @@ func Test_textAnalyze(t *testing.T) { defer scopetest.End() req := require.New(t) - getFiles := func(n string) ([]byte, error) { - val, ok := test.files[n] - if !ok { + getFiles := func(n string) (map[string][]byte, error) { + matching := make(map[string][]byte) + for k, v := range test.files { + if strings.HasPrefix(k, n) { + matching[k] = v + } + } + if len(matching) == 0 { return nil, fmt.Errorf("File not found: %s", n) } - return val, nil + return matching, nil } actual, err := analyzeTextAnalyze(&test.analyzer, getFiles) req.NoError(err) - assert.Equal(t, &test.expectResult, actual) + + unPointered := []AnalyzeResult{} + for _, v := range actual { + unPointered = append(unPointered, *v) + } + assert.Equal(t, test.expectResult, unPointered) }) } } diff --git a/pkg/preflight/analyze.go b/pkg/preflight/analyze.go index 1c5c1e17d..342506ab0 100644 --- a/pkg/preflight/analyze.go +++ b/pkg/preflight/analyze.go @@ -32,15 +32,17 @@ func (c CollectResult) Analyze() []*analyze.AnalyzeResult { for _, analyzer := range c.Spec.Spec.Analyzers { analyzeResult, err := analyze.Analyze(analyzer, getCollectedFileContents, getChildCollectedFileContents) if err != nil { - analyzeResult = &analyze.AnalyzeResult{ - IsFail: true, - Title: "Analyzer Failed", - Message: err.Error(), + analyzeResult = []*analyze.AnalyzeResult{ + { + IsFail: true, + Title: "Analyzer Failed", + Message: err.Error(), + }, } } if analyzeResult != nil { - analyzeResults = append(analyzeResults, analyzeResult) + analyzeResults = append(analyzeResults, analyzeResult...) } } From 5050f46b1efeafee5876048886c51725adbcf407 Mon Sep 17 00:00:00 2001 From: Andrew Lavery Date: Wed, 15 Apr 2020 18:47:16 -0400 Subject: [PATCH 2/5] use gobwas/glob to match globs --- go.mod | 11 +- go.sum | 177 +------------------------------ pkg/analyze/text_analyze_test.go | 49 +++++++++ pkg/preflight/analyze.go | 13 +++ 4 files changed, 66 insertions(+), 184 deletions(-) diff --git a/go.mod b/go.mod index de03ca62c..aca4a600a 100644 --- a/go.mod +++ b/go.mod @@ -7,7 +7,6 @@ require ( github.com/aws/aws-sdk-go v1.25.18 // indirect github.com/blang/semver v3.5.1+incompatible github.com/chzyer/logex v1.1.11-0.20160617073814-96a4d311aa9b // indirect - github.com/coreos/etcd v3.3.15+incompatible // indirect github.com/docker/spdystream v0.0.0-20181023171402-6480d4af844c // indirect github.com/dsnet/compress v0.0.1 // indirect github.com/elazarl/goproxy v0.0.0-20191011121108-aa519ddbe484 // indirect @@ -16,10 +15,9 @@ require ( github.com/frankban/quicktest v1.7.2 // indirect github.com/gizak/termui/v3 v3.1.0 github.com/go-openapi/spec v0.19.4 // indirect - github.com/go-openapi/validate v0.19.5 // indirect github.com/go-redis/redis/v7 v7.2.0 github.com/go-sql-driver/mysql v1.5.0 - github.com/gobuffalo/flect v0.2.0 // indirect + github.com/gobwas/glob v0.2.3 github.com/golang/snappy v0.0.1 // indirect github.com/google/gofuzz v1.1.0 github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect @@ -38,6 +36,7 @@ require ( github.com/onsi/gomega v1.9.0 // indirect github.com/pierrec/lz4 v2.2.6+incompatible // indirect github.com/pkg/errors v0.9.1 + github.com/prometheus/client_golang v1.0.0 // indirect github.com/prometheus/client_model v0.2.0 // indirect github.com/prometheus/procfs v0.0.5 // indirect github.com/spf13/cobra v0.0.5 @@ -55,17 +54,11 @@ require ( k8s.io/api v0.17.4 k8s.io/apiextensions-apiserver v0.15.12-beta.0 k8s.io/apimachinery v0.17.4 - k8s.io/apiserver v0.17.4 // indirect k8s.io/cli-runtime v0.17.4 k8s.io/client-go v0.17.4 - k8s.io/code-generator v0.16.5-beta.1 // indirect - k8s.io/gengo v0.0.0-20200114144118-36b2048a9120 // indirect k8s.io/kube-openapi v0.0.0-20200121204235-bf4fb3bd569c // indirect k8s.io/utils v0.0.0-20200324210504-a9aa75ae1b89 // indirect - sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.7 // indirect sigs.k8s.io/controller-runtime v0.4.0 - sigs.k8s.io/controller-tools v0.2.4 // indirect - sigs.k8s.io/structured-merge-diff/v3 v3.0.0 // indirect sigs.k8s.io/yaml v1.2.0 // indirect ) diff --git a/go.sum b/go.sum index c99c4db7e..fa41943e9 100644 --- a/go.sum +++ b/go.sum @@ -31,7 +31,6 @@ github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbt github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= -github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM= github.com/ahmetalpbalkan/go-cursor v0.0.0-20131010032410-8136607ea412 h1:vOVO0ypMfTt6tZacyI0kp+iCZb1XSNiYDqnzBWYgfe4= github.com/ahmetalpbalkan/go-cursor v0.0.0-20131010032410-8136607ea412/go.mod h1:AI9hp1tkp10pAlK5TCwL+7yWbRgtDm9jhToq6qij2xs= github.com/alecthomas/gometalinter v2.0.11+incompatible h1:ENdXMllZNSVDTJUUVIzBW9CSEpntTrQa76iRsEFLX/M= @@ -39,7 +38,6 @@ github.com/alecthomas/gometalinter v2.0.11+incompatible/go.mod h1:qfIpQGGz3d+Nmg github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf h1:qet1QNfXsQxTZqLG4oE62mJzwPIB8+Tee4RNCL9ulrY= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= github.com/anmitsu/go-shlex v0.0.0-20161002113705-648efa622239/go.mod h1:2FmKhYUyUczH0OGQWaF5ceTx0UBShxjsH6f8oGKYe2c= github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= github.com/asaskevich/govalidator v0.0.0-20180720115003-f9ffefc3facf/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= @@ -54,7 +52,6 @@ github.com/beorn7/perks v1.0.0 h1:HWo1m869IqiPhD389kmkxeTalrjNbbJTC8LXupb+sl0= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d h1:xDfNPAt8lFiC1UJrqV3uuy861HCTo708pDMbjHHdCas= github.com/bgentry/go-netrc v0.0.0-20140422174119-9fd32a8b3d3d/go.mod h1:6QX/PXZ00z/TKoufEY6K/a0k6AhaJrQKdFe6OfVXsa4= -github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= github.com/blang/semver v3.5.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= github.com/blang/semver v3.5.1+incompatible h1:cQNTCjp13qL8KC3Nbxr/y2Bqb63oX6wdnnjpJbkM4JQ= github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= @@ -71,7 +68,6 @@ github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1 h1:q763qf9huN11kDQavWs github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= github.com/client9/misspell v0.3.4 h1:ta993UF76GwbvJcIo3Y68y/M3WxlpEHPWIGDkJYwzJI= github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= github.com/coreos/bbolt v1.3.1-coreos.6/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= @@ -86,11 +82,9 @@ github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3Ee github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd v0.0.0-20181012123002-c6f51f82210d/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/coreos/pkg v0.0.0-20180108230652-97fdf19511ea/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= -github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/davecgh/go-spew v0.0.0-20151105211317-5215b55f46b2/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= 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= @@ -100,7 +94,6 @@ github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZm github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/docker/docker v0.7.3-0.20190327010347-be7ac8be2ae0/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= -github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= github.com/docker/spdystream v0.0.0-20181023171402-6480d4af844c h1:ZfSZ3P3BedhKGUhzj7BQlPSU4OvT6tfOKe3DVHzOA7s= github.com/docker/spdystream v0.0.0-20181023171402-6480d4af844c/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= @@ -108,10 +101,8 @@ github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3 github.com/dsnet/compress v0.0.1 h1:PlZu0n3Tuv04TzpfPbrnI0HW/YwodEXDS+oPKahKF0Q= github.com/dsnet/compress v0.0.1/go.mod h1:Aw8dCMJ7RioblQeTqt88akK31OvO8Dhf5JflhBbQEHo= github.com/dsnet/golib v0.0.0-20171103203638-1ea166775780/go.mod h1:Lj+Z9rebOhdfkVLjJ8T6VcRQv3SXugXy999NBtR9aFY= -github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= github.com/elazarl/goproxy v0.0.0-20170405201442-c4fc26588b6e/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= -github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= github.com/elazarl/goproxy v0.0.0-20191011121108-aa519ddbe484 h1:pEtiCjIXx3RvGjlUJuCNxNOw0MNblyR9Wi+vJGBFh+8= github.com/elazarl/goproxy v0.0.0-20191011121108-aa519ddbe484/go.mod h1:Ro8st/ElPeALwNFlcTpWmkr6IoMFfkjXAvTHpevnDsM= github.com/elazarl/goproxy/ext v0.0.0-20190711103511-473e67f1d7d2 h1:dWB6v3RcOy03t/bUadywsbyrQwCqZeNIEX6M1OtSZOM= @@ -156,7 +147,6 @@ github.com/go-openapi/analysis v0.17.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpR github.com/go-openapi/analysis v0.17.2/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= github.com/go-openapi/analysis v0.18.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= github.com/go-openapi/analysis v0.19.2/go.mod h1:3P1osvZa9jKjb8ed2TPng3f0i/UY9snX6gxi44djMjk= -github.com/go-openapi/analysis v0.19.5/go.mod h1:hkEAkxagaIvIP7VTn8ygJNkd4kAYON2rCu0v0ObL0AU= github.com/go-openapi/errors v0.17.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0= github.com/go-openapi/errors v0.17.2/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0= github.com/go-openapi/errors v0.18.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0= @@ -180,11 +170,9 @@ github.com/go-openapi/loads v0.17.2/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf github.com/go-openapi/loads v0.18.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= github.com/go-openapi/loads v0.19.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= github.com/go-openapi/loads v0.19.2/go.mod h1:QAskZPMX5V0C2gvfkGZzJlINuP7Hx/4+ix5jWFxsNPs= -github.com/go-openapi/loads v0.19.4/go.mod h1:zZVHonKd8DXyxyw4yfnVjPzBjIQcLt0CCsn0N0ZrQsk= github.com/go-openapi/runtime v0.0.0-20180920151709-4f900dc2ade9/go.mod h1:6v9a6LTXWQCdL8k1AO3cvqx5OtZY/Y9wKTgaoP6YRfA= github.com/go-openapi/runtime v0.17.2/go.mod h1:QO936ZXeisByFmZEO1IS1Dqhtf4QV1sYYFtIq6Ld86Q= github.com/go-openapi/runtime v0.19.0/go.mod h1:OwNfisksmmaZse4+gpV3Ne9AyMOlP1lt4sK4FXt0O64= -github.com/go-openapi/runtime v0.19.4/go.mod h1:X277bwSUBxVlCYR3r7xgZZGKVvBd/29gLDlFGtJ8NL4= github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc= github.com/go-openapi/spec v0.17.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= github.com/go-openapi/spec v0.17.2/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= @@ -197,7 +185,6 @@ github.com/go-openapi/spec v0.19.4/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8 github.com/go-openapi/strfmt v0.17.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU= github.com/go-openapi/strfmt v0.18.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU= github.com/go-openapi/strfmt v0.19.0/go.mod h1:+uW+93UVvGGq2qGaZxdDeJqSAqBqBdl+ZPMF/cC8nDY= -github.com/go-openapi/strfmt v0.19.3/go.mod h1:0yX7dbo8mKIvc3XSKp7MNfxw4JytCfCD6+bY1AVL9LU= github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I= github.com/go-openapi/swag v0.17.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= github.com/go-openapi/swag v0.17.2/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= @@ -208,16 +195,13 @@ github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh github.com/go-openapi/validate v0.17.0/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+MYsct2VUrAJ4= github.com/go-openapi/validate v0.18.0/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+MYsct2VUrAJ4= github.com/go-openapi/validate v0.19.2/go.mod h1:1tRCw7m3jtI8eNWEEliiAqUIcBztB2KDnRCRMUi7GTA= -github.com/go-openapi/validate v0.19.5/go.mod h1:8DJv2CVJQ6kGNpFW6eV9N3JviE1C85nY1c2z52x1Gk4= github.com/go-redis/redis/v7 v7.2.0 h1:CrCexy/jYWZjW0AyVoHlcJUeZN19VWlbepTh1Vq6dJs= github.com/go-redis/redis/v7 v7.2.0/go.mod h1:JDNMw23GTyLNC4GZu9njt15ctBQVn7xjRfnwdHj/Dcg= github.com/go-sql-driver/mysql v1.5.0 h1:ozyZYNQW3x3HtqT1jira07DN2PArx2v7/mN66gGcHOs= github.com/go-sql-driver/mysql v1.5.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/gobuffalo/flect v0.1.5 h1:xpKq9ap8MbYfhuPCF0dBH854Gp9CxZjr/IocxELFflo= -github.com/gobuffalo/flect v0.1.5/go.mod h1:W3K3X9ksuZfir8f/LrfVtWmCDQFfayuylOJ7sz/Fj80= -github.com/gobuffalo/flect v0.2.0 h1:EWCvMGGxOjsgwlWaP+f4+Hh6yrrte7JeFL2S6b+0hdM= -github.com/gobuffalo/flect v0.2.0/go.mod h1:W3K3X9ksuZfir8f/LrfVtWmCDQFfayuylOJ7sz/Fj80= +github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= +github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= github.com/gogo/protobuf v0.0.0-20171007142547-342cbe0a0415/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= @@ -275,7 +259,6 @@ github.com/googleapis/gax-go/v2 v2.0.3/go.mod h1:LLvjysVCY1JZeum8Z6l8qUty8fiNwE0 github.com/googleapis/gax-go/v2 v2.0.4 h1:hU4mGcQI4DaAYW+IbTun+2qEZVFxK0ySjQLTbS0VQKc= github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= -github.com/googleapis/gnostic v0.1.0/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= github.com/googleapis/gnostic v0.3.1 h1:WeAefnSUHlBb0iJKwxFDZdbfGwkd7xRNuV+IpXMJhYk= github.com/googleapis/gnostic v0.3.1/go.mod h1:on+2t9HRStVgn95RSsFWFz+6Q0Snyqv1awfrALZdbtU= github.com/gophercloud/gophercloud v0.0.0-20190126172459-c818fa66e4c8/go.mod h1:3WdhXV3rUYy9p6AUW8d94kr+HS62Y4VL9mBnFxsD8q4= @@ -290,13 +273,11 @@ github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7 h1:pdN6V1QBWet github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= github.com/grpc-ecosystem/go-grpc-middleware v0.0.0-20190222133341-cfaf5686ec79/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= -github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= github.com/grpc-ecosystem/go-grpc-prometheus v0.0.0-20170330212424-2500245aa611/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= github.com/grpc-ecosystem/grpc-gateway v1.3.0/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw= github.com/grpc-ecosystem/grpc-gateway v1.5.0/go.mod h1:RSKVYQBd5MCa4OVpNdGskqpgL2+G+NZTnrVHpWWfpdw= github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= 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.5.0 h1:wvCrVc9TjDls6+YGAF2hAifE1E5U1+b4tH6KdvN3Gig= @@ -370,7 +351,6 @@ github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7 github.com/manifoldco/promptui v0.3.2 h1:rir7oByTERac6jhpHUPErHuopoRDvO3jxS+FdadEns8= github.com/manifoldco/promptui v0.3.2/go.mod h1:8JU+igZ+eeiiRku4T5BjtKh2ms8sziGpSYl1gN8Bazw= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.4 h1:snbPLB8fVfU9iwbbo30TPtbLRzwWu6aJS6Xh4eaaviA= github.com/mattn/go-colorable v0.1.4/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= @@ -404,7 +384,6 @@ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lN github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI= github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= -github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= github.com/natefinch/lumberjack v2.0.0+incompatible/go.mod h1:Wi9p2TTF5DG5oU+6YfsmYQpsTIOm0B1VNzQg9Mw6nPk= @@ -417,7 +396,6 @@ github.com/nsf/termbox-go v0.0.0-20190121233118-02980233997d/go.mod h1:IuKpRQcYE github.com/nwaples/rardecode v1.0.0 h1:r7vGuS5akxOnR4JQSkko62RJ1ReCMXxQRPtxsiFMBOs= github.com/nwaples/rardecode v1.0.0/go.mod h1:5DzqNKiOdpKKBH87u8VlvAnPZMXcGRhxWkRpHbbfGS0= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= -github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.4.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= @@ -525,7 +503,6 @@ github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTd github.com/spf13/cast v1.3.0 h1:oget//CVOEoFewqQxwr0Ej5yjygnqGkvggSE/gB35Q8= github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cobra v0.0.0-20180319062004-c439c4fa0937/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= -github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= github.com/spf13/cobra v0.0.5 h1:f0B+LkLX6DtmRH1isoNA9VTtNUK9K8xYd28JNNfOv/s= github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= github.com/spf13/jwalterweatherman v1.0.0 h1:XHEdyB+EcvlqZamSM4ZOMGlc93t6AcsBEu9Gc1vn7yk= @@ -549,7 +526,6 @@ github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81P github.com/stretchr/testify v1.5.1 h1:nOGnQDM7FYENwehXlg/kFVnos3rEvtKTjRvOWSzb6H4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07/go.mod h1:kDXzergiv9cbyO7IOYJZWg1U88JhDg3PB6klq9Hg2pA= -github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= github.com/tj/go-spin v1.1.0 h1:lhdWZsvImxvZ3q1C5OIB7d72DuOwP4O2NdBg9PyzNds= github.com/tj/go-spin v1.1.0/go.mod h1:Mg1mzmePZm4dva8Qz60H2lHwmJ2loum4VIrLgVnKwh4= github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= @@ -563,8 +539,6 @@ github.com/ulikunitz/xz v0.5.6 h1:jGHAfXawEGZQ3blwU5wnWKQJvAraT7Ftq9EXjnXYgt8= github.com/ulikunitz/xz v0.5.6/go.mod h1:2bypXElzHzzJZwzH67Y6wb67pO62Rzfn7BSiF4ABRW8= github.com/undefinedlabs/go-mpatch v0.0.0-20200122175732-0044123dbb98 h1:Z/megzdoMbuZ0H/oLmfTw92PAEfyTi1DkvAr8AUzFgw= github.com/undefinedlabs/go-mpatch v0.0.0-20200122175732-0044123dbb98/go.mod h1:TyJZDQ/5AgyN7FSLiBJ8RO9u2c6wbtRvK827b6AVqY4= -github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= -github.com/vektah/gqlparser v1.1.2/go.mod h1:1ycwN7Ij5njmMkPPAOaRFY4rET2Enx7IkVv3vaXspKw= github.com/vmihailenco/msgpack v4.0.4+incompatible h1:dSLoQfGFAo3F6OoNhwUmLwVgaUXK79GlxNBwueZn0xI= github.com/vmihailenco/msgpack v4.0.4+incompatible/go.mod h1:fy3FlTQTDXWkZ7Bh6AcGMlsjHatGryHQYUTf1ShIgkk= github.com/xi2/xz v0.0.0-20171230120015-48954b6210f8 h1:nIPpBwaJSVYIxUFsDv3M8ofmx9yWTog9BfvIu0q41lo= @@ -573,11 +547,6 @@ github.com/xiang90/probing v0.0.0-20160813154853-07dd2e8dfe18/go.mod h1:UETIi67q github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= -go.mongodb.org/mongo-driver v1.0.3/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= -go.mongodb.org/mongo-driver v1.1.1/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= -go.mongodb.org/mongo-driver v1.1.2/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= go.opencensus.io v0.18.0/go.mod h1:vKdFvxhtzZ9onBp9VKHK8z/sRpBMnKAsufL7wlDrCOA= go.opencensus.io v0.21.0 h1:mU6zScU4U1YAFPHEHYk+3JC4SY7JxgkqS10ZOSyksNg= go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= @@ -606,8 +575,6 @@ golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnf golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190320223903-b7391e95e576/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190617133340-57b3e21c3d56/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975 h1:/Tl7pH94bvbAAHBdZJT947M/+gp0+CqQXDtMRC0fseo= golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -643,7 +610,6 @@ golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190812203447-cdfb69ac37fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/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-20191004110552-13f9640d40b9 h1:rjwSpXsdiK0dV8/Naq3kAw9ymfAeJIyd0upUIElB+lI= @@ -690,7 +656,6 @@ golang.org/x/sys v0.0.0-20190813064441-fde4db37ae7a/go.mod h1:h1NjWce9XRLGQEsW7w golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456 h1:ng0gs1AKnRRuEMZoTLLlbOd+C17zUDepwGQBb/n+JVg= golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191010194322-b09406accb47/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191022100944-742c48ecaeb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200122134326-e047566fdf82 h1:ywK/j/KkyTHcdyYSZNXGjMwgmDSfjglYZ3vStQ/gSCU= golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5 h1:LfCXLvNmTYH9kEmVgqbnsWfruoXZIrh4YBgqVHtDvw0= @@ -715,7 +680,6 @@ golang.org/x/tools v0.0.0-20181030000716-a0a13e073c7b/go.mod h1:n7NCudcB/nEzxVGm golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181122213734-04b5d21e00f1/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190125232054-d66bd3c5d5a6/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= @@ -724,10 +688,8 @@ golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3 golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190617190820-da514acc4774/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac h1:MQEvx39qSf8vyrx3XRaOe+j1UDIzKwkYOVObRgGPVqI= golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190920225731-5eefd052ad72/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191010075000-0337d82405ff h1:XdBG6es/oFDr1HwaxkxgVve7NB281QhxgK/i4voubFs= golang.org/x/tools v0.0.0-20191010075000-0337d82405ff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7 h1:9zdDQZ7Thm29KFXgAX/+yaf3eVbP7djjWp/dXAppNCc= @@ -772,7 +734,6 @@ google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiq google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.23.0 h1:AzbTB6ux+okLTzP8Ru1Xs41C303zdcfEht7MQnYJt5A= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.26.0 h1:2dTRdpdFEEhJYQD8EMLB61nnrzSCTbG38PhqdhvOltg= google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= @@ -782,7 +743,6 @@ gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8 gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/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/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/cheggaaa/pb.v1 v1.0.27/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= @@ -805,11 +765,8 @@ gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.4 h1:/eiJrUcujPVeJ3xlSWaiNi3uSVmDGBK1pDHUHAnao1I= gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.7/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= -gopkg.in/yaml.v3 v3.0.0-20190905181640-827449938966 h1:B0J02caTR6tpSJozBJyiAzT6CtBzjclw4pgm9gg8Ys0= -gopkg.in/yaml.v3 v3.0.0-20190905181640-827449938966/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= grpc.go4.org v0.0.0-20170609214715-11d0a25b4919/go.mod h1:77eQGdRu53HpSqPFJFmuJdjuHRquDANNeA4x7B8WQ9o= honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -818,150 +775,32 @@ honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= k8s.io/api v0.0.0-20190918155943-95b840bb6a1f/go.mod h1:uWuOHnjmNrtQomJrvEBg0c0HRNyQ+8KTEERVsK0PW48= k8s.io/api v0.15.12-beta.0/go.mod h1:SeTuJQed4C1QTmlWawryIM+feNPRReglVrvv+KsbpGk= -k8s.io/api v0.17.0/go.mod h1:npsyOePkeP0CPwyGfXDHxvypiYMJxBWAMpQxCaJ4ZxI= -k8s.io/api v0.17.1-beta.0/go.mod h1:t+ColJ7ZemYM/LXgLo4sVuO86DluzcnNHVKfZK4irZM= -k8s.io/api v0.17.1/go.mod h1:zxiAc5y8Ngn4fmhWUtSxuUlkfz1ixT7j9wESokELzOg= -k8s.io/api v0.17.2/go.mod h1:BS9fjjLc4CMuqfSO8vgbHPKMt5+SF0ET6u/RVDihTo4= -k8s.io/api v0.17.3-beta.0/go.mod h1:II7E2nD74NziEP/I5++IpJ/E4xAnLSVSxsWjEY7nTJc= -k8s.io/api v0.17.3/go.mod h1:YZ0OTkuw7ipbe305fMpIdf3GLXZKRigjtZaV5gzC2J0= -k8s.io/api v0.17.4-beta.0/go.mod h1:GvrPCgJXMjQy7jNXQyJTEtLb97iKYOPIRHf12YpPgsg= k8s.io/api v0.17.4 h1:HbwOhDapkguO8lTAE8OX3hdF2qp8GtpC9CW/MQATXXo= k8s.io/api v0.17.4/go.mod h1:5qxx6vjmwUVG2nHQTKGlLts8Tbok8PzHl4vHtVFuZCA= -k8s.io/api v0.17.5-beta.0/go.mod h1:KZb7OowZyrErfJIgFiNbvk8Mz27wiFdZJzgoOg3Ij3k= -k8s.io/api v0.18.0-alpha.1/go.mod h1:X82bXHlVEfxpVA9rO5PMaSOdQ+VdlSjT9A2Tl/CWL4A= -k8s.io/api v0.18.0-alpha.2/go.mod h1:jmDzGjASmjc+X3sojto6zy8iHsZEpgdnqHz0aWfRTEg= -k8s.io/api v0.18.0-alpha.4/go.mod h1:SvC64HywGrMEvfBPw7FcGXhoKTBfkFrpbuCoS2/gdiA= -k8s.io/api v0.18.0-alpha.5/go.mod h1:4R9YKKdSnQmR4J01O1TXy0QMouQ6r46A+9kwfhV7rZk= -k8s.io/api v0.18.0-beta.0/go.mod h1:VrRplS6LnRDM5Iq8CeqbtMAaAGU2iZDEoO3qNUe32FQ= -k8s.io/api v0.18.0-beta.1/go.mod h1:NcLIcCLuI/dH9R6reQzXe8l3GZMBqYyV7IpCg8ELWNw= -k8s.io/api v0.18.0-beta.2/go.mod h1:2oeNnWEqcSmaM/ibSh3t7xcIqbkGXhzZdn4ezV9T4m0= -k8s.io/api v0.18.0-rc.1/go.mod h1:ZOh6SbHjOYyaMLlWmB2+UOQKEWDpCnVEVpEyt7S2J9s= -k8s.io/api v0.18.0 h1:lwYk8Vt7rsVTwjRU6pzEsa9YNhThbmbocQlKvNBB4EQ= -k8s.io/api v0.18.0/go.mod h1:q2HRQkfDzHMBZL9l/y9rH63PkQl4vae0xRT+8prbrK8= k8s.io/apiextensions-apiserver v0.0.0-20190918161926-8f644eb6e783 h1:V6ndwCPoao1yZ52agqOKaUAl7DYWVGiXjV7ePA2i610= k8s.io/apiextensions-apiserver v0.0.0-20190918161926-8f644eb6e783/go.mod h1:xvae1SZB3E17UpV59AWc271W/Ph25N+bjPyR63X6tPY= k8s.io/apiextensions-apiserver v0.15.12-beta.0 h1:6+6t58za7f5ZwtuCz3zQAkCtn5pKYaSTbPTb3PO3vJA= k8s.io/apiextensions-apiserver v0.15.12-beta.0/go.mod h1:8Rm/f9mZoGC5Voo4UJjDjsjIoMLAIOVnp2aQ/WCbZiA= -k8s.io/apiextensions-apiserver v0.16.4/go.mod h1:HYQwjujEkXmQNhap2C9YDdIVOSskGZ3et0Mvjcyjbto= -k8s.io/apiextensions-apiserver v0.16.5-beta.0/go.mod h1:pJQvHLCa1NhD0xrfUVjdK04J1R5gXTlmoRhF6e1fF3U= -k8s.io/apiextensions-apiserver v0.16.5-beta.1/go.mod h1:txaziO41KVDNj8knXv8PmmWRDikdmwcLRIPRBA8jEGY= -k8s.io/apiextensions-apiserver v0.16.5/go.mod h1:hxCqHs7KmsPJBF8u2f0VvXQBfFKqHPvXr6GC9/UPQ1E= -k8s.io/apiextensions-apiserver v0.16.6-beta.0/go.mod h1:BIz5vp2CGiLZN/Ag72aqICAkXCJbYnvbUQfzbD4fG4c= -k8s.io/apiextensions-apiserver v0.16.6/go.mod h1:WbwakFromAVhfvLITDk5nRf5UJJwazjeZRx+yKeDcY0= -k8s.io/apiextensions-apiserver v0.16.7-beta.0/go.mod h1:r5ZGIXJyVU+i26QvWASjFjn8cL4b1V5fiaU7xLq6AB8= -k8s.io/apiextensions-apiserver v0.16.7/go.mod h1:6xYRp4trGp6eT5WZ6tPi/TB2nfWQCzwUvBlpg8iswe0= -k8s.io/apiextensions-apiserver v0.16.8-beta.0/go.mod h1:/98faDWCaBZm4Bekzs+/I3l+9dJSstuIAyi6tru0vDk= -k8s.io/apiextensions-apiserver v0.16.8/go.mod h1:R989okvPLerXtLjflp2PROO8mNH+rdW9WAxlD/aQcmw= -k8s.io/apiextensions-apiserver v0.16.9-beta.0/go.mod h1:+hR//QX2aHYvtcWrCQLEFKLPTIIF/z54OraK9r84SlY= -k8s.io/apiextensions-apiserver v0.17.0/go.mod h1:XiIFUakZywkUl54fVXa7QTEHcqQz9HG55nHd1DCoHj8= -k8s.io/apiextensions-apiserver v0.17.1-beta.0/go.mod h1:nAWs3hR7mcARaOgVnu790Kxmv8axnwXkkCdry5gOC04= -k8s.io/apiextensions-apiserver v0.17.1/go.mod h1:DRIFH5x3jalE4rE7JP0MQKby9zdYk9lUJQuMmp+M/L0= -k8s.io/apiextensions-apiserver v0.17.2/go.mod h1:4KdMpjkEjjDI2pPfBA15OscyNldHWdBCfsWMDWAmSTs= -k8s.io/apiextensions-apiserver v0.17.3-beta.0/go.mod h1:Q5Lyewxl3AQAbJRnKyFOWmwxUatTvyDRBbJ3ewMsgm4= -k8s.io/apiextensions-apiserver v0.17.3/go.mod h1:CJbCyMfkKftAd/X/V6OTHYhVn7zXnDdnkUjS1h0GTeY= -k8s.io/apiextensions-apiserver v0.17.4-beta.0/go.mod h1:kFrCjhzJWXDbZX6ZEH50Io8CR8jCw31sNVYcO5M9NQw= -k8s.io/apiextensions-apiserver v0.17.4 h1:ZKFnw3cJrGZ/9s6y+DerTF4FL+dmK0a04A++7JkmMho= -k8s.io/apiextensions-apiserver v0.17.4/go.mod h1:rCbbbaFS/s3Qau3/1HbPlHblrWpFivoaLYccCffvQGI= -k8s.io/apiextensions-apiserver v0.17.5-beta.0/go.mod h1:DBctYQMvRAEa9KM1sV8fV0yIrMQFJ8+meUhA02HRKPE= -k8s.io/apiextensions-apiserver v0.18.0-alpha.1/go.mod h1:g1h5y0Re59B1O/UJez/d4hQfr3G3aV8e9GUEp5NWZL4= -k8s.io/apiextensions-apiserver v0.18.0-alpha.2/go.mod h1:PgDaS5AD5Qhe+mkJuewsDkAolPlghm1dweXUYlMItzA= -k8s.io/apiextensions-apiserver v0.18.0-alpha.4/go.mod h1:8QHdezGnyv47oTlOOoAzDv49FWERocrdiNYCgdYd9Hc= -k8s.io/apiextensions-apiserver v0.18.0-alpha.5/go.mod h1:q00Pi9OxTn5DBvNxo2IGKxxpLuuI14VdnkpHUxTGSw8= -k8s.io/apiextensions-apiserver v0.18.0-beta.0/go.mod h1:ovprH8MtmM6FthdCga/HQ/7P0fjvisvfH2tZLwJW+8s= -k8s.io/apiextensions-apiserver v0.18.0-beta.1/go.mod h1:3vyrlc6a9W64dUhpkU8NcQstRu8F0lpY2mtVrA5x7Cw= -k8s.io/apiextensions-apiserver v0.18.0-beta.2/go.mod h1:Hnrg5jx8/PbxRbUoqDGxtQkULjwx8FDW4WYJaKNK+fk= -k8s.io/apiextensions-apiserver v0.18.0-rc.1/go.mod h1:U5F8MzX2yXVHRuSKY5xBkS9999/VHu6PJNOInIpVLe4= -k8s.io/apiextensions-apiserver v0.18.0 h1:HN4/P8vpGZFvB5SOMuPPH2Wt9Y/ryX+KRvIyAkchu1Q= -k8s.io/apiextensions-apiserver v0.18.0/go.mod h1:18Cwn1Xws4xnWQNC00FLq1E350b9lUF+aOdIWDOZxgo= k8s.io/apimachinery v0.0.0-20190913080033-27d36303b655/go.mod h1:nL6pwRT8NgfF8TT68DBI8uEePRt89cSvoXUVqbkWHq4= k8s.io/apimachinery v0.15.12-beta.0/go.mod h1:ZRw+v83FjgEqlzqaBkxL3XB21MSLYdzjsY9Bgxclhdw= -k8s.io/apimachinery v0.17.0/go.mod h1:b9qmWdKlLuU9EBh+06BtLcSf/Mu89rWL33naRxs1uZg= -k8s.io/apimachinery v0.17.1-beta.0/go.mod h1:b9qmWdKlLuU9EBh+06BtLcSf/Mu89rWL33naRxs1uZg= -k8s.io/apimachinery v0.17.1/go.mod h1:b9qmWdKlLuU9EBh+06BtLcSf/Mu89rWL33naRxs1uZg= -k8s.io/apimachinery v0.17.2/go.mod h1:b9qmWdKlLuU9EBh+06BtLcSf/Mu89rWL33naRxs1uZg= -k8s.io/apimachinery v0.17.3-beta.0/go.mod h1:b9qmWdKlLuU9EBh+06BtLcSf/Mu89rWL33naRxs1uZg= -k8s.io/apimachinery v0.17.3/go.mod h1:gxLnyZcGNdZTCLnq3fgzyg2A5BVCHTNDFrw8AmuJ+0g= -k8s.io/apimachinery v0.17.4-beta.0/go.mod h1:gxLnyZcGNdZTCLnq3fgzyg2A5BVCHTNDFrw8AmuJ+0g= k8s.io/apimachinery v0.17.4 h1:UzM+38cPUJnzqSQ+E1PY4YxMHIzQyCg29LOoGfo79Zw= k8s.io/apimachinery v0.17.4/go.mod h1:gxLnyZcGNdZTCLnq3fgzyg2A5BVCHTNDFrw8AmuJ+0g= -k8s.io/apimachinery v0.18.0 h1:fuPfYpk3cs1Okp/515pAf0dNhL66+8zk8RLbSX+EgAE= -k8s.io/apimachinery v0.18.0/go.mod h1:9SnR/e11v5IbyPCGbvJViimtJ0SwHG4nfZFjU77ftcA= k8s.io/apiserver v0.0.0-20190918160949-bfa5e2e684ad/go.mod h1:XPCXEwhjaFN29a8NldXA901ElnKeKLrLtREO9ZhFyhg= k8s.io/apiserver v0.15.12-beta.0/go.mod h1:8jB/rq3MrxjXmRNKxH5Uo+TmUndNG+fF91H8wIw2SKs= -k8s.io/apiserver v0.17.0/go.mod h1:ABM+9x/prjINN6iiffRVNCBR2Wk7uY4z+EtEGZD48cg= -k8s.io/apiserver v0.17.1-beta.0/go.mod h1:xxqssZuE9bBKTvpkRKvhXPH1H/kfcqb3iwws5xT0+M0= -k8s.io/apiserver v0.17.1/go.mod h1:BQEUObJv8H6ZYO7DeKI5vb50tjk6paRJ4ZhSyJsiSco= -k8s.io/apiserver v0.17.2/go.mod h1:lBmw/TtQdtxvrTk0e2cgtOxHizXI+d0mmGQURIHQZlo= -k8s.io/apiserver v0.17.3-beta.0/go.mod h1:3w+4efyQs28hCv8c9jfRkm5hjCaWbGKlzk9MLKHt7Kc= -k8s.io/apiserver v0.17.3/go.mod h1:iJtsPpu1ZpEnHaNawpSV0nYTGBhhX2dUlnn7/QS7QiY= -k8s.io/apiserver v0.17.4-beta.0/go.mod h1:D9CFsgN1LrGE1dMKxBkFV+0ho/4v2eeJvJOWrCBIz/0= -k8s.io/apiserver v0.17.4/go.mod h1:5ZDQ6Xr5MNBxyi3iUZXS84QOhZl+W7Oq2us/29c0j9I= -k8s.io/apiserver v0.17.5-beta.0/go.mod h1:z53YycJMQErvUvJeu9L2eblu5kRyJbElzxICxna4FH0= -k8s.io/apiserver v0.18.0-alpha.1/go.mod h1:5/UIcjrEXBtujhMP7a65y3iJPoxNd/0ZifUXoNYvofc= -k8s.io/apiserver v0.18.0-alpha.2/go.mod h1:rYad5Erij9dTz8MByhv10PNovRLUtvz/MhXp175xASU= -k8s.io/apiserver v0.18.0-alpha.4/go.mod h1:DbMpk7DbxXNoaUzOAfY5IPAWwn7ML7zyyjlOp0G6rG8= -k8s.io/apiserver v0.18.0-alpha.5/go.mod h1:Kpk1wOUO19LBtOVxtJeKv09jRFkN0qvq3vdsqgzVKU4= -k8s.io/apiserver v0.18.0-beta.0/go.mod h1:3AWyS7B0yhtVNkEdTGVyjw/i0/IUsTlV4beC0pkb3DM= -k8s.io/apiserver v0.18.0-beta.1/go.mod h1:aKuBDoSx5bxrr0h23L+e+HLy/yH0LEjuuN8ns5bnOzU= -k8s.io/apiserver v0.18.0-beta.2/go.mod h1:bnblMkMoCFnIfVnVftd0SXJPzyvrk3RtaqSbblphF/A= -k8s.io/apiserver v0.18.0-rc.1/go.mod h1:RYE9w2Lijk1aWW3i3pS7kFGU0Afof+UDoOz1qW9aSYg= -k8s.io/apiserver v0.18.0/go.mod h1:3S2O6FeBBd6XTo0njUrLxiqk8GNy6wWOftjhJcXYnjw= k8s.io/cli-runtime v0.17.4 h1:ZIJdxpBEszZqUhydrCoiI5rLXS2J/1AF5xFok2QJ9bc= k8s.io/cli-runtime v0.17.4/go.mod h1:IVW4zrKKx/8gBgNNkhiUIc7nZbVVNhc1+HcQh+PiNHc= k8s.io/client-go v0.0.0-20190918160344-1fbdaa4c8d90/go.mod h1:J69/JveO6XESwVgG53q3Uz5OSfgsv4uxpScmmyYOOlk= k8s.io/client-go v0.15.12-beta.0/go.mod h1:ytfQFnpRiHki2QY+iyAYxMbq+Cc/aj6VVmPMDYzleQE= -k8s.io/client-go v0.17.0/go.mod h1:TYgR6EUHs6k45hb6KWjVD6jFZvJV4gHDikv/It0xz+k= -k8s.io/client-go v0.17.1-beta.0/go.mod h1:gzW655fKPI4D5ixyLPt+KzggYNvSbo5KHn1s7Vz0/mA= -k8s.io/client-go v0.17.1/go.mod h1:HZtHJSC/VuSHcETN9QA5QDZky1tXiYrkF/7t7vRpO1A= -k8s.io/client-go v0.17.2/go.mod h1:QAzRgsa0C2xl4/eVpeVAZMvikCn8Nm81yqVx3Kk9XYI= -k8s.io/client-go v0.17.3-beta.0/go.mod h1:gGGockCrvyM7XcJzBuqWCxCt77QwOZY9BlWpAqxw204= -k8s.io/client-go v0.17.3/go.mod h1:cLXlTMtWHkuK4tD360KpWz2gG2KtdWEr/OT02i3emRQ= -k8s.io/client-go v0.17.4-beta.0/go.mod h1:jdUo+qJEoO+1LSTIdT1gjYf+g8Hvc2G27yqwBSRWDFE= k8s.io/client-go v0.17.4 h1:VVdVbpTY70jiNHS1eiFkUt7ZIJX3txd29nDxxXH4en8= k8s.io/client-go v0.17.4/go.mod h1:ouF6o5pz3is8qU0/qYL2RnoxOPqgfuidYLowytyLJmc= -k8s.io/client-go v0.17.5-beta.0/go.mod h1:v1d8IVrwkLu7LU5SKTRHyWfXc8sfvP+VBiLBUhLXgr8= -k8s.io/client-go v0.18.0-alpha.1/go.mod h1:+Fxt9MnOdHNvtcnZhVN8u6iBSjCKcvjoXAZYm6BG9Lk= -k8s.io/client-go v0.18.0-alpha.2/go.mod h1:ifcipTA59lXFIIco5yOa/a6KWcJW3N4J236vMYkEG54= -k8s.io/client-go v0.18.0-alpha.4/go.mod h1:kRDGnu8LeX4ZrCUCWlWakivVa9OwuCWa+4pcVKbgHKs= -k8s.io/client-go v0.18.0-alpha.5/go.mod h1:nKAwcV2fo58KP+FiRujaXViLwA6DdTPeFTBV+8jiStI= -k8s.io/client-go v0.18.0-beta.0/go.mod h1:JNS3A6MBF2eDT90sSUzVo/Ejnhd/yvMce3dz6I7pP/8= -k8s.io/client-go v0.18.0-beta.1/go.mod h1:72uk0nKrRYexhTPsiAYy8eL0jtwA5f6HsAQSMFDZ45c= -k8s.io/client-go v0.18.0-beta.2/go.mod h1:UvuVxHjKWIcgy0iMvF+bwNDW7l0mskTNOaOW1Qv5BMA= -k8s.io/client-go v0.18.0-rc.1/go.mod h1:0lGW/AaaFfNWlmyYvWSJrtaDlti7oNRyCjq4CNK/Ipk= -k8s.io/client-go v0.18.0/go.mod h1:uQSYDYs4WhVZ9i6AIoEZuwUggLVEF64HOD37boKAtF8= k8s.io/code-generator v0.0.0-20190912054826-cd179ad6a269/go.mod h1:V5BD6M4CyaN5m+VthcclXWsVcT1Hu+glwa1bi3MIsyE= k8s.io/code-generator v0.15.12-beta.0/go.mod h1:G8bQwmHm2eafm5bgtX67XDZQ8CWKSGu9DekI+yN4Y5I= -k8s.io/code-generator v0.16.5-beta.1 h1:+zWxMQH3a6fd8lZe6utWyW/V7nmG2ZMXwtovSJI2p+0= -k8s.io/code-generator v0.16.5-beta.1/go.mod h1:mJUgkl06XV4kstAnLHAIzJPVCOzVR+ZcfPIv4fUsFCY= -k8s.io/code-generator v0.17.0/go.mod h1:DVmfPQgxQENqDIzVR2ddLXMH34qeszkKSdH/N+s+38s= -k8s.io/code-generator v0.17.4/go.mod h1:l8BLVwASXQZTo2xamW5mQNFCe1XPiAesVq7Y1t7PiQQ= -k8s.io/code-generator v0.18.0/go.mod h1:+UHX5rSbxmR8kzS+FAv7um6dtYrZokQvjHpDSYRVkTc= k8s.io/component-base v0.0.0-20190918160511-547f6c5d7090/go.mod h1:933PBGtQFJky3TEwYx4aEPZ4IxqhWh3R6DCmzqIn1hA= k8s.io/component-base v0.15.12-beta.0/go.mod h1:jRj5HNzJOrJYcmdWD76c3tlTJXuBMzz5vWHVSqm5e3s= -k8s.io/component-base v0.17.0/go.mod h1:rKuRAokNMY2nn2A6LP/MiwpoaMRHpfRnrPaUJJj1Yoc= -k8s.io/component-base v0.17.1-beta.0/go.mod h1:1XvPfIerYmU92lLkCPsJS3z6SDVUEZP74CmJ/gtpTeU= -k8s.io/component-base v0.17.1/go.mod h1:LrBPZkXtlvGjBzDJa0+b7E5Ij4VoAAKrOGudRC5z2eY= -k8s.io/component-base v0.17.2/go.mod h1:zMPW3g5aH7cHJpKYQ/ZsGMcgbsA/VyhEugF3QT1awLs= -k8s.io/component-base v0.17.3-beta.0/go.mod h1:+mpaQoQGz+U8vcy33M6XQyavg+EzVPLMgAsvLPfO5oQ= -k8s.io/component-base v0.17.3/go.mod h1:GeQf4BrgelWm64PXkIXiPh/XS0hnO42d9gx9BtbZRp8= -k8s.io/component-base v0.17.4-beta.0/go.mod h1:+xMhnjtdsA69bNdgm6F+poz/CNgNTBkLBTaoX6RIDpY= -k8s.io/component-base v0.17.4/go.mod h1:5BRqHMbbQPm2kKu35v3G+CpVq4K0RJKC7TRioF0I9lE= -k8s.io/component-base v0.17.5-beta.0/go.mod h1:VwZTTmE+lb1CpqGmQwKugn7mBI/7nqZdttpGzxIcaCE= -k8s.io/component-base v0.18.0-alpha.1/go.mod h1:eDvhx/r79NT7SYaUmGJYHIFfsAGWOYYYfz+YdagSy2Q= -k8s.io/component-base v0.18.0-alpha.2/go.mod h1:YUYIWagOVcHY/1abCtKtWFujgu6FM7dOCOccasO7Wng= -k8s.io/component-base v0.18.0-alpha.4/go.mod h1:2ycWO40b9IlLtXryRFt4YToxrSWYYQjh10X8ctbE1Xk= -k8s.io/component-base v0.18.0-alpha.5/go.mod h1:zi+SJPyqK/G2X8AhVD+xZZaydtXuGkAxwE6/095eZ80= -k8s.io/component-base v0.18.0-beta.0/go.mod h1:bNrX5ozoz2VdXwdDcHHho/k7XdsJw5Mlbb/2GpmA9PA= -k8s.io/component-base v0.18.0-beta.1/go.mod h1:Th8v18ZXwuy5DIm6/UUsxIJgo1mO5m/aW4KYw+9BxVw= -k8s.io/component-base v0.18.0-beta.2/go.mod h1:HVk5FpRnyzQ/MjBr9//e/yEBjTVa2qjGXCTuUzcD7ks= -k8s.io/component-base v0.18.0-rc.1/go.mod h1:NNlRaxZEdLqTs2+6yXiU2SHl8gKsbcy19Ii+Sfq53RM= -k8s.io/component-base v0.18.0/go.mod h1:u3BCg0z1uskkzrnAKFzulmYaEpZF7XC9Pf/uFyb1v2c= k8s.io/gengo v0.0.0-20190116091435-f8a0810f38af/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/gengo v0.0.0-20190822140433-26a664648505 h1:ZY6yclUKVbZ+SdWnkfY+Je5vrMpKOxmGeKRbsXVmqYM= k8s.io/gengo v0.0.0-20190822140433-26a664648505/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= -k8s.io/gengo v0.0.0-20200114144118-36b2048a9120 h1:RPscN6KhmG54S33L+lr3GS+oD1jmchIU0ll519K6FA4= -k8s.io/gengo v0.0.0-20200114144118-36b2048a9120/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= k8s.io/klog v0.3.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= k8s.io/klog v0.3.1/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= @@ -985,27 +824,15 @@ modernc.org/golex v1.0.0/go.mod h1:b/QX9oBD/LhixY6NDh+IdGv17hgB+51fET1i2kPSmvk= modernc.org/mathutil v1.0.0/go.mod h1:wU0vUrJsVWBZ4P6e7xtFJEhFSNsfRLJ8H458uRjg03k= modernc.org/strutil v1.0.0/go.mod h1:lstksw84oURvj9y3tn8lGvRxyRC1S2+g5uuIzNfIOBs= modernc.org/xc v1.0.0/go.mod h1:mRNCo0bvLjGhHO9WsyuKVU4q0ceiDDDoEeWDJHrNx8I= -sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.7/go.mod h1:PHgbrJT7lCHcxMU+mDHEm+nx46H4zuuHZkDP6icnhu0= sigs.k8s.io/controller-runtime v0.4.0 h1:wATM6/m+3w8lj8FXNaO6Fs/rq/vqoOjO1Q116Z9NPsg= sigs.k8s.io/controller-runtime v0.4.0/go.mod h1:ApC79lpY3PHW9xj/w9pj+lYkLgwAAUZwfXkME1Lajns= -sigs.k8s.io/controller-tools v0.2.4 h1:la1h46EzElvWefWLqfsXrnsO3lZjpkI0asTpX6h8PLA= -sigs.k8s.io/controller-tools v0.2.4/go.mod h1:m/ztfQNocGYBgTTCmFdnK94uVvgxeZeE3LtJvd/jIzA= -sigs.k8s.io/controller-tools v0.2.5/go.mod h1:+t0Hz6tOhJQCdd7IYO0mNzimmiM9sqMU0021u6UCF2o= -sigs.k8s.io/controller-tools v0.2.6/go.mod h1:9VKHPszmf2DHz/QmHkcfZoewO6BL7pPs9uAiBVsaJSE= -sigs.k8s.io/controller-tools v0.2.7/go.mod h1:9VKHPszmf2DHz/QmHkcfZoewO6BL7pPs9uAiBVsaJSE= -sigs.k8s.io/controller-tools v0.2.8 h1:UmYsnu89dn8/wBhjKL3lkGyaDGRnPDYUx2+iwXRnylA= -sigs.k8s.io/controller-tools v0.2.8/go.mod h1:9VKHPszmf2DHz/QmHkcfZoewO6BL7pPs9uAiBVsaJSE= sigs.k8s.io/kustomize v2.0.3+incompatible h1:JUufWFNlI44MdtnjUqVnvh29rR37PQFzPbLXqhyOyX0= sigs.k8s.io/kustomize v2.0.3+incompatible/go.mod h1:MkjgH3RdOWrievjo6c9T245dYlB5QeXV4WCbnt/PEpU= sigs.k8s.io/structured-merge-diff v0.0.0-20190302045857-e85c7b244fd2/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI= sigs.k8s.io/structured-merge-diff v0.0.0-20190525122527-15d366b2352e/go.mod h1:wWxsB5ozmmv/SG7nM11ayaAW51xMvak/t1r0CSlcokI= sigs.k8s.io/structured-merge-diff v0.0.0-20190817042607-6149e4549fca h1:6dsH6AYQWbyZmtttJNe8Gq1cXOeS1BdV3eW37zHilAQ= sigs.k8s.io/structured-merge-diff v0.0.0-20190817042607-6149e4549fca/go.mod h1:IIgPezJWb76P0hotTxzDbWsMYB8APh18qZnxkomBpxA= -sigs.k8s.io/structured-merge-diff v1.0.1-0.20191108220359-b1b620dd3f06 h1:zD2IemQ4LmOcAumeiyDWXKUI2SO0NYDe3H6QGvPOVgU= -sigs.k8s.io/structured-merge-diff v1.0.1-0.20191108220359-b1b620dd3f06/go.mod h1:/ULNhyfzRopfcjskuui0cTITekDduZ7ycKN3oUT9R18= sigs.k8s.io/structured-merge-diff/v3 v3.0.0-20200116222232-67a7b8c61874/go.mod h1:PlARxl6Hbt/+BC80dRLi1qAmnMqwqDg62YvvVkZjemw= -sigs.k8s.io/structured-merge-diff/v3 v3.0.0 h1:dOmIZBMfhcHS09XZkMyUgkq5trg3/jRyJYFZUiaOp8E= -sigs.k8s.io/structured-merge-diff/v3 v3.0.0/go.mod h1:PlARxl6Hbt/+BC80dRLi1qAmnMqwqDg62YvvVkZjemw= sigs.k8s.io/testing_frameworks v0.1.2 h1:vK0+tvjF0BZ/RYFeZ1E6BYBwHJJXhjuZ3TdsEKH+UQM= sigs.k8s.io/testing_frameworks v0.1.2/go.mod h1:ToQrwSC3s8Xf/lADdZp3Mktcql9CG0UAmdJG9th5i0w= sigs.k8s.io/yaml v1.1.0 h1:4A07+ZFc2wgJwo8YNlQpr1rVlgUDlxXHhPJciaPY5gs= diff --git a/pkg/analyze/text_analyze_test.go b/pkg/analyze/text_analyze_test.go index 8916de8fa..8a88c5b83 100644 --- a/pkg/analyze/text_analyze_test.go +++ b/pkg/analyze/text_analyze_test.go @@ -5,6 +5,7 @@ import ( "strings" "testing" + "github.com/gobwas/glob" troubleshootv1beta1 "github.com/replicatedhq/troubleshoot/pkg/apis/troubleshoot/v1beta1" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -261,6 +262,42 @@ func Test_textAnalyze(t *testing.T) { "text-collector-2/cfile-3.txt": []byte("Yes it all succeeded"), }, }, + { + name: "multiple results case 2 globbing", + analyzer: troubleshootv1beta1.TextAnalyze{ + Outcomes: []*troubleshootv1beta1.Outcome{ + { + Pass: &troubleshootv1beta1.SingleOutcome{ + Message: "pass", + }, + }, + { + Fail: &troubleshootv1beta1.SingleOutcome{ + Message: "fail", + }, + }, + }, + CollectorName: "text-collector-1", + FileName: "cfile*.log", + RegexPattern: "succeeded", + }, + expectResult: []AnalyzeResult{ + { + IsPass: false, + IsWarn: false, + IsFail: true, + Title: "text-collector-1", + Message: "fail", + IconKey: "kubernetes_text_analyze", + IconURI: "https://troubleshoot.sh/images/analyzer-icons/text-analyze.svg", + }, + }, + files: map[string][]byte{ + "text-collector-1/cfile-1.txt": []byte("Yes it all succeeded"), + "text-collector-1/cfile-2.log": []byte("no success here"), + "text-collector-2/cfile-3.txt": []byte("Yes it all succeeded"), + }, + }, } for _, test := range tests { @@ -276,6 +313,18 @@ func Test_textAnalyze(t *testing.T) { matching[k] = v } } + + g, err := glob.Compile(n) + if err != nil { + return nil, err + } + + for k, v := range test.files { + if g.Match(k) { + matching[k] = v + } + } + if len(matching) == 0 { return nil, fmt.Errorf("File not found: %s", n) } diff --git a/pkg/preflight/analyze.go b/pkg/preflight/analyze.go index 342506ab0..1a2cdefbf 100644 --- a/pkg/preflight/analyze.go +++ b/pkg/preflight/analyze.go @@ -4,6 +4,7 @@ import ( "fmt" "strings" + "github.com/gobwas/glob" analyze "github.com/replicatedhq/troubleshoot/pkg/analyze" ) @@ -25,6 +26,18 @@ func (c CollectResult) Analyze() []*analyze.AnalyzeResult { } } + g, err := glob.Compile(prefix) + // don't treat this as a true error as glob is a late addition + if err != nil { + return matching, nil + } + + for k, v := range c.AllCollectedData { + if g.Match(k) { + matching[k] = v + } + } + return matching, nil } From 2bc9938a2a0f83dbe1439704814f0db409755385 Mon Sep 17 00:00:00 2001 From: Andrew Lavery Date: Wed, 15 Apr 2020 18:59:17 -0400 Subject: [PATCH 3/5] use filepath.Glob and filepath.Match --- go.mod | 1 - pkg/analyze/download.go | 16 +++++++++++++--- pkg/analyze/text_analyze_test.go | 9 ++------- pkg/preflight/analyze.go | 10 ++-------- 4 files changed, 17 insertions(+), 19 deletions(-) diff --git a/go.mod b/go.mod index aca4a600a..63f8465a8 100644 --- a/go.mod +++ b/go.mod @@ -17,7 +17,6 @@ require ( github.com/go-openapi/spec v0.19.4 // indirect github.com/go-redis/redis/v7 v7.2.0 github.com/go-sql-driver/mysql v1.5.0 - github.com/gobwas/glob v0.2.3 github.com/golang/snappy v0.0.1 // indirect github.com/google/gofuzz v1.1.0 github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect diff --git a/pkg/analyze/download.go b/pkg/analyze/download.go index 84b09ef8b..941094581 100644 --- a/pkg/analyze/download.go +++ b/pkg/analyze/download.go @@ -191,7 +191,17 @@ func (f fileContentProvider) getFileContents(fileName string) ([]byte, error) { } func (f fileContentProvider) getChildFileContents(dirName string) (map[string][]byte, error) { - // TODO: walk sub-dirs - // return nil, errors.New("not implemented") - return map[string][]byte{}, nil + files, err := filepath.Glob(filepath.Join(f.rootDir, dirName)) + if err != nil { + return nil, errors.Wrapf(err, "invalid glob %q", dirName) + } + fileArr := map[string][]byte{} + for _, filePath := range files { + bytes, err := ioutil.ReadFile(filePath) + if err != nil { + return nil, errors.Wrapf(err, "read %q", filePath) + } + fileArr[filePath] = bytes + } + return fileArr, nil } diff --git a/pkg/analyze/text_analyze_test.go b/pkg/analyze/text_analyze_test.go index 8a88c5b83..d01abfdac 100644 --- a/pkg/analyze/text_analyze_test.go +++ b/pkg/analyze/text_analyze_test.go @@ -2,10 +2,10 @@ package analyzer import ( "fmt" + "path/filepath" "strings" "testing" - "github.com/gobwas/glob" troubleshootv1beta1 "github.com/replicatedhq/troubleshoot/pkg/apis/troubleshoot/v1beta1" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -314,13 +314,8 @@ func Test_textAnalyze(t *testing.T) { } } - g, err := glob.Compile(n) - if err != nil { - return nil, err - } - for k, v := range test.files { - if g.Match(k) { + if ok, _ := filepath.Match(n, k); ok { matching[k] = v } } diff --git a/pkg/preflight/analyze.go b/pkg/preflight/analyze.go index 1a2cdefbf..1a84efb81 100644 --- a/pkg/preflight/analyze.go +++ b/pkg/preflight/analyze.go @@ -2,9 +2,9 @@ package preflight import ( "fmt" + "path/filepath" "strings" - "github.com/gobwas/glob" analyze "github.com/replicatedhq/troubleshoot/pkg/analyze" ) @@ -26,14 +26,8 @@ func (c CollectResult) Analyze() []*analyze.AnalyzeResult { } } - g, err := glob.Compile(prefix) - // don't treat this as a true error as glob is a late addition - if err != nil { - return matching, nil - } - for k, v := range c.AllCollectedData { - if g.Match(k) { + if ok, _ := filepath.Match(prefix, k); ok { matching[k] = v } } From 45ccd7be5b7bac3565f90a06118a50605e3ca095 Mon Sep 17 00:00:00 2001 From: Andrew Lavery Date: Wed, 15 Apr 2020 19:13:37 -0400 Subject: [PATCH 4/5] don't conglomerate results doing so sort of breaks the 'invalid analyzer' message if no files match --- pkg/analyze/analyzer.go | 36 ++++++++++++++++-------------------- 1 file changed, 16 insertions(+), 20 deletions(-) diff --git a/pkg/analyze/analyzer.go b/pkg/analyze/analyzer.go index 002b42ca7..21048a761 100644 --- a/pkg/analyze/analyzer.go +++ b/pkg/analyze/analyzer.go @@ -37,7 +37,6 @@ func isExcluded(excludeVal multitype.BoolOrString) (bool, error) { } func Analyze(analyzer *troubleshootv1beta1.Analyze, getFile getCollectedFileContents, findFiles getChildCollectedFileContents) ([]*AnalyzeResult, error) { - results := []*AnalyzeResult{} if analyzer.ClusterVersion != nil { isExcluded, err := isExcluded(analyzer.ClusterVersion.Exclude) if err != nil { @@ -50,7 +49,7 @@ func Analyze(analyzer *troubleshootv1beta1.Analyze, getFile getCollectedFileCont if err != nil { return nil, err } - results = append(results, result) + return []*AnalyzeResult{result}, nil } if analyzer.StorageClass != nil { isExcluded, err := isExcluded(analyzer.StorageClass.Exclude) @@ -64,7 +63,7 @@ func Analyze(analyzer *troubleshootv1beta1.Analyze, getFile getCollectedFileCont if err != nil { return nil, err } - results = append(results, result) + return []*AnalyzeResult{result}, nil } if analyzer.CustomResourceDefinition != nil { isExcluded, err := isExcluded(analyzer.CustomResourceDefinition.Exclude) @@ -78,7 +77,7 @@ func Analyze(analyzer *troubleshootv1beta1.Analyze, getFile getCollectedFileCont if err != nil { return nil, err } - results = append(results, result) + return []*AnalyzeResult{result}, nil } if analyzer.Ingress != nil { isExcluded, err := isExcluded(analyzer.Ingress.Exclude) @@ -92,7 +91,7 @@ func Analyze(analyzer *troubleshootv1beta1.Analyze, getFile getCollectedFileCont if err != nil { return nil, err } - results = append(results, result) + return []*AnalyzeResult{result}, nil } if analyzer.Secret != nil { isExcluded, err := isExcluded(analyzer.Secret.Exclude) @@ -106,7 +105,7 @@ func Analyze(analyzer *troubleshootv1beta1.Analyze, getFile getCollectedFileCont if err != nil { return nil, err } - results = append(results, result) + return []*AnalyzeResult{result}, nil } if analyzer.ImagePullSecret != nil { isExcluded, err := isExcluded(analyzer.ImagePullSecret.Exclude) @@ -120,7 +119,7 @@ func Analyze(analyzer *troubleshootv1beta1.Analyze, getFile getCollectedFileCont if err != nil { return nil, err } - results = append(results, result) + return []*AnalyzeResult{result}, nil } if analyzer.DeploymentStatus != nil { isExcluded, err := isExcluded(analyzer.DeploymentStatus.Exclude) @@ -134,7 +133,7 @@ func Analyze(analyzer *troubleshootv1beta1.Analyze, getFile getCollectedFileCont if err != nil { return nil, err } - results = append(results, result) + return []*AnalyzeResult{result}, nil } if analyzer.StatefulsetStatus != nil { isExcluded, err := isExcluded(analyzer.StatefulsetStatus.Exclude) @@ -148,7 +147,7 @@ func Analyze(analyzer *troubleshootv1beta1.Analyze, getFile getCollectedFileCont if err != nil { return nil, err } - results = append(results, result) + return []*AnalyzeResult{result}, nil } if analyzer.ContainerRuntime != nil { isExcluded, err := isExcluded(analyzer.ContainerRuntime.Exclude) @@ -162,7 +161,7 @@ func Analyze(analyzer *troubleshootv1beta1.Analyze, getFile getCollectedFileCont if err != nil { return nil, err } - results = append(results, result) + return []*AnalyzeResult{result}, nil } if analyzer.Distribution != nil { isExcluded, err := isExcluded(analyzer.Distribution.Exclude) @@ -176,7 +175,7 @@ func Analyze(analyzer *troubleshootv1beta1.Analyze, getFile getCollectedFileCont if err != nil { return nil, err } - results = append(results, result) + return []*AnalyzeResult{result}, nil } if analyzer.NodeResources != nil { isExcluded, err := isExcluded(analyzer.NodeResources.Exclude) @@ -190,7 +189,7 @@ func Analyze(analyzer *troubleshootv1beta1.Analyze, getFile getCollectedFileCont if err != nil { return nil, err } - results = append(results, result) + return []*AnalyzeResult{result}, nil } if analyzer.TextAnalyze != nil { isExcluded, err := isExcluded(analyzer.TextAnalyze.Exclude) @@ -204,7 +203,7 @@ func Analyze(analyzer *troubleshootv1beta1.Analyze, getFile getCollectedFileCont if err != nil { return nil, err } - results = append(results, multiResult...) + return multiResult, nil } if analyzer.Postgres != nil { isExcluded, err := isExcluded(analyzer.Postgres.Exclude) @@ -218,7 +217,7 @@ func Analyze(analyzer *troubleshootv1beta1.Analyze, getFile getCollectedFileCont if err != nil { return nil, err } - results = append(results, result) + return []*AnalyzeResult{result}, nil } if analyzer.Mysql != nil { isExcluded, err := isExcluded(analyzer.Mysql.Exclude) @@ -232,7 +231,7 @@ func Analyze(analyzer *troubleshootv1beta1.Analyze, getFile getCollectedFileCont if err != nil { return nil, err } - results = append(results, result) + return []*AnalyzeResult{result}, nil } if analyzer.Redis != nil { isExcluded, err := isExcluded(analyzer.Redis.Exclude) @@ -246,11 +245,8 @@ func Analyze(analyzer *troubleshootv1beta1.Analyze, getFile getCollectedFileCont if err != nil { return nil, err } - results = append(results, result) + return []*AnalyzeResult{result}, nil } + return nil, errors.New("invalid analyzer") - if len(results) == 0 { - return nil, errors.New("invalid analyzer") - } - return results, nil } From 079765b558cb61806d9582dbe9e12624efcee11f Mon Sep 17 00:00:00 2001 From: Andrew Lavery Date: Wed, 15 Apr 2020 19:17:01 -0400 Subject: [PATCH 5/5] add 'no matching files' analyze result --- pkg/analyze/text_analyze.go | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/pkg/analyze/text_analyze.go b/pkg/analyze/text_analyze.go index 0aeccc423..6b68767a1 100644 --- a/pkg/analyze/text_analyze.go +++ b/pkg/analyze/text_analyze.go @@ -22,6 +22,18 @@ func analyzeTextAnalyze(analyzer *troubleshootv1beta1.TextAnalyze, getCollectedF checkName = analyzer.CollectorName } + if len(collected) == 0 { + return []*AnalyzeResult{ + { + Title: checkName, + IconKey: "kubernetes_text_analyze", + IconURI: "https://troubleshoot.sh/images/analyzer-icons/text-analyze.svg", + IsFail: false, + Message: "No matching files", + }, + }, nil + } + results := []*AnalyzeResult{} if analyzer.RegexPattern != "" {