parent
d9629dd537
commit
b6feb10388
2
Makefile
2
Makefile
|
|
@ -5,7 +5,7 @@ PACKAGE := github.com/derailed/$(NAME)
|
|||
GIT_REV ?= $(shell git rev-parse --short HEAD)
|
||||
SOURCE_DATE_EPOCH ?= $(shell date +%s)
|
||||
DATE ?= $(shell date -u -d @${SOURCE_DATE_EPOCH} +"%Y-%m-%dT%H:%M:%SZ")
|
||||
VERSION ?= v0.25.21
|
||||
VERSION ?= v0.26.0
|
||||
IMG_NAME := derailed/k9s
|
||||
IMAGE := ${IMG_NAME}:${VERSION}
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,45 @@
|
|||
<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s.png" align="center" width="800" height="auto"/>
|
||||
|
||||
# Release v0.26.0
|
||||
|
||||
## Notes
|
||||
|
||||
Thank you to all that contributed with flushing out issues and enhancements for K9s! I'll try to mark some of these issues as fixed. But if you don't mind grab the latest rev and see if we're happier with some of the fixes! If you've filed an issue please help me verify and close. Your support, kindness and awesome suggestions to make K9s better are as ever very much noted and appreciated! Also big thanks to all that have allocated their own time to help others on both slack and on this repo!!
|
||||
|
||||
If you feel K9s is helping your Kubernetes journey, please consider joining our [sponsorship program](https://github.com/sponsors/derailed) and/or make some noise on social! [@kitesurfer](https://twitter.com/kitesurfer)
|
||||
|
||||
On Slack? Please join us [K9slackers](https://join.slack.com/t/k9sers/shared_invite/enQtOTA5MDEyNzI5MTU0LWQ1ZGI3MzliYzZhZWEyNzYxYzA3NjE0YTk1YmFmNzViZjIyNzhkZGI0MmJjYzhlNjdlMGJhYzE2ZGU1NjkyNTM)
|
||||
|
||||
---
|
||||
|
||||
## ♫ Sounds Behind The Release ♭
|
||||
|
||||
* [Sugar Water - Cibo Matto](https://www.youtube.com/watch?v=EN9auBn6Jys)
|
||||
* [Midnight To Stevens - The Clash](https://www.youtube.com/watch?v=9suQJthS6to)
|
||||
* [Cool & Proper - Natty Nation](https://www.youtube.com/watch?v=9q337zn7bpI)
|
||||
|
||||
---
|
||||
|
||||
## Maintenance Release
|
||||
|
||||
Please join me in giving a big THANK YOU and ATTA BOY!! to [Aleksei Romanenko](https://github.com/slimus) for allocating his personal time in helping out his fellow K9ser's with issues, PRs and slack!!
|
||||
|
||||
Also in the last drop, I'd updated k8s API's to the latest which caused some `disturbance in the farce!` and hosed AWS cluster connections in the same swop ;( Please see [Issue#119](https://github.com/derailed/k9s/issues/1619) for `a` resolve... I did not catch it early enough hence the release bump on this drop. My bad!!
|
||||
|
||||
---
|
||||
|
||||
## Resolved Issues
|
||||
|
||||
* [Issue #1655](https://github.com/derailed/k9s/issues/1655) Text not appearing in context windows
|
||||
* [Issue #1654](https://github.com/derailed/k9s/issues/1654) K9s crash on m1 with index out of range [0] with length 0
|
||||
* [Issue #1652](https://github.com/derailed/k9s/issues/1652) HPA with custom metrics has "Target% column showing "unknown/unknown"
|
||||
* [Issue #1639](https://github.com/derailed/k9s/issues/1639) Helm releases view broken after interacting with 0.25.21
|
||||
|
||||
## Resolved PR
|
||||
|
||||
* [PR #1656](https://github.com/derailed/k9s/pull/156) Fix PF and RS dialog colors
|
||||
* [PR #163](https://github.com/derailed/k9s/pull/1636) Fix #1636: can't switch context with --kubeconfig flag
|
||||
|
||||
---
|
||||
|
||||
<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/imhotep_logo.png" width="32" height="auto"/> © 2021 Imhotep Software LLC. All materials licensed under [Apache v2.0](http://www.apache.org/licenses/LICENSE-2.0)
|
||||
32
go.mod
32
go.mod
|
|
@ -2,7 +2,34 @@ module github.com/derailed/k9s
|
|||
|
||||
go 1.18
|
||||
|
||||
replace github.com/gdamore/tcell/v2 => github.com/derailed/tcell/v2 v2.3.1-rc.2
|
||||
replace (
|
||||
github.com/gdamore/tcell/v2 => github.com/derailed/tcell/v2 v2.3.1-rc.2
|
||||
k8s.io/api => k8s.io/api v0.24.2
|
||||
k8s.io/apiextensions-apiserver => k8s.io/apiextensions-apiserver v0.24.2
|
||||
k8s.io/apimachinery => k8s.io/apimachinery v0.24.2
|
||||
k8s.io/apiserver => k8s.io/apiserver v0.24.2
|
||||
k8s.io/cli-runtime => k8s.io/cli-runtime v0.24.2
|
||||
k8s.io/client-go => k8s.io/client-go v0.24.2
|
||||
k8s.io/cloud-provider => k8s.io/cloud-provider v0.24.2
|
||||
k8s.io/cluster-bootstrap => k8s.io/cluster-bootstrap v0.24.2
|
||||
k8s.io/code-generator => k8s.io/code-generator v0.24.2
|
||||
k8s.io/component-base => k8s.io/component-base v0.24.2
|
||||
k8s.io/component-helpers => k8s.io/component-helpers v0.24.2
|
||||
k8s.io/controller-manager => k8s.io/controller-manager v0.24.2
|
||||
k8s.io/cri-api => k8s.io/cri-api v0.24.2
|
||||
k8s.io/csi-translation-lib => k8s.io/csi-translation-lib v0.24.2
|
||||
k8s.io/kube-aggregator => k8s.io/kube-aggregator v0.24.2
|
||||
k8s.io/kube-controller-manager => k8s.io/kube-controller-manager v0.24.2
|
||||
k8s.io/kube-proxy => k8s.io/kube-proxy v0.24.2
|
||||
k8s.io/kube-scheduler => k8s.io/kube-scheduler v0.24.2
|
||||
k8s.io/kubectl => k8s.io/kubectl v0.24.2
|
||||
k8s.io/kubelet => k8s.io/kubelet v0.24.2
|
||||
k8s.io/legacy-cloud-providers => k8s.io/legacy-cloud-providers v0.24.2
|
||||
k8s.io/metrics => k8s.io/metrics v0.24.2
|
||||
k8s.io/mount-utils => k8s.io/mount-utils v0.24.2
|
||||
k8s.io/pod-security-admission => k8s.io/pod-security-admission v0.24.2
|
||||
k8s.io/sample-apiserver => k8s.io/sample-apiserver v0.24.2
|
||||
)
|
||||
|
||||
require (
|
||||
github.com/adrg/xdg v0.4.0
|
||||
|
|
@ -33,6 +60,7 @@ require (
|
|||
k8s.io/client-go v0.24.2
|
||||
k8s.io/klog/v2 v2.70.0
|
||||
k8s.io/kubectl v0.24.2
|
||||
k8s.io/kubernetes v1.24.2
|
||||
k8s.io/metrics v0.24.2
|
||||
sigs.k8s.io/yaml v1.3.0
|
||||
)
|
||||
|
|
@ -55,7 +83,7 @@ require (
|
|||
github.com/PuerkitoBio/purell v1.1.1 // indirect
|
||||
github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect
|
||||
github.com/asaskevich/govalidator v0.0.0-20200428143746-21a406dcc535 // indirect
|
||||
github.com/aws/aws-sdk-go v1.35.21 // indirect
|
||||
github.com/aws/aws-sdk-go v1.38.49 // indirect
|
||||
github.com/beorn7/perks v1.0.1 // indirect
|
||||
github.com/cespare/xxhash/v2 v2.1.2 // indirect
|
||||
github.com/chai2010/gettext-go v0.0.0-20160711120539-c6fed771bfd5 // indirect
|
||||
|
|
|
|||
176
go.sum
176
go.sum
|
|
@ -1,3 +1,5 @@
|
|||
bazil.org/fuse v0.0.0-20160811212531-371fbbdaa898/go.mod h1:Xbm+BRKSBEpa4q4hTSxohYNQpsxXPbPry4JJWOB3LB8=
|
||||
bitbucket.org/bertimus9/systemstat v0.0.0-20180207000608-0eeff89b0690/go.mod h1:Ulb78X89vxKYgdL24HMTiXYHlyHEvruOj1ZPlqeNEZM=
|
||||
cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
|
||||
cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
|
||||
cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU=
|
||||
|
|
@ -46,6 +48,8 @@ cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohl
|
|||
cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs=
|
||||
cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0=
|
||||
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
|
||||
dmitri.shuralyov.com/gpu/mtl v0.0.0-20201218220906-28db891af037/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
|
||||
github.com/Azure/azure-sdk-for-go v55.0.0+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc=
|
||||
github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 h1:UQHMgLO+TxOElx5B5HZ4hJQsoJ/PvUvKRhJHDQXO8P8=
|
||||
github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E=
|
||||
github.com/Azure/go-autorest v14.2.0+incompatible h1:V5VMDjClD3GiElqLWO7mz2MxNAK/vTfRHdAubSIPRgs=
|
||||
|
|
@ -60,6 +64,8 @@ github.com/Azure/go-autorest/autorest/date v0.3.0 h1:7gUk1U5M/CQbp9WoqinNzJar+8K
|
|||
github.com/Azure/go-autorest/autorest/date v0.3.0/go.mod h1:BI0uouVdmngYNUzGWeSYnokU+TrmwEsOqdt8Y6sso74=
|
||||
github.com/Azure/go-autorest/autorest/mocks v0.4.1 h1:K0laFcLE6VLTOwNgSxaGbUcLPuGXlNkbVvq4cW4nIHk=
|
||||
github.com/Azure/go-autorest/autorest/mocks v0.4.1/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k=
|
||||
github.com/Azure/go-autorest/autorest/to v0.4.0/go.mod h1:fE8iZBn7LQR7zH/9XU2NcPR4o9jEImooCeWJcYV/zLE=
|
||||
github.com/Azure/go-autorest/autorest/validation v0.1.0/go.mod h1:Ha3z/SqBeaalWQvokg3NZAlQTalVMtOIAs1aGK7G6u8=
|
||||
github.com/Azure/go-autorest/logger v0.2.1 h1:IG7i4p/mDa2Ce4TRyAO8IHnVhAVF3RFU+ZtXWSmf4Tg=
|
||||
github.com/Azure/go-autorest/logger v0.2.1/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8=
|
||||
github.com/Azure/go-autorest/tracing v0.6.0 h1:TYi4+3m5t6K48TGI9AUdb+IzbnSxvnvUMfuitfgcfuo=
|
||||
|
|
@ -69,6 +75,8 @@ github.com/BurntSushi/toml v1.0.0 h1:dtDWrepsVPfW9H/4y7dDgFc2MBUSeJhlaDtK13CxFlU
|
|||
github.com/BurntSushi/toml v1.0.0/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ=
|
||||
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
|
||||
github.com/DATA-DOG/go-sqlmock v1.5.0 h1:Shsta01QNfFxHCfpW6YH2STWB0MudeXXEWMr20OEh60=
|
||||
github.com/GoogleCloudPlatform/k8s-cloud-provider v1.16.1-0.20210702024009-ea6160c1d0e3/go.mod h1:8XasY4ymP2V/tn2OOV9ZadmiTE1FIB/h3W+yNlPttKw=
|
||||
github.com/JeffAshton/win_pdh v0.0.0-20161109143554-76bb4ee9f0ab/go.mod h1:3VYc5hodBMJ5+l/7J4xAyMeuM2PNuepvHlGs8yilUCA=
|
||||
github.com/MakeNowJust/heredoc v0.0.0-20170808103936-bb23615498cd h1:sjQovDkwrZp8u+gxLtPgKGjk5hCxuy2hrRejBTA9xFU=
|
||||
github.com/MakeNowJust/heredoc v0.0.0-20170808103936-bb23615498cd/go.mod h1:64YHyfSL2R96J44Nlwm39UHepQbyR5q10x7iYa1ks2E=
|
||||
github.com/Masterminds/goutils v1.1.0/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU=
|
||||
|
|
@ -82,7 +90,10 @@ github.com/Masterminds/sprig/v3 v3.2.2 h1:17jRggJu518dr3QaafizSXOjKYp94wKfABxUmy
|
|||
github.com/Masterminds/sprig/v3 v3.2.2/go.mod h1:UoaO7Yp8KlPnJIYWTFkMaqPUYKTfGFPhxNuwnnxkKlk=
|
||||
github.com/Masterminds/squirrel v1.5.2 h1:UiOEi2ZX4RCSkpiNDQN5kro/XIBpSRk9iTqdIRPzUXE=
|
||||
github.com/Masterminds/squirrel v1.5.2/go.mod h1:NNaOrjSoIDfDA40n7sr2tPNZRfjzjA400rg+riTZj10=
|
||||
github.com/Microsoft/go-winio v0.4.15/go.mod h1:tTuCMEN+UleMWgg9dVx4Hu52b1bJo+59jBh3ajtinzw=
|
||||
github.com/Microsoft/go-winio v0.4.17/go.mod h1:JPGBdM1cNvN/6ISo+n8V5iA4v8pBzdOpzfwIujj1a84=
|
||||
github.com/Microsoft/go-winio v0.5.1 h1:aPJp2QD7OOrhO5tQXqQoGSJc+DjDtWTGLOmNyAm6FgY=
|
||||
github.com/Microsoft/hcsshim v0.8.22/go.mod h1:91uVCVzvX2QD16sMCenoxxXo6L1wJnLMX2PSufFMtF0=
|
||||
github.com/Microsoft/hcsshim v0.9.3 h1:k371PzBuRrz2b+ebGuI2nVgVhgsVX60jMfSw80NECxo=
|
||||
github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ=
|
||||
github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c=
|
||||
|
|
@ -94,6 +105,7 @@ github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdko
|
|||
github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d h1:UrqY+r/OJnIp5u0s1SbQ8dVfLCZJsnvazdBP5hS4iRs=
|
||||
github.com/adrg/xdg v0.4.0 h1:RzRqFcjH4nE5C6oTAxhBtoE2IRyjBSa62SCbyPidvls=
|
||||
github.com/adrg/xdg v0.4.0/go.mod h1:N6ag73EX4wyxeaoeHctc1mas01KZgsj5tYiAIwqJE/E=
|
||||
github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw=
|
||||
github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
|
||||
github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc=
|
||||
github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0=
|
||||
|
|
@ -102,6 +114,7 @@ github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk5
|
|||
github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY=
|
||||
github.com/antlr/antlr4/runtime/Go/antlr v0.0.0-20210826220005-b48c857c3a0e/go.mod h1:F7bn7fEU90QkQ3tnmaTx3LTKLEDqnwWODIYppRQ5hnY=
|
||||
github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o=
|
||||
github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8=
|
||||
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-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio=
|
||||
|
|
@ -111,8 +124,10 @@ github.com/asaskevich/govalidator v0.0.0-20200428143746-21a406dcc535 h1:4daAzAu0
|
|||
github.com/asaskevich/govalidator v0.0.0-20200428143746-21a406dcc535/go.mod h1:oGkLhpf+kjZl6xBf758TQhh5XrAeiJv/7FRz/2spLIg=
|
||||
github.com/atotto/clipboard v0.1.4 h1:EH0zSVneZPSuFR11BlR9YppQTVDbh5+16AmcJi4g1z4=
|
||||
github.com/atotto/clipboard v0.1.4/go.mod h1:ZY9tmq7sm5xIbd9bOK4onWV4S6X0u6GY7Vn0Yu86PYI=
|
||||
github.com/aws/aws-sdk-go v1.35.21 h1:6cMeHzcca+0uweOpUonDYv4DsPp9Qa9PTMYxH+VqDkY=
|
||||
github.com/aws/aws-sdk-go v1.35.21/go.mod h1:tlPOdRjfxPBpNIwqDj61rmsnA85v9jc0Ps9+muhnW+k=
|
||||
github.com/auth0/go-jwt-middleware v1.0.1/go.mod h1:YSeUX3z6+TF2H+7padiEqNJ73Zy9vXW72U//IgN0BIM=
|
||||
github.com/aws/aws-sdk-go v1.35.24/go.mod h1:tlPOdRjfxPBpNIwqDj61rmsnA85v9jc0Ps9+muhnW+k=
|
||||
github.com/aws/aws-sdk-go v1.38.49 h1:E31vxjCe6a5I+mJLmUGaZobiWmg9KdWaud9IfceYeYQ=
|
||||
github.com/aws/aws-sdk-go v1.38.49/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro=
|
||||
github.com/benbjohnson/clock v1.0.3/go.mod h1:bGMdMPoPVvcYyt1gHDf4J2KE153Yf9BuiUKYMaxlTDM=
|
||||
github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA=
|
||||
github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q=
|
||||
|
|
@ -122,7 +137,9 @@ github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6r
|
|||
github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs=
|
||||
github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84=
|
||||
github.com/bketelsen/crypt v0.0.4/go.mod h1:aI6NrJ0pMGgvZKL1iVgXLnfIFJtfV+bKCoqOes/6LfM=
|
||||
github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk=
|
||||
github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ=
|
||||
github.com/boltdb/bolt v1.3.1/go.mod h1:clJnj/oiGkjum5o1McbSZDSLxVThjynRyGBgiAx27Ps=
|
||||
github.com/bshuster-repo/logrus-logstash-hook v1.0.0 h1:e+C0SB5R1pu//O4MQ3f9cFuPGoOVeF2fE4Og9otCc70=
|
||||
github.com/bugsnag/bugsnag-go v0.0.0-20141110184014-b1d153021fcd h1:rFt+Y/IK1aEZkEHchZRSq9OQbsSzIT/OrI8YFFmRIng=
|
||||
github.com/bugsnag/osext v0.0.0-20130617224835-0dd3f918b21b h1:otBG+dV+YK+Soembjv71DPz3uX/V/6MMlSyD9JBQ6kQ=
|
||||
|
|
@ -140,10 +157,14 @@ github.com/cespare/xxhash/v2 v2.1.2 h1:YRXhKfTDauu4ajMg1TPgFO5jnlC2HCbmLXMcTG5cb
|
|||
github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
|
||||
github.com/chai2010/gettext-go v0.0.0-20160711120539-c6fed771bfd5 h1:7aWHqerlJ41y6FOsEUvknqgXnGmJyJSbjhAWq5pO4F8=
|
||||
github.com/chai2010/gettext-go v0.0.0-20160711120539-c6fed771bfd5/go.mod h1:/iP1qXHoty45bqomnu2LM+VVyAEdWN+vtSHGlQgyxbw=
|
||||
github.com/checkpoint-restore/go-criu/v5 v5.3.0/go.mod h1:E/eQpaFtUKGOOSEBZgmKAcn+zUUwWxqcaKZlF54wK8E=
|
||||
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
|
||||
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
|
||||
github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
|
||||
github.com/cilium/ebpf v0.4.0/go.mod h1:4tRaxcgiL706VnOzHOdBlY8IEAIdxINsQBcU4xJJXRs=
|
||||
github.com/cilium/ebpf v0.7.0/go.mod h1:/oI2+1shJiTGAMgl6/RgJr36Eo1jzrRcAWbcXO2usCA=
|
||||
github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
|
||||
github.com/clusterhq/flocker-go v0.0.0-20160920122132-2b8b7259d313/go.mod h1:P1wt9Z3DP8O6W3rvwCt0REIlshg1InHImaLW0t3ObY0=
|
||||
github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc=
|
||||
github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
|
||||
github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk=
|
||||
|
|
@ -155,17 +176,35 @@ github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWH
|
|||
github.com/cockroachdb/datadriven v0.0.0-20200714090401-bf6692d28da5/go.mod h1:h6jFvWxBdQXxjopDMZyH2UVceIRfR84bdzbkoKrsWNo=
|
||||
github.com/cockroachdb/errors v1.2.4/go.mod h1:rQD95gz6FARkaKkQXUksEje/d9a6wBJoCr5oaCLELYA=
|
||||
github.com/cockroachdb/logtags v0.0.0-20190617123548-eb05cc24525f/go.mod h1:i/u985jwjWRlyHXQbwatDASoW0RMlZ/3i9yJHE2xLkI=
|
||||
github.com/container-storage-interface/spec v1.5.0/go.mod h1:8K96oQNkJ7pFcC2R9Z1ynGGBB1I93kcS6PGg3SsOk8s=
|
||||
github.com/containerd/cgroups v1.0.1/go.mod h1:0SJrPIenamHDcZhEcJMNBB85rHcUsw4f25ZfBiPYRkU=
|
||||
github.com/containerd/cgroups v1.0.3 h1:ADZftAkglvCiD44c77s5YmMqaP2pzVCFZvBmAlBdAP4=
|
||||
github.com/containerd/console v1.0.1/go.mod h1:XUsP6YE/mKtz6bxc+I8UiKKTP04qjQL4qcS3XoQ5xkw=
|
||||
github.com/containerd/console v1.0.2/go.mod h1:ytZPjGgY2oeTkAONYafi2kSj0aYggsf8acV1PGKCbzQ=
|
||||
github.com/containerd/console v1.0.3/go.mod h1:7LqA/THxQ86k76b8c/EMSiaJ3h1eZkMkXar0TQ1gf3U=
|
||||
github.com/containerd/containerd v1.4.9/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA=
|
||||
github.com/containerd/containerd v1.4.12/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA=
|
||||
github.com/containerd/containerd v1.6.6 h1:xJNPhbrmz8xAMDNoVjHy9YHtWwEQNS+CDkcIRh7t8Y0=
|
||||
github.com/containerd/containerd v1.6.6/go.mod h1:ZoP1geJldzCVY3Tonoz7b1IXk8rIX0Nltt5QE4OMNk0=
|
||||
github.com/containerd/continuity v0.1.0/go.mod h1:ICJu0PwR54nI0yPEnJ6jcS+J7CZAUXrLh8lPo2knzsM=
|
||||
github.com/containerd/fifo v1.0.0/go.mod h1:ocF/ME1SX5b1AOlWi9r677YJmCPSwwWnQ9O123vzpE4=
|
||||
github.com/containerd/go-runc v1.0.0/go.mod h1:cNU0ZbCgCQVZK4lgG3P+9tn9/PaJNmoDXPpoJhDR+Ok=
|
||||
github.com/containerd/ttrpc v1.0.2/go.mod h1:UAxOpgT9ziI0gJrmKvgcZivgxOp8iFPSk8httJEt98Y=
|
||||
github.com/containerd/typeurl v1.0.2/go.mod h1:9trJWW2sRlGub4wZJRTW83VtbOLS6hwcDZXTn6oPz9s=
|
||||
github.com/coredns/caddy v1.1.0/go.mod h1:A6ntJQlAWuQfFlsd9hvigKbo2WS0VUs2l1e2F+BawD4=
|
||||
github.com/coredns/corefile-migration v1.0.14/go.mod h1:XnhgULOEouimnzgn0t4WPuFDN2/PJQcTxdWKC5eXNGE=
|
||||
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=
|
||||
github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE=
|
||||
github.com/coreos/go-oidc v2.1.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc=
|
||||
github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
|
||||
github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk=
|
||||
github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
|
||||
github.com/coreos/go-systemd/v22 v22.1.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk=
|
||||
github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
|
||||
github.com/coreos/go-systemd/v22 v22.3.3-0.20220203105225-a9a7ef127534/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc=
|
||||
github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
|
||||
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
|
||||
github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
|
||||
github.com/cpuguy83/go-md2man/v2 v2.0.1/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
|
||||
github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
|
||||
|
|
@ -183,19 +222,18 @@ github.com/derailed/popeye v0.10.1 h1:+lyLDGUyKANfMiSHV8X1pHD1HhcxEXCa8ple0ZvyRq
|
|||
github.com/derailed/popeye v0.10.1/go.mod h1:ChD8GPNvgsgjLG5fQBZIxm3VOhFrqd10Xn8IxfuGn4w=
|
||||
github.com/derailed/tcell/v2 v2.3.1-rc.2 h1:9TmZB/IwL3MA1Jf4pC4rfMaPTcVYIN62IwE7X7A9emU=
|
||||
github.com/derailed/tcell/v2 v2.3.1-rc.2/go.mod h1:wegJ+SscH+jPjEQIAV/dI/grLTRm5R4IE2M479NDSL0=
|
||||
github.com/derailed/tview v0.6.6 h1:hNqBewhRTYRgfLp1p5KGw0DFdbGMS68iocBSmGGNg4s=
|
||||
github.com/derailed/tview v0.6.6/go.mod h1:A1LXWlbx/YDMXr3GVTy+IgclAkBssJpw/FiZ7aqUgzU=
|
||||
github.com/derailed/tview v0.7.0 h1:xKdhWvyWWXau8gWgQmFEaflooPwxaX0wFpfsoBxEnos=
|
||||
github.com/derailed/tview v0.7.0/go.mod h1:zH4i4fRLbUKOuqQwdcMefak2YyAjUj9bmKsiKTMf9gg=
|
||||
github.com/derailed/tview v0.7.1 h1:kV8nPWUpftbduH1hlPXqA/09iyyP9ZH6nSfZF9m+d8U=
|
||||
github.com/derailed/tview v0.7.1/go.mod h1:zH4i4fRLbUKOuqQwdcMefak2YyAjUj9bmKsiKTMf9gg=
|
||||
github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ=
|
||||
github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no=
|
||||
github.com/distribution/distribution/v3 v3.0.0-20211118083504-a29a3c99a684 h1:DBZ2sN7CK6dgvHVpQsQj4sRMCbWTmd17l+5SUCjnQSY=
|
||||
github.com/dnaeon/go-vcr v1.0.1/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E=
|
||||
github.com/docker/cli v20.10.11+incompatible h1:tXU1ezXcruZQRrMP8RN2z9N91h+6egZTS1gsPsKantc=
|
||||
github.com/docker/cli v20.10.11+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8=
|
||||
github.com/docker/distribution v2.8.0+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
|
||||
github.com/docker/distribution v2.8.1+incompatible h1:Q50tZOPR6T/hjNsyc9g8/syEs6bk8XXApsHjKukMl68=
|
||||
github.com/docker/distribution v2.8.1+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
|
||||
github.com/docker/docker v20.10.12+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
|
||||
github.com/docker/docker v20.10.14+incompatible h1:+T9/PRYWNDo5SZl5qS1r9Mo/0Q8AwxKKPtu9S1yxM0w=
|
||||
github.com/docker/docker v20.10.14+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
|
||||
github.com/docker/docker-credential-helpers v0.6.4 h1:axCks+yV+2MR3/kZhAmy07yC56WZ2Pwu/fKWtKuZB0o=
|
||||
|
|
@ -224,6 +262,7 @@ github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.m
|
|||
github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ=
|
||||
github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0=
|
||||
github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c=
|
||||
github.com/euank/go-kmsg-parser v2.0.0+incompatible/go.mod h1:MhmAMZ8V4CYH4ybgdRwPr2TU5ThnS43puaKEMpja1uw=
|
||||
github.com/evanphx/json-patch v4.11.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
|
||||
github.com/evanphx/json-patch v4.12.0+incompatible h1:4onqiflcdA9EOZ4RxV643DvftH5pOlLGNtQ5lPWQu84=
|
||||
github.com/evanphx/json-patch v4.12.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk=
|
||||
|
|
@ -236,8 +275,11 @@ github.com/fatih/color v1.13.0 h1:8LOYc1KYPPmyKMuN8QV2DNRWNbLo6LZ0iLs8+mlH53w=
|
|||
github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk=
|
||||
github.com/felixge/httpsnoop v1.0.1 h1:lvB5Jl89CsZtGIWuTcDM1E/vkVs49/Ml7JJe07l8SPQ=
|
||||
github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U=
|
||||
github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI435gkrCt3MPfRiAkVrwSbHsst4LCFVfpJc=
|
||||
github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k=
|
||||
github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k=
|
||||
github.com/form3tech-oss/jwt-go v3.2.3+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k=
|
||||
github.com/frankban/quicktest v1.11.3/go.mod h1:wRf/ReqHper53s+kmmSZizM8NamnL3IM0I9ntUbOk+k=
|
||||
github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo=
|
||||
github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ=
|
||||
github.com/fsnotify/fsnotify v1.5.1 h1:mZcQUHVQUQWoPXXtuf9yuEXKudkV2sx1E06UadKWpgI=
|
||||
|
|
@ -278,6 +320,7 @@ github.com/go-openapi/jsonreference v0.19.5/go.mod h1:RdybgQwPxbL4UEjuAruzK1x3nE
|
|||
github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk=
|
||||
github.com/go-openapi/swag v0.19.14 h1:gm3vOOXfiuw5i9p5N9xJvfjvuofpyvLA9Wr6QfK5Fng=
|
||||
github.com/go-openapi/swag v0.19.14/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ=
|
||||
github.com/go-ozzo/ozzo-validation v3.5.0+incompatible/go.mod h1:gsEKFIVnabGBt6mXmxK0MoFy+cZoTJY6mu5Ll3LVLBU=
|
||||
github.com/go-sql-driver/mysql v1.4.1/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w=
|
||||
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=
|
||||
|
|
@ -291,8 +334,11 @@ github.com/gobuffalo/packr/v2 v2.8.3 h1:xE1yzvnO56cUC0sTpKR3DIbxZgB54AftTFMhB2XE
|
|||
github.com/gobuffalo/packr/v2 v2.8.3/go.mod h1:0SahksCVcx4IMnigTjiFuyldmTrdTctXsOdiU5KwbKc=
|
||||
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/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
|
||||
github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
|
||||
github.com/godbus/dbus/v5 v5.0.6/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA=
|
||||
github.com/godror/godror v0.24.2/go.mod h1:wZv/9vPiUib6tkoDl+AZ/QLf5YZgMravZ7jxH2eQWAE=
|
||||
github.com/gofrs/uuid v4.0.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM=
|
||||
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=
|
||||
github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o=
|
||||
|
|
@ -301,6 +347,7 @@ github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69
|
|||
github.com/golang-jwt/jwt/v4 v4.0.0 h1:RAqyYixv1p7uEnocuy8P1nru5wprCh/MH2BIlW5z5/o=
|
||||
github.com/golang-jwt/jwt/v4 v4.0.0/go.mod h1:/xlHOz8bRuivTWchD4jCa+NbatV+wEUSzwAxVc6locg=
|
||||
github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0=
|
||||
github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k=
|
||||
github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q=
|
||||
github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4=
|
||||
github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc=
|
||||
|
|
@ -343,6 +390,7 @@ github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Z
|
|||
github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ=
|
||||
github.com/google/btree v1.0.1 h1:gK4Kx5IaGY9CD5sPJ36FHiBJ6ZXl0kilRiiCj+jdYp4=
|
||||
github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA=
|
||||
github.com/google/cadvisor v0.44.1/go.mod h1:GQ9KQfz0iNHQk3D6ftzJWK4TXabfIgM10Oy3FkR+Gzg=
|
||||
github.com/google/cel-go v0.10.1/go.mod h1:U7ayypeSkw23szu4GaQTPJGx66c20mx8JklMSxrmI1w=
|
||||
github.com/google/cel-spec v0.6.0/go.mod h1:Nwjgxy5CbjlPrtCWjeDjUyKMl8w41YBYGjsyDdqk0xA=
|
||||
github.com/google/gnostic v0.5.7-v3refs h1:FhTMOKj2VhjpouxvWJAV1TL304uMlb9zcDqkl6cEI54=
|
||||
|
|
@ -394,10 +442,14 @@ github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5m
|
|||
github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0=
|
||||
github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM=
|
||||
github.com/googleapis/gnostic v0.5.1/go.mod h1:6U4PtQXGIEt/Z3h5MAT7FNofLnw9vXk2cUuW7uA/OeU=
|
||||
github.com/gophercloud/gophercloud v0.1.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8=
|
||||
github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
|
||||
github.com/gopherjs/gopherjs v0.0.0-20200217142428-fce0ec30dd00/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY=
|
||||
github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4=
|
||||
github.com/gorilla/mux v1.7.4/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
|
||||
github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI=
|
||||
github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So=
|
||||
github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ=
|
||||
github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
|
||||
github.com/gosuri/uitable v0.0.4 h1:IG2xLKRvErL3uhY6e1BylFzG+aJiwQviDDTfOKeKTpY=
|
||||
github.com/gosuri/uitable v0.0.4/go.mod h1:tKR86bXuXPZazfOTG1FIzvjIdXzd0mo4Vtn16vt0PJo=
|
||||
|
|
@ -428,6 +480,8 @@ github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO
|
|||
github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ=
|
||||
github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I=
|
||||
github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc=
|
||||
github.com/heketi/heketi v10.3.0+incompatible/go.mod h1:bB9ly3RchcQqsQ9CpyaQwvva7RS5ytVoSoholZQON6o=
|
||||
github.com/heketi/tests v0.0.0-20151005000721-f3775cbcefd6/go.mod h1:xGMAM8JLi7UkZt1i4FQeQy0R2T8GLUwQhOP5M1gBhy4=
|
||||
github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU=
|
||||
github.com/huandu/xstrings v1.3.1/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE=
|
||||
github.com/huandu/xstrings v1.3.2 h1:L18LIDzqlW6xN2rEkpdV8+oL/IXWJ1APd+vsdYy4Wdw=
|
||||
|
|
@ -440,6 +494,7 @@ github.com/imdario/mergo v0.3.12 h1:b6R2BslTbIEToALKP7LxUvijTsNI9TAe80pLWN2g/HU=
|
|||
github.com/imdario/mergo v0.3.12/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA=
|
||||
github.com/inconshreveable/mousetrap v1.0.0 h1:Z8tu5sraLXCXIcARxBp/8cbvlwVa7Z1NHg9XEKhtSvM=
|
||||
github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8=
|
||||
github.com/ishidawataru/sctp v0.0.0-20190723014705-7c296d48a2b5/go.mod h1:DM4VvS+hD/kDi1U1QsX2fnZowwBhqD0Dk3bRPKF/Oc8=
|
||||
github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg=
|
||||
github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo=
|
||||
github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8=
|
||||
|
|
@ -462,6 +517,7 @@ github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/X
|
|||
github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU=
|
||||
github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w=
|
||||
github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM=
|
||||
github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes=
|
||||
github.com/karrick/godirwalk v1.16.1 h1:DynhcF+bztK8gooS0+NDJFrdNZjJ3gzVzC545UNA9iw=
|
||||
github.com/karrick/godirwalk v1.16.1/go.mod h1:j4mkqPuvaLI8mp1DroR3P6ad7cyYd4c1qeJ3RV7ULlk=
|
||||
github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q=
|
||||
|
|
@ -471,6 +527,7 @@ github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+o
|
|||
github.com/klauspost/compress v1.13.6 h1:P76CopJELS0TiO2mebmnzgWaajssP/EszplttgQxcgc=
|
||||
github.com/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk=
|
||||
github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
|
||||
github.com/konsorten/go-windows-terminal-sequences v1.0.2/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
|
||||
github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ=
|
||||
github.com/kortschak/utter v1.0.1/go.mod h1:vSmSjbyrlKjjsL71193LmzBOKgwePk9DH6uFaWHIInc=
|
||||
github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg=
|
||||
|
|
@ -493,12 +550,15 @@ github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo=
|
|||
github.com/lib/pq v1.10.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
|
||||
github.com/lib/pq v1.10.4 h1:SO9z7FRPzA03QhHKJrH5BXA6HU1rS4V2nIVrrNC1iYk=
|
||||
github.com/lib/pq v1.10.4/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o=
|
||||
github.com/libopenstorage/openstorage v1.0.0/go.mod h1:Sp1sIObHjat1BeXhfMqLZ14wnOzEhNx2YQedreMcUyc=
|
||||
github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de h1:9TO3cAIGXtEhnIaL+V+BEER86oLrvS+kWobKpbJuye0=
|
||||
github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de/go.mod h1:zAbeS9B/r2mtpb6U+EI2rYA5OAXxsYw6wTamcNW+zcE=
|
||||
github.com/lithammer/dedent v1.1.0/go.mod h1:jrXYCQtgg0nJiN+StA2KgR7w6CiQNv9Fd/Z9BP0jIOc=
|
||||
github.com/lpabon/godbc v0.1.1/go.mod h1:Jo9QV0cf3U6jZABgiJ2skINAXb9j8m51r07g4KI92ZA=
|
||||
github.com/lucasb-eyer/go-colorful v1.0.3/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0=
|
||||
github.com/lucasb-eyer/go-colorful v1.2.0 h1:1nnpGOrhyZZuNyfu1QjKiUICQ74+3FNCN69Aj6K7nkY=
|
||||
github.com/lucasb-eyer/go-colorful v1.2.0/go.mod h1:R4dSotOR9KMtayYi1e77YzuveK+i7ruzyGqttikkLy0=
|
||||
github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
|
||||
github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ=
|
||||
github.com/magiconair/properties v1.8.5 h1:b6kJs+EmPFMYGkow9GiUyCyOvIwYetYJ3fSaWak/Gls=
|
||||
github.com/magiconair/properties v1.8.5/go.mod h1:y3VJvCyxH9uVvJTWEGAELF3aiYNyPKd5NZ3oSwXrF60=
|
||||
|
|
@ -534,6 +594,8 @@ github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5
|
|||
github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369 h1:I0XW9+e1XWDxdcEniV4rQAIOPUGDq67JSCiRCgGCZLI=
|
||||
github.com/matttproud/golang_protobuf_extensions v1.0.2-0.20181231171920-c182affec369/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4=
|
||||
github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
|
||||
github.com/mindprince/gonvml v0.0.0-20190828220739-9ebdce4bb989/go.mod h1:2eu9pRWp8mo84xCg6KswZ+USQHjwgRhNp06sozOdsTY=
|
||||
github.com/mistifyio/go-zfs v2.1.2-0.20190413222219-f784269be439+incompatible/go.mod h1:8AuVvqP/mXw1px98n46wfvcGfQ4ci2FwoAjKYxuo3Z4=
|
||||
github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc=
|
||||
github.com/mitchellh/cli v1.1.2/go.mod h1:6iaV0fGdElS6dPBx0EApTxHrcWvmJphyh2n8YBLPPZ4=
|
||||
github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw=
|
||||
|
|
@ -552,11 +614,14 @@ github.com/mitchellh/mapstructure v1.4.1/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RR
|
|||
github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
|
||||
github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zxSIeXaQ=
|
||||
github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw=
|
||||
github.com/moby/ipvs v1.0.1/go.mod h1:2pngiyseZbIKXNv7hsKj3O9UEz30c53MT9005gt2hxQ=
|
||||
github.com/moby/locker v1.0.1 h1:fOXqR41zeveg4fFODix+1Ch4mj/gT0NE1XJbp/epuBg=
|
||||
github.com/moby/locker v1.0.1/go.mod h1:S7SDdo5zpBK84bzzVlKr2V0hz+7x9hWbYC/kq7oQppc=
|
||||
github.com/moby/spdystream v0.2.0 h1:cjW1zVyyoiM0T7b6UoySUFqzXMoqRckQtXwGPiBhOM8=
|
||||
github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c=
|
||||
github.com/moby/sys/mountinfo v0.5.0 h1:2Ks8/r6lopsxWi9m58nlwjaeSzUX9iiL1vj5qB/9ObI=
|
||||
github.com/moby/sys/mountinfo v0.5.0/go.mod h1:3bMD3Rg+zkqx8MRYPi7Pyb0Ie97QEBmdxbhnCLlSvSU=
|
||||
github.com/moby/sys/mountinfo v0.6.0 h1:gUDhXQx58YNrpHlK4nSL+7y2pxFZkUcXqzFDKWdC0Oo=
|
||||
github.com/moby/sys/mountinfo v0.6.0/go.mod h1:3bMD3Rg+zkqx8MRYPi7Pyb0Ie97QEBmdxbhnCLlSvSU=
|
||||
github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6 h1:dcztxKSvZ4Id8iPpHERQBbIJfabdt4wUm5qy3wOL2Zc=
|
||||
github.com/moby/term v0.0.0-20210619224110-3f7ff695adc6/go.mod h1:E2VnQOmVuvZB6UYnnDB0qG5Nq/1tD9acaOpo6xmt0Kw=
|
||||
github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q=
|
||||
|
|
@ -566,13 +631,16 @@ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lN
|
|||
github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0=
|
||||
github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M=
|
||||
github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk=
|
||||
github.com/mohae/deepcopy v0.0.0-20170603005431-491d3605edfb/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8=
|
||||
github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 h1:n6/2gBQ3RWajuToeY6ZtZTIKv2v7ThUy5KKusIT0yc0=
|
||||
github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00/go.mod h1:Pm3mSP3c5uWn86xMLZ5Sa7JB9GsEZySvHYXCTK4E9q4=
|
||||
github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A=
|
||||
github.com/morikuni/aec v1.0.0/go.mod h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc=
|
||||
github.com/mrunalp/fileutils v0.5.0/go.mod h1:M1WthSahJixYnrXQl/DFQuteStB1weuxD2QJNHXfbSQ=
|
||||
github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
|
||||
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA=
|
||||
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
|
||||
github.com/mvdan/xurls v1.1.0/go.mod h1:tQlNn3BED8bE/15hnSL2HLkDeLWpNPAwtw7wkEq44oU=
|
||||
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
|
||||
github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
|
||||
github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw=
|
||||
|
|
@ -596,8 +664,15 @@ github.com/onsi/gomega v1.15.0 h1:WjP/FQ/sk43MRmnEcT+MlDw2TFvkrXlprrPST/IudjU=
|
|||
github.com/onsi/gomega v1.15.0/go.mod h1:cIuvLEne0aoVhAgh/O6ac0Op8WWw9H6eYCriF+tEHG0=
|
||||
github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U=
|
||||
github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM=
|
||||
github.com/opencontainers/image-spec v1.0.2/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0=
|
||||
github.com/opencontainers/image-spec v1.0.3-0.20211202183452-c5a74bcca799 h1:rc3tiVYb5z54aKaDfakKn0dDjIyPpTtszkjuMzyt7ec=
|
||||
github.com/opencontainers/image-spec v1.0.3-0.20211202183452-c5a74bcca799/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0=
|
||||
github.com/opencontainers/runc v1.1.0/go.mod h1:Tj1hFw6eFWp/o33uxGf5yF2BX5yz2Z6iptFpuvbbKqc=
|
||||
github.com/opencontainers/runc v1.1.1/go.mod h1:Tj1hFw6eFWp/o33uxGf5yF2BX5yz2Z6iptFpuvbbKqc=
|
||||
github.com/opencontainers/runtime-spec v1.0.2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
|
||||
github.com/opencontainers/runtime-spec v1.0.3-0.20200929063507-e6143ca7d51d/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
|
||||
github.com/opencontainers/runtime-spec v1.0.3-0.20210326190908-1c3f411f0417/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
|
||||
github.com/opencontainers/selinux v1.10.0/go.mod h1:2i0OySw99QjzBBQByd1Gr9gSjvuho1lHsJxIJ3gGbJI=
|
||||
github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o=
|
||||
github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc=
|
||||
github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic=
|
||||
|
|
@ -642,6 +717,7 @@ github.com/prometheus/common v0.32.1 h1:hWIdL3N2HoUx3B8j3YN9mWor0qhY/NlEKZEaXxuI
|
|||
github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls=
|
||||
github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
|
||||
github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
|
||||
github.com/prometheus/procfs v0.0.0-20190522114515-bc1a522cf7b1/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
|
||||
github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA=
|
||||
github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ=
|
||||
github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU=
|
||||
|
|
@ -649,11 +725,14 @@ github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1
|
|||
github.com/prometheus/procfs v0.7.3 h1:4jVXhlkAyzOScmCkXBTOLRLTz8EeU+eyjrwB/EPq0VU=
|
||||
github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA=
|
||||
github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU=
|
||||
github.com/quobyte/api v0.1.8/go.mod h1:jL7lIHrmqQ7yh05OJ+eEEdHr0u/kmT1Ff9iHd+4H6VI=
|
||||
github.com/rakyll/hey v0.1.4 h1:hhc8GIqHN4+rPFZvkM9lkCQGi7da0sINM83xxpFkbPA=
|
||||
github.com/rakyll/hey v0.1.4/go.mod h1:nAOTOo+L52KB9SZq/M6J18kxjto4yVtXQDjU2HgjUPI=
|
||||
github.com/remyoudompheng/bigfft v0.0.0-20170806203942-52369c62f446/go.mod h1:uYEyJGbgTkfkS4+E/PavXkNJcbFIpEtjt2B0KDQ5+9M=
|
||||
github.com/rivo/uniseg v0.1.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
|
||||
github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY=
|
||||
github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
|
||||
github.com/robfig/cron/v3 v3.0.1/go.mod h1:eQICP3HwyT7UooqI/z+Ov+PtYAWygg1TEWWzGIFLtro=
|
||||
github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg=
|
||||
github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ=
|
||||
github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4=
|
||||
|
|
@ -665,6 +744,7 @@ github.com/rs/zerolog v1.27.0 h1:1T7qCieN22GVc8S4Q2yuexzBb1EqjbgjSH9RohbMjKs=
|
|||
github.com/rs/zerolog v1.27.0/go.mod h1:7frBqO0oezxmnO7GF86FY++uy8I0Tk/If5ni1G9Qc0U=
|
||||
github.com/rubenv/sql-migrate v1.1.1 h1:haR5Hn8hbW9/SpAICrXoZqXnywS7Q5WijwkQENPeNWY=
|
||||
github.com/rubenv/sql-migrate v1.1.1/go.mod h1:/7TZymwxN8VWumcIxw1jjHEcR1djpdkMHQPT4FWdnbQ=
|
||||
github.com/rubiojr/go-vhd v0.0.0-20200706105327-02e210299021/go.mod h1:DM5xW0nvfNNm2uytzsvhI3OnX8uzaRAg8UX/CnDqbto=
|
||||
github.com/russross/blackfriday v1.5.2 h1:HyvC0ARfnZBqnXwABFeSZHpKvJHJJfPz81GNueLj0oo=
|
||||
github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g=
|
||||
github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
|
||||
|
|
@ -673,18 +753,21 @@ github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb
|
|||
github.com/sahilm/fuzzy v0.1.0 h1:FzWGaw2Opqyu+794ZQ9SYifWv2EIXpwP4q8dY1kDAwI=
|
||||
github.com/sahilm/fuzzy v0.1.0/go.mod h1:VFvziUEIMCrT6A6tw2RFIXPXXmzXbOsSHF0DOI8ZK9Y=
|
||||
github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc=
|
||||
github.com/seccomp/libseccomp-golang v0.9.2-0.20210429002308-3879420cc921/go.mod h1:JA8cRccbGaA1s33RQf7Y1+q9gHmZX1yB/z9WDN1C6fg=
|
||||
github.com/sergi/go-diff v1.1.0 h1:we8PVUC3FE2uYfodKH/nBHMSetSfHDR6scGdBi+erh0=
|
||||
github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM=
|
||||
github.com/shopspring/decimal v1.2.0 h1:abSATXmQEYyShuxI4/vyW3tV1MrKAJzCZ/0zLUXYbsQ=
|
||||
github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o=
|
||||
github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc=
|
||||
github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo=
|
||||
github.com/sirupsen/logrus v1.4.1/go.mod h1:ni0Sbl8bgC9z8RoU9G6nDWqqs/fq4eDPysMBDgk/93Q=
|
||||
github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
|
||||
github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88=
|
||||
github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
|
||||
github.com/sirupsen/logrus v1.8.1 h1:dJKuHgqk1NNQlqoA6BTlM1Wf9DOH3NBjQyu0h9+AZZE=
|
||||
github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
|
||||
github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc=
|
||||
github.com/smartystreets/assertions v1.1.0/go.mod h1:tcbTF8ujkAEcZ8TElKY+i30BzYlVhC/LOxJk7iOWnoo=
|
||||
github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA=
|
||||
github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM=
|
||||
github.com/soheilhy/cmux v0.1.5/go.mod h1:T7TcVDs9LWfQgPlPsdngu6I6QIoyIFZDDC6sNE1GqG0=
|
||||
|
|
@ -696,6 +779,7 @@ github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkU
|
|||
github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
|
||||
github.com/spf13/cast v1.4.1 h1:s0hze+J0196ZfEMTs80N7UlFt0BDuQ7Q+JDnHiMWKdA=
|
||||
github.com/spf13/cast v1.4.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE=
|
||||
github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE=
|
||||
github.com/spf13/cobra v1.1.3/go.mod h1:pGADOWyqRD/YMrPZigI/zbliZ2wVD/23d+is3pSWzOo=
|
||||
github.com/spf13/cobra v1.2.1/go.mod h1:ExllRjgxM/piMAM+3tAZvg8fsklGAf3tPfi+i8t68Nk=
|
||||
github.com/spf13/cobra v1.4.0 h1:y+wJpx64xcgO1V+RcnwW0LEHxTKRi2ZDPSBjWnrg88Q=
|
||||
|
|
@ -706,9 +790,11 @@ github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzu
|
|||
github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4=
|
||||
github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
|
||||
github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
|
||||
github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE=
|
||||
github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg=
|
||||
github.com/spf13/viper v1.8.1/go.mod h1:o0Pch8wJ9BVSWGQMbra6iw0oQ5oktSIBaujf1rJH9Ns=
|
||||
github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8=
|
||||
github.com/storageos/go-api v2.2.0+incompatible/go.mod h1:ZrLn+e0ZuF3Y65PNF6dIwbJPZqfmtCXxFm9ckv0agOY=
|
||||
github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||
github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
|
||||
github.com/stretchr/objx v0.2.0 h1:Hbg2NidpLE8veEBkEZTL3CvlkUIVzuU9jDplZO54c48=
|
||||
|
|
@ -722,8 +808,17 @@ github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/
|
|||
github.com/stretchr/testify v1.7.1 h1:5TQK59W5E3v0r2duFAb7P95B6hEeOyEnHRa8MjYSMTY=
|
||||
github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
|
||||
github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw=
|
||||
github.com/syndtr/gocapability v0.0.0-20200815063812-42c35b437635/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww=
|
||||
github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
|
||||
github.com/tmc/grpc-websocket-proxy v0.0.0-20201229170055-e5319fda7802/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U=
|
||||
github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc=
|
||||
github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
|
||||
github.com/urfave/cli v1.22.2/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
|
||||
github.com/urfave/negroni v1.0.0/go.mod h1:Meg73S6kFm/4PpbYdq35yYWoCZ9mS/YSx+lKnmiohz4=
|
||||
github.com/vishvananda/netlink v1.1.0/go.mod h1:cTgwzPIzzgDAYoQrMm0EdrjRUBkTqKYppBueQtXaqoE=
|
||||
github.com/vishvananda/netns v0.0.0-20191106174202-0a2b9b5464df/go.mod h1:JP3t17pCcGlemwknint6hfoeCVQrEMVwxRLRjXpq+BU=
|
||||
github.com/vishvananda/netns v0.0.0-20200728191858-db3c7e526aae/go.mod h1:DD4vA1DwXk04H54A1oHXtwZmA0grkVMdPxx/VGLCah0=
|
||||
github.com/vmware/govmomi v0.20.3/go.mod h1:URlwyTFZX72RmxtxuaFL2Uj3fD1JTvZdx59bHWk6aFU=
|
||||
github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f h1:J9EGpcZtP0E/raorCMxlFGSTBrsSlaDGf3jU/qvAE2c=
|
||||
github.com/xeipuuv/gojsonpointer v0.0.0-20180127040702-4e3ac2762d5f/go.mod h1:N2zxlSyiKSe5eX1tZViRH5QA0qijqEDrYZiPEAiq3wU=
|
||||
github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHovont7NscjpAxXsDA8S8BMYve8Y5+7cuRE7R0=
|
||||
|
|
@ -733,6 +828,7 @@ github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQ
|
|||
github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
|
||||
github.com/xlab/treeprint v0.0.0-20181112141820-a009c3971eca h1:1CFlNzQhALwjS9mBAUkycX616GzgsuYUOCHA5+HSlXI=
|
||||
github.com/xlab/treeprint v0.0.0-20181112141820-a009c3971eca/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg=
|
||||
github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q=
|
||||
github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||
github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||
github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
|
||||
|
|
@ -789,6 +885,7 @@ go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo=
|
|||
go.uber.org/zap v1.19.0/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI=
|
||||
golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
||||
golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4=
|
||||
golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/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-20190325154230-a5d413f7728c/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
|
||||
golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
|
||||
|
|
@ -803,9 +900,14 @@ golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5y
|
|||
golang.org/x/crypto v0.0.0-20220214200702-86341886e292/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
||||
golang.org/x/crypto v0.0.0-20220315160706-3147a52a75dd h1:XcWmESyNjXJMLahc3mqVQJcgSTDxFxhETVlfk9uGc38=
|
||||
golang.org/x/crypto v0.0.0-20220315160706-3147a52a75dd/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
|
||||
golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||
golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||
golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||
golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
|
||||
golang.org/x/exp v0.0.0-20190312203227-4b39c73a6495/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
|
||||
golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
|
||||
golang.org/x/exp v0.0.0-20190731235908-ec7cb31e5a56/go.mod h1:JhuoJpWY28nO4Vef9tZUw9qufEGTyX1+7lmHxV5q5G4=
|
||||
golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek=
|
||||
golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY=
|
||||
golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
|
||||
|
|
@ -813,6 +915,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0
|
|||
golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4=
|
||||
golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM=
|
||||
golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU=
|
||||
golang.org/x/exp v0.0.0-20210220032938-85be41e4509f/go.mod h1:I6l2HNBLBZEcrOoCpyKLdY2lHoRZ8lI4x60KMCQDft4=
|
||||
golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs=
|
||||
golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js=
|
||||
golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0=
|
||||
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
|
||||
|
|
@ -829,12 +933,15 @@ golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPI
|
|||
golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY=
|
||||
golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE=
|
||||
golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o=
|
||||
golang.org/x/mobile v0.0.0-20201217150744-e6ae53a27f4f/go.mod h1:skQtrUTUwhdJvXM/2KKJzY8pDgNr9I/FOMqDVRPBUS4=
|
||||
golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc=
|
||||
golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY=
|
||||
golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
|
||||
golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
|
||||
golang.org/x/mod v0.1.1-0.20191209134235-331c550502dd/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||
golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||
golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||
golang.org/x/mod v0.3.1-0.20200828183125-ce943fd02449/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||
golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||
golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||
golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||
|
|
@ -853,6 +960,7 @@ golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn
|
|||
golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||
golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||
golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
|
||||
golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
|
||||
golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks=
|
||||
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=
|
||||
|
|
@ -879,6 +987,7 @@ golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwY
|
|||
golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
|
||||
golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
|
||||
golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
||||
golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
||||
golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
||||
golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
|
||||
golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc=
|
||||
|
|
@ -904,6 +1013,7 @@ golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ
|
|||
golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
|
||||
golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
|
||||
golang.org/x/oauth2 v0.0.0-20210402161424-2e8d93401602/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
|
||||
golang.org/x/oauth2 v0.0.0-20210427180440-81ed05c6b58c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
|
||||
golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
|
||||
golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
|
||||
golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A=
|
||||
|
|
@ -929,6 +1039,7 @@ golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5h
|
|||
golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
|
||||
golang.org/x/sys v0.0.0-20190209173611-3b5209105503/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-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
|
|
@ -936,23 +1047,29 @@ golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7w
|
|||
golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20190606203320-7fc4e5ec1444/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20191002063906-3421d5a6bb1c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20191022100944-742c48ecaeb7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20191115151921-52ab43148777/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200120151820-655fe14d7479/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200217220822-9197077df867/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
|
|
@ -966,6 +1083,7 @@ golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7w
|
|||
golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200916030750-2334cc1a136f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200923182605-d9f96fdee20d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
|
|
@ -978,9 +1096,11 @@ golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7w
|
|||
golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210324051608-47abb6519492/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210503080704-8803ae5d1324/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
|
||||
golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
|
|
@ -992,10 +1112,12 @@ golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBc
|
|||
golang.org/x/sys v0.0.0-20210809222454-d867a43fc93e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20210831042530-f4d43177bf5e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20210906170528-6f6e22806c34/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20211025201205-69cdffdb9359/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20211116061358-0a5406a5449c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
|
||||
|
|
@ -1024,9 +1146,11 @@ golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxb
|
|||
golang.org/x/time v0.0.0-20220210224613-90d013bbcef8 h1:vVKdlvoWBphwdxWKrFZEuM0kGgGLxUOYcY4U/2Vjg44=
|
||||
golang.org/x/time v0.0.0-20220210224613-90d013bbcef8/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
|
||||
golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
|
||||
golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/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-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=
|
||||
golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs=
|
||||
|
|
@ -1051,6 +1175,7 @@ golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtn
|
|||
golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
|
||||
golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
|
||||
golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
|
||||
golang.org/x/tools v0.0.0-20200117012304-6edc0a871e69/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
|
||||
golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
|
||||
golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
|
||||
golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
|
||||
|
|
@ -1091,6 +1216,12 @@ golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8T
|
|||
golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 h1:go1bK/D/BFZV2I8cIQd1NKEZ+0owSTG1fDTci4IqFcE=
|
||||
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
|
||||
gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo=
|
||||
gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485/go.mod h1:2ltnJ7xHfj0zHS40VVPYEAAMTa3ZGguvHGBSJeRWqE0=
|
||||
gonum.org/v1/gonum v0.6.2/go.mod h1:9mxDZsDKxgMAuccQkewq682L+0eCu4dCN2yonUJTCLU=
|
||||
gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw=
|
||||
gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e/go.mod h1:kS+toOQn6AQKjmKJ7gzohV1XkqsFehRA2FbsbkopSuQ=
|
||||
gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc=
|
||||
google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
|
||||
google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M=
|
||||
google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
|
||||
|
|
@ -1113,6 +1244,7 @@ google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjR
|
|||
google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU=
|
||||
google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94=
|
||||
google.golang.org/api v0.44.0/go.mod h1:EBOGZqzyhtvMDoxwS97ctnh0zUmYY6CxqXsc1AvkYD8=
|
||||
google.golang.org/api v0.46.0/go.mod h1:ceL4oozhkAiTID8XMmJBsIxID/9wMXJVVFXPg4ylg3I=
|
||||
google.golang.org/api v0.47.0/go.mod h1:Wbvgpq1HddcWVtzsVLyfLp8lDg6AA241LmgIL59tHXo=
|
||||
google.golang.org/api v0.48.0/go.mod h1:71Pr1vy+TAZRPkPs/xlCf5SsU8WjuAWv1Pfjbtukyy4=
|
||||
google.golang.org/api v0.50.0/go.mod h1:4bNT5pAuq5ji4SRZm+5QIkjny9JAyVD/3gaSihNefaw=
|
||||
|
|
@ -1143,6 +1275,7 @@ google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvx
|
|||
google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
|
||||
google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
|
||||
google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
|
||||
google.golang.org/genproto v0.0.0-20200117163144-32f20d992d24/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
|
||||
google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc=
|
||||
google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA=
|
||||
google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
|
||||
|
|
@ -1173,6 +1306,7 @@ google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6D
|
|||
google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||
google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no=
|
||||
google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A=
|
||||
google.golang.org/genproto v0.0.0-20210429181445-86c259c2b4ab/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A=
|
||||
google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A=
|
||||
google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0=
|
||||
google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0=
|
||||
|
|
@ -1195,6 +1329,7 @@ google.golang.org/genproto v0.0.0-20220107163113-42d7afdf6368 h1:Et6SkiuvnBn+Sgr
|
|||
google.golang.org/genproto v0.0.0-20220107163113-42d7afdf6368/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc=
|
||||
google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
|
||||
google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
|
||||
google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
|
||||
google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
|
||||
google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
|
||||
google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
|
||||
|
|
@ -1244,6 +1379,7 @@ gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntN
|
|||
gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
|
||||
gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI=
|
||||
gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys=
|
||||
gopkg.in/gcfg.v1 v1.2.0/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o=
|
||||
gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
|
||||
gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
|
||||
gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k=
|
||||
|
|
@ -1253,6 +1389,7 @@ gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo=
|
|||
gopkg.in/square/go-jose.v2 v2.2.2/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI=
|
||||
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7 h1:uRGJdciOHaEIrze2W8Q3AKkepLTh2hOroT7a+7czfdQ=
|
||||
gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw=
|
||||
gopkg.in/warnings.v0 v0.1.1/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI=
|
||||
gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74=
|
||||
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=
|
||||
|
|
@ -1291,31 +1428,56 @@ k8s.io/cli-runtime v0.24.2 h1:KxY6tSgPGsahA6c1/dmR3uF5jOxXPx2QQY6C5ZrLmtE=
|
|||
k8s.io/cli-runtime v0.24.2/go.mod h1:1LIhKL2RblkhfG4v5lZEt7FtgFG5mVb8wqv5lE9m5qY=
|
||||
k8s.io/client-go v0.24.2 h1:CoXFSf8if+bLEbinDqN9ePIDGzcLtqhfd6jpfnwGOFA=
|
||||
k8s.io/client-go v0.24.2/go.mod h1:zg4Xaoo+umDsfCWr4fCnmLEtQXyCNXCvJuSsglNcV30=
|
||||
k8s.io/cloud-provider v0.24.2/go.mod h1:a7jyWjizk+IKbcIf8+mX2cj3NvpRv9ZyGdXDyb8UEkI=
|
||||
k8s.io/cluster-bootstrap v0.24.2/go.mod h1:eIHV338K03vBm3u/ROZiNXxWJ4AJRoTR9PEUhcTvYkg=
|
||||
k8s.io/code-generator v0.24.2/go.mod h1:dpVhs00hTuTdTY6jvVxvTFCk6gSMrtfRydbhZwHI15w=
|
||||
k8s.io/component-base v0.24.2 h1:kwpQdoSfbcH+8MPN4tALtajLDfSfYxBDYlXobNWI6OU=
|
||||
k8s.io/component-base v0.24.2/go.mod h1:ucHwW76dajvQ9B7+zecZAP3BVqvrHoOxm8olHEg0nmM=
|
||||
k8s.io/component-helpers v0.24.2/go.mod h1:TRQPBQKfmqkmV6c0HAmUs8cXVNYYYLsXy4zu8eODi9g=
|
||||
k8s.io/controller-manager v0.24.2/go.mod h1:hpwCof4KxP4vrw/M5QiVxU6Zmmggmr1keGXtjGHF+vc=
|
||||
k8s.io/cri-api v0.24.2/go.mod h1:t3tImFtGeStN+ES69bQUX9sFg67ek38BM9YIJhMmuig=
|
||||
k8s.io/csi-translation-lib v0.24.2/go.mod h1:pdHc2CYLViQYYsOqOp79hjKYi8J4NZ7vpiVzn1SqBrg=
|
||||
k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0=
|
||||
k8s.io/gengo v0.0.0-20210813121822-485abfe95c7c/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E=
|
||||
k8s.io/gengo v0.0.0-20211129171323-c02415ce4185/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E=
|
||||
k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE=
|
||||
k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
|
||||
k8s.io/klog/v2 v2.4.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y=
|
||||
k8s.io/klog/v2 v2.60.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0=
|
||||
k8s.io/klog/v2 v2.70.0 h1:GMmmjoFOrNepPN0ZeGCzvD2Gh5IKRwdFx8W5PBxVTQU=
|
||||
k8s.io/klog/v2 v2.70.0/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0=
|
||||
k8s.io/kube-aggregator v0.24.2/go.mod h1:Ju2jNDixn+vqeeKEBfjfpc204bO1pbdXX0N9knCxeMQ=
|
||||
k8s.io/kube-controller-manager v0.24.2/go.mod h1:KDE0yqiEvxYiO0WRpPA4rVx8AcK1vsWydUF37AJ9lTI=
|
||||
k8s.io/kube-openapi v0.0.0-20210421082810-95288971da7e/go.mod h1:vHXdDvt9+2spS2Rx9ql3I8tycm3H9FDfdUoIuKCefvw=
|
||||
k8s.io/kube-openapi v0.0.0-20220328201542-3ee0da9b0b42 h1:Gii5eqf+GmIEwGNKQYQClCayuJCe2/4fZUvF7VG99sU=
|
||||
k8s.io/kube-openapi v0.0.0-20220328201542-3ee0da9b0b42/go.mod h1:Z/45zLw8lUo4wdiUkI+v/ImEGAvu3WatcZl3lPMR4Rk=
|
||||
k8s.io/kube-proxy v0.24.2/go.mod h1:bozS2ufl/Ns6s40Ue34eV7rqyLVygi5usSmCgW7rFU8=
|
||||
k8s.io/kube-scheduler v0.24.2/go.mod h1:DRa+aeXKSYUUOHHIc/9EcaO9+FW5FydaOfPSvaSW5Ko=
|
||||
k8s.io/kubectl v0.24.2 h1:+RfQVhth8akUmIc2Ge8krMl/pt66V7210ka3RE/p0J4=
|
||||
k8s.io/kubectl v0.24.2/go.mod h1:+HIFJc0bA6Tzu5O/YcuUt45APAxnNL8LeMuXwoiGsPg=
|
||||
k8s.io/kubelet v0.24.2/go.mod h1:Xm9DkWQjwOs+uGOUIIGIPMvvmenvj0lDVOErvIKOOt0=
|
||||
k8s.io/kubernetes v1.24.2 h1:AyjtHzSysliKR04Km91njmk2yaKmOa3ZISQZCIGUnVI=
|
||||
k8s.io/kubernetes v1.24.2/go.mod h1:8e8maMiZzBR2/8Po5Uulx+MXZUYJuN3vtKwD4Ct1Xi0=
|
||||
k8s.io/legacy-cloud-providers v0.24.2/go.mod h1:sgkasgIP2ZOew8fzoOq0mQLVXJ4AmB57IUbFUjzPWEo=
|
||||
k8s.io/metrics v0.24.2 h1:3lgEq973VGPWAEaT9VI/p0XmI0R5kJgb/r9Ufr5fz8k=
|
||||
k8s.io/metrics v0.24.2/go.mod h1:5NWURxZ6Lz5gj8TFU83+vdWIVASx7W8lwPpHYCqopMo=
|
||||
k8s.io/mount-utils v0.24.2/go.mod h1:XrSqB3a2e8sq+aU+rlbcBtQ3EgcuDk5RP9ZsGxjoDrI=
|
||||
k8s.io/pod-security-admission v0.24.2/go.mod h1:znnuDHWWWvh/tpbYYPwTsd4y//qHi3cOX+wGxET/mMI=
|
||||
k8s.io/sample-apiserver v0.24.2/go.mod h1:mf8qgDdu450wqpCJOkSAmoTgU4PIMAcfa5uTBwmJekE=
|
||||
k8s.io/system-validators v1.7.0/go.mod h1:gP1Ky+R9wtrSiFbrpEPwWMeYz9yqyy1S/KOh0Vci7WI=
|
||||
k8s.io/utils v0.0.0-20210802155522-efc7438f0176/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
|
||||
k8s.io/utils v0.0.0-20211116205334-6203023598ed/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
|
||||
k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9 h1:HNSDgDCrr/6Ly3WEGKZftiE7IY19Vz2GdbOCyI4qqhc=
|
||||
k8s.io/utils v0.0.0-20220210201930-3a6ce19ff2f9/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA=
|
||||
modernc.org/cc v1.0.0/go.mod h1:1Sk4//wdnYJiUIxnW8ddKpaOJCF37yAdqYnkxUpaYxw=
|
||||
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=
|
||||
oras.land/oras-go v1.1.0 h1:tfWM1RT7PzUwWphqHU6ptPU3ZhwVnSw/9nEGf519rYg=
|
||||
oras.land/oras-go v1.1.0/go.mod h1:1A7vR/0KknT2UkJVWh+xMi95I/AhK8ZrxrnUSmXN0bQ=
|
||||
rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8=
|
||||
rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4=
|
||||
rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0=
|
||||
rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA=
|
||||
sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.30/go.mod h1:fEO7lRTdivWO2qYVCVG7dEADOMo/MLDCVr8So2g88Uw=
|
||||
|
|
|
|||
|
|
@ -71,7 +71,7 @@ func makeContainerRes(co v1.Container, po *v1.Pod, cmx *mv1beta1.ContainerMetric
|
|||
Status: getContainerStatus(co.Name, po.Status),
|
||||
MX: cmx,
|
||||
IsInit: isInit,
|
||||
Age: po.ObjectMeta.CreationTimestamp,
|
||||
Age: po.GetCreationTimestamp(),
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -91,7 +91,7 @@ func getContainerStatus(co string, status v1.PodStatus) *v1.ContainerStatus {
|
|||
}
|
||||
|
||||
func (c *Container) fetchPod(fqn string) (*v1.Pod, error) {
|
||||
o, err := c.Factory.Get("v1/pods", fqn, true, labels.Everything())
|
||||
o, err := c.GetFactory().Get("v1/pods", fqn, true, labels.Everything())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ type Context struct {
|
|||
}
|
||||
|
||||
func (c *Context) config() *client.Config {
|
||||
return c.Factory.Client().Config()
|
||||
return c.GetFactory().Client().Config()
|
||||
}
|
||||
|
||||
// Get a Context.
|
||||
|
|
@ -57,5 +57,5 @@ func (c *Context) MustCurrentContextName() string {
|
|||
|
||||
// Switch to another context.
|
||||
func (c *Context) Switch(ctx string) error {
|
||||
return c.Factory.Client().SwitchContext(ctx)
|
||||
return c.GetFactory().Client().SwitchContext(ctx)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -27,5 +27,5 @@ func (c *CustomResourceDefinition) List(ctx context.Context, _ string) ([]runtim
|
|||
}
|
||||
|
||||
const gvr = "apiextensions.k8s.io/v1/customresourcedefinitions"
|
||||
return c.Factory.List(gvr, "-", false, labelSel)
|
||||
return c.GetFactory().List(gvr, "-", false, labelSel)
|
||||
}
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ func (c *CronJob) Run(path string) error {
|
|||
return fmt.Errorf("user is not authorized to run jobs")
|
||||
}
|
||||
|
||||
o, err := c.Factory.Get(cronJobGVR, path, true, labels.Everything())
|
||||
o, err := c.GetFactory().Get(cronJobGVR, path, true, labels.Everything())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
@ -87,7 +87,7 @@ func (c *CronJob) Run(path string) error {
|
|||
// ScanSA scans for serviceaccount refs.
|
||||
func (c *CronJob) ScanSA(ctx context.Context, fqn string, wait bool) (Refs, error) {
|
||||
ns, n := client.Namespaced(fqn)
|
||||
oo, err := c.Factory.List(c.GVR(), ns, wait, labels.Everything())
|
||||
oo, err := c.GetFactory().List(c.GVR(), ns, wait, labels.Everything())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
@ -145,7 +145,7 @@ func (c *CronJob) ToggleSuspend(ctx context.Context, path string) error {
|
|||
// Scan scans for cluster resource refs.
|
||||
func (c *CronJob) Scan(ctx context.Context, gvr, fqn string, wait bool) (Refs, error) {
|
||||
ns, n := client.Namespaced(fqn)
|
||||
oo, err := c.Factory.List(c.GVR(), ns, wait, labels.Everything())
|
||||
oo, err := c.GetFactory().List(c.GVR(), ns, wait, labels.Everything())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
|
|||
|
|
@ -66,7 +66,7 @@ func (d *Deployment) Scale(ctx context.Context, path string, replicas int32) err
|
|||
|
||||
// Restart a Deployment rollout.
|
||||
func (d *Deployment) Restart(ctx context.Context, path string) error {
|
||||
o, err := d.Factory.Get("apps/v1/deployments", path, true, labels.Everything())
|
||||
o, err := d.GetFactory().Get("apps/v1/deployments", path, true, labels.Everything())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
@ -155,7 +155,7 @@ func (*Deployment) Load(f Factory, fqn string) (*appsv1.Deployment, error) {
|
|||
// ScanSA scans for serviceaccount refs.
|
||||
func (d *Deployment) ScanSA(ctx context.Context, fqn string, wait bool) (Refs, error) {
|
||||
ns, n := client.Namespaced(fqn)
|
||||
oo, err := d.Factory.List(d.GVR(), ns, wait, labels.Everything())
|
||||
oo, err := d.GetFactory().List(d.GVR(), ns, wait, labels.Everything())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
@ -181,7 +181,7 @@ func (d *Deployment) ScanSA(ctx context.Context, fqn string, wait bool) (Refs, e
|
|||
// Scan scans for resource references.
|
||||
func (d *Deployment) Scan(ctx context.Context, gvr, fqn string, wait bool) (Refs, error) {
|
||||
ns, n := client.Namespaced(fqn)
|
||||
oo, err := d.Factory.List(d.GVR(), ns, wait, labels.Everything())
|
||||
oo, err := d.GetFactory().List(d.GVR(), ns, wait, labels.Everything())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@ func (d *DaemonSet) IsHappy(ds appsv1.DaemonSet) bool {
|
|||
|
||||
// Restart a DaemonSet rollout.
|
||||
func (d *DaemonSet) Restart(ctx context.Context, path string) error {
|
||||
o, err := d.Factory.Get("apps/v1/daemonsets", path, true, labels.Everything())
|
||||
o, err := d.GetFactory().Get("apps/v1/daemonsets", path, true, labels.Everything())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
@ -158,7 +158,7 @@ func (d *DaemonSet) Pod(fqn string) (string, error) {
|
|||
|
||||
// GetInstance returns a daemonset instance.
|
||||
func (d *DaemonSet) GetInstance(fqn string) (*appsv1.DaemonSet, error) {
|
||||
o, err := d.Factory.Get(d.gvr.String(), fqn, true, labels.Everything())
|
||||
o, err := d.GetFactory().Get(d.gvr.String(), fqn, true, labels.Everything())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
@ -175,7 +175,7 @@ func (d *DaemonSet) GetInstance(fqn string) (*appsv1.DaemonSet, error) {
|
|||
// ScanSA scans for serviceaccount refs.
|
||||
func (d *DaemonSet) ScanSA(ctx context.Context, fqn string, wait bool) (Refs, error) {
|
||||
ns, n := client.Namespaced(fqn)
|
||||
oo, err := d.Factory.List(d.GVR(), ns, wait, labels.Everything())
|
||||
oo, err := d.GetFactory().List(d.GVR(), ns, wait, labels.Everything())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
@ -201,7 +201,7 @@ func (d *DaemonSet) ScanSA(ctx context.Context, fqn string, wait bool) (Refs, er
|
|||
// Scan scans for cluster refs.
|
||||
func (d *DaemonSet) Scan(ctx context.Context, gvr, fqn string, wait bool) (Refs, error) {
|
||||
ns, n := client.Namespaced(fqn)
|
||||
oo, err := d.Factory.List(d.GVR(), ns, wait, labels.Everything())
|
||||
oo, err := d.GetFactory().List(d.GVR(), ns, wait, labels.Everything())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
|
|||
|
|
@ -23,8 +23,6 @@ var (
|
|||
// Helm represents a helm chart.
|
||||
type Helm struct {
|
||||
NonResource
|
||||
cfg *action.Configuration
|
||||
ns string
|
||||
}
|
||||
|
||||
// List returns a collection of resources.
|
||||
|
|
@ -130,14 +128,10 @@ func (h *Helm) Delete(path string, _ *metav1.DeletionPropagation, force bool) er
|
|||
|
||||
// EnsureHelmConfig return a new configuration.
|
||||
func (h *Helm) EnsureHelmConfig(ns string) (*action.Configuration, error) {
|
||||
if h.cfg != nil && h.ns == ns {
|
||||
return h.cfg, nil
|
||||
}
|
||||
h.cfg = new(action.Configuration)
|
||||
if err := h.cfg.Init(h.Client().Config().Flags(), ns, os.Getenv("HELM_DRIVER"), helmLogger); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return h.cfg, nil
|
||||
cfg := new(action.Configuration)
|
||||
err := cfg.Init(h.Client().Config().Flags(), ns, os.Getenv("HELM_DRIVER"), helmLogger)
|
||||
|
||||
return cfg, err
|
||||
}
|
||||
|
||||
func helmLogger(s string, args ...interface{}) {
|
||||
|
|
|
|||
|
|
@ -1,48 +0,0 @@
|
|||
package dao
|
||||
|
||||
import (
|
||||
"context"
|
||||
|
||||
"github.com/derailed/k9s/internal"
|
||||
"k8s.io/apimachinery/pkg/labels"
|
||||
"k8s.io/apimachinery/pkg/runtime"
|
||||
)
|
||||
|
||||
var (
|
||||
_ Accessor = (*HorizontalPodAutoscaler)(nil)
|
||||
_ Nuker = (*HorizontalPodAutoscaler)(nil)
|
||||
)
|
||||
|
||||
// HorizontalPodAutoscaler represents a HPA resource model.
|
||||
type HorizontalPodAutoscaler struct {
|
||||
Resource
|
||||
}
|
||||
|
||||
// List returns a collection of nodes.
|
||||
func (h *HorizontalPodAutoscaler) List(ctx context.Context, ns string) ([]runtime.Object, error) {
|
||||
strLabel, ok := ctx.Value(internal.KeyLabels).(string)
|
||||
lsel := labels.Everything()
|
||||
if sel, err := labels.ConvertSelectorToLabelsMap(strLabel); ok && err == nil {
|
||||
lsel = sel.AsSelector()
|
||||
}
|
||||
|
||||
rev, err := h.Factory.Client().ServerVersion()
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
gvr := "autoscaling/v1/horizontalpodautoscalers"
|
||||
if rev.Minor >= "23" {
|
||||
gvr = "autoscaling/v2/horizontalpodautoscalers"
|
||||
}
|
||||
|
||||
return h.list(gvr, ns, lsel)
|
||||
}
|
||||
|
||||
func (h *HorizontalPodAutoscaler) list(gvr, ns string, sel labels.Selector) ([]runtime.Object, error) {
|
||||
oo, err := h.Factory.List(gvr, ns, true, sel)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return oo, nil
|
||||
}
|
||||
|
|
@ -58,7 +58,7 @@ func (j *Job) List(ctx context.Context, ns string) ([]runtime.Object, error) {
|
|||
|
||||
// TailLogs tail logs for all pods represented by this Job.
|
||||
func (j *Job) TailLogs(ctx context.Context, opts *LogOptions) ([]LogChan, error) {
|
||||
o, err := j.Factory.Get(j.gvr.String(), opts.Path, true, labels.Everything())
|
||||
o, err := j.GetFactory().Get(j.gvr.String(), opts.Path, true, labels.Everything())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
@ -79,7 +79,7 @@ func (j *Job) TailLogs(ctx context.Context, opts *LogOptions) ([]LogChan, error)
|
|||
// ScanSA scans for serviceaccount refs.
|
||||
func (j *Job) ScanSA(ctx context.Context, fqn string, wait bool) (Refs, error) {
|
||||
ns, n := client.Namespaced(fqn)
|
||||
oo, err := j.Factory.List(j.GVR(), ns, wait, labels.Everything())
|
||||
oo, err := j.GetFactory().List(j.GVR(), ns, wait, labels.Everything())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
@ -105,7 +105,7 @@ func (j *Job) ScanSA(ctx context.Context, fqn string, wait bool) (Refs, error) {
|
|||
// Scan scans for resource references.
|
||||
func (j *Job) Scan(ctx context.Context, gvr, fqn string, wait bool) (Refs, error) {
|
||||
ns, n := client.Namespaced(fqn)
|
||||
oo, err := j.Factory.List(j.GVR(), ns, wait, labels.Everything())
|
||||
oo, err := j.GetFactory().List(j.GVR(), ns, wait, labels.Everything())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
|
|||
|
|
@ -52,7 +52,7 @@ func (n *Node) ToggleCordon(path string, cordon bool) error {
|
|||
}
|
||||
return fmt.Errorf("node is already uncordoned")
|
||||
}
|
||||
dial, err := n.Factory.Client().Dial()
|
||||
dial, err := n.GetFactory().Client().Dial()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
@ -84,7 +84,7 @@ func (o DrainOptions) toDrainHelper(k kubernetes.Interface, w io.Writer) drain.H
|
|||
func (n *Node) Drain(path string, opts DrainOptions, w io.Writer) error {
|
||||
_ = n.ToggleCordon(path, true)
|
||||
|
||||
dial, err := n.Factory.Client().Dial()
|
||||
dial, err := n.GetFactory().Client().Dial()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
@ -170,7 +170,7 @@ func (n *Node) List(ctx context.Context, ns string) ([]runtime.Object, error) {
|
|||
// CountPods counts the pods scheduled on a given node.
|
||||
func (n *Node) CountPods(nodeName string) (int, error) {
|
||||
var count int
|
||||
oo, err := n.Factory.List("v1/pods", client.AllNamespaces, false, labels.Everything())
|
||||
oo, err := n.GetFactory().List("v1/pods", client.AllNamespaces, false, labels.Everything())
|
||||
if err != nil {
|
||||
return 0, err
|
||||
}
|
||||
|
|
@ -194,7 +194,7 @@ func (n *Node) CountPods(nodeName string) (int, error) {
|
|||
|
||||
// GetPods returns all pods running on given node.
|
||||
func (n *Node) GetPods(nodeName string) ([]*v1.Pod, error) {
|
||||
oo, err := n.Factory.List("v1/pods", client.AllNamespaces, false, labels.Everything())
|
||||
oo, err := n.GetFactory().List("v1/pods", client.AllNamespaces, false, labels.Everything())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
|
|||
|
|
@ -20,14 +20,24 @@ type NonResource struct {
|
|||
// Init initializes the resource.
|
||||
func (n *NonResource) Init(f Factory, gvr client.GVR) {
|
||||
n.mx.Lock()
|
||||
defer n.mx.Unlock()
|
||||
n.Factory, n.gvr = f, gvr
|
||||
{
|
||||
n.Factory, n.gvr = f, gvr
|
||||
}
|
||||
n.mx.Unlock()
|
||||
}
|
||||
|
||||
func (n *NonResource) GetFactory() Factory {
|
||||
n.mx.RLock()
|
||||
defer n.mx.RUnlock()
|
||||
|
||||
return n.Factory
|
||||
}
|
||||
|
||||
// GVR returns a gvr.
|
||||
func (n *NonResource) GVR() string {
|
||||
n.mx.RLock()
|
||||
defer n.mx.RUnlock()
|
||||
|
||||
return n.gvr.String()
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -163,7 +163,7 @@ func (p *Pod) Pod(fqn string) (string, error) {
|
|||
|
||||
// GetInstance returns a pod instance.
|
||||
func (p *Pod) GetInstance(fqn string) (*v1.Pod, error) {
|
||||
o, err := p.Factory.Get(p.gvr.String(), fqn, true, labels.Everything())
|
||||
o, err := p.GetFactory().Get(p.gvr.String(), fqn, true, labels.Everything())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
@ -226,7 +226,7 @@ func (p *Pod) TailLogs(ctx context.Context, opts *LogOptions) ([]LogChan, error)
|
|||
// ScanSA scans for ServiceAccount refs.
|
||||
func (p *Pod) ScanSA(ctx context.Context, fqn string, wait bool) (Refs, error) {
|
||||
ns, n := client.Namespaced(fqn)
|
||||
oo, err := p.Factory.List(p.GVR(), ns, wait, labels.Everything())
|
||||
oo, err := p.GetFactory().List(p.GVR(), ns, wait, labels.Everything())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
@ -256,7 +256,7 @@ func (p *Pod) ScanSA(ctx context.Context, fqn string, wait bool) (Refs, error) {
|
|||
// Scan scans for cluster resource refs.
|
||||
func (p *Pod) Scan(ctx context.Context, gvr, fqn string, wait bool) (Refs, error) {
|
||||
ns, n := client.Namespaced(fqn)
|
||||
oo, err := p.Factory.List(p.GVR(), ns, wait, labels.Everything())
|
||||
oo, err := p.GetFactory().List(p.GVR(), ns, wait, labels.Everything())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
|
|||
|
|
@ -66,7 +66,7 @@ func (p *Popeye) List(ctx context.Context, ns string) ([]runtime.Object, error)
|
|||
flags.ActiveNamespace = &ns
|
||||
}
|
||||
spinach := filepath.Join(cfg.K9sHome(), "spinach.yml")
|
||||
if c, err := p.Factory.Client().Config().CurrentContextName(); err == nil {
|
||||
if c, err := p.GetFactory().Client().Config().CurrentContextName(); err == nil {
|
||||
spinach = filepath.Join(cfg.K9sHome(), fmt.Sprintf("%s_spinach.yml", c))
|
||||
}
|
||||
if _, err := os.Stat(spinach); err == nil {
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ type PortForward struct {
|
|||
|
||||
// Delete a portforward.
|
||||
func (p *PortForward) Delete(path string, _ *metav1.DeletionPropagation, force bool) error {
|
||||
p.Factory.DeleteForwarder(path)
|
||||
p.GetFactory().DeleteForwarder(path)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
|
@ -45,7 +45,7 @@ func (p *PortForward) List(ctx context.Context, _ string) ([]runtime.Object, err
|
|||
log.Warn().Msgf("No custom benchmark config file found")
|
||||
}
|
||||
|
||||
ff, cc := p.Factory.Forwarders(), config.Benchmarks.Containers
|
||||
ff, cc := p.GetFactory().Forwarders(), config.Benchmarks.Containers
|
||||
oo := make([]runtime.Object, 0, len(ff))
|
||||
for k, f := range ff {
|
||||
if !strings.HasPrefix(k, path) {
|
||||
|
|
|
|||
|
|
@ -58,7 +58,7 @@ func (r *Rbac) List(ctx context.Context, ns string) ([]runtime.Object, error) {
|
|||
}
|
||||
|
||||
func (r *Rbac) loadClusterRoleBinding(path string) ([]runtime.Object, error) {
|
||||
o, err := r.Factory.Get(crbGVR, path, true, labels.Everything())
|
||||
o, err := r.GetFactory().Get(crbGVR, path, true, labels.Everything())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
@ -69,7 +69,7 @@ func (r *Rbac) loadClusterRoleBinding(path string) ([]runtime.Object, error) {
|
|||
return nil, err
|
||||
}
|
||||
|
||||
crbo, err := r.Factory.Get(crGVR, client.FQN("-", crb.RoleRef.Name), true, labels.Everything())
|
||||
crbo, err := r.GetFactory().Get(crGVR, client.FQN("-", crb.RoleRef.Name), true, labels.Everything())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
@ -83,7 +83,7 @@ func (r *Rbac) loadClusterRoleBinding(path string) ([]runtime.Object, error) {
|
|||
}
|
||||
|
||||
func (r *Rbac) loadRoleBinding(path string) ([]runtime.Object, error) {
|
||||
o, err := r.Factory.Get(rbGVR, path, true, labels.Everything())
|
||||
o, err := r.GetFactory().Get(rbGVR, path, true, labels.Everything())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
@ -94,7 +94,7 @@ func (r *Rbac) loadRoleBinding(path string) ([]runtime.Object, error) {
|
|||
}
|
||||
|
||||
if rb.RoleRef.Kind == "ClusterRole" {
|
||||
o, e := r.Factory.Get(crGVR, client.FQN("-", rb.RoleRef.Name), true, labels.Everything())
|
||||
o, e := r.GetFactory().Get(crGVR, client.FQN("-", rb.RoleRef.Name), true, labels.Everything())
|
||||
if e != nil {
|
||||
return nil, e
|
||||
}
|
||||
|
|
@ -106,7 +106,7 @@ func (r *Rbac) loadRoleBinding(path string) ([]runtime.Object, error) {
|
|||
return asRuntimeObjects(parseRules(client.ClusterScope, "-", cr.Rules)), nil
|
||||
}
|
||||
|
||||
ro, err := r.Factory.Get(rGVR, client.FQN(rb.Namespace, rb.RoleRef.Name), true, labels.Everything())
|
||||
ro, err := r.GetFactory().Get(rGVR, client.FQN(rb.Namespace, rb.RoleRef.Name), true, labels.Everything())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
@ -121,7 +121,7 @@ func (r *Rbac) loadRoleBinding(path string) ([]runtime.Object, error) {
|
|||
|
||||
func (r *Rbac) loadClusterRole(path string) ([]runtime.Object, error) {
|
||||
log.Debug().Msgf("LOAD-CR %q", path)
|
||||
o, err := r.Factory.Get(crGVR, path, true, labels.Everything())
|
||||
o, err := r.GetFactory().Get(crGVR, path, true, labels.Everything())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
@ -136,7 +136,7 @@ func (r *Rbac) loadClusterRole(path string) ([]runtime.Object, error) {
|
|||
}
|
||||
|
||||
func (r *Rbac) loadRole(path string) ([]runtime.Object, error) {
|
||||
o, err := r.Factory.Get(rGVR, path, true, labels.Everything())
|
||||
o, err := r.GetFactory().Get(rGVR, path, true, labels.Everything())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
|
|||
|
|
@ -174,7 +174,7 @@ func (p *Policy) fetchRoleBindingSubjects(kind, name string) ([]string, error) {
|
|||
func (p *Policy) fetchClusterRoles() ([]rbacv1.ClusterRole, error) {
|
||||
const gvr = "rbac.authorization.k8s.io/v1/clusterroles"
|
||||
|
||||
oo, err := p.Factory.List(gvr, client.ClusterScope, false, labels.Everything())
|
||||
oo, err := p.GetFactory().List(gvr, client.ClusterScope, false, labels.Everything())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
@ -194,7 +194,7 @@ func (p *Policy) fetchClusterRoles() ([]rbacv1.ClusterRole, error) {
|
|||
func (p *Policy) fetchRoles() ([]rbacv1.Role, error) {
|
||||
const gvr = "rbac.authorization.k8s.io/v1/roles"
|
||||
|
||||
oo, err := p.Factory.List(gvr, client.AllNamespaces, false, labels.Everything())
|
||||
oo, err := p.GetFactory().List(gvr, client.AllNamespaces, false, labels.Everything())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
|
|||
|
|
@ -30,12 +30,12 @@ func (r *Resource) List(ctx context.Context, ns string) ([]runtime.Object, error
|
|||
}
|
||||
}
|
||||
|
||||
return r.Factory.List(r.gvr.String(), ns, false, lsel)
|
||||
return r.GetFactory().List(r.gvr.String(), ns, false, lsel)
|
||||
}
|
||||
|
||||
// Get returns a resource instance if found, else an error.
|
||||
func (r *Resource) Get(_ context.Context, path string) (runtime.Object, error) {
|
||||
return r.Factory.Get(r.gvr.String(), path, true, labels.Everything())
|
||||
return r.GetFactory().Get(r.gvr.String(), path, true, labels.Everything())
|
||||
}
|
||||
|
||||
// ToYAML returns a resource yaml.
|
||||
|
|
|
|||
|
|
@ -67,7 +67,7 @@ func (s *StatefulSet) Scale(ctx context.Context, path string, replicas int32) er
|
|||
|
||||
// Restart a StatefulSet rollout.
|
||||
func (s *StatefulSet) Restart(ctx context.Context, path string) error {
|
||||
o, err := s.Factory.Get("apps/v1/statefulsets", path, true, labels.Everything())
|
||||
o, err := s.GetFactory().Get("apps/v1/statefulsets", path, true, labels.Everything())
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
@ -155,7 +155,7 @@ func (s *StatefulSet) Pod(fqn string) (string, error) {
|
|||
}
|
||||
|
||||
func (s *StatefulSet) getStatefulSet(fqn string) (*appsv1.StatefulSet, error) {
|
||||
o, err := s.Factory.Get(s.gvr.String(), fqn, true, labels.Everything())
|
||||
o, err := s.GetFactory().Get(s.gvr.String(), fqn, true, labels.Everything())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
@ -172,7 +172,7 @@ func (s *StatefulSet) getStatefulSet(fqn string) (*appsv1.StatefulSet, error) {
|
|||
// ScanSA scans for serviceaccount refs.
|
||||
func (s *StatefulSet) ScanSA(ctx context.Context, fqn string, wait bool) (Refs, error) {
|
||||
ns, n := client.Namespaced(fqn)
|
||||
oo, err := s.Factory.List(s.GVR(), ns, wait, labels.Everything())
|
||||
oo, err := s.GetFactory().List(s.GVR(), ns, wait, labels.Everything())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
@ -198,7 +198,7 @@ func (s *StatefulSet) ScanSA(ctx context.Context, fqn string, wait bool) (Refs,
|
|||
// Scan scans for cluster resource refs.
|
||||
func (s *StatefulSet) Scan(ctx context.Context, gvr, fqn string, wait bool) (Refs, error) {
|
||||
ns, n := client.Namespaced(fqn)
|
||||
oo, err := s.Factory.List(s.GVR(), ns, wait, labels.Everything())
|
||||
oo, err := s.GetFactory().List(s.GVR(), ns, wait, labels.Everything())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@ func (s *Service) Pod(fqn string) (string, error) {
|
|||
|
||||
// GetInstance returns a service instance.
|
||||
func (s *Service) GetInstance(fqn string) (*v1.Service, error) {
|
||||
o, err := s.Factory.Get(s.gvr.String(), fqn, true, labels.Everything())
|
||||
o, err := s.GetFactory().Get(s.gvr.String(), fqn, true, labels.Everything())
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
|
|||
|
|
@ -58,93 +58,140 @@ func NewCmdBuff(key rune, kind BufferKind) *CmdBuff {
|
|||
|
||||
// InCmdMode checks if a command exists and the buffer is active.
|
||||
func (c *CmdBuff) InCmdMode() bool {
|
||||
c.mx.RLock()
|
||||
defer c.mx.RUnlock()
|
||||
|
||||
return c.active || len(c.buff) > 0
|
||||
}
|
||||
|
||||
// IsActive checks if command buffer is active.
|
||||
func (c *CmdBuff) IsActive() bool {
|
||||
c.mx.RLock()
|
||||
defer c.mx.RUnlock()
|
||||
|
||||
return c.active
|
||||
}
|
||||
|
||||
// SetActive toggles cmd buffer active state.
|
||||
func (c *CmdBuff) SetActive(b bool) {
|
||||
c.active = b
|
||||
c.mx.Lock()
|
||||
{
|
||||
c.active = b
|
||||
}
|
||||
c.mx.Unlock()
|
||||
|
||||
c.fireActive(c.active)
|
||||
}
|
||||
|
||||
// GetText returns the current text.
|
||||
func (c *CmdBuff) GetText() string {
|
||||
c.mx.RLock()
|
||||
defer c.mx.RUnlock()
|
||||
|
||||
return string(c.buff)
|
||||
}
|
||||
|
||||
// GetKind returns the buffer kind.
|
||||
func (c *CmdBuff) GetKind() BufferKind {
|
||||
c.mx.RLock()
|
||||
defer c.mx.RUnlock()
|
||||
|
||||
return c.kind
|
||||
}
|
||||
|
||||
// GetSuggestion returns the current suggestion.
|
||||
func (c *CmdBuff) GetSuggestion() string {
|
||||
c.mx.RLock()
|
||||
defer c.mx.RUnlock()
|
||||
|
||||
return c.suggestion
|
||||
}
|
||||
|
||||
func (c *CmdBuff) hasCancel() bool {
|
||||
c.mx.RLock()
|
||||
defer c.mx.RUnlock()
|
||||
|
||||
return c.cancel != nil
|
||||
}
|
||||
|
||||
func (c *CmdBuff) setCancel(f context.CancelFunc) {
|
||||
c.mx.Lock()
|
||||
{
|
||||
c.cancel = f
|
||||
}
|
||||
c.mx.Unlock()
|
||||
}
|
||||
|
||||
func (c *CmdBuff) resetCancel() {
|
||||
c.mx.Lock()
|
||||
{
|
||||
c.cancel = nil
|
||||
}
|
||||
c.mx.Unlock()
|
||||
}
|
||||
|
||||
// SetText initializes the buffer with a command.
|
||||
func (c *CmdBuff) SetText(text, suggestion string) {
|
||||
c.buff, c.suggestion = []rune(text), suggestion
|
||||
c.fireBufferCompleted()
|
||||
c.mx.Lock()
|
||||
{
|
||||
c.buff, c.suggestion = []rune(text), suggestion
|
||||
}
|
||||
c.mx.Unlock()
|
||||
c.fireBufferCompleted(c.GetText(), c.GetSuggestion())
|
||||
}
|
||||
|
||||
// Add adds a new character to the buffer.
|
||||
func (c *CmdBuff) Add(r rune) {
|
||||
c.mx.Lock()
|
||||
defer c.mx.Unlock()
|
||||
c.buff = append(c.buff, r)
|
||||
c.fireBufferChanged()
|
||||
if c.cancel != nil {
|
||||
{
|
||||
c.buff = append(c.buff, r)
|
||||
}
|
||||
c.mx.Unlock()
|
||||
c.fireBufferChanged(c.GetText(), c.GetSuggestion())
|
||||
if c.hasCancel() {
|
||||
return
|
||||
}
|
||||
ctx := context.Background()
|
||||
ctx, c.cancel = context.WithTimeout(ctx, keyEntryDelay)
|
||||
ctx, cancel := context.WithTimeout(context.Background(), keyEntryDelay)
|
||||
c.setCancel(cancel)
|
||||
|
||||
go func() {
|
||||
<-ctx.Done()
|
||||
c.mx.Lock()
|
||||
{
|
||||
c.fireBufferCompleted()
|
||||
c.cancel = nil
|
||||
}
|
||||
c.mx.Unlock()
|
||||
c.fireBufferCompleted(c.GetText(), c.GetSuggestion())
|
||||
c.resetCancel()
|
||||
}()
|
||||
}
|
||||
|
||||
// Delete removes the last character from the buffer.
|
||||
func (c *CmdBuff) Delete() {
|
||||
c.mx.Lock()
|
||||
defer c.mx.Unlock()
|
||||
if c.Empty() {
|
||||
return
|
||||
}
|
||||
c.buff = c.buff[:len(c.buff)-1]
|
||||
c.fireBufferChanged()
|
||||
if c.cancel != nil {
|
||||
c.SetText(string(c.buff[:len(c.buff)-1]), "")
|
||||
c.fireBufferChanged(c.GetText(), c.GetSuggestion())
|
||||
if c.hasCancel() {
|
||||
return
|
||||
}
|
||||
|
||||
ctx := context.Background()
|
||||
ctx, c.cancel = context.WithTimeout(ctx, 800*time.Millisecond)
|
||||
ctx, cancel := context.WithTimeout(context.Background(), 800*time.Millisecond)
|
||||
c.setCancel(cancel)
|
||||
|
||||
go func() {
|
||||
<-ctx.Done()
|
||||
c.mx.Lock()
|
||||
{
|
||||
c.fireBufferCompleted()
|
||||
c.cancel = nil
|
||||
}
|
||||
c.mx.Unlock()
|
||||
c.fireBufferCompleted(c.GetText(), c.GetSuggestion())
|
||||
c.resetCancel()
|
||||
}()
|
||||
}
|
||||
|
||||
// ClearText clears out command buffer.
|
||||
func (c *CmdBuff) ClearText(fire bool) {
|
||||
c.mx.Lock()
|
||||
defer c.mx.Unlock()
|
||||
c.buff = make([]rune, 0, maxBuff)
|
||||
{
|
||||
c.buff, c.suggestion = c.buff[:0], ""
|
||||
}
|
||||
c.mx.Unlock()
|
||||
|
||||
if fire {
|
||||
c.fireBufferCompleted()
|
||||
c.fireBufferCompleted(c.GetText(), c.GetSuggestion())
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -152,11 +199,14 @@ func (c *CmdBuff) ClearText(fire bool) {
|
|||
func (c *CmdBuff) Reset() {
|
||||
c.ClearText(true)
|
||||
c.SetActive(false)
|
||||
c.fireBufferCompleted()
|
||||
c.fireBufferCompleted(c.GetText(), c.GetSuggestion())
|
||||
}
|
||||
|
||||
// Empty returns true if no cmd, false otherwise.
|
||||
func (c *CmdBuff) Empty() bool {
|
||||
c.mx.RLock()
|
||||
defer c.mx.RUnlock()
|
||||
|
||||
return len(c.buff) == 0
|
||||
}
|
||||
|
||||
|
|
@ -166,8 +216,10 @@ func (c *CmdBuff) Empty() bool {
|
|||
// AddListener registers a cmd buffer listener.
|
||||
func (c *CmdBuff) AddListener(w BuffWatcher) {
|
||||
c.mx.Lock()
|
||||
defer c.mx.Unlock()
|
||||
c.listeners = append(c.listeners, w)
|
||||
{
|
||||
c.listeners = append(c.listeners, w)
|
||||
}
|
||||
c.mx.Unlock()
|
||||
}
|
||||
|
||||
// RemoveListener removes a listener.
|
||||
|
|
@ -182,29 +234,27 @@ func (c *CmdBuff) RemoveListener(l BuffWatcher) {
|
|||
break
|
||||
}
|
||||
}
|
||||
|
||||
if victim == -1 {
|
||||
return
|
||||
}
|
||||
|
||||
c.listeners = append(c.listeners[:victim], c.listeners[victim+1:]...)
|
||||
}
|
||||
|
||||
func (c *CmdBuff) fireBufferCompleted() {
|
||||
text := c.GetText()
|
||||
func (c *CmdBuff) fireBufferCompleted(t, s string) {
|
||||
for _, l := range c.listeners {
|
||||
l.BufferCompleted(text, c.suggestion)
|
||||
l.BufferCompleted(t, s)
|
||||
}
|
||||
}
|
||||
|
||||
func (c *CmdBuff) fireBufferChanged() {
|
||||
text := c.GetText()
|
||||
func (c *CmdBuff) fireBufferChanged(t, s string) {
|
||||
for _, l := range c.listeners {
|
||||
l.BufferChanged(text, c.suggestion)
|
||||
l.BufferChanged(t, s)
|
||||
}
|
||||
}
|
||||
|
||||
func (c *CmdBuff) fireActive(b bool) {
|
||||
for _, l := range c.listeners {
|
||||
l.BufferActive(b, c.kind)
|
||||
l.BufferActive(b, c.GetKind())
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -50,7 +50,7 @@ func TestFishDelete(t *testing.T) {
|
|||
f.SetActive(true)
|
||||
|
||||
assert.Equal(t, 2, m.changeCount)
|
||||
assert.Equal(t, 1, m.suggCount)
|
||||
assert.Equal(t, 3, m.suggCount)
|
||||
assert.True(t, m.active)
|
||||
assert.Equal(t, "blee", m.suggestion)
|
||||
|
||||
|
|
|
|||
|
|
@ -151,20 +151,6 @@ var Registry = map[string]ResourceMeta{
|
|||
Renderer: &render.Job{},
|
||||
},
|
||||
|
||||
// Autoscaling...
|
||||
"autoscaling/v1/horizontalpodautoscalers": {
|
||||
DAO: &dao.HorizontalPodAutoscaler{},
|
||||
Renderer: &render.HorizontalPodAutoscaler{},
|
||||
},
|
||||
"autoscaling/v2beta1/horizontalpodautoscalers": {
|
||||
DAO: &dao.HorizontalPodAutoscaler{},
|
||||
Renderer: &render.HorizontalPodAutoscaler{},
|
||||
},
|
||||
"autoscaling/v2beta2/horizontalpodautoscalers": {
|
||||
DAO: &dao.HorizontalPodAutoscaler{},
|
||||
Renderer: &render.HorizontalPodAutoscaler{},
|
||||
},
|
||||
|
||||
// CRDs...
|
||||
"apiextensions.k8s.io/v1/customresourcedefinitions": {
|
||||
Renderer: &render.CustomResourceDefinition{},
|
||||
|
|
|
|||
|
|
@ -23,7 +23,7 @@ const initRefreshRate = 300 * time.Millisecond
|
|||
// TableListener represents a table model listener.
|
||||
type TableListener interface {
|
||||
// TableDataChanged notifies the model data changed.
|
||||
TableDataChanged(render.TableData)
|
||||
TableDataChanged(*render.TableData)
|
||||
|
||||
// TableLoadFailed notifies the load failed.
|
||||
TableLoadFailed(error)
|
||||
|
|
@ -153,16 +153,16 @@ func (t *Table) ClusterWide() bool {
|
|||
|
||||
// Empty returns true if no model data.
|
||||
func (t *Table) Empty() bool {
|
||||
return len(t.data.RowEvents) == 0
|
||||
return t.data.Empty()
|
||||
}
|
||||
|
||||
// Count returns the row count.
|
||||
func (t *Table) Count() int {
|
||||
return len(t.data.RowEvents)
|
||||
return t.data.Count()
|
||||
}
|
||||
|
||||
// Peek returns model data.
|
||||
func (t *Table) Peek() render.TableData {
|
||||
func (t *Table) Peek() *render.TableData {
|
||||
t.mx.RLock()
|
||||
defer t.mx.RUnlock()
|
||||
|
||||
|
|
@ -278,7 +278,7 @@ func (t *Table) reconcile(ctx context.Context) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (t *Table) fireTableChanged(data render.TableData) {
|
||||
func (t *Table) fireTableChanged(data *render.TableData) {
|
||||
t.mx.RLock()
|
||||
defer t.mx.RUnlock()
|
||||
|
||||
|
|
|
|||
|
|
@ -72,7 +72,7 @@ type tableListener struct {
|
|||
count, errs int
|
||||
}
|
||||
|
||||
func (l *tableListener) TableDataChanged(render.TableData) {
|
||||
func (l *tableListener) TableDataChanged(*render.TableData) {
|
||||
l.count++
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -39,7 +39,7 @@ func (ClusterRole) Render(o interface{}, ns string, r *Row) error {
|
|||
r.Fields = Fields{
|
||||
cr.Name,
|
||||
mapToStr(cr.Labels),
|
||||
toAge(cr.ObjectMeta.CreationTimestamp),
|
||||
toAge(cr.GetCreationTimestamp()),
|
||||
}
|
||||
|
||||
return nil
|
||||
|
|
|
|||
|
|
@ -47,7 +47,7 @@ func (ClusterRoleBinding) Render(o interface{}, ns string, r *Row) error {
|
|||
kind,
|
||||
ss,
|
||||
mapToStr(crb.Labels),
|
||||
toAge(crb.ObjectMeta.CreationTimestamp),
|
||||
toAge(crb.GetCreationTimestamp()),
|
||||
}
|
||||
|
||||
return nil
|
||||
|
|
|
|||
|
|
@ -2,12 +2,13 @@ package render
|
|||
|
||||
import (
|
||||
"fmt"
|
||||
"time"
|
||||
"path"
|
||||
|
||||
"github.com/derailed/k9s/internal/client"
|
||||
"github.com/rs/zerolog/log"
|
||||
metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
|
||||
v1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1"
|
||||
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
||||
"k8s.io/apimachinery/pkg/runtime"
|
||||
)
|
||||
|
||||
// CustomResourceDefinition renders a K8s CustomResourceDefinition to screen.
|
||||
|
|
@ -26,25 +27,34 @@ func (CustomResourceDefinition) Header(string) Header {
|
|||
|
||||
// Render renders a K8s resource to screen.
|
||||
func (CustomResourceDefinition) Render(o interface{}, ns string, r *Row) error {
|
||||
crd, ok := o.(*unstructured.Unstructured)
|
||||
raw, ok := o.(*unstructured.Unstructured)
|
||||
if !ok {
|
||||
return fmt.Errorf("Expected CustomResourceDefinition, but got %T", o)
|
||||
}
|
||||
|
||||
meta, ok := crd.Object["metadata"].(map[string]interface{})
|
||||
if !ok {
|
||||
return fmt.Errorf("expecting an interface map but got %T", crd.Object["metadata"])
|
||||
}
|
||||
t, err := time.Parse(time.RFC3339, extractMetaField(meta, "creationTimestamp"))
|
||||
var crd v1.CustomResourceDefinition
|
||||
err := runtime.DefaultUnstructuredConverter.FromUnstructured(raw.Object, &crd)
|
||||
if err != nil {
|
||||
log.Error().Err(err).Msgf("Fields timestamp %v", err)
|
||||
return err
|
||||
}
|
||||
|
||||
r.ID = client.FQN(client.ClusterScope, extractMetaField(meta, "name"))
|
||||
var version string
|
||||
for _, v := range crd.Spec.Versions {
|
||||
if v.Served && !v.Deprecated {
|
||||
version = v.Name
|
||||
break
|
||||
}
|
||||
}
|
||||
if version == "" {
|
||||
return fmt.Errorf("unable to assert resource version")
|
||||
}
|
||||
id := path.Join(crd.Spec.Group, version, crd.Spec.Names.Plural)
|
||||
|
||||
r.ID = client.FQN(client.ClusterScope, id)
|
||||
r.Fields = Fields{
|
||||
extractMetaField(meta, "name"),
|
||||
mapToIfc(meta["labels"]),
|
||||
toAge(metav1.Time{Time: t}),
|
||||
crd.GetName(),
|
||||
mapToIfc(crd.GetLabels()),
|
||||
toAge(crd.GetCreationTimestamp()),
|
||||
}
|
||||
|
||||
return nil
|
||||
|
|
|
|||
|
|
@ -12,6 +12,6 @@ func TestCustomResourceDefinitionRender(t *testing.T) {
|
|||
r := render.NewRow(2)
|
||||
c.Render(load(t, "crd"), "", &r)
|
||||
|
||||
assert.Equal(t, "-/adapters.config.istio.io", r.ID)
|
||||
assert.Equal(t, "-/config.istio.io/v1alpha2/adapters", r.ID)
|
||||
assert.Equal(t, render.Fields{"adapters.config.istio.io"}, r.Fields[:1])
|
||||
}
|
||||
|
|
|
|||
|
|
@ -65,7 +65,7 @@ func (c CronJob) Render(o interface{}, ns string, r *Row) error {
|
|||
podImageNames(cj.Spec.JobTemplate.Spec.Template.Spec, true),
|
||||
mapToStr(cj.Labels),
|
||||
"",
|
||||
toAge(cj.ObjectMeta.CreationTimestamp),
|
||||
toAge(cj.GetCreationTimestamp()),
|
||||
}
|
||||
|
||||
return nil
|
||||
|
|
|
|||
|
|
@ -57,7 +57,7 @@ func (d Deployment) Render(o interface{}, ns string, r *Row) error {
|
|||
strconv.Itoa(int(dp.Status.AvailableReplicas)),
|
||||
mapToStr(dp.Labels),
|
||||
asStatus(d.diagnose(dp.Status.Replicas, dp.Status.AvailableReplicas)),
|
||||
toAge(dp.ObjectMeta.CreationTimestamp),
|
||||
toAge(dp.GetCreationTimestamp()),
|
||||
}
|
||||
|
||||
return nil
|
||||
|
|
|
|||
|
|
@ -55,7 +55,7 @@ func (d DaemonSet) Render(o interface{}, ns string, r *Row) error {
|
|||
strconv.Itoa(int(ds.Status.NumberAvailable)),
|
||||
mapToStr(ds.Labels),
|
||||
asStatus(d.diagnose(ds.Status.DesiredNumberScheduled, ds.Status.NumberReady)),
|
||||
toAge(ds.ObjectMeta.CreationTimestamp),
|
||||
toAge(ds.GetCreationTimestamp()),
|
||||
}
|
||||
|
||||
return nil
|
||||
|
|
|
|||
|
|
@ -44,7 +44,7 @@ func (e Endpoints) Render(o interface{}, ns string, r *Row) error {
|
|||
ep.Namespace,
|
||||
ep.Name,
|
||||
missing(toEPs(ep.Subsets)),
|
||||
toAge(ep.ObjectMeta.CreationTimestamp),
|
||||
toAge(ep.GetCreationTimestamp()),
|
||||
}
|
||||
|
||||
return nil
|
||||
|
|
|
|||
|
|
@ -1,264 +0,0 @@
|
|||
package render
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strconv"
|
||||
"strings"
|
||||
|
||||
"github.com/derailed/k9s/internal/client"
|
||||
"github.com/derailed/tview"
|
||||
autoscalingv1 "k8s.io/api/autoscaling/v1"
|
||||
autoscalingv2 "k8s.io/api/autoscaling/v2"
|
||||
"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
|
||||
"k8s.io/apimachinery/pkg/runtime"
|
||||
)
|
||||
|
||||
// HorizontalPodAutoscaler renders a K8s HorizontalPodAutoscaler to screen.
|
||||
type HorizontalPodAutoscaler struct {
|
||||
Base
|
||||
}
|
||||
|
||||
// Header returns a header row.
|
||||
func (HorizontalPodAutoscaler) Header(ns string) Header {
|
||||
return Header{
|
||||
HeaderColumn{Name: "NAMESPACE"},
|
||||
HeaderColumn{Name: "NAME"},
|
||||
HeaderColumn{Name: "REFERENCE"},
|
||||
HeaderColumn{Name: "TARGETS%"},
|
||||
HeaderColumn{Name: "MINPODS", Align: tview.AlignRight},
|
||||
HeaderColumn{Name: "MAXPODS", Align: tview.AlignRight},
|
||||
HeaderColumn{Name: "REPLICAS", Align: tview.AlignRight},
|
||||
HeaderColumn{Name: "VALID", Wide: true},
|
||||
HeaderColumn{Name: "AGE", Time: true},
|
||||
}
|
||||
}
|
||||
|
||||
// Render renders a K8s resource to screen.
|
||||
func (h HorizontalPodAutoscaler) Render(o interface{}, ns string, r *Row) error {
|
||||
raw, ok := o.(*unstructured.Unstructured)
|
||||
if !ok {
|
||||
return fmt.Errorf("Expected HorizontalPodAutoscaler, but got %T", o)
|
||||
}
|
||||
|
||||
v := raw.Object["apiVersion"]
|
||||
|
||||
switch v {
|
||||
case "autoscaling/v1":
|
||||
return h.renderV1(raw, ns, r)
|
||||
case "autoscaling/v2":
|
||||
return h.renderV2(raw, ns, r)
|
||||
default:
|
||||
return fmt.Errorf("Unhandled HPA version %q", v)
|
||||
}
|
||||
}
|
||||
|
||||
func (h HorizontalPodAutoscaler) renderV1(raw *unstructured.Unstructured, _ string, r *Row) error {
|
||||
var hpa autoscalingv1.HorizontalPodAutoscaler
|
||||
err := runtime.DefaultUnstructuredConverter.FromUnstructured(raw.Object, &hpa)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
r.ID = client.MetaFQN(hpa.ObjectMeta)
|
||||
r.Fields = Fields{
|
||||
hpa.Namespace,
|
||||
hpa.ObjectMeta.Name,
|
||||
hpa.Spec.ScaleTargetRef.Name,
|
||||
toMetricsV1(hpa.Spec, hpa.Status),
|
||||
strconv.Itoa(int(*hpa.Spec.MinReplicas)),
|
||||
strconv.Itoa(int(hpa.Spec.MaxReplicas)),
|
||||
strconv.Itoa(int(hpa.Status.CurrentReplicas)),
|
||||
"",
|
||||
toAge(hpa.ObjectMeta.CreationTimestamp),
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func (h HorizontalPodAutoscaler) renderV2(raw *unstructured.Unstructured, _ string, r *Row) error {
|
||||
var hpa autoscalingv2.HorizontalPodAutoscaler
|
||||
err := runtime.DefaultUnstructuredConverter.FromUnstructured(raw.Object, &hpa)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
r.ID = client.MetaFQN(hpa.ObjectMeta)
|
||||
r.Fields = Fields{
|
||||
hpa.Namespace,
|
||||
hpa.ObjectMeta.Name,
|
||||
hpa.Spec.ScaleTargetRef.Name,
|
||||
toMetricsV2(hpa.Spec.Metrics, hpa.Status.CurrentMetrics),
|
||||
strconv.Itoa(int(*hpa.Spec.MinReplicas)),
|
||||
strconv.Itoa(int(hpa.Spec.MaxReplicas)),
|
||||
strconv.Itoa(int(hpa.Status.CurrentReplicas)),
|
||||
"",
|
||||
toAge(hpa.ObjectMeta.CreationTimestamp),
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
// Helpers...
|
||||
|
||||
func toMetricsV1(spec autoscalingv1.HorizontalPodAutoscalerSpec, status autoscalingv1.HorizontalPodAutoscalerStatus) string {
|
||||
current, target := "<unknown>", "<unkown>"
|
||||
if status.CurrentCPUUtilizationPercentage != nil {
|
||||
current = strconv.Itoa(int(*status.CurrentCPUUtilizationPercentage)) + "%"
|
||||
}
|
||||
if spec.TargetCPUUtilizationPercentage != nil {
|
||||
target = strconv.Itoa(int(*spec.TargetCPUUtilizationPercentage))
|
||||
}
|
||||
return current + "/" + target + "%"
|
||||
}
|
||||
|
||||
func toMetricsV2(specs []autoscalingv2.MetricSpec, statuses []autoscalingv2.MetricStatus) string {
|
||||
if len(specs) == 0 {
|
||||
return MissingValue
|
||||
}
|
||||
|
||||
list, max, more, count := []string{}, 2, false, 0
|
||||
for i, spec := range specs {
|
||||
current := "<unknown>"
|
||||
|
||||
// nolint:exhaustive
|
||||
switch spec.Type {
|
||||
case autoscalingv2.ExternalMetricSourceType:
|
||||
list = append(list, externalMetricsV2(i, spec, statuses))
|
||||
case autoscalingv2.PodsMetricSourceType:
|
||||
if len(statuses) > i && statuses[i].Pods != nil {
|
||||
current = statuses[i].Pods.Current.AverageValue.String()
|
||||
}
|
||||
list = append(list, current+"/"+spec.Pods.Target.AverageValue.String())
|
||||
case autoscalingv2.ObjectMetricSourceType:
|
||||
if len(statuses) > i && statuses[i].Object != nil {
|
||||
current = statuses[i].Object.Current.Value.String()
|
||||
}
|
||||
list = append(list, current+"/"+spec.Object.Target.Value.String())
|
||||
case autoscalingv2.ResourceMetricSourceType:
|
||||
list = append(list, resourceMetricsV2(i, spec, statuses))
|
||||
default:
|
||||
list = append(list, "<unknown type>")
|
||||
}
|
||||
count++
|
||||
}
|
||||
|
||||
if count > max {
|
||||
list, more = list[:max], true
|
||||
}
|
||||
|
||||
ret := strings.Join(list, ", ")
|
||||
if more {
|
||||
return ret + " + " + strconv.Itoa(count-max) + "more..."
|
||||
}
|
||||
|
||||
return ret
|
||||
}
|
||||
|
||||
func checkHPAType(i int, spec autoscalingv2.MetricSpec, statuses []autoscalingv2.MetricStatus) string {
|
||||
current := "<unknown>"
|
||||
|
||||
// nolint:exhaustive
|
||||
switch spec.Type {
|
||||
case autoscalingv2.ExternalMetricSourceType:
|
||||
return externalMetricsV2(i, spec, statuses)
|
||||
case autoscalingv2.PodsMetricSourceType:
|
||||
if len(statuses) > i && statuses[i].Pods != nil {
|
||||
current = statuses[i].Pods.Current.AverageValue.String()
|
||||
}
|
||||
return current + "/" + spec.Pods.Target.AverageValue.String()
|
||||
case autoscalingv2.ObjectMetricSourceType:
|
||||
if len(statuses) > i && statuses[i].Object != nil {
|
||||
current = statuses[i].Object.Current.Value.String()
|
||||
}
|
||||
return current + "/" + spec.Object.Target.Value.String()
|
||||
case autoscalingv2.ResourceMetricSourceType:
|
||||
return resourceMetricsV2(i, spec, statuses)
|
||||
}
|
||||
|
||||
return "<unknown type>"
|
||||
}
|
||||
|
||||
func externalMetricsV2(i int, spec autoscalingv2.MetricSpec, statuses []autoscalingv2.MetricStatus) string {
|
||||
current := "<unknown>"
|
||||
|
||||
if spec.External.Target.AverageValue != nil {
|
||||
if len(statuses) > i && statuses[i].External != nil && statuses[i].External.Current.AverageValue != nil {
|
||||
current = statuses[i].External.Current.AverageValue.String()
|
||||
}
|
||||
return current + "/" + spec.External.Target.AverageValue.String() + " (avg)"
|
||||
}
|
||||
if len(statuses) > i && statuses[i].External != nil {
|
||||
current = statuses[i].External.Current.Value.String()
|
||||
}
|
||||
|
||||
return current + "/" + spec.External.Target.Value.String()
|
||||
}
|
||||
|
||||
func resourceMetricsV2(i int, spec autoscalingv2.MetricSpec, statuses []autoscalingv2.MetricStatus) string {
|
||||
current := "<unknown>"
|
||||
|
||||
if spec.Resource.Target.AverageValue != nil {
|
||||
if len(statuses) > i && statuses[i].Resource != nil {
|
||||
current = statuses[i].Resource.Current.AverageValue.String()
|
||||
}
|
||||
return current + "/" + spec.Resource.Target.AverageValue.String()
|
||||
}
|
||||
|
||||
if len(statuses) > i && statuses[i].Resource != nil && statuses[i].Resource.Current.AverageUtilization != nil {
|
||||
current = IntToStr(int(*statuses[i].Resource.Current.AverageUtilization))
|
||||
}
|
||||
|
||||
target := "<auto>"
|
||||
if spec.Resource.Target.AverageUtilization != nil {
|
||||
target = IntToStr(int(*spec.Resource.Target.AverageUtilization))
|
||||
}
|
||||
|
||||
return current + "/" + target
|
||||
}
|
||||
|
||||
// func externalMetricsV2b1(i int, spec autoscalingv2beta1.MetricSpec, statuses []autoscalingv2beta1.MetricStatus) string {
|
||||
// current := "<unknown>"
|
||||
// if spec.External.TargetAverageValue != nil {
|
||||
// if len(statuses) > i && statuses[i].External != nil && statuses[i].External.CurrentAverageValue != nil {
|
||||
// current = statuses[i].External.CurrentAverageValue.String()
|
||||
// }
|
||||
// return current + "/" + spec.External.TargetAverageValue.String() + " (avg)"
|
||||
// }
|
||||
// if len(statuses) > i && statuses[i].External != nil {
|
||||
// current = statuses[i].External.CurrentValue.String()
|
||||
// }
|
||||
|
||||
// return current + "/" + spec.External.TargetValue.String()
|
||||
// }
|
||||
|
||||
// func resourceMetricsV2b1(i int, spec autoscalingv2beta1.MetricSpec, statuses []autoscalingv2beta1.MetricStatus) string {
|
||||
// current := "<unknown>"
|
||||
|
||||
// if status := checkTargetMetricsV2b1(i, spec, statuses); status != "" {
|
||||
// return status
|
||||
// }
|
||||
|
||||
// if len(statuses) > i && statuses[i].Resource != nil && statuses[i].Resource.CurrentAverageUtilization != nil {
|
||||
// current = IntToStr(int(*statuses[i].Resource.CurrentAverageUtilization))
|
||||
// }
|
||||
|
||||
// target := "<auto>"
|
||||
// if spec.Resource.TargetAverageUtilization != nil {
|
||||
// target = IntToStr(int(*spec.Resource.TargetAverageUtilization))
|
||||
// }
|
||||
|
||||
// return current + "/" + target
|
||||
// }
|
||||
|
||||
// func checkTargetMetricsV2b1(i int, spec autoscalingv2beta1.MetricSpec, statuses []autoscalingv2beta1.MetricStatus) string {
|
||||
// if spec.Resource.TargetAverageValue == nil {
|
||||
// return ""
|
||||
// }
|
||||
|
||||
// var current string
|
||||
// if len(statuses) > i && statuses[i].Resource != nil {
|
||||
// current = statuses[i].Resource.CurrentAverageValue.String()
|
||||
// }
|
||||
// return current + "/" + spec.Resource.TargetAverageValue.String()
|
||||
// }
|
||||
|
|
@ -1,17 +0,0 @@
|
|||
package render_test
|
||||
|
||||
import (
|
||||
"testing"
|
||||
|
||||
"github.com/derailed/k9s/internal/render"
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
func TestHorizontalPodAutoscalerRender(t *testing.T) {
|
||||
c := render.HorizontalPodAutoscaler{}
|
||||
r := render.NewRow(7)
|
||||
c.Render(load(t, "hpa"), "", &r)
|
||||
|
||||
assert.Equal(t, "default/nginx", r.ID)
|
||||
assert.Equal(t, render.Fields{"default", "nginx", "nginx", "<unknown>/10%", "1", "10"}, r.Fields[:6])
|
||||
}
|
||||
|
|
@ -54,7 +54,7 @@ func (i Ingress) Render(o interface{}, ns string, r *Row) error {
|
|||
toAddress(ing.Status.LoadBalancer),
|
||||
toTLSPorts(ing.Spec.TLS),
|
||||
mapToStr(ing.Labels),
|
||||
toAge(ing.ObjectMeta.CreationTimestamp),
|
||||
toAge(ing.GetCreationTimestamp()),
|
||||
}
|
||||
|
||||
return nil
|
||||
|
|
|
|||
|
|
@ -60,7 +60,7 @@ func (j Job) Render(o interface{}, ns string, r *Row) error {
|
|||
cc,
|
||||
ii,
|
||||
asStatus(j.diagnose(ready, job.Status.CompletionTime)),
|
||||
toAge(job.ObjectMeta.CreationTimestamp),
|
||||
toAge(job.GetCreationTimestamp()),
|
||||
}
|
||||
|
||||
return nil
|
||||
|
|
|
|||
|
|
@ -95,7 +95,7 @@ func (n Node) Render(o interface{}, ns string, r *Row) error {
|
|||
toMi(a.mem),
|
||||
mapToStr(no.Labels),
|
||||
asStatus(n.diagnose(statuses)),
|
||||
toAge(no.ObjectMeta.CreationTimestamp),
|
||||
toAge(no.GetCreationTimestamp()),
|
||||
}
|
||||
|
||||
return nil
|
||||
|
|
|
|||
|
|
@ -60,7 +60,7 @@ func (n NetworkPolicy) Render(o interface{}, ns string, r *Row) error {
|
|||
eb,
|
||||
mapToStr(np.Labels),
|
||||
"",
|
||||
toAge(np.ObjectMeta.CreationTimestamp),
|
||||
toAge(np.GetCreationTimestamp()),
|
||||
}
|
||||
|
||||
return nil
|
||||
|
|
|
|||
|
|
@ -66,7 +66,7 @@ func (n Namespace) Render(o interface{}, _ string, r *Row) error {
|
|||
string(ns.Status.Phase),
|
||||
mapToStr(ns.Labels),
|
||||
asStatus(n.diagnose(ns.Status.Phase)),
|
||||
toAge(ns.ObjectMeta.CreationTimestamp),
|
||||
toAge(ns.GetCreationTimestamp()),
|
||||
}
|
||||
|
||||
return nil
|
||||
|
|
|
|||
|
|
@ -58,7 +58,7 @@ func (p PodDisruptionBudget) Render(o interface{}, ns string, r *Row) error {
|
|||
strconv.Itoa(int(pdb.Status.ExpectedPods)),
|
||||
mapToStr(pdb.Labels),
|
||||
asStatus(p.diagnose(pdb.Spec.MinAvailable, pdb.Status.CurrentHealthy)),
|
||||
toAge(pdb.ObjectMeta.CreationTimestamp),
|
||||
toAge(pdb.GetCreationTimestamp()),
|
||||
}
|
||||
|
||||
return nil
|
||||
|
|
|
|||
|
|
@ -124,7 +124,7 @@ func (p Pod) Render(o interface{}, ns string, row *Row) error {
|
|||
asStatus(p.diagnose(phase, cr, len(ss))),
|
||||
asNominated(po.Status.NominatedNodeName),
|
||||
asReadinessGate(po),
|
||||
toAge(po.ObjectMeta.CreationTimestamp),
|
||||
toAge(po.GetCreationTimestamp()),
|
||||
}
|
||||
|
||||
return nil
|
||||
|
|
|
|||
|
|
@ -101,7 +101,7 @@ func (p PersistentVolume) Render(o interface{}, ns string, r *Row) error {
|
|||
p.volumeMode(pv.Spec.VolumeMode),
|
||||
mapToStr(pv.Labels),
|
||||
asStatus(p.diagnose(phase)),
|
||||
toAge(pv.ObjectMeta.CreationTimestamp),
|
||||
toAge(pv.GetCreationTimestamp()),
|
||||
}
|
||||
|
||||
return nil
|
||||
|
|
|
|||
|
|
@ -72,7 +72,7 @@ func (p PersistentVolumeClaim) Render(o interface{}, ns string, r *Row) error {
|
|||
class,
|
||||
mapToStr(pvc.Labels),
|
||||
asStatus(p.diagnose(string(phase))),
|
||||
toAge(pvc.ObjectMeta.CreationTimestamp),
|
||||
toAge(pvc.GetCreationTimestamp()),
|
||||
}
|
||||
|
||||
return nil
|
||||
|
|
|
|||
|
|
@ -50,7 +50,7 @@ func (r Role) Render(o interface{}, ns string, row *Row) error {
|
|||
ro.Name,
|
||||
mapToStr(ro.Labels),
|
||||
"",
|
||||
toAge(ro.ObjectMeta.CreationTimestamp),
|
||||
toAge(ro.GetCreationTimestamp()),
|
||||
)
|
||||
|
||||
return nil
|
||||
|
|
|
|||
|
|
@ -59,7 +59,7 @@ func (r RoleBinding) Render(o interface{}, ns string, row *Row) error {
|
|||
ss,
|
||||
mapToStr(rb.Labels),
|
||||
"",
|
||||
toAge(rb.ObjectMeta.CreationTimestamp),
|
||||
toAge(rb.GetCreationTimestamp()),
|
||||
)
|
||||
|
||||
return nil
|
||||
|
|
|
|||
|
|
@ -56,7 +56,7 @@ func (r ReplicaSet) Render(o interface{}, ns string, row *Row) error {
|
|||
strconv.Itoa(int(rs.Status.ReadyReplicas)),
|
||||
mapToStr(rs.Labels),
|
||||
asStatus(r.diagnose(rs)),
|
||||
toAge(rs.ObjectMeta.CreationTimestamp),
|
||||
toAge(rs.GetCreationTimestamp()),
|
||||
}
|
||||
|
||||
return nil
|
||||
|
|
|
|||
|
|
@ -46,7 +46,7 @@ func (s ServiceAccount) Render(o interface{}, ns string, r *Row) error {
|
|||
strconv.Itoa(len(sa.Secrets)),
|
||||
mapToStr(sa.Labels),
|
||||
"",
|
||||
toAge(sa.ObjectMeta.CreationTimestamp),
|
||||
toAge(sa.GetCreationTimestamp()),
|
||||
}
|
||||
|
||||
return nil
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@ func (StorageClass) Render(o interface{}, ns string, r *Row) error {
|
|||
string(sc.Provisioner),
|
||||
mapToStr(sc.Labels),
|
||||
"",
|
||||
toAge(sc.ObjectMeta.CreationTimestamp),
|
||||
toAge(sc.GetCreationTimestamp()),
|
||||
}
|
||||
|
||||
return nil
|
||||
|
|
|
|||
|
|
@ -54,7 +54,7 @@ func (s StatefulSet) Render(o interface{}, ns string, r *Row) error {
|
|||
podImageNames(sts.Spec.Template.Spec, true),
|
||||
mapToStr(sts.Labels),
|
||||
asStatus(s.diagnose(sts.Status.Replicas, sts.Status.ReadyReplicas)),
|
||||
toAge(sts.ObjectMeta.CreationTimestamp),
|
||||
toAge(sts.GetCreationTimestamp()),
|
||||
}
|
||||
|
||||
return nil
|
||||
|
|
|
|||
|
|
@ -56,7 +56,7 @@ func (s Service) Render(o interface{}, ns string, r *Row) error {
|
|||
ToPorts(svc.Spec.Ports),
|
||||
mapToStr(svc.Labels),
|
||||
asStatus(s.diagnose()),
|
||||
toAge(svc.ObjectMeta.CreationTimestamp),
|
||||
toAge(svc.GetCreationTimestamp()),
|
||||
}
|
||||
|
||||
return nil
|
||||
|
|
|
|||
|
|
@ -1,6 +1,8 @@
|
|||
package render
|
||||
|
||||
import (
|
||||
"sync"
|
||||
|
||||
"github.com/derailed/k9s/internal/client"
|
||||
)
|
||||
|
||||
|
|
@ -9,6 +11,7 @@ type TableData struct {
|
|||
Header Header
|
||||
RowEvents RowEvents
|
||||
Namespace string
|
||||
mx sync.RWMutex
|
||||
}
|
||||
|
||||
// NewTableData returns a new table.
|
||||
|
|
@ -16,13 +19,29 @@ func NewTableData() *TableData {
|
|||
return &TableData{}
|
||||
}
|
||||
|
||||
// Empty checks if there are no entries.
|
||||
func (t *TableData) Empty() bool {
|
||||
t.mx.RLock()
|
||||
defer t.mx.RUnlock()
|
||||
|
||||
return len(t.RowEvents) == 0
|
||||
}
|
||||
|
||||
// Count returns the number of entries.
|
||||
func (t *TableData) Count() int {
|
||||
t.mx.RLock()
|
||||
defer t.mx.RUnlock()
|
||||
|
||||
return len(t.RowEvents)
|
||||
}
|
||||
|
||||
// IndexOfHeader return the index of the header.
|
||||
func (t *TableData) IndexOfHeader(h string) int {
|
||||
return t.Header.IndexOf(h, false)
|
||||
}
|
||||
|
||||
// Labelize prints out specific label columns.
|
||||
func (t *TableData) Labelize(labels []string) TableData {
|
||||
func (t *TableData) Labelize(labels []string) *TableData {
|
||||
labelCol := t.Header.IndexOf("LABELS", true)
|
||||
cols := []int{0, 1}
|
||||
if client.IsNamespaced(t.Namespace) {
|
||||
|
|
@ -34,11 +53,11 @@ func (t *TableData) Labelize(labels []string) TableData {
|
|||
}
|
||||
data.RowEvents = t.RowEvents.Labelize(cols, labelCol, labels)
|
||||
|
||||
return data
|
||||
return &data
|
||||
}
|
||||
|
||||
// Customize returns a new model with customized column layout.
|
||||
func (t *TableData) Customize(cols []string, wide bool) TableData {
|
||||
func (t *TableData) Customize(cols []string, wide bool) *TableData {
|
||||
res := TableData{
|
||||
Namespace: t.Namespace,
|
||||
Header: t.Header.Customize(cols, wide),
|
||||
|
|
@ -46,7 +65,7 @@ func (t *TableData) Customize(cols []string, wide bool) TableData {
|
|||
ids := t.Header.MapIndices(cols, wide)
|
||||
res.RowEvents = t.RowEvents.Customize(ids)
|
||||
|
||||
return res
|
||||
return &res
|
||||
}
|
||||
|
||||
// Clear clears out the entire table.
|
||||
|
|
@ -55,8 +74,8 @@ func (t *TableData) Clear() {
|
|||
}
|
||||
|
||||
// Clone returns a copy of the table.
|
||||
func (t *TableData) Clone() TableData {
|
||||
return TableData{
|
||||
func (t *TableData) Clone() *TableData {
|
||||
return &TableData{
|
||||
Header: t.Header.Clone(),
|
||||
RowEvents: t.RowEvents.Clone(),
|
||||
Namespace: t.Namespace,
|
||||
|
|
@ -70,28 +89,31 @@ func (t *TableData) SetHeader(ns string, h Header) {
|
|||
|
||||
// Update computes row deltas and update the table data.
|
||||
func (t *TableData) Update(rows Rows) {
|
||||
empty := len(t.RowEvents) == 0
|
||||
empty := t.Empty()
|
||||
kk := make(map[string]struct{}, len(rows))
|
||||
var blankDelta DeltaRow
|
||||
for _, row := range rows {
|
||||
kk[row.ID] = struct{}{}
|
||||
if empty {
|
||||
t.RowEvents = append(t.RowEvents, NewRowEvent(EventAdd, row))
|
||||
continue
|
||||
}
|
||||
|
||||
if index, ok := t.RowEvents.FindIndex(row.ID); ok {
|
||||
delta := NewDeltaRow(t.RowEvents[index].Row, row, t.Header)
|
||||
if delta.IsBlank() {
|
||||
t.RowEvents[index].Kind, t.RowEvents[index].Deltas = EventUnchanged, blankDelta
|
||||
t.RowEvents[index].Row = row
|
||||
} else {
|
||||
t.RowEvents[index] = NewRowEventWithDeltas(row, delta)
|
||||
t.mx.Lock()
|
||||
{
|
||||
var blankDelta DeltaRow
|
||||
for _, row := range rows {
|
||||
kk[row.ID] = struct{}{}
|
||||
if empty {
|
||||
t.RowEvents = append(t.RowEvents, NewRowEvent(EventAdd, row))
|
||||
continue
|
||||
}
|
||||
continue
|
||||
if index, ok := t.RowEvents.FindIndex(row.ID); ok {
|
||||
delta := NewDeltaRow(t.RowEvents[index].Row, row, t.Header)
|
||||
if delta.IsBlank() {
|
||||
t.RowEvents[index].Kind, t.RowEvents[index].Deltas = EventUnchanged, blankDelta
|
||||
t.RowEvents[index].Row = row
|
||||
} else {
|
||||
t.RowEvents[index] = NewRowEventWithDeltas(row, delta)
|
||||
}
|
||||
continue
|
||||
}
|
||||
t.RowEvents = append(t.RowEvents, NewRowEvent(EventAdd, row))
|
||||
}
|
||||
t.RowEvents = append(t.RowEvents, NewRowEvent(EventAdd, row))
|
||||
}
|
||||
t.mx.Unlock()
|
||||
|
||||
if !empty {
|
||||
t.Delete(kk)
|
||||
|
|
@ -100,27 +122,26 @@ func (t *TableData) Update(rows Rows) {
|
|||
|
||||
// Delete removes items in cache that are no longer valid.
|
||||
func (t *TableData) Delete(newKeys map[string]struct{}) {
|
||||
var victims []string
|
||||
for _, re := range t.RowEvents {
|
||||
if _, ok := newKeys[re.Row.ID]; !ok {
|
||||
victims = append(victims, re.Row.ID)
|
||||
t.mx.Lock()
|
||||
{
|
||||
var victims []string
|
||||
for _, re := range t.RowEvents {
|
||||
if _, ok := newKeys[re.Row.ID]; !ok {
|
||||
victims = append(victims, re.Row.ID)
|
||||
}
|
||||
}
|
||||
for _, id := range victims {
|
||||
t.RowEvents = t.RowEvents.Delete(id)
|
||||
}
|
||||
}
|
||||
|
||||
for _, id := range victims {
|
||||
t.RowEvents = t.RowEvents.Delete(id)
|
||||
}
|
||||
t.mx.Unlock()
|
||||
}
|
||||
|
||||
// Diff checks if two tables are equal.
|
||||
func (t *TableData) Diff(table TableData) bool {
|
||||
if t.Namespace != table.Namespace {
|
||||
func (t *TableData) Diff(t2 *TableData) bool {
|
||||
if t2 == nil || t.Namespace != t2.Namespace || t.Header.Diff(t2.Header) {
|
||||
return true
|
||||
}
|
||||
|
||||
if t.Header.Diff(table.Header) {
|
||||
return true
|
||||
}
|
||||
|
||||
return t.RowEvents.Diff(table.RowEvents, t.Header.IndexOf("AGE", true))
|
||||
return t.RowEvents.Diff(t2.RowEvents, t.Header.IndexOf("AGE", true))
|
||||
}
|
||||
|
|
|
|||
|
|
@ -9,13 +9,12 @@ import (
|
|||
|
||||
func TestTableDataCustomize(t *testing.T) {
|
||||
uu := map[string]struct {
|
||||
t1 render.TableData
|
||||
cols []string
|
||||
wide bool
|
||||
e render.TableData
|
||||
t1, e *render.TableData
|
||||
cols []string
|
||||
wide bool
|
||||
}{
|
||||
"same": {
|
||||
t1: render.TableData{
|
||||
t1: &render.TableData{
|
||||
Namespace: "fred",
|
||||
Header: render.Header{
|
||||
render.HeaderColumn{Name: "A"},
|
||||
|
|
@ -29,7 +28,7 @@ func TestTableDataCustomize(t *testing.T) {
|
|||
},
|
||||
},
|
||||
cols: []string{"A", "B", "C"},
|
||||
e: render.TableData{
|
||||
e: &render.TableData{
|
||||
Namespace: "fred",
|
||||
Header: render.Header{
|
||||
render.HeaderColumn{Name: "A"},
|
||||
|
|
@ -44,7 +43,7 @@ func TestTableDataCustomize(t *testing.T) {
|
|||
},
|
||||
},
|
||||
"wide-col": {
|
||||
t1: render.TableData{
|
||||
t1: &render.TableData{
|
||||
Namespace: "fred",
|
||||
Header: render.Header{
|
||||
render.HeaderColumn{Name: "A"},
|
||||
|
|
@ -58,7 +57,7 @@ func TestTableDataCustomize(t *testing.T) {
|
|||
},
|
||||
},
|
||||
cols: []string{"A", "B", "C"},
|
||||
e: render.TableData{
|
||||
e: &render.TableData{
|
||||
Namespace: "fred",
|
||||
Header: render.Header{
|
||||
render.HeaderColumn{Name: "A"},
|
||||
|
|
@ -73,7 +72,7 @@ func TestTableDataCustomize(t *testing.T) {
|
|||
},
|
||||
},
|
||||
"wide": {
|
||||
t1: render.TableData{
|
||||
t1: &render.TableData{
|
||||
Namespace: "fred",
|
||||
Header: render.Header{
|
||||
render.HeaderColumn{Name: "A"},
|
||||
|
|
@ -88,7 +87,7 @@ func TestTableDataCustomize(t *testing.T) {
|
|||
},
|
||||
wide: true,
|
||||
cols: []string{"A", "C"},
|
||||
e: render.TableData{
|
||||
e: &render.TableData{
|
||||
Namespace: "fred",
|
||||
Header: render.Header{
|
||||
render.HeaderColumn{Name: "A"},
|
||||
|
|
@ -114,12 +113,11 @@ func TestTableDataCustomize(t *testing.T) {
|
|||
|
||||
func TestTableDataDiff(t *testing.T) {
|
||||
uu := map[string]struct {
|
||||
t1 render.TableData
|
||||
t2 render.TableData
|
||||
e bool
|
||||
t1, t2 *render.TableData
|
||||
e bool
|
||||
}{
|
||||
"empty": {
|
||||
t1: render.TableData{
|
||||
t1: &render.TableData{
|
||||
Namespace: "fred",
|
||||
Header: render.Header{
|
||||
render.HeaderColumn{Name: "A"},
|
||||
|
|
@ -135,7 +133,7 @@ func TestTableDataDiff(t *testing.T) {
|
|||
e: true,
|
||||
},
|
||||
"same": {
|
||||
t1: render.TableData{
|
||||
t1: &render.TableData{
|
||||
Namespace: "fred",
|
||||
Header: render.Header{
|
||||
render.HeaderColumn{Name: "A"},
|
||||
|
|
@ -148,7 +146,7 @@ func TestTableDataDiff(t *testing.T) {
|
|||
{Row: render.Row{ID: "C", Fields: render.Fields{"10", "2", "3"}}},
|
||||
},
|
||||
},
|
||||
t2: render.TableData{
|
||||
t2: &render.TableData{
|
||||
Namespace: "fred",
|
||||
Header: render.Header{
|
||||
render.HeaderColumn{Name: "A"},
|
||||
|
|
@ -163,7 +161,7 @@ func TestTableDataDiff(t *testing.T) {
|
|||
},
|
||||
},
|
||||
"ns-diff": {
|
||||
t1: render.TableData{
|
||||
t1: &render.TableData{
|
||||
Namespace: "fred",
|
||||
Header: render.Header{
|
||||
render.HeaderColumn{Name: "A"},
|
||||
|
|
@ -176,7 +174,7 @@ func TestTableDataDiff(t *testing.T) {
|
|||
{Row: render.Row{ID: "C", Fields: render.Fields{"10", "2", "3"}}},
|
||||
},
|
||||
},
|
||||
t2: render.TableData{
|
||||
t2: &render.TableData{
|
||||
Namespace: "blee",
|
||||
Header: render.Header{
|
||||
render.HeaderColumn{Name: "A"},
|
||||
|
|
@ -192,7 +190,7 @@ func TestTableDataDiff(t *testing.T) {
|
|||
e: true,
|
||||
},
|
||||
"header-diff": {
|
||||
t1: render.TableData{
|
||||
t1: &render.TableData{
|
||||
Namespace: "fred",
|
||||
Header: render.Header{
|
||||
render.HeaderColumn{Name: "A"},
|
||||
|
|
@ -205,7 +203,7 @@ func TestTableDataDiff(t *testing.T) {
|
|||
{Row: render.Row{ID: "C", Fields: render.Fields{"10", "2", "3"}}},
|
||||
},
|
||||
},
|
||||
t2: render.TableData{
|
||||
t2: &render.TableData{
|
||||
Namespace: "fred",
|
||||
Header: render.Header{
|
||||
render.HeaderColumn{Name: "A"},
|
||||
|
|
@ -221,7 +219,7 @@ func TestTableDataDiff(t *testing.T) {
|
|||
e: true,
|
||||
},
|
||||
"row-diff": {
|
||||
t1: render.TableData{
|
||||
t1: &render.TableData{
|
||||
Namespace: "fred",
|
||||
Header: render.Header{
|
||||
render.HeaderColumn{Name: "A"},
|
||||
|
|
@ -234,7 +232,7 @@ func TestTableDataDiff(t *testing.T) {
|
|||
{Row: render.Row{ID: "C", Fields: render.Fields{"10", "2", "3"}}},
|
||||
},
|
||||
},
|
||||
t2: render.TableData{
|
||||
t2: &render.TableData{
|
||||
Namespace: "fred",
|
||||
Header: render.Header{
|
||||
render.HeaderColumn{Name: "A"},
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ type (
|
|||
ColorerFunc func(ns string, evt render.RowEvent) tcell.Color
|
||||
|
||||
// DecorateFunc represents a row decorator.
|
||||
DecorateFunc func(render.TableData) render.TableData
|
||||
DecorateFunc func(*render.TableData)
|
||||
|
||||
// SelectedRowFunc a table selection callback.
|
||||
SelectedRowFunc func(r int)
|
||||
|
|
@ -158,7 +158,7 @@ func (t *Table) ExtraHints() map[string]string {
|
|||
}
|
||||
|
||||
// GetFilteredData fetch filtered tabular data.
|
||||
func (t *Table) GetFilteredData() render.TableData {
|
||||
func (t *Table) GetFilteredData() *render.TableData {
|
||||
return t.filtered(t.GetModel().Peek())
|
||||
}
|
||||
|
||||
|
|
@ -178,17 +178,17 @@ func (t *Table) SetSortCol(name string, asc bool) {
|
|||
}
|
||||
|
||||
// Update table content.
|
||||
func (t *Table) Update(data render.TableData, hasMetrics bool) {
|
||||
func (t *Table) Update(data *render.TableData, hasMetrics bool) {
|
||||
t.header = data.Header
|
||||
if t.decorateFn != nil {
|
||||
data = t.decorateFn(data)
|
||||
t.decorateFn(data)
|
||||
}
|
||||
t.hasMetrics = hasMetrics
|
||||
t.doUpdate(t.filtered(data))
|
||||
t.UpdateTitle()
|
||||
}
|
||||
|
||||
func (t *Table) doUpdate(data render.TableData) {
|
||||
func (t *Table) doUpdate(data *render.TableData) {
|
||||
if client.IsAllNamespaces(data.Namespace) {
|
||||
t.actions[KeyShiftP] = NewKeyAction("Sort Namespace", t.SortColCmd("NAMESPACE", true), false)
|
||||
} else {
|
||||
|
|
@ -373,7 +373,7 @@ func (t *Table) AddHeaderCell(col int, h render.HeaderColumn) {
|
|||
t.SetCell(0, col, c)
|
||||
}
|
||||
|
||||
func (t *Table) filtered(data render.TableData) render.TableData {
|
||||
func (t *Table) filtered(data *render.TableData) *render.TableData {
|
||||
filtered := data
|
||||
if t.toast {
|
||||
filtered = filterToast(data)
|
||||
|
|
|
|||
|
|
@ -128,7 +128,7 @@ func formatCell(field string, padding int) string {
|
|||
return field
|
||||
}
|
||||
|
||||
func filterToast(data render.TableData) render.TableData {
|
||||
func filterToast(data *render.TableData) *render.TableData {
|
||||
validX := data.Header.IndexOf("VALID", true)
|
||||
if validX == -1 {
|
||||
return data
|
||||
|
|
@ -144,10 +144,11 @@ func filterToast(data render.TableData) render.TableData {
|
|||
toast.RowEvents = append(toast.RowEvents, re)
|
||||
}
|
||||
}
|
||||
return toast
|
||||
|
||||
return &toast
|
||||
}
|
||||
|
||||
func rxFilter(q string, inverse bool, data render.TableData) (render.TableData, error) {
|
||||
func rxFilter(q string, inverse bool, data *render.TableData) (*render.TableData, error) {
|
||||
if inverse {
|
||||
q = q[1:]
|
||||
}
|
||||
|
|
@ -178,10 +179,10 @@ func rxFilter(q string, inverse bool, data render.TableData) (render.TableData,
|
|||
}
|
||||
}
|
||||
|
||||
return filtered, nil
|
||||
return &filtered, nil
|
||||
}
|
||||
|
||||
func fuzzyFilter(q string, data render.TableData) render.TableData {
|
||||
func fuzzyFilter(q string, data *render.TableData) *render.TableData {
|
||||
q = strings.TrimSpace(q)
|
||||
ss := make([]string, 0, len(data.RowEvents))
|
||||
for _, re := range data.RowEvents {
|
||||
|
|
@ -198,5 +199,5 @@ func fuzzyFilter(q string, data render.TableData) render.TableData {
|
|||
filtered.RowEvents = append(filtered.RowEvents, data.RowEvents[m.Index])
|
||||
}
|
||||
|
||||
return filtered
|
||||
return &filtered
|
||||
}
|
||||
|
|
|
|||
|
|
@ -67,7 +67,7 @@ func (t *mockModel) SetLabelFilter(string) {}
|
|||
func (t *mockModel) Empty() bool { return false }
|
||||
func (t *mockModel) Count() int { return 1 }
|
||||
func (t *mockModel) HasMetrics() bool { return true }
|
||||
func (t *mockModel) Peek() render.TableData { return makeTableData() }
|
||||
func (t *mockModel) Peek() *render.TableData { return makeTableData() }
|
||||
func (t *mockModel) Refresh(context.Context) error { return nil }
|
||||
func (t *mockModel) ClusterWide() bool { return false }
|
||||
func (t *mockModel) GetNamespace() string { return "blee" }
|
||||
|
|
@ -94,7 +94,7 @@ func (t *mockModel) ToYAML(ctx context.Context, path string) (string, error) {
|
|||
func (t *mockModel) InNamespace(string) bool { return true }
|
||||
func (t *mockModel) SetRefreshRate(time.Duration) {}
|
||||
|
||||
func makeTableData() render.TableData {
|
||||
func makeTableData() *render.TableData {
|
||||
t := render.NewTableData()
|
||||
t.Namespace = ""
|
||||
t.Header = render.Header{
|
||||
|
|
@ -117,7 +117,7 @@ func makeTableData() render.TableData {
|
|||
},
|
||||
}
|
||||
|
||||
return *t
|
||||
return t
|
||||
}
|
||||
|
||||
func makeContext() context.Context {
|
||||
|
|
|
|||
|
|
@ -60,7 +60,7 @@ type Tabular interface {
|
|||
Count() int
|
||||
|
||||
// Peek returns current model data.
|
||||
Peek() render.TableData
|
||||
Peek() *render.TableData
|
||||
|
||||
// Watch watches a given resource for changes.
|
||||
Watch(context.Context) error
|
||||
|
|
|
|||
|
|
@ -113,7 +113,7 @@ func (t *mockModel) SetLabelFilter(string) {}
|
|||
func (t *mockModel) Empty() bool { return false }
|
||||
func (t *mockModel) Count() int { return 1 }
|
||||
func (t *mockModel) HasMetrics() bool { return true }
|
||||
func (t *mockModel) Peek() render.TableData { return makeTableData() }
|
||||
func (t *mockModel) Peek() *render.TableData { return makeTableData() }
|
||||
func (t *mockModel) ClusterWide() bool { return false }
|
||||
func (t *mockModel) GetNamespace() string { return "blee" }
|
||||
func (t *mockModel) SetNamespace(string) {}
|
||||
|
|
@ -141,8 +141,8 @@ func (t *mockModel) ToYAML(ctx context.Context, path string) (string, error) {
|
|||
func (t *mockModel) InNamespace(string) bool { return true }
|
||||
func (t *mockModel) SetRefreshRate(time.Duration) {}
|
||||
|
||||
func makeTableData() render.TableData {
|
||||
return render.TableData{
|
||||
func makeTableData() *render.TableData {
|
||||
return &render.TableData{
|
||||
Namespace: client.ClusterScope,
|
||||
Header: render.Header{
|
||||
render.HeaderColumn{Name: "RESOURCE"},
|
||||
|
|
|
|||
|
|
@ -222,7 +222,7 @@ func (b *Browser) Aliases() []string {
|
|||
// Model Protocol...
|
||||
|
||||
// TableDataChanged notifies view new data is available.
|
||||
func (b *Browser) TableDataChanged(data render.TableData) {
|
||||
func (b *Browser) TableDataChanged(data *render.TableData) {
|
||||
var cancel context.CancelFunc
|
||||
b.mx.RLock()
|
||||
cancel = b.cancelFn
|
||||
|
|
|
|||
|
|
@ -37,21 +37,18 @@ func NewContainer(gvr client.GVR) ResourceViewer {
|
|||
return &c
|
||||
}
|
||||
|
||||
func (c *Container) portForwardIndicator(data render.TableData) render.TableData {
|
||||
func (c *Container) portForwardIndicator(data *render.TableData) {
|
||||
ff := c.App().factory.Forwarders()
|
||||
|
||||
col := data.IndexOfHeader("PF")
|
||||
for _, re := range data.RowEvents {
|
||||
if ff.IsContainerForwarded(c.GetTable().Path, re.Row.ID) {
|
||||
re.Row.Fields[col] = "[orange::b]Ⓕ"
|
||||
}
|
||||
}
|
||||
|
||||
return data
|
||||
}
|
||||
|
||||
func (c *Container) decorateRows(data render.TableData) render.TableData {
|
||||
return decorateCpuMemHeaderRows(c.App(), data)
|
||||
func (c *Container) decorateRows(data *render.TableData) {
|
||||
decorateCpuMemHeaderRows(c.App(), data)
|
||||
}
|
||||
|
||||
// Name returns the component name.
|
||||
|
|
|
|||
|
|
@ -179,7 +179,7 @@ func fqn(ns, n string) string {
|
|||
return ns + "/" + n
|
||||
}
|
||||
|
||||
func decorateCpuMemHeaderRows(app *App, data render.TableData) render.TableData {
|
||||
func decorateCpuMemHeaderRows(app *App, data *render.TableData) *render.TableData {
|
||||
for colIndex, header := range data.Header {
|
||||
check := ""
|
||||
if header.Name == "%CPU/L" {
|
||||
|
|
|
|||
|
|
@ -71,9 +71,9 @@ func (n *Namespace) useNamespace(fqn string) {
|
|||
}
|
||||
}
|
||||
|
||||
func (n *Namespace) decorate(data render.TableData) render.TableData {
|
||||
func (n *Namespace) decorate(data *render.TableData) {
|
||||
if n.App().Conn() == nil || len(data.RowEvents) == 0 {
|
||||
return data
|
||||
return
|
||||
}
|
||||
|
||||
// checks if all ns is in the list if not add it.
|
||||
|
|
@ -99,6 +99,4 @@ func (n *Namespace) decorate(data render.TableData) render.TableData {
|
|||
re.Kind = render.EventUnchanged
|
||||
}
|
||||
}
|
||||
|
||||
return data
|
||||
}
|
||||
|
|
|
|||
|
|
@ -48,7 +48,7 @@ func NewPod(gvr client.GVR) ResourceViewer {
|
|||
return &p
|
||||
}
|
||||
|
||||
func (p *Pod) portForwardIndicator(data render.TableData) render.TableData {
|
||||
func (p *Pod) portForwardIndicator(data *render.TableData) {
|
||||
ff := p.App().factory.Forwarders()
|
||||
|
||||
col := data.IndexOfHeader("PF")
|
||||
|
|
@ -57,8 +57,7 @@ func (p *Pod) portForwardIndicator(data render.TableData) render.TableData {
|
|||
re.Row.Fields[col] = "[orange::b]Ⓕ"
|
||||
}
|
||||
}
|
||||
|
||||
return decorateCpuMemHeaderRows(p.App(), data)
|
||||
decorateCpuMemHeaderRows(p.App(), data)
|
||||
}
|
||||
|
||||
func (p *Pod) bindDangerousKeys(aa ui.KeyActions) {
|
||||
|
|
|
|||
|
|
@ -43,7 +43,7 @@ func (p *Popeye) Init(ctx context.Context) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (p *Popeye) decorateRows(data render.TableData) render.TableData {
|
||||
func (p *Popeye) decorateRows(data *render.TableData) {
|
||||
var sum int
|
||||
for _, re := range data.RowEvents {
|
||||
n, err := strconv.Atoi(re.Row.Fields[1])
|
||||
|
|
@ -58,8 +58,6 @@ func (p *Popeye) decorateRows(data render.TableData) render.TableData {
|
|||
letter = grade(score)
|
||||
}
|
||||
p.GetTable().Extras = fmt.Sprintf("Score %d -- %s", score, letter)
|
||||
|
||||
return data
|
||||
}
|
||||
|
||||
func (p *Popeye) bindKeys(aa ui.KeyActions) {
|
||||
|
|
|
|||
|
|
@ -38,7 +38,7 @@ func computeFilename(screenDumpDir, cluster, ns, title, path string) (string, er
|
|||
return strings.ToLower(filepath.Join(dir, fName)), nil
|
||||
}
|
||||
|
||||
func saveTable(screenDumpDir, cluster, title, path string, data render.TableData) (string, error) {
|
||||
func saveTable(screenDumpDir, cluster, title, path string, data *render.TableData) (string, error) {
|
||||
ns := data.Namespace
|
||||
if client.IsClusterWide(ns) {
|
||||
ns = client.NamespaceAll
|
||||
|
|
|
|||
|
|
@ -58,7 +58,7 @@ func TestTableNew(t *testing.T) {
|
|||
}
|
||||
data.Namespace = ""
|
||||
|
||||
v.Update(*data, false)
|
||||
v.Update(data, false)
|
||||
assert.Equal(t, 3, v.GetRowCount())
|
||||
}
|
||||
|
||||
|
|
@ -127,7 +127,7 @@ func (t *mockTableModel) SetLabelFilter(string) {}
|
|||
func (t *mockTableModel) Empty() bool { return false }
|
||||
func (t *mockTableModel) Count() int { return 1 }
|
||||
func (t *mockTableModel) HasMetrics() bool { return true }
|
||||
func (t *mockTableModel) Peek() render.TableData { return makeTableData() }
|
||||
func (t *mockTableModel) Peek() *render.TableData { return makeTableData() }
|
||||
func (t *mockTableModel) Refresh(context.Context) error { return nil }
|
||||
func (t *mockTableModel) ClusterWide() bool { return false }
|
||||
func (t *mockTableModel) GetNamespace() string { return "blee" }
|
||||
|
|
@ -155,7 +155,7 @@ func (t *mockTableModel) ToYAML(ctx context.Context, path string) (string, error
|
|||
func (t *mockTableModel) InNamespace(string) bool { return true }
|
||||
func (t *mockTableModel) SetRefreshRate(time.Duration) {}
|
||||
|
||||
func makeTableData() render.TableData {
|
||||
func makeTableData() *render.TableData {
|
||||
t := render.NewTableData()
|
||||
t.Header = render.Header{
|
||||
render.HeaderColumn{Name: "NAMESPACE"},
|
||||
|
|
@ -187,7 +187,7 @@ func makeTableData() render.TableData {
|
|||
},
|
||||
}
|
||||
|
||||
return *t
|
||||
return t
|
||||
}
|
||||
|
||||
func makeContext() context.Context {
|
||||
|
|
|
|||
Loading…
Reference in New Issue