From 79a0923eb6d0e3e9e44436fbc83d11ecebff120b Mon Sep 17 00:00:00 2001 From: Kjeld Schouten-Lebbing Date: Tue, 28 Sep 2021 15:11:36 +0200 Subject: [PATCH] (tests) move back to ruby based tests (#1051) * (tests) move back to ruby based tests * move workflow back to using Ruby --- .devcontainer.json | 32 - .github/workflows/apps.test.yaml | 47 +- .vscode/extensions.json | 2 +- .vscode/launch.json | 36 +- Gemfile | 12 + go.mod | 15 - go.sum | 1146 ---------- listOfFiles | 1921 ----------------- test.txt | 52 - tests/helmunit/helmchart.go | 133 -- tests/helmunit/manifestCollection.go | 47 - tests/helmunit/utils.go | 37 - tests/library/common/cert_spec.rb | 322 +++ .../common/container_resources_spec.rb | 90 + tests/library/common/container_spec.rb | 380 ++++ tests/library/common/controller_spec.rb | 60 + tests/library/common/hpa_spec.rb | 120 + tests/library/common/ingress_spec.rb | 281 +++ tests/library/common/job_permissions_spec.rb | 347 +++ tests/library/common/pod_spec.rb | 316 +++ tests/library/common/portal_spec.rb | 313 +++ tests/library/common/pvc_spec.rb | 110 + tests/library/common/service_spec.rb | 223 ++ tests/test_helper.rb | 146 ++ 24 files changed, 2758 insertions(+), 3430 deletions(-) delete mode 100644 .devcontainer.json create mode 100644 Gemfile delete mode 100644 go.mod delete mode 100644 go.sum delete mode 100644 listOfFiles delete mode 100644 test.txt delete mode 100644 tests/helmunit/helmchart.go delete mode 100644 tests/helmunit/manifestCollection.go delete mode 100644 tests/helmunit/utils.go create mode 100644 tests/library/common/cert_spec.rb create mode 100644 tests/library/common/container_resources_spec.rb create mode 100644 tests/library/common/container_spec.rb create mode 100644 tests/library/common/controller_spec.rb create mode 100644 tests/library/common/hpa_spec.rb create mode 100644 tests/library/common/ingress_spec.rb create mode 100644 tests/library/common/job_permissions_spec.rb create mode 100644 tests/library/common/pod_spec.rb create mode 100644 tests/library/common/portal_spec.rb create mode 100644 tests/library/common/pvc_spec.rb create mode 100644 tests/library/common/service_spec.rb create mode 100644 tests/test_helper.rb diff --git a/.devcontainer.json b/.devcontainer.json deleted file mode 100644 index 606150d34cd..00000000000 --- a/.devcontainer.json +++ /dev/null @@ -1,32 +0,0 @@ -// For format details, see https://aka.ms/devcontainer.json. For config options, see the README at: -// https://github.com/microsoft/vscode-dev-containers/tree/v0.154.0/containers/ruby -{ - "name": "TrueCharts-Dev", - "build": { - "context": "..", - "dockerfile": "containers/dev/devcontainer/Dockerfile", - "args": { - "VERSION": "1.16", - } - }, - - // Set *default* container specific settings.json values on container create. - "settings": { - "terminal.integrated.shell.linux": "/bin/bash" - }, - - // Add the IDs of extensions you want installed when the container is created. - "extensions": [ - "ms-kubernetes-tools.vscode-kubernetes-tools", - "golang.go" - ], - - // Use 'forwardPorts' to make a list of ports inside the container available locally. - // "forwardPorts": [], - - // Use 'postCreateCommand' to run commands after the container is created. - // "postCreateCommand": "export RUBYJQ_USE_SYSTEM_LIBRARIES=1 && bundle install", - - // Comment out connect as root instead. More info: https://aka.ms/vscode-remote/containers/non-root. - "remoteUser": "vscode" -} diff --git a/.github/workflows/apps.test.yaml b/.github/workflows/apps.test.yaml index 4c33691040d..d0f5ef03105 100644 --- a/.github/workflows/apps.test.yaml +++ b/.github/workflows/apps.test.yaml @@ -123,47 +123,22 @@ jobs: # Unit-Test section ## - # Get values for cache paths to be used in later steps - - id: go-cache-paths - if: ${{ steps.prep-lint.outputs.unittests == 'true' }} - run: | - echo "::set-output name=go-build::$(go env GOCACHE)" - echo "::set-output name=go-mod::$(go env GOMODCACHE)" - - # Cache go build cache, used to speedup go test - - name: Go Build Cache - if: ${{ steps.prep-lint.outputs.unittests == 'true' }} - uses: actions/cache@v2 + - name: Install Ruby for unittests + if: ${{ matrix.app == 'common' && matrix.app != '.gitkee' }} + uses: ruby/setup-ruby@v1 with: - path: ${{ steps.go-cache-paths.outputs.go-build }} - key: ${{ runner.os }}-go-build-${{ hashFiles('**/go.sum') }} + ruby-version: 2.7 - - name: Download modules - if: ${{ steps.prep-lint.outputs.unittests == 'true' }} + - name: Install dependencies + if: ${{ matrix.app == 'common' && matrix.app != '.gitkee' }} run: | - go mod download - - name: Run unit tests - if: ${{ steps.prep-lint.outputs.unittests == 'true' }} - run: | - go test ./charts/.../tests -json | tee test.json - - name: Annotate unit tests - if: ${{ steps.prep-lint.outputs.unittests == 'true' }} - uses: guyarb/golang-test-annotations@v0.5.0 - with: - test-results: test.json + export RUBYJQ_USE_SYSTEM_LIBRARIES=1 + bundle install - - name: Parse Unit Tests - if: ${{ steps.prep-lint.outputs.unittests == 'true' }} + - name: Run common unit tests + if: ${{ matrix.app == 'common' && matrix.app != '.gitkee' }} run: | - if grep -q "FAIL" test.json - then - echo "Unit Test reported FAILED"; - exit 1 - else - echo "Unit Test reported OK"; - exit 0 - fi - + bundle exec m -r tests ## # Chart-Testing Section diff --git a/.vscode/extensions.json b/.vscode/extensions.json index 04d2d7649b8..71e56ca600f 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -1,6 +1,6 @@ { "recommendations": [ "ms-vscode-remote.remote-containers", - "golang.go" + "rebornix.ruby" ] } diff --git a/.vscode/launch.json b/.vscode/launch.json index 8792e00ecef..b619b7ba712 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -1,18 +1,34 @@ { + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 "version": "0.2.0", "configurations": [ { - "name": "Common", - "type": "go", + "name": "UnitTest - active spec file only", + "type": "Ruby", "request": "launch", - "mode": "test", - "remotePath": "", - "port": 2345, - "host": "127.0.0.1", - "program": "${workspaceRoot}/charts/library/common/tests/", - "env": {}, - "args": ["-test.v"], - "showLog": true + "cwd": "${workspaceRoot}", + "program": "/usr/local/bin/bundle", + "args": [ + "exec", + "m", + "-r", + "${relativeFile}" + ] + }, + { + "name": "UnitTest - all spec files", + "type": "Ruby", + "request": "launch", + "cwd": "${workspaceRoot}", + "program": "/usr/local/bin/bundle", + "args": [ + "exec", + "m", + "-r", + "${workspaceFolder}/tests" + ] } ] } diff --git a/Gemfile b/Gemfile new file mode 100644 index 00000000000..ac5b8e7319a --- /dev/null +++ b/Gemfile @@ -0,0 +1,12 @@ +# frozen_string_literal: true + +source 'https://rubygems.org' + +group :test do + gem 'm' + gem 'minitest' + gem 'minitest-implicit-subject' + gem 'minitest-reporters' + gem 'pry' + gem 'ruby-jq' +end diff --git a/go.mod b/go.mod deleted file mode 100644 index e15ab776706..00000000000 --- a/go.mod +++ /dev/null @@ -1,15 +0,0 @@ -module github.com/truecharts/apps - -go 1.16 - -require ( - github.com/Jeffail/gabs/v2 v2.6.1 - github.com/stretchr/testify v1.7.0 - helm.sh/helm/v3 v3.6.1 - sigs.k8s.io/yaml v1.3.0 -) - -replace ( - github.com/docker/distribution => github.com/docker/distribution v0.0.0-20191216044856-a8371794149d - github.com/docker/docker => github.com/moby/moby v17.12.0-ce-rc1.0.20200618181300-9dc6525e6118+incompatible -) diff --git a/go.sum b/go.sum deleted file mode 100644 index cee62a68a73..00000000000 --- a/go.sum +++ /dev/null @@ -1,1146 +0,0 @@ -bazil.org/fuse v0.0.0-20160811212531-371fbbdaa898/go.mod h1:Xbm+BRKSBEpa4q4hTSxohYNQpsxXPbPry4JJWOB3LB8= -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= -cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= -cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= -cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= -cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= -cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= -cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= -cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= -cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= -cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= -cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= -cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= -cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= -cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= -cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= -cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= -cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= -cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= -cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= -cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= -cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= -dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= -github.com/Azure/azure-sdk-for-go v16.2.1+incompatible/go.mod h1:9XXNKU+eRnpl9moKnB4QOLf1HestfXbmab5FXxiDBjc= -github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78 h1:w+iIsaOQNcT7OZ575w+acHgRric5iCyQh+xv+KJ4HB8= -github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= -github.com/Azure/go-autorest v10.8.1+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= -github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= -github.com/Azure/go-autorest/autorest v0.11.12/go.mod h1:eipySxLmqSyC5s5k1CLupqet0PSENBEDP93LQ9a8QYw= -github.com/Azure/go-autorest/autorest/adal v0.9.5/go.mod h1:B7KF7jKIeC9Mct5spmyCB/A8CG/sEz1vwIRGv/bbw7A= -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/go.mod h1:LTp+uSrOhSkaKrUy935gNZuuIPPVsHlr9DSOxSayd+k= -github.com/Azure/go-autorest/logger v0.2.0/go.mod h1:T9E3cAhj2VqvPOtCYAvby9aBXkZmbF5NWuPV8+WeEW8= -github.com/Azure/go-autorest/tracing v0.6.0/go.mod h1:+vhtPC754Xsa23ID7GlGsrdKBpUA79WCAKPPZVC2DeU= -github.com/BurntSushi/toml v0.3.1 h1:WXkYYl6Yr3qBf1K79EBnL4mak0OimBfB0XUf9Vl28OQ= -github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= -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/DATA-DOG/go-sqlmock v1.5.0/go.mod h1:f/Ixk793poVmq4qj/V1dPUg2JEAKC73Q5eFN3EC/SaM= -github.com/Jeffail/gabs/v2 v2.6.1 h1:wwbE6nTQTwIMsMxzi6XFQQYRZ6wDc1mSdxoAN+9U4Gk= -github.com/Jeffail/gabs/v2 v2.6.1/go.mod h1:xCn81vdHKxFUuWWAaD5jCTQDNPBMh5pPs9IJ+NcziBI= -github.com/Knetic/govaluate v3.0.1-0.20171022003610-9aa49832a739+incompatible/go.mod h1:r7JcOSlj0wfOMncg0iLm8Leh48TZaKVeNIfJntJ2wa0= -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.1 h1:5nUrii3FMTL5diU80unEVvNevw1nH4+ZV4DSLVJLSYI= -github.com/Masterminds/goutils v1.1.1/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= -github.com/Masterminds/semver/v3 v3.1.1 h1:hLg3sBzpNErnxhQtUy/mmLR2I9foDujNK030IGemrRc= -github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= -github.com/Masterminds/sprig/v3 v3.2.2 h1:17jRggJu518dr3QaafizSXOjKYp94wKfABxUmyxvxX8= -github.com/Masterminds/sprig/v3 v3.2.2/go.mod h1:UoaO7Yp8KlPnJIYWTFkMaqPUYKTfGFPhxNuwnnxkKlk= -github.com/Masterminds/squirrel v1.5.0 h1:JukIZisrUXadA9pl3rMkjhiamxiB0cXiu+HGp/Y8cY8= -github.com/Masterminds/squirrel v1.5.0/go.mod h1:NNaOrjSoIDfDA40n7sr2tPNZRfjzjA400rg+riTZj10= -github.com/Masterminds/vcs v1.13.1/go.mod h1:N09YCmOQr6RLxC6UNHzuVwAdodYbbnycGHSmwVJjcKA= -github.com/Microsoft/go-winio v0.4.16-0.20201130162521-d1ffc52c7331/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0= -github.com/Microsoft/go-winio v0.4.16 h1:FtSW/jqD+l4ba5iPBj9CODVtgfYAD8w2wS923g/cFDk= -github.com/Microsoft/go-winio v0.4.16/go.mod h1:XB6nPKklQyQ7GC9LdcBEcBl8PF76WugXOPRXwdLnMv0= -github.com/Microsoft/hcsshim v0.8.14 h1:lbPVK25c1cu5xTLITwpUcxoA9vKrKErASPYygvouJns= -github.com/Microsoft/hcsshim v0.8.14/go.mod h1:NtVKoYxQuTLx6gEq0L96c9Ju4JbRJ4nY2ow3VK6a9Lg= -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= -github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= -github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= -github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI= -github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= -github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M= -github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= -github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d h1:UrqY+r/OJnIp5u0s1SbQ8dVfLCZJsnvazdBP5hS4iRs= -github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d/go.mod h1:HI8ITrYtUY+O+ZhtlqUnD8+KwNPOyugEhfP9fdUIaEQ= -github.com/Shopify/sarama v1.19.0/go.mod h1:FVkBWblsNy7DGZRfXLU0O9RCGt5g3g3yEuWXgklEdEo= -github.com/Shopify/toxiproxy v2.1.4+incompatible/go.mod h1:OXgGpZ6Cli1/URJOF1DMxUHB2q5Ap20/P/eIdh4G0pI= -github.com/VividCortex/gohistogram v1.0.0/go.mod h1:Pf5mBqqDxYaXu3hDrrU+w6nw50o/4+TcAqDqk/vUH7g= -github.com/afex/hystrix-go v0.0.0-20180502004556-fa1af6a1f4f5/go.mod h1:SkGFH1ia65gfNATL8TAiHDNxPzPdmEL5uirI2Uyuz6c= -github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM= -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= -github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= -github.com/apache/thrift v0.12.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= -github.com/apache/thrift v0.13.0/go.mod h1:cp2SuWMxlEZw2r+iP2GNCdIi4C1qmUzdZFSVb+bacwQ= -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/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= -github.com/asaskevich/govalidator v0.0.0-20180720115003-f9ffefc3facf/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= -github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= -github.com/asaskevich/govalidator v0.0.0-20200428143746-21a406dcc535 h1:4daAzAu0S6Vi7/lbWECcX0j45yZReDZ56BQsrVBOEEY= -github.com/asaskevich/govalidator v0.0.0-20200428143746-21a406dcc535/go.mod h1:oGkLhpf+kjZl6xBf758TQhh5XrAeiJv/7FRz/2spLIg= -github.com/aws/aws-lambda-go v1.13.3/go.mod h1:4UKl9IzQMoD+QF79YdCuzCwp8VbmG4VAQwij/eHl5CU= -github.com/aws/aws-sdk-go v1.15.11/go.mod h1:mFuSZ37Z9YOHbQEwBWztmVzqXrEkub65tZoCYDt7FT0= -github.com/aws/aws-sdk-go v1.27.0/go.mod h1:KmX6BPdI08NWTb3/sm4ZGu5ShLoqVDhKgpiN924inxo= -github.com/aws/aws-sdk-go-v2 v0.18.0/go.mod h1:JWVYvqSMppoMJC0x5wdwiImzgXTI9FuZwxzkQq9wy+g= -github.com/beorn7/perks v0.0.0-20160804104726-4c0e84591b9a/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= -github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= -github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= -github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= -github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= -github.com/bitly/go-simplejson v0.5.0/go.mod h1:cXHtHw4XUPsvGaxgjIAn8PhEWG9NfngEKAMDJEczWVA= -github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= -github.com/blang/semver v3.5.1+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= -github.com/bmizerany/assert v0.0.0-20160611221934-b7ed37b82869/go.mod h1:Ekp36dRnpXw/yCqJaO+ZrUyxD+3VXMFFr56k5XYrpB4= -github.com/bshuster-repo/logrus-logstash-hook v0.4.1 h1:pgAtgj+A31JBVtEHu2uHuEx0n+2ukqUJnS2vVe5pQNA= -github.com/bshuster-repo/logrus-logstash-hook v0.4.1/go.mod h1:zsTqEiSzDgAa/8GZR7E1qaXrhYNDKBYy5/dWPTIflbk= -github.com/bugsnag/bugsnag-go v0.0.0-20141110184014-b1d153021fcd h1:rFt+Y/IK1aEZkEHchZRSq9OQbsSzIT/OrI8YFFmRIng= -github.com/bugsnag/bugsnag-go v0.0.0-20141110184014-b1d153021fcd/go.mod h1:2oa8nejYd4cQ/b0hMIopN0lCRxU0bueqREvZLWFrtK8= -github.com/bugsnag/osext v0.0.0-20130617224835-0dd3f918b21b h1:otBG+dV+YK+Soembjv71DPz3uX/V/6MMlSyD9JBQ6kQ= -github.com/bugsnag/osext v0.0.0-20130617224835-0dd3f918b21b/go.mod h1:obH5gd0BsqsP2LwDJ9aOkm/6J86V6lyAXCoQWGw3K50= -github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0 h1:nvj0OLI3YqYXer/kZD8Ri1aaunCxIEsOst1BVJswV0o= -github.com/bugsnag/panicwrap v0.0.0-20151223152923-e2c28503fcd0/go.mod h1:D/8v3kj0zr8ZAKg1AQ6crr+5VwKN5eIywRkfhyM/+dE= -github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= -github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= -github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/cespare/xxhash v1.1.0 h1:a6HrQnmkObjyL+Gs60czilIUGqrzKutQD6XZog3p+ko= -github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= -github.com/cespare/xxhash/v2 v2.1.1 h1:6MnRN8NT7+YBpUIWxHtefFZOKTAPgGjpQSxqLNn0+qY= -github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/chai2010/gettext-go v0.0.0-20160711120539-c6fed771bfd5/go.mod h1:/iP1qXHoty45bqomnu2LM+VVyAEdWN+vtSHGlQgyxbw= -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.0.0-20200110133405-4032b1d8aae3/go.mod h1:MA5e5Lr8slmEg9bt0VpxxWqJlO4iwu3FBdHUzV7wQVg= -github.com/clbanning/x2j v0.0.0-20191024224557-825249438eec/go.mod h1:jMjuTZXRI4dUb/I5gc9Hdhagfvm9+RyrPryS/auMzxE= -github.com/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= -github.com/codahale/hdrhistogram v0.0.0-20161010025455-3a0bb77429bd/go.mod h1:sE/e/2PUdi/liOCUjSTXgM1o87ZssimdTWN964YiIeI= -github.com/containerd/cgroups v0.0.0-20200531161412-0dbf7f05ba59 h1:qWj4qVYZ95vLWwqyNJCQg7rDsG5wPdze0UaPolH7DUk= -github.com/containerd/cgroups v0.0.0-20200531161412-0dbf7f05ba59/go.mod h1:pA0z1pT8KYB3TCXK/ocprsh7MAkoW8bZVzPdih9snmM= -github.com/containerd/console v0.0.0-20180822173158-c12b1e7919c1/go.mod h1:Tj/on1eG8kiEhd0+fhSDzsPAFESxzBBvdyEgyryXffw= -github.com/containerd/containerd v1.3.2/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/containerd v1.4.4 h1:rtRG4N6Ct7GNssATwgpvMGfnjnwfjnu/Zs9W3Ikzq+M= -github.com/containerd/containerd v1.4.4/go.mod h1:bC6axHOhabU15QhwfG7w5PipXdVtMXFTttgp+kVtyUA= -github.com/containerd/continuity v0.0.0-20190426062206-aaeac12a7ffc/go.mod h1:GL3xCUCBDV3CZiTSEKksMWbLE66hEyuu9qyDOOqM47Y= -github.com/containerd/continuity v0.0.0-20201208142359-180525291bb7 h1:6ejg6Lkk8dskcM7wQ28gONkukbQkM4qpj4RnYbpFzrI= -github.com/containerd/continuity v0.0.0-20201208142359-180525291bb7/go.mod h1:kR3BEg7bDFaEddKm54WSmrol1fKWDU1nKYkgrcgZT7Y= -github.com/containerd/fifo v0.0.0-20190226154929-a9fb20d87448/go.mod h1:ODA38xgv3Kuk8dQz2ZQXpnv/UZZUHUCL7pnLehbXgQI= -github.com/containerd/go-runc v0.0.0-20180907222934-5a6d9f37cfa3/go.mod h1:IV7qH3hrUgRmyYrtgEeGWJfWbgcHL9CSRruz2Vqcph0= -github.com/containerd/ttrpc v0.0.0-20190828154514-0e0f228740de/go.mod h1:PvCDdDGpgqzQIzDW1TphrGLssLDZp2GuS+X5DkEJB8o= -github.com/containerd/typeurl v0.0.0-20180627222232-a93fcdb778cd/go.mod h1:Cm3kwCdlkCfMSHURc+r6fwoGH6/F1hH3S4sg0rLFWPc= -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-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= -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-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd/v22 v22.0.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= -github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= -github.com/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/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= -github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/creack/pty v1.1.11 h1:07n33Z8lZxZ2qwegKbObQohDhXDQxiMMz1NOUGYlesw= -github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/cyphar/filepath-securejoin v0.2.2 h1:jCwT2GTP+PY5nBz3c/YL5PAIbusElVrPujOBSCj8xRg= -github.com/cyphar/filepath-securejoin v0.2.2/go.mod h1:FpkQEhXnPnOthhzymB7CGsFk2G9VLXONKD9G7QGMM+4= -github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= -github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/daviddengcn/go-colortext v0.0.0-20160507010035-511bcaf42ccd/go.mod h1:dv4zxwHi5C/8AeI+4gX4dCWOIvNi7I6JCSX0HvlKPgE= -github.com/deislabs/oras v0.11.1 h1:oo2J/3vXdcti8cjFi8ghMOkx0OacONxHC8dhJ17NdJ0= -github.com/deislabs/oras v0.11.1/go.mod h1:39lCtf8Q6WDC7ul9cnyWXONNzKvabEKk+AX+L0ImnQk= -github.com/denisenkom/go-mssqldb v0.0.0-20191001013358-cfbb681360f0/go.mod h1:xbL0rPBG9cCiLr28tMa8zpbdarY27NDyej4t/EjAShU= -github.com/denverdino/aliyungo v0.0.0-20190125010748-a747050bb1ba/go.mod h1:dV8lFg6daOBZbT6/BDGIz6Y3WFGn8juu6G+CQ6LHtl0= -github.com/dgrijalva/jwt-go v0.0.0-20170104182250-a601269ab70c/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= -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/dnaeon/go-vcr v1.0.1/go.mod h1:aBB1+wY4s93YsC3HHjMBMrwTj2R9FHDzUr9KyGc8n1E= -github.com/docker/cli v20.10.5+incompatible h1:bjflayQbWg+xOkF2WPEAOi4Y7zWhR7ptoPhV/VqLVDE= -github.com/docker/cli v20.10.5+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= -github.com/docker/distribution v0.0.0-20191216044856-a8371794149d h1:jC8tT/S0OGx2cswpeUTn4gOIea8P08lD3VFQT0cOZ50= -github.com/docker/distribution v0.0.0-20191216044856-a8371794149d/go.mod h1:0+TTO4EOBfRPhZXAeF1Vu+W3hHZ8eLp8PgKVZlcvtFY= -github.com/docker/docker-credential-helpers v0.6.3 h1:zI2p9+1NQYdnG6sMU26EX4aVGlqbInSQxQXLvzJ4RPQ= -github.com/docker/docker-credential-helpers v0.6.3/go.mod h1:WRaJzqw3CTB9bk10avuGsjVBZsD05qeibJ1/TYlvc0Y= -github.com/docker/go-connections v0.4.0 h1:El9xVISelRB7BuFusrZozjnkIM5YnzCViNKohAFqRJQ= -github.com/docker/go-connections v0.4.0/go.mod h1:Gbd7IOopHjR8Iph03tsViu4nIes5XhDvyHbTtUxmeec= -github.com/docker/go-metrics v0.0.0-20180209012529-399ea8c73916 h1:yWHOI+vFjEsAakUTSrtqc/SAHrhSkmn48pqjidZX3QA= -github.com/docker/go-metrics v0.0.0-20180209012529-399ea8c73916/go.mod h1:/u0gXw0Gay3ceNrsHubL3BtdOL2fHf93USgMTe0W5dI= -github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= -github.com/docker/go-units v0.4.0 h1:3uh0PgVws3nIA0Q+MwDC8yjEPf9zjRfZZWXZYDct3Tw= -github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= -github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1 h1:ZClxb8laGDf5arXfYcAtECDFgAgHklGI8CxgjHnXKJ4= -github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1/go.mod h1:cyGadeNEkKy96OOhEzfZl+yxihPEzKnqJwvfuSUqbZE= -github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= -github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/eapache/go-resiliency v1.1.0/go.mod h1:kFI+JgMyC7bLPUVY133qvEBtVayf5mFgVsvEsIPBvNs= -github.com/eapache/go-xerial-snappy v0.0.0-20180814174437-776d5712da21/go.mod h1:+020luEh2TKB4/GOp8oxxtq0Daoen/Cii55CzbTV6DU= -github.com/eapache/queue v1.1.0/go.mod h1:6eCeP0CKFpHLu8blIFXhExK/dRa7WDZfr6jVFPTqq+I= -github.com/edsrzf/mmap-go v1.0.0/go.mod h1:YO35OhQPt3KJa3ryjFM5Bs14WD66h8eGKpfaBNrHW5M= -github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153 h1:yUdfgN0XgIJw7foRItutHYUIhlcKzcSf5vDpdhQAKTc= -github.com/elazarl/goproxy v0.0.0-20180725130230-947c36da3153/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= -github.com/emicklei/go-restful v0.0.0-20170410110728-ff4f55a20633/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= -github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= -github.com/envoyproxy/go-control-plane v0.6.9/go.mod h1:SBwIajubJHhxtWwsL9s8ss4safvEdbitLhGGK48rN6g= -github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/evanphx/json-patch v4.5.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= -github.com/evanphx/json-patch v4.9.0+incompatible h1:kLcOMZeuLAJvL2BPWLMIj5oaZQobrkAqrL+WFZwQses= -github.com/evanphx/json-patch v4.9.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= -github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d h1:105gxyaGwCFad8crR9dcMQWvV9Hvulu6hwUh4tWPJnM= -github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d/go.mod h1:ZZMPRZwes7CROmyNKgQzC3XPs6L/G2EJLHddWejkmf4= -github.com/fatih/camelcase v1.0.0/go.mod h1:yN2Sb0lFhZJUdVvtELVWefmrXpuZESvPmqwoZc+/fpc= -github.com/fatih/color v1.7.0 h1:DkWD4oS2D8LGGgTQ6IvwJJXSL5Vp2ffcQg58nFV38Ys= -github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= -github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= -github.com/franela/goblin v0.0.0-20200105215937-c9ffbefa60db/go.mod h1:7dvUGVsVBjqR7JHJk0brhHOZYGmfBYOrK0ZhYMEtBr4= -github.com/franela/goreq v0.0.0-20171204163338-bcd34c9993f8/go.mod h1:ZhphrRTfi2rbfLwlschooIH4+wKKDR4Pdxhh+TRoA20= -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/fvbommel/sortorder v1.0.1/go.mod h1:uk88iVf1ovNn1iLfgUVU2F9o5eO30ui720w+kxuqRs0= -github.com/garyburd/redigo v0.0.0-20150301180006-535138d7bcd7 h1:LofdAjjjqCSXMwLGgOgnE+rdPuvX9DxCqaHwKy7i/ko= -github.com/garyburd/redigo v0.0.0-20150301180006-535138d7bcd7/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY= -github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/globalsign/mgo v0.0.0-20180905125535-1ca0a4f7cbcb/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= -github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= -github.com/go-errors/errors v1.0.1 h1:LUHzmkK3GUKUrL/1gfBUxAHzcev3apQlezX/+O7ma6w= -github.com/go-errors/errors v1.0.1/go.mod h1:f4zRHt4oKfwPJE5k8C9vpYG+aDHdBFUsgrm6/TyX73Q= -github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-ini/ini v1.25.4/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= -github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/kit v0.10.0/go.mod h1:xUsJbQ/Fp4kEt7AFgCuvyX4a71u8h9jB8tj/ORgOZ7o= -github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= -github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= -github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= -github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= -github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= -github.com/go-logr/logr v0.4.0 h1:K7/B1jt6fIBQVd4Owv2MqGQClcgf0R266+7C/QjRcLc= -github.com/go-logr/logr v0.4.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= -github.com/go-openapi/analysis v0.0.0-20180825180245-b006789cd277/go.mod h1:k70tL6pCuVxPJOHXQ+wIac1FUrvNkHolPie/cLEU6hI= -github.com/go-openapi/analysis v0.17.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= -github.com/go-openapi/analysis v0.18.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= -github.com/go-openapi/analysis v0.19.2/go.mod h1:3P1osvZa9jKjb8ed2TPng3f0i/UY9snX6gxi44djMjk= -github.com/go-openapi/analysis v0.19.5/go.mod h1:hkEAkxagaIvIP7VTn8ygJNkd4kAYON2rCu0v0ObL0AU= -github.com/go-openapi/errors v0.17.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0= -github.com/go-openapi/errors v0.18.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0= -github.com/go-openapi/errors v0.19.2/go.mod h1:qX0BLWsyaKfvhluLejVpVNwNRdXZhEbTA4kxxpKBC94= -github.com/go-openapi/jsonpointer v0.17.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= -github.com/go-openapi/jsonpointer v0.18.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= -github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg= -github.com/go-openapi/jsonpointer v0.19.3 h1:gihV7YNZK1iK6Tgwwsxo2rJbD1GTbdm72325Bq8FI3w= -github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= -github.com/go-openapi/jsonreference v0.17.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= -github.com/go-openapi/jsonreference v0.18.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= -github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc= -github.com/go-openapi/jsonreference v0.19.3 h1:5cxNfTy0UVC3X8JL5ymxzyoUZmo8iZb+jeTWn7tUa8o= -github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8= -github.com/go-openapi/loads v0.17.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= -github.com/go-openapi/loads v0.18.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= -github.com/go-openapi/loads v0.19.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= -github.com/go-openapi/loads v0.19.2/go.mod h1:QAskZPMX5V0C2gvfkGZzJlINuP7Hx/4+ix5jWFxsNPs= -github.com/go-openapi/loads v0.19.4/go.mod h1:zZVHonKd8DXyxyw4yfnVjPzBjIQcLt0CCsn0N0ZrQsk= -github.com/go-openapi/runtime v0.0.0-20180920151709-4f900dc2ade9/go.mod h1:6v9a6LTXWQCdL8k1AO3cvqx5OtZY/Y9wKTgaoP6YRfA= -github.com/go-openapi/runtime v0.19.0/go.mod h1:OwNfisksmmaZse4+gpV3Ne9AyMOlP1lt4sK4FXt0O64= -github.com/go-openapi/runtime v0.19.4/go.mod h1:X277bwSUBxVlCYR3r7xgZZGKVvBd/29gLDlFGtJ8NL4= -github.com/go-openapi/spec v0.17.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= -github.com/go-openapi/spec v0.18.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= -github.com/go-openapi/spec v0.19.2/go.mod h1:sCxk3jxKgioEJikev4fgkNmwS+3kuYdJtcsZsD5zxMY= -github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo= -github.com/go-openapi/spec v0.19.5 h1:Xm0Ao53uqnk9QE/LlYV5DEU09UAgpliA85QoT9LzqPw= -github.com/go-openapi/spec v0.19.5/go.mod h1:Hm2Jr4jv8G1ciIAo+frC/Ft+rR2kQDh8JHKHb3gWUSk= -github.com/go-openapi/strfmt v0.17.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU= -github.com/go-openapi/strfmt v0.18.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU= -github.com/go-openapi/strfmt v0.19.0/go.mod h1:+uW+93UVvGGq2qGaZxdDeJqSAqBqBdl+ZPMF/cC8nDY= -github.com/go-openapi/strfmt v0.19.3/go.mod h1:0yX7dbo8mKIvc3XSKp7MNfxw4JytCfCD6+bY1AVL9LU= -github.com/go-openapi/strfmt v0.19.5/go.mod h1:eftuHTlB/dI8Uq8JJOyRlieZf+WkkxUuk0dgdHXr2Qk= -github.com/go-openapi/swag v0.17.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= -github.com/go-openapi/swag v0.18.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= -github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= -github.com/go-openapi/swag v0.19.5 h1:lTz6Ys4CmqqCQmZPBlbQENR1/GucA2bzYTE12Pw4tFY= -github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= -github.com/go-openapi/validate v0.18.0/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+MYsct2VUrAJ4= -github.com/go-openapi/validate v0.19.2/go.mod h1:1tRCw7m3jtI8eNWEEliiAqUIcBztB2KDnRCRMUi7GTA= -github.com/go-openapi/validate v0.19.8/go.mod h1:8DJv2CVJQ6kGNpFW6eV9N3JviE1C85nY1c2z52x1Gk4= -github.com/go-sql-driver/mysql v1.4.0/go.mod h1:zAC/RDZ24gD3HViQzih4MyKcchzm+sOG5ZlKdlhCg5w= -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= -github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/gobuffalo/envy v1.7.0/go.mod h1:n7DRkBerg/aorDM8kbduw5dN3oXGswK5liaSCx4T5NI= -github.com/gobuffalo/envy v1.7.1 h1:OQl5ys5MBea7OGCdvPbBJWRgnhC/fGona6QKfvFeau8= -github.com/gobuffalo/envy v1.7.1/go.mod h1:FurDp9+EDPE4aIUS3ZLyD+7/9fpx7YRt/ukY6jIHf0w= -github.com/gobuffalo/here v0.6.0/go.mod h1:wAG085dHOYqUpf+Ap+WOdrPTp5IYcDAs/x7PLa8Y5fM= -github.com/gobuffalo/logger v1.0.1 h1:ZEgyRGgAm4ZAhAO45YXMs5Fp+bzGLESFewzAVBMKuTg= -github.com/gobuffalo/logger v1.0.1/go.mod h1:2zbswyIUa45I+c+FLXuWl9zSWEiVuthsk8ze5s8JvPs= -github.com/gobuffalo/packd v0.3.0 h1:eMwymTkA1uXsqxS0Tpoop3Lc0u3kTfiMBE6nKtQU4g4= -github.com/gobuffalo/packd v0.3.0/go.mod h1:zC7QkmNkYVGKPw4tHpBQ+ml7W/3tIebgeo1b36chA3Q= -github.com/gobuffalo/packr/v2 v2.7.1 h1:n3CIW5T17T8v4GGK5sWXLVWJhCz7b5aNLSxW6gYim4o= -github.com/gobuffalo/packr/v2 v2.7.1/go.mod h1:qYEvAazPaVxy7Y7KR0W8qYEE+RymX74kETFqjFoFlOc= -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/godror/godror v0.13.3/go.mod h1:2ouUT4kdhUBk7TAkHWD4SN0CdI0pgEQbo8FVHhbSKWg= -github.com/gofrs/flock v0.8.0/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= -github.com/gogo/googleapis v1.1.0/go.mod h1:gf4bu3Q80BeJ6H1S1vYPm8/ELATdvryBaNFGgqEef3s= -github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.2.0/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= -github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= -github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/golang-sql/civil v0.0.0-20190719163853-cb61b32ac6fe/go.mod h1:8vg3r2VgvsThLBIFL93Qb5yWzgyZWhEmBwUJWevAkK0= -github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e h1:1r7pUrabqp18hOBcwBwiTsbnFeTZHV9eER/QT5JVZxY= -github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= -github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= -github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= -github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= -github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= -github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= -github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.4.3 h1:JjCZWpVbqXDqFVmTfYWEVTMIYrL/NPdPSCHPJ0T/raM= -github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/snappy v0.0.0-20180518054509-2e65f85255db/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golangplus/testing v0.0.0-20180327235837-af21d9c3145e/go.mod h1:0AA//k/eakGydO4jKRoRL2j92ZKSzTgj9tclaCrvXHk= -github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.0.0 h1:0udJVsspx3VBr5FwtLhQQtuAsVc79tTq0ocGIPAU6qo= -github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= -github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= -github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.2 h1:X2ev0eStA3AbceY54o37/0PQ/UWqKEiiO2dKL5OPaFM= -github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/gofuzz v1.1.0 h1:Hsa8mG0dQ46ij8Sl2AYJDUv1oA9/d6Vk+3LG99Oe02g= -github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= -github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= -github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= -github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.1.2 h1:EVhdT+1Kseyi1/pUmXKaFxYsDNy9RQYkMWRH68J/W7Y= -github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= -github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= -github.com/googleapis/gnostic v0.4.1 h1:DLJCy1n/vrD4HPjOvYcT8aYQXpPIzoRZONaYwyycI+I= -github.com/googleapis/gnostic v0.4.1/go.mod h1:LRhVm6pbyptWbWbuZ38d1eyptfvIytN3ir6b65WBswg= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= -github.com/gorilla/context v1.1.1/go.mod h1:kBGZzfjB9CEq2AlWe17Uuf7NDRt0dE0s8S51q0aT7Yg= -github.com/gorilla/handlers v0.0.0-20150720190736-60c7bfde3e33 h1:893HsJqtxp9z1SF76gg6hY70hRY1wVlTSnC/h1yUDCo= -github.com/gorilla/handlers v0.0.0-20150720190736-60c7bfde3e33/go.mod h1:Qkdc/uu4tH4g6mTK6auzZ766c4CA0Ng8+o/OAirnOIQ= -github.com/gorilla/mux v1.6.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gorilla/mux v1.7.2/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gorilla/mux v1.7.3 h1:gnP5JzjVOuiZD07fKKToCAOjS0yOpj/qPETTXCCS6hw= -github.com/gorilla/mux v1.7.3/go.mod h1:1lud6UwP+6orDFRuTfBEV8e9/aOM/c4fVVCaMa2zaAs= -github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= -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= -github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7 h1:pdN6V1QBWetyv/0+wjACpqVH+eVULgEjkurDLq3goeM= -github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= -github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= -github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= -github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= -github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= -github.com/hashicorp/consul/api v1.3.0/go.mod h1:MmDNSzIMUjNpY/mQ398R4bk2FnqQLoPndWW5VkKPlCE= -github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= -github.com/hashicorp/consul/sdk v0.3.0/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= -github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= -github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= -github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= -github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= -github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= -github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= -github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= -github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-version v1.2.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= -github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.1 h1:0hERBMJE1eitiLkihrMvRVBYAkpHzc/J3QdDN+dAcgU= -github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= -github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= -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/hpcloud/tail v1.0.0 h1:nfCOvKYfkgYP8hkirhJocXT2+zOD8yUNjXaWfTlyFKI= -github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/huandu/xstrings v1.3.1 h1:4jgBlKK6tLKFvO8u5pmYjG91cqytmDCDvGh7ECVFfFs= -github.com/huandu/xstrings v1.3.1/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= -github.com/hudl/fargo v1.3.0/go.mod h1:y3CKSmjA+wD2gak7sUSXTAoopbhU08POFhmITJgmKTg= -github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= -github.com/imdario/mergo v0.3.11 h1:3tnifQM4i+fbajXKBHXWEH+KvNHqojZ778UH75j3bGA= -github.com/imdario/mergo v0.3.11/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/influxdata/influxdb1-client v0.0.0-20191209144304-8bf82d3c094d/go.mod h1:qj24IKcXYK6Iy9ceXlo3Tc+vtHo9lIhSX5JddghvEPo= -github.com/jmespath/go-jmespath v0.0.0-20160202185014-0b12d6b521d8/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= -github.com/jmespath/go-jmespath v0.0.0-20160803190731-bd40a432e4c7/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= -github.com/jmespath/go-jmespath v0.0.0-20180206201540-c2b33e8439af/go.mod h1:Nht3zPeWKUH0NzdCt2Blrr5ys8VGpn0CEB0cQHVjt7k= -github.com/jmoiron/sqlx v1.3.1 h1:aLN7YINNZ7cYOPK3QC83dbM6KT0NMqVMw961TqrejlE= -github.com/jmoiron/sqlx v1.3.1/go.mod h1:2BljVx/86SuTyjE+aPYlHCTNvZrnJXghYGpNiXLBMCQ= -github.com/joho/godotenv v1.3.0 h1:Zjp+RcGpHhGlrMbJzXTrZZPrWj+1vfm90La1wgB6Bhc= -github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= -github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= -github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= -github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.10 h1:Kz6Cvnvv2wGdaG/V8yMvfkmNiXq9Ya2KUv4rouJJr68= -github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= -github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= -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/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= -github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= -github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= -github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -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/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= -github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= -github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= -github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= -github.com/lann/builder v0.0.0-20180802200727-47ae307949d0 h1:SOEGU9fKiNWd/HOJuq6+3iTQz8KNCLtVX6idSoTLdUw= -github.com/lann/builder v0.0.0-20180802200727-47ae307949d0/go.mod h1:dXGbAdH5GtBTC4WfIxhKZfyBF/HBFgRZSWwZ9g/He9o= -github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0 h1:P6pPBnrTSX3DEVR4fDembhRWSsG5rVo6hYhAB/ADZrk= -github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0/go.mod h1:vmVJ0l/dxyfGW6FmdpVm2joNMFikkuWg0EoCKLGUMNw= -github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= -github.com/lib/pq v1.10.0 h1:Zx5DJFEYQXio93kgXnQ09fXNiUKsqv4OUEu2UtGcB1E= -github.com/lib/pq v1.10.0/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= -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/lightstep/lightstep-tracer-common/golang/gogo v0.0.0-20190605223551-bc2310a04743/go.mod h1:qklhhLq1aX+mtWk9cPHPzaBjWImj5ULL6C7HFJtXQMM= -github.com/lightstep/lightstep-tracer-go v0.18.1/go.mod h1:jlF1pusYV4pidLvZ+XD0UBX0ZE6WURAspgAczcDHrL4= -github.com/lithammer/dedent v1.1.0/go.mod h1:jrXYCQtgg0nJiN+StA2KgR7w6CiQNv9Fd/Z9BP0jIOc= -github.com/lyft/protoc-gen-validate v0.0.13/go.mod h1:XbGvPuh87YZc5TdIa2/I4pLk0QoUACkjt2znoq26NVQ= -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/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.7.0 h1:aizVhC/NAAcKWb+5QsU1iNOZb4Yws5UO2I+aIprQITM= -github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs= -github.com/markbates/pkger v0.17.1/go.mod h1:0JoVlrol20BSywW79rN3kdFFsE5xYM+rSCQDXbLhiuI= -github.com/marstr/guid v1.1.0/go.mod h1:74gB1z2wpxxInTG6yaqA7KrtM0NZ+RbrcqDvYHefzho= -github.com/mattn/go-colorable v0.0.9 h1:UVL0vNpWh04HeJXV0KLcaT7r06gOH2l4OW6ddYRUIY4= -github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= -github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.4 h1:bnP0vzxcAdeI1zdubAl5PjU6zsERjGZb7raWodagDYs= -github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-oci8 v0.0.7/go.mod h1:wjDx6Xm9q7dFtHJvIlrI99JytznLw5wQ4R+9mNXJwGI= -github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/mattn/go-runewidth v0.0.4/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= -github.com/mattn/go-runewidth v0.0.7 h1:Ei8KR0497xHyKJPAv59M1dkC+rOZCMBJ+t3fZ+twI54= -github.com/mattn/go-runewidth v0.0.7/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= -github.com/mattn/go-shellwords v1.0.11/go.mod h1:EZzvwXDESEeg03EKmM+RmDnNOPKG4lLtQsUlTZDWQ8Y= -github.com/mattn/go-sqlite3 v1.12.0/go.mod h1:FPy6KqzDD04eiIsT53CuJW3U88zkxoIYsOqkbpncsNc= -github.com/mattn/go-sqlite3 v1.14.6 h1:dNPt6NO46WmLVt2DLNpwczCmdV5boIZ6g/tlDrlRUbg= -github.com/mattn/go-sqlite3 v1.14.6/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= -github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -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/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= -github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= -github.com/mitchellh/copystructure v1.1.1 h1:Bp6x9R1Wn16SIz3OfeDr0b7RnCG2OB66Y7PQyC/cvq4= -github.com/mitchellh/copystructure v1.1.1/go.mod h1:EBArHfARyrSWO/+Wyr9zwEkc6XMFB9XyNgFNmRkZZU4= -github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= -github.com/mitchellh/go-wordwrap v1.0.0 h1:6GlHJ/LTGMrIJbwgdqdl2eEH8o+Exx/0m8ir9Gns0u4= -github.com/mitchellh/go-wordwrap v1.0.0/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= -github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= -github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= -github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/osext v0.0.0-20151018003038-5e2d6d41470f/go.mod h1:OkQIRizQZAeMln+1tSwduZz7+Af5oFlKirV/MSYes2A= -github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= -github.com/mitchellh/reflectwalk v1.0.1 h1:FVzMWA5RllMAKIdUSC8mdWo3XtwoecrH79BY70sEEpE= -github.com/mitchellh/reflectwalk v1.0.1/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= -github.com/moby/moby v17.12.0-ce-rc1.0.20200618181300-9dc6525e6118+incompatible h1:NT0cwArZg/wGdvY8pzej4tPr+9WGmDdkF8Suj+mkz2g= -github.com/moby/moby v17.12.0-ce-rc1.0.20200618181300-9dc6525e6118+incompatible/go.mod h1:fDXVQ6+S340veQPv35CzDahGBmHsiclFwfEygB/TWMc= -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/term v0.0.0-20201216013528-df9cb8a40635 h1:rzf0wL0CHVc8CEsgyygG0Mn9CNCCPZqOPaz8RiiHYQk= -github.com/moby/term v0.0.0-20201216013528-df9cb8a40635/go.mod h1:FBS0z0QWA44HXygs7VXDUOGoN/1TV3RuWkLO04am3wc= -github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= -github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/modern-go/reflect2 v1.0.1 h1:9f412s+6RmYXLWZSEzVVgPGK7C2PphHj5RJrvfx9AWI= -github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= -github.com/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/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= -github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= -github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= -github.com/nats-io/jwt v0.3.0/go.mod h1:fRYCDE99xlTsqUzISS1Bi75UBJ6ljOJQOAAu5VglpSg= -github.com/nats-io/jwt v0.3.2/go.mod h1:/euKqTS1ZD+zzjYrY7pseZrTtWQSjujC7xjPc8wL6eU= -github.com/nats-io/nats-server/v2 v2.1.2/go.mod h1:Afk+wRZqkMQs/p45uXdrVLuab3gwv3Z8C4HTBu8GD/k= -github.com/nats-io/nats.go v1.9.1/go.mod h1:ZjDU1L/7fJ09jvUSRVBR2e7+RnLiiIQyqyzEE/Zbp4w= -github.com/nats-io/nkeys v0.1.0/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= -github.com/nats-io/nkeys v0.1.3/go.mod h1:xpnFELMwJABBLVhffcfd1MZx6VsNRFpEugbxziKVo7w= -github.com/nats-io/nuid v1.0.1/go.mod h1:19wcPz3Ph3q0Jbyiqsd0kePYG7A95tJPxeL+1OSON2c= -github.com/ncw/swift v1.0.47/go.mod h1:23YIA4yWVnGwv2dQlN4bB7egfYX6YLn0Yo/S6zZO/ZM= -github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e h1:fD57ERR4JtEqsWbfPhv4DMiApHyliiK5xCTNVSPiaAs= -github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno= -github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtbWGs= -github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= -github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= -github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= -github.com/olekukonko/tablewriter v0.0.1/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= -github.com/olekukonko/tablewriter v0.0.2/go.mod h1:rSAaSIOAGT9odnlyGlUfAJaoc5w2fSBUmeGDbRWPxyQ= -github.com/olekukonko/tablewriter v0.0.4/go.mod h1:zq6QwlOf5SlnkVbMSr5EoBv3636FWnp+qbPhuoO21uA= -github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.7.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.11.0 h1:JAKSXpt1YjtLA7YpPiqO9ss6sNXEsPfSGdwN0UHqzrw= -github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= -github.com/onsi/gomega v1.4.3/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/onsi/gomega v1.7.0 h1:XPnZz8VVBHjVsy1vzJmRwIcSwiUO+JFfrv/xGiigmME= -github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/op/go-logging v0.0.0-20160315200505-970db520ece7/go.mod h1:HzydrMdWErDVzsI23lYNej1Htcns9BCg93Dk0bBINWk= -github.com/opencontainers/go-digest v0.0.0-20170106003457-a6d0ee40d420/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= -github.com/opencontainers/go-digest v0.0.0-20180430190053-c9281466c8b2/go.mod h1:cMLVZDEM3+U2I4VmLI6N8jQYUd2OVphdqWwCJHrFt2s= -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.0/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= -github.com/opencontainers/image-spec v1.0.1 h1:JMemWkRwHx4Zj+fVxWoMCFm/8sYGGrUVojFA6h/TRcI= -github.com/opencontainers/image-spec v1.0.1/go.mod h1:BtxoFyWECRxE4U/7sNtV5W15zMzWCbyJoFRP3s7yZA0= -github.com/opencontainers/runc v0.0.0-20190115041553-12f6a991201f/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= -github.com/opencontainers/runc v0.1.1 h1:GlxAyO6x8rfZYN9Tt0Kti5a/cP41iuiO2yYT0IJGY8Y= -github.com/opencontainers/runc v0.1.1/go.mod h1:qT5XzbpPznkRYVz/mWwUaVBUv2rmF59PVA73FjuZG0U= -github.com/opencontainers/runtime-spec v1.0.2/go.mod h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0= -github.com/opentracing-contrib/go-observer v0.0.0-20170622124052-a52f23424492/go.mod h1:Ngi6UdF0k5OKD5t5wlmGhe/EDKPoUM3BXZSSfIuJbis= -github.com/opentracing/basictracer-go v1.0.0/go.mod h1:QfBfYuafItcjQuMwinw9GhYKwFXS9KnPs5lxoYwgW74= -github.com/opentracing/opentracing-go v1.0.2/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= -github.com/openzipkin-contrib/zipkin-go-opentracing v0.4.5/go.mod h1:/wsWhb9smxSfWAKL3wpBW7V8scJMt8N8gnaMCS9E/cA= -github.com/openzipkin/zipkin-go v0.1.6/go.mod h1:QgAqvLzwWbR/WpD4A3cGpPtJrZXNIiJc5AZX7/PBEpw= -github.com/openzipkin/zipkin-go v0.2.1/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= -github.com/openzipkin/zipkin-go v0.2.2/go.mod h1:NaW6tEwdmWMaCDZzg8sh+IBNOxHMPnhQw8ySjnjRyN4= -github.com/pact-foundation/pact-go v1.0.4/go.mod h1:uExwJY4kCzNPcHRj+hCR/HBbOOIwwtUjcrb0b5/5kLM= -github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= -github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -github.com/performancecopilot/speed v3.0.0+incompatible/go.mod h1:/CLtqpZ5gBg1M9iaPbIdPPGyKcA8hKdoy6hAWba7Yac= -github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+vxiaj6gdUUzhl4XmI= -github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= -github.com/phayes/freeport v0.0.0-20180830031419-95f893ade6f2 h1:JhzVVoYvbOACxoUmOs6V/G4D5nPVUW73rKvXxP4XUJc= -github.com/phayes/freeport v0.0.0-20180830031419-95f893ade6f2/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE= -github.com/pierrec/lz4 v1.0.2-0.20190131084431-473cd7ce01a1/go.mod h1:3/3N9NVKO0jef7pBehbT1qWhCMrIgbYNnFAZCqQ5LRc= -github.com/pierrec/lz4 v2.0.5+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= -github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= -github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/profile v1.2.1/go.mod h1:hJw3o1OdXxsrSjjVksARp5W95eeEaEfptyVZyv6JUPA= -github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= -github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= -github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA= -github.com/prometheus/client_golang v0.0.0-20180209125602-c332b6f63c06/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v0.9.3-0.20190127221311-3c4408c8b829/go.mod h1:p2iRAGwDERtqlqzRXnrOVns+ignqQo//hLXqYxZYVNs= -github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= -github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= -github.com/prometheus/client_golang v1.3.0/go.mod h1:hJaj2vgQTGQmVCsAACORcieXFeDPbaTKGT+JTgUa3og= -github.com/prometheus/client_golang v1.7.1 h1:NTGy1Ja9pByO+xAeH/qiWnLrKtr3hJPNjaVUwnjpdpA= -github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= -github.com/prometheus/client_model v0.0.0-20171117100541-99fa1f4be8e5/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190115171406-56726106282f/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= -github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.1.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.2.0 h1:uq5h0d+GuxiXLJLNABMgp2qUWDPiLvgCzz2dUR+/W/M= -github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/common v0.0.0-20180110214958-89604d197083/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/common v0.2.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= -github.com/prometheus/common v0.7.0/go.mod h1:DjGbpBbp5NYNiECxcL/VnbXCCaQpKd3tt26CguLLsqA= -github.com/prometheus/common v0.10.0 h1:RyRA7RzGXQZiW+tGMr7sxa85G1z0yOpM1qq5c8lNawc= -github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= -github.com/prometheus/procfs v0.0.0-20180125133057-cb4147076ac7/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20190117184657-bf6a532e95b1/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.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= -github.com/prometheus/procfs v0.0.8/go.mod h1:7Qr8sr6344vo1JqZ6HhLceV9o3AJ1Ff+GxbHq6oeK9A= -github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/procfs v0.2.0 h1:wH4vA7pcjKuZzjF7lM8awk4fnuJO6idemZXoKnULUx4= -github.com/prometheus/procfs v0.2.0/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= -github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= -github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= -github.com/rogpeppe/go-internal v1.1.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.3.2/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= -github.com/rogpeppe/go-internal v1.4.0 h1:LUa41nrWTQNGhzdsZ5lTnkwbNjj6rXTdazA1cSdjkOY= -github.com/rogpeppe/go-internal v1.4.0/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= -github.com/rubenv/sql-migrate v0.0.0-20200616145509-8d140a17f351 h1:HXr/qUllAWv9riaI4zh2eXWKmCSDqVS/XH1MRHLKRwk= -github.com/rubenv/sql-migrate v0.0.0-20200616145509-8d140a17f351/go.mod h1:DCgfY80j8GYL7MLEfvcpSFvjD0L5yZq/aZUJmhZklyg= -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= -github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/samuel/go-zookeeper v0.0.0-20190923202752-2cc03de413da/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= -github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= -github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= -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/goconvey v0.0.0-20190330032615-68dc04aab96a/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= -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/sony/gobreaker v0.4.1/go.mod h1:ZKptC7FHNvhBz7dN2LGjPVBz2sZJmc0/PkyDJOjmxWY= -github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= -github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= -github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cast v1.3.1 h1:nFm6S0SMdyzrzcmThSipiEubIDy8WEXKNZ0UOgiRpng= -github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= -github.com/spf13/cobra v0.0.2-0.20171109065643-2da4a54c5cee/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= -github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= -github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= -github.com/spf13/cobra v1.0.0/go.mod h1:/6GTrnGXV9HjY+aR4k0oJ5tcvakLuG6EuKReYlHNrgE= -github.com/spf13/cobra v1.1.1/go.mod h1:WnodtKOvamDL/PwE2M4iKs8aMDBZ5Q5klgD3qfVJQMI= -github.com/spf13/cobra v1.1.3 h1:xghbfqPkxzxP3C/f3n5DdpAbdKLj4ZE4BWQI362l53M= -github.com/spf13/cobra v1.1.3/go.mod h1:pGADOWyqRD/YMrPZigI/zbliZ2wVD/23d+is3pSWzOo= -github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= -github.com/spf13/pflag v0.0.0-20170130214245-9ff6c6923cff/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/pflag v1.0.1-0.20171106142849-4c012f6dcd95/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -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.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= -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/streadway/amqp v0.0.0-20190404075320-75d898a42a94/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= -github.com/streadway/amqp v0.0.0-20190827072141-edfb9018d271/go.mod h1:AZpEONHx3DKn8O/DFsRAY58/XVQiIPMTMB1SddzLXVw= -github.com/streadway/handy v0.0.0-20190108123426-d5acb3125c2a/go.mod h1:qNTQ5P5JnDBl6z3cMAg/SywNDC5ABu5ApDIw6lUbRmI= -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= -github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= -github.com/stretchr/testify v1.2.2/go.mod h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs= -github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= -github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= -github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= -github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= -github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= -github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= -github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= -github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= -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/vektah/gqlparser v1.1.2/go.mod h1:1ycwN7Ij5njmMkPPAOaRFY4rET2Enx7IkVv3vaXspKw= -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= -github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= -github.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17UxZ74= -github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= -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.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43 h1:+lm10QQTNSBd8DVTNGHx7o/IKu9HYDvLMffDhbyLccI= -github.com/yvasiyarov/go-metrics v0.0.0-20140926110328-57bccd1ccd43/go.mod h1:aX5oPXxHm3bOH+xeAttToC8pqch2ScQN/JoXYupl6xs= -github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50 h1:hlE8//ciYMztlGpl/VA+Zm1AcTPHYkHJPbHqE6WJUXE= -github.com/yvasiyarov/gorelic v0.0.0-20141212073537-a9bba5b9ab50/go.mod h1:NUSPSUX/bi6SeDMUh6brw0nXpxHnc96TguQh0+r/ssA= -github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f h1:ERexzlUfuTvpE74urLSbIQW0Z/6hF9t8U4NsJLaioAY= -github.com/yvasiyarov/newrelic_platform_go v0.0.0-20140908184405-b21fdbd4370f/go.mod h1:GlGEuHIJweS1mbCqG+7vt2nvWLzLLnRHbXz5JKd/Qbg= -github.com/ziutek/mymysql v1.5.4 h1:GB0qdRGsTwQSBVYuVShFBKaXSnSnYYC2d9knnE1LHFs= -github.com/ziutek/mymysql v1.5.4/go.mod h1:LMSpPZ6DbqWFxNCHW77HeMg9I646SAhApZ/wKdgO/C0= -go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/bbolt v1.3.5/go.mod h1:G5EMThwa9y8QZGBClrRx5EY+Yw9kAhnjy3bSjsnlVTQ= -go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= -go.etcd.io/etcd v0.5.0-alpha.5.0.20200910180754-dd1b699fc489/go.mod h1:yVHk9ub3CSBatqGNg7GRmsnfLWtoW60w4eDYfh7vHDg= -go.mongodb.org/mongo-driver v1.0.3/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= -go.mongodb.org/mongo-driver v1.1.1/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= -go.mongodb.org/mongo-driver v1.1.2/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= -go.opencensus.io v0.20.1/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= -go.opencensus.io v0.20.2/go.mod h1:6WKK9ahsWS3RSO+PY9ZHZUfv2irvY6gN279GOPZjmmk= -go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= -go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= -go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.3 h1:8sGtKOrtQqkN1bp2AtX+misvLIlOmsEsNd+9NIcPEm8= -go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5 h1:+FNtrFTmVw0YZGpBGX56XDee331t6JAXeK2bcyhLOOc= -go.starlark.net v0.0.0-20200306205701-8dd3e2ee1dd5/go.mod h1:nmDLcffg48OtT/PSW0Hg7FvpRQsQh5OSqIylirxKC7o= -go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/atomic v1.5.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= -go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= -go.uber.org/multierr v1.3.0/go.mod h1:VgVr7evmIr6uPjLBxg28wmKNXyqE9akIJ5XnfpiKl+4= -go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= -go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= -go.uber.org/zap v1.13.0/go.mod h1:zwrFLgMcdUuIBviXEYEH1YKNaOBnKXsx2IPda5bBwHM= -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-20181203042331-505ab145d0a9/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-20190320223903-b7391e95e576/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= -golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190617133340-57b3e21c3d56/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190621222207-cc06ce4a13d4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190701094942-4def268fd1a4/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200414173820-0848c9571904/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20201221181555-eec23a3978ad/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= -golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83 h1:/ZScEX8SfEmUGRHs0gxpqteO5nfNW6axyZbBdw9A12g= -golang.org/x/crypto v0.0.0-20210220033148-5ea612d1eb83/go.mod h1:jdWPYTVW3xRLrWPugEBEK3UY2ZEsg3UU495nc5E+M+I= -golang.org/x/exp v0.0.0-20190121172915-509febef88a4/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-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= -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= -golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -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/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= -golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= -golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= -golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20200302205851-738671d3881b/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/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.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/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181005035420-146acd28ed58/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190125091013-d26f9f9a57f3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190320064053-1272bf9dcd53/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -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-20190619014844-b5b0513f8c1b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20210224082022-3d97a244fca7 h1:OgUuv8lsRpBibGNbSizVwKWlysjaNzmC9gYMhPVfqFM= -golang.org/x/net v0.0.0-20210224082022-3d97a244fca7/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d h1:TzXSXBo42m9gQenoE3b9BGiEpg5IG2JkU5FkPIawgtw= -golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201207232520-09787c993a3a h1:DcqTD9SDLc+1P/r1EmRBwnVsrOwW+kk2vWf9n+1sGhs= -golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-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-20181122145206-62eef0e2fa9b/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/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-20190321052220-f7bb7a8bee54/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -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-20190515120540-06a5c4944438/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190602015325-4c4f7f33c9ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/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-20190826190057-c7b8b68b1456/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-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191220142924-d4481acd189f/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-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-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= -golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200831180312-196b9ba8737a/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= -golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073 h1:8qxJSnu+7dRq6upnbntrmriWByIakBuct5OM/MdQC1M= -golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/term v0.0.0-20201117132131-f5c789dd3221/go.mod h1:Nr5EML6q2oocZ2LXRh80K7BxOlk5/8JxuGnuhpl+muw= -golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d h1:SZxvLBoTP5yHO3Frd4z4vrF+DBX9vMVanchswa69toE= -golang.org/x/term v0.0.0-20210220032956-6a3ed077a48d/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= -golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= -golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.4 h1:0YWbFKbhXG/wIiuHDSKpS0Iy7FSA+u45VtBMfQcFTTc= -golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba h1:O8mE0/t419eoIwhTFpKVkHiTs/Igowgfkj25AcZrtiE= -golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/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-20180828015842-6cd1fcedba52/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-20190125232054-d66bd3c5d5a6/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= -golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190617190820-da514acc4774/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190624222133-a101b041ded4/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191004055002-72853e10c5a3/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -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-20200103221440-774c71fcf114/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= -golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200505023115-26f46d2f7ef8/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= -golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -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= -google.golang.org/api v0.0.0-20160322025152-9bf6e6e569ff/go.mod h1:4mhQ8q/RsB7i+udVvVy5NUi08OU8ZlA0gRVgrF7VFY0= -google.golang.org/api v0.3.1/go.mod h1:6wY9I6uQWHQ8EM57III9mq/AjF+i8G65rmVagqKMtkk= -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= -google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= -google.golang.org/appengine v1.2.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= -google.golang.org/appengine v1.6.5 h1:tycE03LOZYQNhDpS27tcQdAzLCVMaj7QT2SXxebnpCM= -google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/cloud v0.0.0-20151119220103-975617b05ea8/go.mod h1:0H1ncTHf11KCFhTc/+EFRbzSCOZx+VUbRMk55Yv5MYk= -google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190530194941-fb225487d101/go.mod h1:z3L6/3dTEVtUr6QSP8miRzeRqwQOioJ9I66odjN4I7s= -google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= -google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -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-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= -google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20201110150050-8816d57aaa9a h1:pOwg4OoaRYScjmR4LlLgdtnyoHYTSAVhhqe5uPdpII8= -google.golang.org/genproto v0.0.0-20201110150050-8816d57aaa9a/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/grpc v0.0.0-20160317175043-d3ddb4469d5a/go.mod h1:yo6s7OP7yaDglbqo1J04qKzAhqBH6lvTonzMVmEdcZw= -google.golang.org/grpc v1.17.0/go.mod h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs= -google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.20.0/go.mod h1:chYK+tFQF0nDUGJgXMSgLCQk3phJEuONr2DCgLDdAQM= -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.22.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.1 h1:zvIju4sqAGvwKspUQOhwnpcqSbzi7/H6QomNNjTL4sk= -google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= -google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= -google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= -google.golang.org/protobuf v1.20.1-0.20200309200217-e05f789c0967/go.mod h1:A+miEFZTKqfCUM6K7xSMQL9OKL/b6hQv+e19PK+JZNE= -google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzikPIcrTAo= -google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= -google.golang.org/protobuf v1.25.0 h1:Ejskq+SyPohKW+1uil0JJMtmHCgJPJ/qWTxr8qp+R4c= -google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= -gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20141024133853-64131543e789/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f h1:BLraFXnmrev5lT+xlilqcH8XK9/i0At2xKjWk4p6zsU= -gopkg.in/check.v1 v1.0.0-20200227125254-8fa46927fb4f/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= -gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= -gopkg.in/fsnotify.v1 v1.4.7 h1:xOHLXZwVvI9hhs+cLKq5+I5onOuwQLhQwiu63xxlHs4= -gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= -gopkg.in/gcfg.v1 v1.2.3/go.mod h1:yesOnuUOFQAhST5vPY4nbZsb/huCgGGXlipJsBn0b3o= -gopkg.in/gorp.v1 v1.7.2 h1:j3DWlAyGVv8whO7AcIWznQ2Yj7yJkn34B8s63GViAAw= -gopkg.in/gorp.v1 v1.7.2/go.mod h1:Wo3h+DBQZIxATwftsglhdD/62zRFPhGhTiu5jUJmCaw= -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= -gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= -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.2/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= -gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.7/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= -gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c h1:dUUwHk2QECo/6vqA44rthZ8ie2QXMNeKRTHCNY2nXvo= -gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= -gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= -gotest.tools/v3 v3.0.2/go.mod h1:3SzNCllyD9/Y+b5r9JIKQ474KzkZyqLqEfYqMsX94Bk= -gotest.tools/v3 v3.0.3 h1:4AuOwCGf4lLR9u3YOe2awrHygurzhO/HeQ6laiA6Sx0= -gotest.tools/v3 v3.0.3/go.mod h1:Z7Lb0S5l+klDB31fvDQX8ss/FlKDxtlFlw3Oa8Ymbl8= -helm.sh/helm/v3 v3.6.1 h1:TQ6q4pAatXr7qh2fbLcb0oNd0I3J7kv26oo5cExKTtc= -helm.sh/helm/v3 v3.6.1/go.mod h1:mIIus8EOqj+obtycw3sidsR4ORr2aFDmXMSI3k+oeVY= -honnef.co/go/tools v0.0.0-20180728063816-88497007e858/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= -honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -k8s.io/api v0.21.0 h1:gu5iGF4V6tfVCQ/R+8Hc0h7H1JuEhzyEi9S4R5LM8+Y= -k8s.io/api v0.21.0/go.mod h1:+YbrhBBGgsxbF6o6Kj4KJPJnBmAKuXDeS3E18bgHNVU= -k8s.io/apiextensions-apiserver v0.21.0 h1:Nd4uBuweg6ImzbxkC1W7xUNZcCV/8Vt10iTdTIVF3hw= -k8s.io/apiextensions-apiserver v0.21.0/go.mod h1:gsQGNtGkc/YoDG9loKI0V+oLZM4ljRPjc/sql5tmvzc= -k8s.io/apimachinery v0.21.0 h1:3Fx+41if+IRavNcKOz09FwEXDBG6ORh6iMsTSelhkMA= -k8s.io/apimachinery v0.21.0/go.mod h1:jbreFvJo3ov9rj7eWT7+sYiRx+qZuCYXwWT1bcDswPY= -k8s.io/apiserver v0.21.0 h1:1hWMfsz+cXxB77k6/y0XxWxwl6l9OF26PC9QneUVn1Q= -k8s.io/apiserver v0.21.0/go.mod h1:w2YSn4/WIwYuxG5zJmcqtRdtqgW/J2JRgFAqps3bBpg= -k8s.io/cli-runtime v0.21.0 h1:/V2Kkxtf6x5NI2z+Sd/mIrq4FQyQ8jzZAUD6N5RnN7Y= -k8s.io/cli-runtime v0.21.0/go.mod h1:XoaHP93mGPF37MkLbjGVYqg3S1MnsFdKtiA/RZzzxOo= -k8s.io/client-go v0.21.0 h1:n0zzzJsAQmJngpC0IhgFcApZyoGXPrDIAD601HD09ag= -k8s.io/client-go v0.21.0/go.mod h1:nNBytTF9qPFDEhoqgEPaarobC8QPae13bElIVHzIglA= -k8s.io/code-generator v0.21.0/go.mod h1:hUlps5+9QaTrKx+jiM4rmq7YmH8wPOIko64uZCHDh6Q= -k8s.io/component-base v0.21.0 h1:tLLGp4BBjQaCpS/KiuWh7m2xqvAdsxLm4ATxHSe5Zpg= -k8s.io/component-base v0.21.0/go.mod h1:qvtjz6X0USWXbgmbfXR+Agik4RZ3jv2Bgr5QnZzdPYw= -k8s.io/component-helpers v0.21.0/go.mod h1:tezqefP7lxfvJyR+0a+6QtVrkZ/wIkyMLK4WcQ3Cj8U= -k8s.io/gengo v0.0.0-20200413195148-3a45101e95ac/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= -k8s.io/gengo v0.0.0-20201214224949-b6c5ce23f027/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.8.0 h1:Q3gmuM9hKEjefWFFYF0Mat+YyFJvsUyYuwyNNJ5C9Ts= -k8s.io/klog/v2 v2.8.0/go.mod h1:hy9LJ/NvuK+iVyP4Ehqva4HxZG/oXyIS3n3Jmire4Ec= -k8s.io/kube-openapi v0.0.0-20210305001622-591a79e4bda7 h1:vEx13qjvaZ4yfObSSXW7BrMc/KQBBT/Jyee8XtLf4x0= -k8s.io/kube-openapi v0.0.0-20210305001622-591a79e4bda7/go.mod h1:wXW5VT87nVfh/iLV8FpR2uDvrFyomxbtb1KivDbvPTE= -k8s.io/kubectl v0.21.0 h1:WZXlnG/yjcE4LWO2g6ULjFxtzK6H1TKzsfaBFuVIhNg= -k8s.io/kubectl v0.21.0/go.mod h1:EU37NukZRXn1TpAkMUoy8Z/B2u6wjHDS4aInsDzVvks= -k8s.io/metrics v0.21.0/go.mod h1:L3Ji9EGPP1YBbfm9sPfEXSpnj8i24bfQbAFAsW0NueQ= -k8s.io/utils v0.0.0-20201110183641-67b214c5f920 h1:CbnUZsM497iRC5QMVkHwyl8s2tB3g7yaSHkYPkpgelw= -k8s.io/utils v0.0.0-20201110183641-67b214c5f920/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= -rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= -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.15/go.mod h1:LEScyzhFmoF5pso/YSeBstl57mOzx9xlU9n85RGrDQg= -sigs.k8s.io/kustomize/api v0.8.5 h1:bfCXGXDAbFbb/Jv5AhMj2BB8a5VAJuuQ5/KU69WtDjQ= -sigs.k8s.io/kustomize/api v0.8.5/go.mod h1:M377apnKT5ZHJS++6H4rQoCHmWtt6qTpp3mbe7p6OLY= -sigs.k8s.io/kustomize/cmd/config v0.9.7/go.mod h1:MvXCpHs77cfyxRmCNUQjIqCmZyYsbn5PyQpWiq44nW0= -sigs.k8s.io/kustomize/kustomize/v4 v4.0.5/go.mod h1:C7rYla7sI8EnxHE/xEhRBSHMNfcL91fx0uKmUlUhrBk= -sigs.k8s.io/kustomize/kyaml v0.10.15 h1:dSLgG78KyaxN4HylPXdK+7zB3k7sW6q3IcCmcfKA+aI= -sigs.k8s.io/kustomize/kyaml v0.10.15/go.mod h1:mlQFagmkm1P+W4lZJbJ/yaxMd8PqMRSC4cPcfUVt5Hg= -sigs.k8s.io/structured-merge-diff/v4 v4.0.2/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= -sigs.k8s.io/structured-merge-diff/v4 v4.1.0 h1:C4r9BgJ98vrKnnVCjwCSXcWjWe0NKcUQkmzDXZXGwH8= -sigs.k8s.io/structured-merge-diff/v4 v4.1.0/go.mod h1:bJZC9H9iH24zzfZ/41RGcq60oK1F7G282QMXDPYydCw= -sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= -sigs.k8s.io/yaml v1.2.0 h1:kr/MCeFWJWTwyaHoR9c8EjH9OumOmoF9YGiZd7lFm/Q= -sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= -sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= -sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= -sourcegraph.com/sourcegraph/appdash v0.0.0-20190731080439-ebfcffb1b5c0/go.mod h1:hI742Nqp5OhwiqlzhgfbWU4mW4yO10fP+LoT9WOswdU= diff --git a/listOfFiles b/listOfFiles deleted file mode 100644 index 7774e1b2982..00000000000 --- a/listOfFiles +++ /dev/null @@ -1,1921 +0,0 @@ -.all-contributorsrc -.chglog/CHANGELOG.tpl.md -.chglog/config.yml -.devcontainer.json -.github/CODEOWNERS -.github/CODE_OF_CONDUCT -.github/CONTRIBUTING -.github/FUNDING.yml -.github/ISSUE_TEMPLATE/app_request.md -.github/ISSUE_TEMPLATE/bug_report.md -.github/ISSUE_TEMPLATE/feature_request.md -.github/PULL_REQUEST_TEMPLATE.md -.github/README.md -.github/SECURITY.md -.github/SUPPORT.md -.github/chart_schema.yaml -.github/containerscan/allowedlist.yaml -.github/cr.yaml -.github/ct-install.yaml -.github/ct-lint.yaml -.github/renovate.json5 -.github/stale.yml -.github/workflows/apps.release.yaml -.github/workflows/apps.test.yaml -.github/workflows/docs.deploy.yaml -.github/workflows/general.security-scan.yaml -.github/workflows/renovate-bump.yaml -.gitignore -.helmdocsignore -.pre-commit-config.yaml -.vscode/extensions.json -.vscode/launch.json -CNAME -LICENSE -NOTICE -charts/incubator/oscam/CHANGELOG.md -charts/incubator/oscam/CONFIG.md -charts/incubator/oscam/Chart.yaml -charts/incubator/oscam/README.md -charts/incubator/oscam/SCALE/CHANGELOG.md -charts/incubator/oscam/SCALE/item.yaml -charts/incubator/oscam/SCALE/ix_values.yaml -charts/incubator/oscam/SCALE/questions.yaml -charts/incubator/oscam/app-readme.md -charts/incubator/oscam/helm-values.md -charts/incubator/oscam/templates/common.yaml -charts/incubator/oscam/values.yaml -charts/incubator/sogo/.helmignore -charts/incubator/sogo/CHANGELOG.md -charts/incubator/sogo/CONFIG.md -charts/incubator/sogo/Chart.yaml -charts/incubator/sogo/README.md -charts/incubator/sogo/SCALE/CHANGELOG.md -charts/incubator/sogo/SCALE/item.yaml -charts/incubator/sogo/SCALE/ix_values.yaml -charts/incubator/sogo/SCALE/questions.yaml -charts/incubator/sogo/app-readme.md -charts/incubator/sogo/helm-values.md -charts/incubator/sogo/templates/_config.tpl -charts/incubator/sogo/templates/common.yaml -charts/incubator/sogo/values.yaml -charts/incubator/testbed/.helmignore -charts/incubator/testbed/CHANGELOG.md -charts/incubator/testbed/CONFIG.md -charts/incubator/testbed/Chart.yaml -charts/incubator/testbed/README.md -charts/incubator/testbed/SCALE/CHANGELOG.md -charts/incubator/testbed/SCALE/item.yaml -charts/incubator/testbed/SCALE/ix_values.yaml -charts/incubator/testbed/SCALE/questions.yaml -charts/incubator/testbed/app-readme.md -charts/incubator/testbed/helm-values.md -charts/incubator/testbed/templates/common.yaml -charts/incubator/testbed/values.yaml -charts/library/common-test/Chart.yaml -charts/library/common-test/README.md -charts/library/common-test/ci/basic-values-storage.yaml -charts/library/common-test/ci/basic-values.yaml -charts/library/common-test/templates/common.yaml -charts/library/common-test/test.yaml -charts/library/common-test/values.yaml -charts/library/common/.helmignore -charts/library/common/CHANGELOG.md -charts/library/common/Chart.yaml -charts/library/common/README.md -charts/library/common/SCALE/CHANGELOG.md -charts/library/common/helm-values.md -charts/library/common/templates/_HorizontalPodAutoscaler.tpl -charts/library/common/templates/_all.tpl -charts/library/common/templates/_daemonset.tpl -charts/library/common/templates/_deployment.tpl -charts/library/common/templates/_ingress.tpl -charts/library/common/templates/_networkPolicy.tpl -charts/library/common/templates/_pvc.tpl -charts/library/common/templates/_rbac.tpl -charts/library/common/templates/_secret.tpl -charts/library/common/templates/_service.tpl -charts/library/common/templates/_serviceaccount.tpl -charts/library/common/templates/_statefulset.tpl -charts/library/common/templates/addons/code-server/_codeserver.tpl -charts/library/common/templates/addons/code-server/_container.tpl -charts/library/common/templates/addons/code-server/_secret.tpl -charts/library/common/templates/addons/code-server/_volume.tpl -charts/library/common/templates/addons/netshoot/_container.tpl -charts/library/common/templates/addons/netshoot/_netshoot.tpl -charts/library/common/templates/addons/promtail/_configmap.tpl -charts/library/common/templates/addons/promtail/_container.tpl -charts/library/common/templates/addons/promtail/_promtail.tpl -charts/library/common/templates/addons/promtail/_volume.tpl -charts/library/common/templates/addons/vpn/_vpn.tpl -charts/library/common/templates/addons/vpn/openvpn/_addon.tpl -charts/library/common/templates/addons/vpn/openvpn/_container.tpl -charts/library/common/templates/addons/vpn/openvpn/_secret.tpl -charts/library/common/templates/addons/vpn/wireguard/_addon.tpl -charts/library/common/templates/addons/vpn/wireguard/_container.tpl -charts/library/common/templates/classes/_ingress.tpl -charts/library/common/templates/classes/_pvc.tpl -charts/library/common/templates/classes/_service.tpl -charts/library/common/templates/classes/_service_ports.tpl -charts/library/common/templates/configmaps/_portal.tpl -charts/library/common/templates/lib/cert/_certSecret.tpl -charts/library/common/templates/lib/cert/_certs.tpl -charts/library/common/templates/lib/chart/_annotations.tpl -charts/library/common/templates/lib/chart/_capabilities.tpl -charts/library/common/templates/lib/chart/_labels.tpl -charts/library/common/templates/lib/chart/_names.tpl -charts/library/common/templates/lib/chart/_values.tpl -charts/library/common/templates/lib/controller/_autopermissions.yaml -charts/library/common/templates/lib/controller/_container.tpl -charts/library/common/templates/lib/controller/_pod.tpl -charts/library/common/templates/lib/controller/_ports.tpl -charts/library/common/templates/lib/controller/_probes.tpl -charts/library/common/templates/lib/controller/_volumeMounts.tpl -charts/library/common/templates/lib/controller/_volumes.tpl -charts/library/common/tests/addon_codeserver_test.go -charts/library/common/tests/addon_netshoot_test.go -charts/library/common/tests/addon_vpn_test.go -charts/library/common/tests/container_test.go -charts/library/common/tests/controller_test.go -charts/library/common/tests/horizontal_pod_autoscaler_test.go -charts/library/common/tests/ingress_test.go -charts/library/common/tests/persistentvolumeclaim_test.go -charts/library/common/tests/pod_test.go -charts/library/common/tests/service_test.go -charts/library/common/values.yaml -charts/stable/airsonic/.helmignore -charts/stable/airsonic/CHANGELOG.md -charts/stable/airsonic/CONFIG.md -charts/stable/airsonic/Chart.yaml -charts/stable/airsonic/README.md -charts/stable/airsonic/SCALE/CHANGELOG.md -charts/stable/airsonic/SCALE/item.yaml -charts/stable/airsonic/SCALE/ix_values.yaml -charts/stable/airsonic/SCALE/questions.yaml -charts/stable/airsonic/app-readme.md -charts/stable/airsonic/helm-values.md -charts/stable/airsonic/templates/common.yaml -charts/stable/airsonic/values.yaml -charts/stable/appdaemon/CHANGELOG.md -charts/stable/appdaemon/CONFIG.md -charts/stable/appdaemon/Chart.yaml -charts/stable/appdaemon/README.md -charts/stable/appdaemon/SCALE/CHANGELOG.md -charts/stable/appdaemon/SCALE/item.yaml -charts/stable/appdaemon/SCALE/ix_values.yaml -charts/stable/appdaemon/SCALE/questions.yaml -charts/stable/appdaemon/app-readme.md -charts/stable/appdaemon/helm-values.md -charts/stable/appdaemon/templates/common.yaml -charts/stable/appdaemon/values.yaml -charts/stable/authelia/.helmignore -charts/stable/authelia/CHANGELOG.md -charts/stable/authelia/CONFIG.md -charts/stable/authelia/Chart.yaml -charts/stable/authelia/README.md -charts/stable/authelia/SCALE/CHANGELOG.md -charts/stable/authelia/SCALE/item.yaml -charts/stable/authelia/SCALE/ix_values.yaml -charts/stable/authelia/SCALE/questions.yaml -charts/stable/authelia/app-readme.md -charts/stable/authelia/helm-values.md -charts/stable/authelia/templates/_configmap.tpl -charts/stable/authelia/templates/_secrets.tpl -charts/stable/authelia/templates/common.yaml -charts/stable/authelia/values.yaml -charts/stable/bazarr/.helmignore -charts/stable/bazarr/CHANGELOG.md -charts/stable/bazarr/CONFIG.md -charts/stable/bazarr/Chart.yaml -charts/stable/bazarr/README.md -charts/stable/bazarr/SCALE/CHANGELOG.md -charts/stable/bazarr/SCALE/item.yaml -charts/stable/bazarr/SCALE/ix_values.yaml -charts/stable/bazarr/SCALE/questions.yaml -charts/stable/bazarr/app-readme.md -charts/stable/bazarr/helm-values.md -charts/stable/bazarr/templates/common.yaml -charts/stable/bazarr/values.yaml -charts/stable/booksonic-air/.helmignore -charts/stable/booksonic-air/CHANGELOG.md -charts/stable/booksonic-air/CONFIG.md -charts/stable/booksonic-air/Chart.yaml -charts/stable/booksonic-air/README.md -charts/stable/booksonic-air/SCALE/CHANGELOG.md -charts/stable/booksonic-air/SCALE/item.yaml -charts/stable/booksonic-air/SCALE/ix_values.yaml -charts/stable/booksonic-air/SCALE/questions.yaml -charts/stable/booksonic-air/app-readme.md -charts/stable/booksonic-air/helm-values.md -charts/stable/booksonic-air/templates/common.yaml -charts/stable/booksonic-air/values.yaml -charts/stable/calibre-web/.helmignore -charts/stable/calibre-web/CHANGELOG.md -charts/stable/calibre-web/CONFIG.md -charts/stable/calibre-web/Chart.yaml -charts/stable/calibre-web/README.md -charts/stable/calibre-web/SCALE/CHANGELOG.md -charts/stable/calibre-web/SCALE/item.yaml -charts/stable/calibre-web/SCALE/ix_values.yaml -charts/stable/calibre-web/SCALE/questions.yaml -charts/stable/calibre-web/app-readme.md -charts/stable/calibre-web/helm-values.md -charts/stable/calibre-web/templates/common.yaml -charts/stable/calibre-web/values.yaml -charts/stable/calibre/.helmignore -charts/stable/calibre/CHANGELOG.md -charts/stable/calibre/CONFIG.md -charts/stable/calibre/Chart.yaml -charts/stable/calibre/README.md -charts/stable/calibre/SCALE/CHANGELOG.md -charts/stable/calibre/SCALE/item.yaml -charts/stable/calibre/SCALE/ix_values.yaml -charts/stable/calibre/SCALE/questions.yaml -charts/stable/calibre/app-readme.md -charts/stable/calibre/helm-values.md -charts/stable/calibre/templates/common.yaml -charts/stable/calibre/values.yaml -charts/stable/collabora-online/CHANGELOG.md -charts/stable/collabora-online/CONFIG.md -charts/stable/collabora-online/Chart.yaml -charts/stable/collabora-online/README.md -charts/stable/collabora-online/SCALE/CHANGELOG.md -charts/stable/collabora-online/SCALE/item.yaml -charts/stable/collabora-online/SCALE/ix_values.yaml -charts/stable/collabora-online/SCALE/questions.yaml -charts/stable/collabora-online/app-readme.md -charts/stable/collabora-online/helm-values.md -charts/stable/collabora-online/templates/common.yaml -charts/stable/collabora-online/values.yaml -charts/stable/custom-app/.helmignore -charts/stable/custom-app/CHANGELOG.md -charts/stable/custom-app/CONFIG.md -charts/stable/custom-app/Chart.yaml -charts/stable/custom-app/README.md -charts/stable/custom-app/SCALE/CHANGELOG.md -charts/stable/custom-app/SCALE/item.yaml -charts/stable/custom-app/SCALE/ix_values.yaml -charts/stable/custom-app/SCALE/questions.yaml -charts/stable/custom-app/app-readme.md -charts/stable/custom-app/helm-values.md -charts/stable/custom-app/templates/common.yaml -charts/stable/custom-app/values.yaml -charts/stable/deconz/.helmignore -charts/stable/deconz/CHANGELOG.md -charts/stable/deconz/CONFIG.md -charts/stable/deconz/Chart.yaml -charts/stable/deconz/README.md -charts/stable/deconz/SCALE/CHANGELOG.md -charts/stable/deconz/SCALE/item.yaml -charts/stable/deconz/SCALE/ix_values.yaml -charts/stable/deconz/SCALE/questions.yaml -charts/stable/deconz/app-readme.md -charts/stable/deconz/helm-values.md -charts/stable/deconz/templates/common.yaml -charts/stable/deconz/values.yaml -charts/stable/deepstack-cpu/.helmignore -charts/stable/deepstack-cpu/CHANGELOG.md -charts/stable/deepstack-cpu/CONFIG.md -charts/stable/deepstack-cpu/Chart.yaml -charts/stable/deepstack-cpu/README.md -charts/stable/deepstack-cpu/SCALE/CHANGELOG.md -charts/stable/deepstack-cpu/SCALE/item.yaml -charts/stable/deepstack-cpu/SCALE/ix_values.yaml -charts/stable/deepstack-cpu/SCALE/questions.yaml -charts/stable/deepstack-cpu/app-readme.md -charts/stable/deepstack-cpu/helm-values.md -charts/stable/deepstack-cpu/templates/common.yaml -charts/stable/deepstack-cpu/values.yaml -charts/stable/deluge/.helmignore -charts/stable/deluge/CHANGELOG.md -charts/stable/deluge/CONFIG.md -charts/stable/deluge/Chart.yaml -charts/stable/deluge/README.md -charts/stable/deluge/SCALE/CHANGELOG.md -charts/stable/deluge/SCALE/item.yaml -charts/stable/deluge/SCALE/ix_values.yaml -charts/stable/deluge/SCALE/questions.yaml -charts/stable/deluge/app-readme.md -charts/stable/deluge/helm-values.md -charts/stable/deluge/templates/common.yaml -charts/stable/deluge/values.yaml -charts/stable/dizquetv/.helmignore -charts/stable/dizquetv/CHANGELOG.md -charts/stable/dizquetv/CONFIG.md -charts/stable/dizquetv/Chart.yaml -charts/stable/dizquetv/README.md -charts/stable/dizquetv/SCALE/CHANGELOG.md -charts/stable/dizquetv/SCALE/item.yaml -charts/stable/dizquetv/SCALE/ix_values.yaml -charts/stable/dizquetv/SCALE/questions.yaml -charts/stable/dizquetv/app-readme.md -charts/stable/dizquetv/helm-values.md -charts/stable/dizquetv/templates/common.yaml -charts/stable/dizquetv/values.yaml -charts/stable/duplicati/CHANGELOG.md -charts/stable/duplicati/CONFIG.md -charts/stable/duplicati/Chart.yaml -charts/stable/duplicati/README.md -charts/stable/duplicati/SCALE/CHANGELOG.md -charts/stable/duplicati/SCALE/item.yaml -charts/stable/duplicati/SCALE/ix_values.yaml -charts/stable/duplicati/SCALE/questions.yaml -charts/stable/duplicati/app-readme.md -charts/stable/duplicati/helm-values.md -charts/stable/duplicati/templates/common.yaml -charts/stable/duplicati/values.yaml -charts/stable/emby/.helmignore -charts/stable/emby/CHANGELOG.md -charts/stable/emby/CONFIG.md -charts/stable/emby/Chart.yaml -charts/stable/emby/README.md -charts/stable/emby/SCALE/CHANGELOG.md -charts/stable/emby/SCALE/item.yaml -charts/stable/emby/SCALE/ix_values.yaml -charts/stable/emby/SCALE/questions.yaml -charts/stable/emby/app-readme.md -charts/stable/emby/helm-values.md -charts/stable/emby/templates/common.yaml -charts/stable/emby/values.yaml -charts/stable/esphome/.helmignore -charts/stable/esphome/CHANGELOG.md -charts/stable/esphome/CONFIG.md -charts/stable/esphome/Chart.yaml -charts/stable/esphome/README.md -charts/stable/esphome/SCALE/CHANGELOG.md -charts/stable/esphome/SCALE/item.yaml -charts/stable/esphome/SCALE/ix_values.yaml -charts/stable/esphome/SCALE/questions.yaml -charts/stable/esphome/app-readme.md -charts/stable/esphome/helm-values.md -charts/stable/esphome/templates/common.yaml -charts/stable/esphome/values.yaml -charts/stable/external-service/.helmignore -charts/stable/external-service/CHANGELOG.md -charts/stable/external-service/CONFIG.md -charts/stable/external-service/Chart.yaml -charts/stable/external-service/README.md -charts/stable/external-service/SCALE/CHANGELOG.md -charts/stable/external-service/SCALE/item.yaml -charts/stable/external-service/SCALE/ix_values.yaml -charts/stable/external-service/SCALE/questions.yaml -charts/stable/external-service/app-readme.md -charts/stable/external-service/helm-values.md -charts/stable/external-service/templates/common.yaml -charts/stable/external-service/values.yaml -charts/stable/fireflyiii/.helmignore -charts/stable/fireflyiii/CHANGELOG.md -charts/stable/fireflyiii/CONFIG.md -charts/stable/fireflyiii/Chart.yaml -charts/stable/fireflyiii/README.md -charts/stable/fireflyiii/SCALE/CHANGELOG.md -charts/stable/fireflyiii/SCALE/item.yaml -charts/stable/fireflyiii/SCALE/ix_values.yaml -charts/stable/fireflyiii/SCALE/questions.yaml -charts/stable/fireflyiii/app-readme.md -charts/stable/fireflyiii/helm-values.md -charts/stable/fireflyiii/templates/common.yaml -charts/stable/fireflyiii/templates/secrets.yaml -charts/stable/fireflyiii/values.yaml -charts/stable/flaresolverr/.helmignore -charts/stable/flaresolverr/CHANGELOG.md -charts/stable/flaresolverr/CONFIG.md -charts/stable/flaresolverr/Chart.yaml -charts/stable/flaresolverr/README.md -charts/stable/flaresolverr/SCALE/CHANGELOG.md -charts/stable/flaresolverr/SCALE/item.yaml -charts/stable/flaresolverr/SCALE/ix_values.yaml -charts/stable/flaresolverr/SCALE/questions.yaml -charts/stable/flaresolverr/app-readme.md -charts/stable/flaresolverr/helm-values.md -charts/stable/flaresolverr/templates/common.yaml -charts/stable/flaresolverr/values.yaml -charts/stable/flood/.helmignore -charts/stable/flood/CHANGELOG.md -charts/stable/flood/CONFIG.md -charts/stable/flood/Chart.yaml -charts/stable/flood/README.md -charts/stable/flood/SCALE/CHANGELOG.md -charts/stable/flood/SCALE/item.yaml -charts/stable/flood/SCALE/ix_values.yaml -charts/stable/flood/SCALE/questions.yaml -charts/stable/flood/app-readme.md -charts/stable/flood/ci/ct-values.yaml -charts/stable/flood/helm-values.md -charts/stable/flood/templates/common.yaml -charts/stable/flood/values.yaml -charts/stable/focalboard/.helmignore -charts/stable/focalboard/CHANGELOG.md -charts/stable/focalboard/CONFIG.md -charts/stable/focalboard/Chart.yaml -charts/stable/focalboard/README.md -charts/stable/focalboard/SCALE/CHANGELOG.md -charts/stable/focalboard/SCALE/item.yaml -charts/stable/focalboard/SCALE/ix_values.yaml -charts/stable/focalboard/SCALE/questions.yaml -charts/stable/focalboard/app-readme.md -charts/stable/focalboard/helm-values.md -charts/stable/focalboard/templates/common.yaml -charts/stable/focalboard/values.yaml -charts/stable/freeradius/.helmignore -charts/stable/freeradius/CHANGELOG.md -charts/stable/freeradius/CONFIG.md -charts/stable/freeradius/Chart.yaml -charts/stable/freeradius/README.md -charts/stable/freeradius/SCALE/CHANGELOG.md -charts/stable/freeradius/SCALE/item.yaml -charts/stable/freeradius/SCALE/ix_values.yaml -charts/stable/freeradius/SCALE/questions.yaml -charts/stable/freeradius/app-readme.md -charts/stable/freeradius/helm-values.md -charts/stable/freeradius/templates/common.yaml -charts/stable/freeradius/values.yaml -charts/stable/freshrss/.helmignore -charts/stable/freshrss/CHANGELOG.md -charts/stable/freshrss/CONFIG.md -charts/stable/freshrss/Chart.yaml -charts/stable/freshrss/README.md -charts/stable/freshrss/SCALE/CHANGELOG.md -charts/stable/freshrss/SCALE/item.yaml -charts/stable/freshrss/SCALE/ix_values.yaml -charts/stable/freshrss/SCALE/questions.yaml -charts/stable/freshrss/app-readme.md -charts/stable/freshrss/helm-values.md -charts/stable/freshrss/templates/common.yaml -charts/stable/freshrss/values.yaml -charts/stable/gaps/.helmignore -charts/stable/gaps/CHANGELOG.md -charts/stable/gaps/CONFIG.md -charts/stable/gaps/Chart.yaml -charts/stable/gaps/README.md -charts/stable/gaps/SCALE/CHANGELOG.md -charts/stable/gaps/SCALE/item.yaml -charts/stable/gaps/SCALE/ix_values.yaml -charts/stable/gaps/SCALE/questions.yaml -charts/stable/gaps/app-readme.md -charts/stable/gaps/helm-values.md -charts/stable/gaps/templates/common.yaml -charts/stable/gaps/values.yaml -charts/stable/gonic/.helmignore -charts/stable/gonic/CHANGELOG.md -charts/stable/gonic/CONFIG.md -charts/stable/gonic/Chart.yaml -charts/stable/gonic/README.md -charts/stable/gonic/SCALE/CHANGELOG.md -charts/stable/gonic/SCALE/item.yaml -charts/stable/gonic/SCALE/ix_values.yaml -charts/stable/gonic/SCALE/questions.yaml -charts/stable/gonic/app-readme.md -charts/stable/gonic/ci/ct-values.yaml -charts/stable/gonic/helm-values.md -charts/stable/gonic/templates/common.yaml -charts/stable/gonic/values.yaml -charts/stable/grocy/.helmignore -charts/stable/grocy/CHANGELOG.md -charts/stable/grocy/CONFIG.md -charts/stable/grocy/Chart.yaml -charts/stable/grocy/README.md -charts/stable/grocy/SCALE/CHANGELOG.md -charts/stable/grocy/SCALE/item.yaml -charts/stable/grocy/SCALE/ix_values.yaml -charts/stable/grocy/SCALE/questions.yaml -charts/stable/grocy/app-readme.md -charts/stable/grocy/helm-values.md -charts/stable/grocy/templates/common.yaml -charts/stable/grocy/values.yaml -charts/stable/handbrake/CHANGELOG.md -charts/stable/handbrake/CONFIG.md -charts/stable/handbrake/Chart.yaml -charts/stable/handbrake/README.md -charts/stable/handbrake/SCALE/CHANGELOG.md -charts/stable/handbrake/SCALE/item.yaml -charts/stable/handbrake/SCALE/ix_values.yaml -charts/stable/handbrake/SCALE/questions.yaml -charts/stable/handbrake/app-readme.md -charts/stable/handbrake/helm-values.md -charts/stable/handbrake/templates/common.yaml -charts/stable/handbrake/values.yaml -charts/stable/haste-server/.helmignore -charts/stable/haste-server/CHANGELOG.md -charts/stable/haste-server/CONFIG.md -charts/stable/haste-server/Chart.yaml -charts/stable/haste-server/README.md -charts/stable/haste-server/SCALE/CHANGELOG.md -charts/stable/haste-server/SCALE/item.yaml -charts/stable/haste-server/SCALE/ix_values.yaml -charts/stable/haste-server/SCALE/questions.yaml -charts/stable/haste-server/app-readme.md -charts/stable/haste-server/helm-values.md -charts/stable/haste-server/templates/common.yaml -charts/stable/haste-server/values.yaml -charts/stable/healthchecks/.helmignore -charts/stable/healthchecks/CHANGELOG.md -charts/stable/healthchecks/CONFIG.md -charts/stable/healthchecks/Chart.yaml -charts/stable/healthchecks/README.md -charts/stable/healthchecks/SCALE/CHANGELOG.md -charts/stable/healthchecks/SCALE/item.yaml -charts/stable/healthchecks/SCALE/ix_values.yaml -charts/stable/healthchecks/SCALE/questions.yaml -charts/stable/healthchecks/app-readme.md -charts/stable/healthchecks/helm-values.md -charts/stable/healthchecks/templates/common.yaml -charts/stable/healthchecks/values.yaml -charts/stable/heimdall/.helmignore -charts/stable/heimdall/CHANGELOG.md -charts/stable/heimdall/CONFIG.md -charts/stable/heimdall/Chart.yaml -charts/stable/heimdall/README.md -charts/stable/heimdall/SCALE/CHANGELOG.md -charts/stable/heimdall/SCALE/item.yaml -charts/stable/heimdall/SCALE/ix_values.yaml -charts/stable/heimdall/SCALE/questions.yaml -charts/stable/heimdall/app-readme.md -charts/stable/heimdall/helm-values.md -charts/stable/heimdall/templates/common.yaml -charts/stable/heimdall/values.yaml -charts/stable/home-assistant/.helmignore -charts/stable/home-assistant/CHANGELOG.md -charts/stable/home-assistant/CONFIG.md -charts/stable/home-assistant/Chart.yaml -charts/stable/home-assistant/README.md -charts/stable/home-assistant/SCALE/CHANGELOG.md -charts/stable/home-assistant/SCALE/item.yaml -charts/stable/home-assistant/SCALE/ix_values.yaml -charts/stable/home-assistant/SCALE/questions.yaml -charts/stable/home-assistant/app-readme.md -charts/stable/home-assistant/helm-values.md -charts/stable/home-assistant/templates/common.yaml -charts/stable/home-assistant/templates/secret.yaml -charts/stable/home-assistant/values.yaml -charts/stable/hyperion-ng/.helmignore -charts/stable/hyperion-ng/CHANGELOG.md -charts/stable/hyperion-ng/CONFIG.md -charts/stable/hyperion-ng/Chart.yaml -charts/stable/hyperion-ng/README.md -charts/stable/hyperion-ng/SCALE/CHANGELOG.md -charts/stable/hyperion-ng/SCALE/item.yaml -charts/stable/hyperion-ng/SCALE/ix_values.yaml -charts/stable/hyperion-ng/SCALE/questions.yaml -charts/stable/hyperion-ng/app-readme.md -charts/stable/hyperion-ng/helm-values.md -charts/stable/hyperion-ng/templates/common.yaml -charts/stable/hyperion-ng/values.yaml -charts/stable/jackett/.helmignore -charts/stable/jackett/CHANGELOG.md -charts/stable/jackett/CONFIG.md -charts/stable/jackett/Chart.yaml -charts/stable/jackett/README.md -charts/stable/jackett/SCALE/CHANGELOG.md -charts/stable/jackett/SCALE/item.yaml -charts/stable/jackett/SCALE/ix_values.yaml -charts/stable/jackett/SCALE/questions.yaml -charts/stable/jackett/app-readme.md -charts/stable/jackett/helm-values.md -charts/stable/jackett/templates/common.yaml -charts/stable/jackett/values.yaml -charts/stable/jdownloader2/CHANGELOG.md -charts/stable/jdownloader2/CONFIG.md -charts/stable/jdownloader2/Chart.yaml -charts/stable/jdownloader2/README.md -charts/stable/jdownloader2/SCALE/CHANGELOG.md -charts/stable/jdownloader2/SCALE/item.yaml -charts/stable/jdownloader2/SCALE/ix_values.yaml -charts/stable/jdownloader2/SCALE/questions.yaml -charts/stable/jdownloader2/app-readme.md -charts/stable/jdownloader2/helm-values.md -charts/stable/jdownloader2/templates/common.yaml -charts/stable/jdownloader2/values.yaml -charts/stable/jellyfin/.helmignore -charts/stable/jellyfin/CHANGELOG.md -charts/stable/jellyfin/CONFIG.md -charts/stable/jellyfin/Chart.yaml -charts/stable/jellyfin/README.md -charts/stable/jellyfin/SCALE/CHANGELOG.md -charts/stable/jellyfin/SCALE/item.yaml -charts/stable/jellyfin/SCALE/ix_values.yaml -charts/stable/jellyfin/SCALE/questions.yaml -charts/stable/jellyfin/app-readme.md -charts/stable/jellyfin/helm-values.md -charts/stable/jellyfin/templates/common.yaml -charts/stable/jellyfin/values.yaml -charts/stable/k8s-gateway/.helmignore -charts/stable/k8s-gateway/CHANGELOG.md -charts/stable/k8s-gateway/CONFIG.md -charts/stable/k8s-gateway/Chart.yaml -charts/stable/k8s-gateway/README.md -charts/stable/k8s-gateway/SCALE/CHANGELOG.md -charts/stable/k8s-gateway/SCALE/item.yaml -charts/stable/k8s-gateway/SCALE/ix_values.yaml -charts/stable/k8s-gateway/SCALE/questions.yaml -charts/stable/k8s-gateway/app-readme.md -charts/stable/k8s-gateway/helm-values.md -charts/stable/k8s-gateway/templates/_configmap.tpl -charts/stable/k8s-gateway/templates/common.yaml -charts/stable/k8s-gateway/values.yaml -charts/stable/kms/.helmignore -charts/stable/kms/CHANGELOG.md -charts/stable/kms/CONFIG.md -charts/stable/kms/Chart.yaml -charts/stable/kms/README.md -charts/stable/kms/SCALE/CHANGELOG.md -charts/stable/kms/SCALE/item.yaml -charts/stable/kms/SCALE/ix_values.yaml -charts/stable/kms/SCALE/questions.yaml -charts/stable/kms/app-readme.md -charts/stable/kms/helm-values.md -charts/stable/kms/templates/common.yaml -charts/stable/kms/values.yaml -charts/stable/komga/.helmignore -charts/stable/komga/CHANGELOG.md -charts/stable/komga/CONFIG.md -charts/stable/komga/Chart.yaml -charts/stable/komga/README.md -charts/stable/komga/SCALE/CHANGELOG.md -charts/stable/komga/SCALE/item.yaml -charts/stable/komga/SCALE/ix_values.yaml -charts/stable/komga/SCALE/questions.yaml -charts/stable/komga/app-readme.md -charts/stable/komga/helm-values.md -charts/stable/komga/templates/common.yaml -charts/stable/komga/values.yaml -charts/stable/lazylibrarian/.helmignore -charts/stable/lazylibrarian/CHANGELOG.md -charts/stable/lazylibrarian/CONFIG.md -charts/stable/lazylibrarian/Chart.yaml -charts/stable/lazylibrarian/README.md -charts/stable/lazylibrarian/SCALE/CHANGELOG.md -charts/stable/lazylibrarian/SCALE/item.yaml -charts/stable/lazylibrarian/SCALE/ix_values.yaml -charts/stable/lazylibrarian/SCALE/questions.yaml -charts/stable/lazylibrarian/app-readme.md -charts/stable/lazylibrarian/helm-values.md -charts/stable/lazylibrarian/templates/common.yaml -charts/stable/lazylibrarian/values.yaml -charts/stable/librespeed/.helmignore -charts/stable/librespeed/CHANGELOG.md -charts/stable/librespeed/CONFIG.md -charts/stable/librespeed/Chart.yaml -charts/stable/librespeed/README.md -charts/stable/librespeed/SCALE/CHANGELOG.md -charts/stable/librespeed/SCALE/item.yaml -charts/stable/librespeed/SCALE/ix_values.yaml -charts/stable/librespeed/SCALE/questions.yaml -charts/stable/librespeed/app-readme.md -charts/stable/librespeed/ci/ct-values.yaml -charts/stable/librespeed/helm-values.md -charts/stable/librespeed/templates/common.yaml -charts/stable/librespeed/values.yaml -charts/stable/lidarr/.helmignore -charts/stable/lidarr/CHANGELOG.md -charts/stable/lidarr/CONFIG.md -charts/stable/lidarr/Chart.yaml -charts/stable/lidarr/README.md -charts/stable/lidarr/SCALE/CHANGELOG.md -charts/stable/lidarr/SCALE/item.yaml -charts/stable/lidarr/SCALE/ix_values.yaml -charts/stable/lidarr/SCALE/questions.yaml -charts/stable/lidarr/app-readme.md -charts/stable/lidarr/helm-values.md -charts/stable/lidarr/templates/common.yaml -charts/stable/lidarr/values.yaml -charts/stable/littlelink/.helmignore -charts/stable/littlelink/CHANGELOG.md -charts/stable/littlelink/CONFIG.md -charts/stable/littlelink/Chart.yaml -charts/stable/littlelink/README.md -charts/stable/littlelink/SCALE/CHANGELOG.md -charts/stable/littlelink/SCALE/item.yaml -charts/stable/littlelink/SCALE/ix_values.yaml -charts/stable/littlelink/SCALE/questions.yaml -charts/stable/littlelink/app-readme.md -charts/stable/littlelink/helm-values.md -charts/stable/littlelink/templates/_configmap.tpl -charts/stable/littlelink/templates/common.yaml -charts/stable/littlelink/values.yaml -charts/stable/lychee/.helmignore -charts/stable/lychee/CHANGELOG.md -charts/stable/lychee/CONFIG.md -charts/stable/lychee/Chart.yaml -charts/stable/lychee/README.md -charts/stable/lychee/SCALE/CHANGELOG.md -charts/stable/lychee/SCALE/item.yaml -charts/stable/lychee/SCALE/ix_values.yaml -charts/stable/lychee/SCALE/questions.yaml -charts/stable/lychee/app-readme.md -charts/stable/lychee/helm-values.md -charts/stable/lychee/templates/common.yaml -charts/stable/lychee/values.yaml -charts/stable/mealie/.helmignore -charts/stable/mealie/CHANGELOG.md -charts/stable/mealie/CONFIG.md -charts/stable/mealie/Chart.yaml -charts/stable/mealie/README.md -charts/stable/mealie/SCALE/CHANGELOG.md -charts/stable/mealie/SCALE/item.yaml -charts/stable/mealie/SCALE/ix_values.yaml -charts/stable/mealie/SCALE/questions.yaml -charts/stable/mealie/app-readme.md -charts/stable/mealie/helm-values.md -charts/stable/mealie/templates/common.yaml -charts/stable/mealie/values.yaml -charts/stable/mosquitto/.helmignore -charts/stable/mosquitto/CHANGELOG.md -charts/stable/mosquitto/CONFIG.md -charts/stable/mosquitto/Chart.yaml -charts/stable/mosquitto/README.md -charts/stable/mosquitto/SCALE/CHANGELOG.md -charts/stable/mosquitto/SCALE/item.yaml -charts/stable/mosquitto/SCALE/ix_values.yaml -charts/stable/mosquitto/SCALE/questions.yaml -charts/stable/mosquitto/app-readme.md -charts/stable/mosquitto/helm-values.md -charts/stable/mosquitto/templates/common.yaml -charts/stable/mosquitto/templates/configmap.yaml -charts/stable/mosquitto/values.yaml -charts/stable/mylar/.helmignore -charts/stable/mylar/CHANGELOG.md -charts/stable/mylar/CONFIG.md -charts/stable/mylar/Chart.yaml -charts/stable/mylar/README.md -charts/stable/mylar/SCALE/CHANGELOG.md -charts/stable/mylar/SCALE/item.yaml -charts/stable/mylar/SCALE/ix_values.yaml -charts/stable/mylar/SCALE/questions.yaml -charts/stable/mylar/app-readme.md -charts/stable/mylar/helm-values.md -charts/stable/mylar/templates/common.yaml -charts/stable/mylar/values.yaml -charts/stable/navidrome/.helmignore -charts/stable/navidrome/CHANGELOG.md -charts/stable/navidrome/CONFIG.md -charts/stable/navidrome/Chart.yaml -charts/stable/navidrome/README.md -charts/stable/navidrome/SCALE/CHANGELOG.md -charts/stable/navidrome/SCALE/item.yaml -charts/stable/navidrome/SCALE/ix_values.yaml -charts/stable/navidrome/SCALE/questions.yaml -charts/stable/navidrome/app-readme.md -charts/stable/navidrome/helm-values.md -charts/stable/navidrome/templates/common.yaml -charts/stable/navidrome/values.yaml -charts/stable/nextcloud/.helmignore -charts/stable/nextcloud/CHANGELOG.md -charts/stable/nextcloud/CONFIG.md -charts/stable/nextcloud/Chart.yaml -charts/stable/nextcloud/README.md -charts/stable/nextcloud/SCALE/CHANGELOG.md -charts/stable/nextcloud/SCALE/item.yaml -charts/stable/nextcloud/SCALE/ix_values.yaml -charts/stable/nextcloud/SCALE/questions.yaml -charts/stable/nextcloud/app-readme.md -charts/stable/nextcloud/helm-values.md -charts/stable/nextcloud/templates/_configmap.tpl -charts/stable/nextcloud/templates/_cronjob.tpl -charts/stable/nextcloud/templates/_secrets.tpl -charts/stable/nextcloud/templates/common.yaml -charts/stable/nextcloud/values.yaml -charts/stable/node-red/.helmignore -charts/stable/node-red/CHANGELOG.md -charts/stable/node-red/CONFIG.md -charts/stable/node-red/Chart.yaml -charts/stable/node-red/README.md -charts/stable/node-red/SCALE/CHANGELOG.md -charts/stable/node-red/SCALE/item.yaml -charts/stable/node-red/SCALE/ix_values.yaml -charts/stable/node-red/SCALE/questions.yaml -charts/stable/node-red/app-readme.md -charts/stable/node-red/helm-values.md -charts/stable/node-red/templates/common.yaml -charts/stable/node-red/values.yaml -charts/stable/nullserv/.helmignore -charts/stable/nullserv/CHANGELOG.md -charts/stable/nullserv/CONFIG.md -charts/stable/nullserv/Chart.yaml -charts/stable/nullserv/README.md -charts/stable/nullserv/SCALE/CHANGELOG.md -charts/stable/nullserv/SCALE/item.yaml -charts/stable/nullserv/SCALE/ix_values.yaml -charts/stable/nullserv/SCALE/questions.yaml -charts/stable/nullserv/app-readme.md -charts/stable/nullserv/helm-values.md -charts/stable/nullserv/templates/common.yaml -charts/stable/nullserv/values.yaml -charts/stable/nzbget/.helmignore -charts/stable/nzbget/CHANGELOG.md -charts/stable/nzbget/CONFIG.md -charts/stable/nzbget/Chart.yaml -charts/stable/nzbget/README.md -charts/stable/nzbget/SCALE/CHANGELOG.md -charts/stable/nzbget/SCALE/item.yaml -charts/stable/nzbget/SCALE/ix_values.yaml -charts/stable/nzbget/SCALE/questions.yaml -charts/stable/nzbget/app-readme.md -charts/stable/nzbget/helm-values.md -charts/stable/nzbget/templates/common.yaml -charts/stable/nzbget/values.yaml -charts/stable/nzbhydra/.helmignore -charts/stable/nzbhydra/CHANGELOG.md -charts/stable/nzbhydra/CONFIG.md -charts/stable/nzbhydra/Chart.yaml -charts/stable/nzbhydra/README.md -charts/stable/nzbhydra/SCALE/CHANGELOG.md -charts/stable/nzbhydra/SCALE/item.yaml -charts/stable/nzbhydra/SCALE/ix_values.yaml -charts/stable/nzbhydra/SCALE/questions.yaml -charts/stable/nzbhydra/app-readme.md -charts/stable/nzbhydra/helm-values.md -charts/stable/nzbhydra/templates/common.yaml -charts/stable/nzbhydra/values.yaml -charts/stable/octoprint/.helmignore -charts/stable/octoprint/CHANGELOG.md -charts/stable/octoprint/CONFIG.md -charts/stable/octoprint/Chart.yaml -charts/stable/octoprint/README.md -charts/stable/octoprint/SCALE/CHANGELOG.md -charts/stable/octoprint/SCALE/item.yaml -charts/stable/octoprint/SCALE/ix_values.yaml -charts/stable/octoprint/SCALE/questions.yaml -charts/stable/octoprint/app-readme.md -charts/stable/octoprint/helm-values.md -charts/stable/octoprint/templates/common.yaml -charts/stable/octoprint/values.yaml -charts/stable/omada-controller/.helmignore -charts/stable/omada-controller/CHANGELOG.md -charts/stable/omada-controller/CONFIG.md -charts/stable/omada-controller/Chart.yaml -charts/stable/omada-controller/README.md -charts/stable/omada-controller/SCALE/CHANGELOG.md -charts/stable/omada-controller/SCALE/item.yaml -charts/stable/omada-controller/SCALE/ix_values.yaml -charts/stable/omada-controller/SCALE/questions.yaml -charts/stable/omada-controller/app-readme.md -charts/stable/omada-controller/helm-values.md -charts/stable/omada-controller/templates/common.yaml -charts/stable/omada-controller/values.yaml -charts/stable/ombi/.helmignore -charts/stable/ombi/CHANGELOG.md -charts/stable/ombi/CONFIG.md -charts/stable/ombi/Chart.yaml -charts/stable/ombi/README.md -charts/stable/ombi/SCALE/CHANGELOG.md -charts/stable/ombi/SCALE/item.yaml -charts/stable/ombi/SCALE/ix_values.yaml -charts/stable/ombi/SCALE/questions.yaml -charts/stable/ombi/app-readme.md -charts/stable/ombi/helm-values.md -charts/stable/ombi/templates/common.yaml -charts/stable/ombi/values.yaml -charts/stable/openldap/.helmignore -charts/stable/openldap/CHANGELOG.md -charts/stable/openldap/CONFIG.md -charts/stable/openldap/Chart.yaml -charts/stable/openldap/README.md -charts/stable/openldap/SCALE/CHANGELOG.md -charts/stable/openldap/SCALE/item.yaml -charts/stable/openldap/SCALE/ix_values.yaml -charts/stable/openldap/SCALE/questions.yaml -charts/stable/openldap/app-readme.md -charts/stable/openldap/helm-values.md -charts/stable/openldap/templates/_configmap.tpl -charts/stable/openldap/templates/common.yaml -charts/stable/openldap/values.yaml -charts/stable/organizr/.helmignore -charts/stable/organizr/CHANGELOG.md -charts/stable/organizr/CONFIG.md -charts/stable/organizr/Chart.yaml -charts/stable/organizr/README.md -charts/stable/organizr/SCALE/CHANGELOG.md -charts/stable/organizr/SCALE/item.yaml -charts/stable/organizr/SCALE/ix_values.yaml -charts/stable/organizr/SCALE/questions.yaml -charts/stable/organizr/app-readme.md -charts/stable/organizr/helm-values.md -charts/stable/organizr/templates/common.yaml -charts/stable/organizr/values.yaml -charts/stable/overseerr/.helmignore -charts/stable/overseerr/CHANGELOG.md -charts/stable/overseerr/CONFIG.md -charts/stable/overseerr/Chart.yaml -charts/stable/overseerr/README.md -charts/stable/overseerr/SCALE/CHANGELOG.md -charts/stable/overseerr/SCALE/item.yaml -charts/stable/overseerr/SCALE/ix_values.yaml -charts/stable/overseerr/SCALE/questions.yaml -charts/stable/overseerr/app-readme.md -charts/stable/overseerr/helm-values.md -charts/stable/overseerr/templates/common.yaml -charts/stable/overseerr/values.yaml -charts/stable/owncast/.helmignore -charts/stable/owncast/CHANGELOG.md -charts/stable/owncast/CONFIG.md -charts/stable/owncast/Chart.yaml -charts/stable/owncast/README.md -charts/stable/owncast/SCALE/CHANGELOG.md -charts/stable/owncast/SCALE/item.yaml -charts/stable/owncast/SCALE/ix_values.yaml -charts/stable/owncast/SCALE/questions.yaml -charts/stable/owncast/app-readme.md -charts/stable/owncast/helm-values.md -charts/stable/owncast/templates/common.yaml -charts/stable/owncast/values.yaml -charts/stable/owncloud-ocis/.helmignore -charts/stable/owncloud-ocis/CHANGELOG.md -charts/stable/owncloud-ocis/CONFIG.md -charts/stable/owncloud-ocis/Chart.yaml -charts/stable/owncloud-ocis/README.md -charts/stable/owncloud-ocis/SCALE/CHANGELOG.md -charts/stable/owncloud-ocis/SCALE/item.yaml -charts/stable/owncloud-ocis/SCALE/ix_values.yaml -charts/stable/owncloud-ocis/SCALE/questions.yaml -charts/stable/owncloud-ocis/app-readme.md -charts/stable/owncloud-ocis/helm-values.md -charts/stable/owncloud-ocis/templates/common.yaml -charts/stable/owncloud-ocis/values.yaml -charts/stable/pgadmin/.helmignore -charts/stable/pgadmin/CHANGELOG.md -charts/stable/pgadmin/CONFIG.md -charts/stable/pgadmin/Chart.yaml -charts/stable/pgadmin/README.md -charts/stable/pgadmin/SCALE/CHANGELOG.md -charts/stable/pgadmin/SCALE/item.yaml -charts/stable/pgadmin/SCALE/ix_values.yaml -charts/stable/pgadmin/SCALE/questions.yaml -charts/stable/pgadmin/app-readme.md -charts/stable/pgadmin/helm-values.md -charts/stable/pgadmin/templates/common.yaml -charts/stable/pgadmin/values.yaml -charts/stable/photoprism/.helmignore -charts/stable/photoprism/CHANGELOG.md -charts/stable/photoprism/CONFIG.md -charts/stable/photoprism/Chart.yaml -charts/stable/photoprism/README.md -charts/stable/photoprism/SCALE/CHANGELOG.md -charts/stable/photoprism/SCALE/item.yaml -charts/stable/photoprism/SCALE/ix_values.yaml -charts/stable/photoprism/SCALE/questions.yaml -charts/stable/photoprism/app-readme.md -charts/stable/photoprism/helm-values.md -charts/stable/photoprism/templates/common.yaml -charts/stable/photoprism/values.yaml -charts/stable/phpldapadmin/.helmignore -charts/stable/phpldapadmin/CHANGELOG.md -charts/stable/phpldapadmin/CONFIG.md -charts/stable/phpldapadmin/Chart.yaml -charts/stable/phpldapadmin/README.md -charts/stable/phpldapadmin/SCALE/CHANGELOG.md -charts/stable/phpldapadmin/SCALE/item.yaml -charts/stable/phpldapadmin/SCALE/ix_values.yaml -charts/stable/phpldapadmin/SCALE/questions.yaml -charts/stable/phpldapadmin/app-readme.md -charts/stable/phpldapadmin/helm-values.md -charts/stable/phpldapadmin/templates/common.yaml -charts/stable/phpldapadmin/values.yaml -charts/stable/piaware/.helmignore -charts/stable/piaware/CHANGELOG.md -charts/stable/piaware/CONFIG.md -charts/stable/piaware/Chart.yaml -charts/stable/piaware/README.md -charts/stable/piaware/SCALE/CHANGELOG.md -charts/stable/piaware/SCALE/item.yaml -charts/stable/piaware/SCALE/ix_values.yaml -charts/stable/piaware/SCALE/questions.yaml -charts/stable/piaware/app-readme.md -charts/stable/piaware/ci/ct-values.yaml -charts/stable/piaware/helm-values.md -charts/stable/piaware/templates/common.yaml -charts/stable/piaware/values.yaml -charts/stable/pihole/.helmignore -charts/stable/pihole/CHANGELOG.md -charts/stable/pihole/CONFIG.md -charts/stable/pihole/Chart.yaml -charts/stable/pihole/README.md -charts/stable/pihole/SCALE/CHANGELOG.md -charts/stable/pihole/SCALE/item.yaml -charts/stable/pihole/SCALE/ix_values.yaml -charts/stable/pihole/SCALE/questions.yaml -charts/stable/pihole/app-readme.md -charts/stable/pihole/helm-values.md -charts/stable/pihole/templates/_configmap.tpl -charts/stable/pihole/templates/common.yaml -charts/stable/pihole/values.yaml -charts/stable/plex/.helmignore -charts/stable/plex/CHANGELOG.md -charts/stable/plex/CONFIG.md -charts/stable/plex/Chart.yaml -charts/stable/plex/README.md -charts/stable/plex/SCALE/CHANGELOG.md -charts/stable/plex/SCALE/item.yaml -charts/stable/plex/SCALE/ix_values.yaml -charts/stable/plex/SCALE/questions.yaml -charts/stable/plex/app-readme.md -charts/stable/plex/helm-values.md -charts/stable/plex/templates/common.yaml -charts/stable/plex/values.yaml -charts/stable/podgrab/CHANGELOG.md -charts/stable/podgrab/CONFIG.md -charts/stable/podgrab/Chart.yaml -charts/stable/podgrab/README.md -charts/stable/podgrab/SCALE/CHANGELOG.md -charts/stable/podgrab/SCALE/item.yaml -charts/stable/podgrab/SCALE/ix_values.yaml -charts/stable/podgrab/SCALE/questions.yaml -charts/stable/podgrab/app-readme.md -charts/stable/podgrab/helm-values.md -charts/stable/podgrab/templates/common.yaml -charts/stable/podgrab/values.yaml -charts/stable/postgresql/.helmignore -charts/stable/postgresql/CHANGELOG.md -charts/stable/postgresql/CONFIG.md -charts/stable/postgresql/Chart.yaml -charts/stable/postgresql/README.md -charts/stable/postgresql/SCALE/CHANGELOG.md -charts/stable/postgresql/SCALE/item.yaml -charts/stable/postgresql/SCALE/ix_values.yaml -charts/stable/postgresql/SCALE/questions.yaml -charts/stable/postgresql/app-readme.md -charts/stable/postgresql/helm-values.md -charts/stable/postgresql/templates/backup-postgres-config.yaml -charts/stable/postgresql/templates/common.yaml -charts/stable/postgresql/templates/secret.yaml -charts/stable/postgresql/templates/upgrade-backup-postgres-hook.yaml -charts/stable/postgresql/values.yaml -charts/stable/pretend-youre-xyzzy/.helmignore -charts/stable/pretend-youre-xyzzy/CHANGELOG.md -charts/stable/pretend-youre-xyzzy/CONFIG.md -charts/stable/pretend-youre-xyzzy/Chart.yaml -charts/stable/pretend-youre-xyzzy/README.md -charts/stable/pretend-youre-xyzzy/SCALE/CHANGELOG.md -charts/stable/pretend-youre-xyzzy/SCALE/item.yaml -charts/stable/pretend-youre-xyzzy/SCALE/ix_values.yaml -charts/stable/pretend-youre-xyzzy/SCALE/questions.yaml -charts/stable/pretend-youre-xyzzy/app-readme.md -charts/stable/pretend-youre-xyzzy/helm-values.md -charts/stable/pretend-youre-xyzzy/templates/common.yaml -charts/stable/pretend-youre-xyzzy/values.yaml -charts/stable/protonmail-bridge/.helmignore -charts/stable/protonmail-bridge/CHANGELOG.md -charts/stable/protonmail-bridge/CONFIG.md -charts/stable/protonmail-bridge/Chart.yaml -charts/stable/protonmail-bridge/README.md -charts/stable/protonmail-bridge/SCALE/CHANGELOG.md -charts/stable/protonmail-bridge/SCALE/item.yaml -charts/stable/protonmail-bridge/SCALE/ix_values.yaml -charts/stable/protonmail-bridge/SCALE/questions.yaml -charts/stable/protonmail-bridge/app-readme.md -charts/stable/protonmail-bridge/helm-values.md -charts/stable/protonmail-bridge/templates/common.yaml -charts/stable/protonmail-bridge/values.yaml -charts/stable/prowlarr/.helmignore -charts/stable/prowlarr/CHANGELOG.md -charts/stable/prowlarr/CONFIG.md -charts/stable/prowlarr/Chart.yaml -charts/stable/prowlarr/README.md -charts/stable/prowlarr/SCALE/CHANGELOG.md -charts/stable/prowlarr/SCALE/item.yaml -charts/stable/prowlarr/SCALE/ix_values.yaml -charts/stable/prowlarr/SCALE/questions.yaml -charts/stable/prowlarr/app-readme.md -charts/stable/prowlarr/helm-values.md -charts/stable/prowlarr/templates/common.yaml -charts/stable/prowlarr/values.yaml -charts/stable/pyload/.helmignore -charts/stable/pyload/CHANGELOG.md -charts/stable/pyload/CONFIG.md -charts/stable/pyload/Chart.yaml -charts/stable/pyload/README.md -charts/stable/pyload/SCALE/CHANGELOG.md -charts/stable/pyload/SCALE/item.yaml -charts/stable/pyload/SCALE/ix_values.yaml -charts/stable/pyload/SCALE/questions.yaml -charts/stable/pyload/app-readme.md -charts/stable/pyload/helm-values.md -charts/stable/pyload/templates/common.yaml -charts/stable/pyload/values.yaml -charts/stable/qbittorrent/.helmignore -charts/stable/qbittorrent/CHANGELOG.md -charts/stable/qbittorrent/CONFIG.md -charts/stable/qbittorrent/Chart.yaml -charts/stable/qbittorrent/README.md -charts/stable/qbittorrent/SCALE/CHANGELOG.md -charts/stable/qbittorrent/SCALE/item.yaml -charts/stable/qbittorrent/SCALE/ix_values.yaml -charts/stable/qbittorrent/SCALE/questions.yaml -charts/stable/qbittorrent/app-readme.md -charts/stable/qbittorrent/helm-values.md -charts/stable/qbittorrent/templates/_configmap.tpl -charts/stable/qbittorrent/templates/common.yaml -charts/stable/qbittorrent/values.yaml -charts/stable/radarr/.helmignore -charts/stable/radarr/CHANGELOG.md -charts/stable/radarr/CONFIG.md -charts/stable/radarr/Chart.yaml -charts/stable/radarr/README.md -charts/stable/radarr/SCALE/CHANGELOG.md -charts/stable/radarr/SCALE/item.yaml -charts/stable/radarr/SCALE/ix_values.yaml -charts/stable/radarr/SCALE/questions.yaml -charts/stable/radarr/app-readme.md -charts/stable/radarr/helm-values.md -charts/stable/radarr/templates/common.yaml -charts/stable/radarr/values.yaml -charts/stable/readarr/.helmignore -charts/stable/readarr/CHANGELOG.md -charts/stable/readarr/CONFIG.md -charts/stable/readarr/Chart.yaml -charts/stable/readarr/README.md -charts/stable/readarr/SCALE/CHANGELOG.md -charts/stable/readarr/SCALE/item.yaml -charts/stable/readarr/SCALE/ix_values.yaml -charts/stable/readarr/SCALE/questions.yaml -charts/stable/readarr/app-readme.md -charts/stable/readarr/helm-values.md -charts/stable/readarr/templates/common.yaml -charts/stable/readarr/values.yaml -charts/stable/reg/.helmignore -charts/stable/reg/CHANGELOG.md -charts/stable/reg/CONFIG.md -charts/stable/reg/Chart.yaml -charts/stable/reg/README.md -charts/stable/reg/SCALE/CHANGELOG.md -charts/stable/reg/SCALE/item.yaml -charts/stable/reg/SCALE/ix_values.yaml -charts/stable/reg/SCALE/questions.yaml -charts/stable/reg/app-readme.md -charts/stable/reg/ci/ct-values.yaml -charts/stable/reg/helm-values.md -charts/stable/reg/templates/common.yaml -charts/stable/reg/values.yaml -charts/stable/resilio-sync/.helmignore -charts/stable/resilio-sync/CHANGELOG.md -charts/stable/resilio-sync/CONFIG.md -charts/stable/resilio-sync/Chart.yaml -charts/stable/resilio-sync/README.md -charts/stable/resilio-sync/SCALE/CHANGELOG.md -charts/stable/resilio-sync/SCALE/item.yaml -charts/stable/resilio-sync/SCALE/ix_values.yaml -charts/stable/resilio-sync/SCALE/questions.yaml -charts/stable/resilio-sync/app-readme.md -charts/stable/resilio-sync/helm-values.md -charts/stable/resilio-sync/templates/common.yaml -charts/stable/resilio-sync/values.yaml -charts/stable/sabnzbd/.helmignore -charts/stable/sabnzbd/CHANGELOG.md -charts/stable/sabnzbd/CONFIG.md -charts/stable/sabnzbd/Chart.yaml -charts/stable/sabnzbd/README.md -charts/stable/sabnzbd/SCALE/CHANGELOG.md -charts/stable/sabnzbd/SCALE/item.yaml -charts/stable/sabnzbd/SCALE/ix_values.yaml -charts/stable/sabnzbd/SCALE/questions.yaml -charts/stable/sabnzbd/app-readme.md -charts/stable/sabnzbd/helm-values.md -charts/stable/sabnzbd/templates/common.yaml -charts/stable/sabnzbd/values.yaml -charts/stable/ser2sock/.helmignore -charts/stable/ser2sock/CHANGELOG.md -charts/stable/ser2sock/CONFIG.md -charts/stable/ser2sock/Chart.yaml -charts/stable/ser2sock/README.md -charts/stable/ser2sock/SCALE/CHANGELOG.md -charts/stable/ser2sock/SCALE/item.yaml -charts/stable/ser2sock/SCALE/ix_values.yaml -charts/stable/ser2sock/SCALE/questions.yaml -charts/stable/ser2sock/app-readme.md -charts/stable/ser2sock/helm-values.md -charts/stable/ser2sock/templates/common.yaml -charts/stable/ser2sock/values.yaml -charts/stable/sonarr/.helmignore -charts/stable/sonarr/CHANGELOG.md -charts/stable/sonarr/CONFIG.md -charts/stable/sonarr/Chart.yaml -charts/stable/sonarr/README.md -charts/stable/sonarr/SCALE/CHANGELOG.md -charts/stable/sonarr/SCALE/item.yaml -charts/stable/sonarr/SCALE/ix_values.yaml -charts/stable/sonarr/SCALE/questions.yaml -charts/stable/sonarr/app-readme.md -charts/stable/sonarr/helm-values.md -charts/stable/sonarr/templates/common.yaml -charts/stable/sonarr/values.yaml -charts/stable/stash/.helmignore -charts/stable/stash/CHANGELOG.md -charts/stable/stash/CONFIG.md -charts/stable/stash/Chart.yaml -charts/stable/stash/README.md -charts/stable/stash/SCALE/CHANGELOG.md -charts/stable/stash/SCALE/item.yaml -charts/stable/stash/SCALE/ix_values.yaml -charts/stable/stash/SCALE/questions.yaml -charts/stable/stash/app-readme.md -charts/stable/stash/ci/ct-values.yaml -charts/stable/stash/helm-values.md -charts/stable/stash/templates/common.yaml -charts/stable/stash/values.yaml -charts/stable/syncthing/.helmignore -charts/stable/syncthing/CHANGELOG.md -charts/stable/syncthing/CONFIG.md -charts/stable/syncthing/Chart.yaml -charts/stable/syncthing/README.md -charts/stable/syncthing/SCALE/CHANGELOG.md -charts/stable/syncthing/SCALE/item.yaml -charts/stable/syncthing/SCALE/ix_values.yaml -charts/stable/syncthing/SCALE/questions.yaml -charts/stable/syncthing/app-readme.md -charts/stable/syncthing/helm-values.md -charts/stable/syncthing/templates/common.yaml -charts/stable/syncthing/values.yaml -charts/stable/tautulli/.helmignore -charts/stable/tautulli/CHANGELOG.md -charts/stable/tautulli/CONFIG.md -charts/stable/tautulli/Chart.yaml -charts/stable/tautulli/README.md -charts/stable/tautulli/SCALE/CHANGELOG.md -charts/stable/tautulli/SCALE/item.yaml -charts/stable/tautulli/SCALE/ix_values.yaml -charts/stable/tautulli/SCALE/questions.yaml -charts/stable/tautulli/app-readme.md -charts/stable/tautulli/helm-values.md -charts/stable/tautulli/templates/common.yaml -charts/stable/tautulli/values.yaml -charts/stable/thelounge/.helmignore -charts/stable/thelounge/CHANGELOG.md -charts/stable/thelounge/CONFIG.md -charts/stable/thelounge/Chart.yaml -charts/stable/thelounge/README.md -charts/stable/thelounge/SCALE/CHANGELOG.md -charts/stable/thelounge/SCALE/item.yaml -charts/stable/thelounge/SCALE/ix_values.yaml -charts/stable/thelounge/SCALE/questions.yaml -charts/stable/thelounge/app-readme.md -charts/stable/thelounge/helm-values.md -charts/stable/thelounge/templates/common.yaml -charts/stable/thelounge/values.yaml -charts/stable/traefik/.helmignore -charts/stable/traefik/CHANGELOG.md -charts/stable/traefik/CONFIG.md -charts/stable/traefik/Chart.yaml -charts/stable/traefik/README.md -charts/stable/traefik/SCALE/CHANGELOG.md -charts/stable/traefik/SCALE/item.yaml -charts/stable/traefik/SCALE/ix_values.yaml -charts/stable/traefik/SCALE/questions.yaml -charts/stable/traefik/app-readme.md -charts/stable/traefik/crds/ingressroute.yaml -charts/stable/traefik/crds/ingressroutetcp.yaml -charts/stable/traefik/crds/ingressrouteudp.yaml -charts/stable/traefik/crds/middlewares.yaml -charts/stable/traefik/crds/middlewarestcp.yaml -charts/stable/traefik/crds/serverstransports.yaml -charts/stable/traefik/crds/tlsoptions.yaml -charts/stable/traefik/crds/tlsstores.yaml -charts/stable/traefik/crds/traefikservices.yaml -charts/stable/traefik/helm-values.md -charts/stable/traefik/templates/_args.tpl -charts/stable/traefik/templates/_helpers.tpl -charts/stable/traefik/templates/_ingressclass.tpl -charts/stable/traefik/templates/_ingressroute.tpl -charts/stable/traefik/templates/_portalhook.tpl -charts/stable/traefik/templates/_tlsoptions.tpl -charts/stable/traefik/templates/common.yaml -charts/stable/traefik/templates/middlewares/basic-middleware.yaml -charts/stable/traefik/templates/middlewares/basicauth.yaml -charts/stable/traefik/templates/middlewares/chain.yaml -charts/stable/traefik/templates/middlewares/forwardauth.yaml -charts/stable/traefik/templates/middlewares/ipwhitelist.yaml -charts/stable/traefik/templates/middlewares/ratelimit.yaml -charts/stable/traefik/templates/middlewares/redirectScheme.yaml -charts/stable/traefik/templates/middlewares/redirectregex.yaml -charts/stable/traefik/templates/middlewares/tc-nextcloud.yaml -charts/stable/traefik/values.yaml -charts/stable/transmission/.helmignore -charts/stable/transmission/CHANGELOG.md -charts/stable/transmission/CONFIG.md -charts/stable/transmission/Chart.yaml -charts/stable/transmission/README.md -charts/stable/transmission/SCALE/CHANGELOG.md -charts/stable/transmission/SCALE/item.yaml -charts/stable/transmission/SCALE/ix_values.yaml -charts/stable/transmission/SCALE/questions.yaml -charts/stable/transmission/app-readme.md -charts/stable/transmission/helm-values.md -charts/stable/transmission/templates/common.yaml -charts/stable/transmission/values.yaml -charts/stable/truecommand/.helmignore -charts/stable/truecommand/CHANGELOG.md -charts/stable/truecommand/CONFIG.md -charts/stable/truecommand/Chart.yaml -charts/stable/truecommand/README.md -charts/stable/truecommand/SCALE/CHANGELOG.md -charts/stable/truecommand/SCALE/item.yaml -charts/stable/truecommand/SCALE/ix_values.yaml -charts/stable/truecommand/SCALE/questions.yaml -charts/stable/truecommand/app-readme.md -charts/stable/truecommand/helm-values.md -charts/stable/truecommand/templates/common.yaml -charts/stable/truecommand/values.yaml -charts/stable/tvheadend/.helmignore -charts/stable/tvheadend/CHANGELOG.md -charts/stable/tvheadend/CONFIG.md -charts/stable/tvheadend/Chart.yaml -charts/stable/tvheadend/README.md -charts/stable/tvheadend/SCALE/CHANGELOG.md -charts/stable/tvheadend/SCALE/item.yaml -charts/stable/tvheadend/SCALE/ix_values.yaml -charts/stable/tvheadend/SCALE/questions.yaml -charts/stable/tvheadend/app-readme.md -charts/stable/tvheadend/helm-values.md -charts/stable/tvheadend/templates/common.yaml -charts/stable/tvheadend/values.yaml -charts/stable/unifi/.helmignore -charts/stable/unifi/CHANGELOG.md -charts/stable/unifi/CONFIG.md -charts/stable/unifi/Chart.yaml -charts/stable/unifi/README.md -charts/stable/unifi/SCALE/CHANGELOG.md -charts/stable/unifi/SCALE/item.yaml -charts/stable/unifi/SCALE/ix_values.yaml -charts/stable/unifi/SCALE/questions.yaml -charts/stable/unifi/app-readme.md -charts/stable/unifi/helm-values.md -charts/stable/unifi/templates/common.yaml -charts/stable/unifi/values.yaml -charts/stable/unpackerr/.helmignore -charts/stable/unpackerr/CHANGELOG.md -charts/stable/unpackerr/CONFIG.md -charts/stable/unpackerr/Chart.yaml -charts/stable/unpackerr/README.md -charts/stable/unpackerr/SCALE/CHANGELOG.md -charts/stable/unpackerr/SCALE/item.yaml -charts/stable/unpackerr/SCALE/ix_values.yaml -charts/stable/unpackerr/SCALE/questions.yaml -charts/stable/unpackerr/app-readme.md -charts/stable/unpackerr/helm-values.md -charts/stable/unpackerr/templates/common.yaml -charts/stable/unpackerr/values.yaml -charts/stable/vaultwarden/.helmignore -charts/stable/vaultwarden/CHANGELOG.md -charts/stable/vaultwarden/CONFIG.md -charts/stable/vaultwarden/Chart.yaml -charts/stable/vaultwarden/README.md -charts/stable/vaultwarden/SCALE/CHANGELOG.md -charts/stable/vaultwarden/SCALE/item.yaml -charts/stable/vaultwarden/SCALE/ix_values.yaml -charts/stable/vaultwarden/SCALE/questions.yaml -charts/stable/vaultwarden/app-readme.md -charts/stable/vaultwarden/helm-values.md -charts/stable/vaultwarden/templates/_configmap.tpl -charts/stable/vaultwarden/templates/_secrets.tpl -charts/stable/vaultwarden/templates/_validate.tpl -charts/stable/vaultwarden/templates/common.yaml -charts/stable/vaultwarden/values.yaml -charts/stable/xteve/.helmignore -charts/stable/xteve/CHANGELOG.md -charts/stable/xteve/CONFIG.md -charts/stable/xteve/Chart.yaml -charts/stable/xteve/README.md -charts/stable/xteve/SCALE/CHANGELOG.md -charts/stable/xteve/SCALE/item.yaml -charts/stable/xteve/SCALE/ix_values.yaml -charts/stable/xteve/SCALE/questions.yaml -charts/stable/xteve/app-readme.md -charts/stable/xteve/helm-values.md -charts/stable/xteve/templates/common.yaml -charts/stable/xteve/values.yaml -charts/stable/zwavejs2mqtt/.helmignore -charts/stable/zwavejs2mqtt/CHANGELOG.md -charts/stable/zwavejs2mqtt/CONFIG.md -charts/stable/zwavejs2mqtt/Chart.yaml -charts/stable/zwavejs2mqtt/README.md -charts/stable/zwavejs2mqtt/SCALE/CHANGELOG.md -charts/stable/zwavejs2mqtt/SCALE/item.yaml -charts/stable/zwavejs2mqtt/SCALE/ix_values.yaml -charts/stable/zwavejs2mqtt/SCALE/questions.yaml -charts/stable/zwavejs2mqtt/app-readme.md -charts/stable/zwavejs2mqtt/helm-values.md -charts/stable/zwavejs2mqtt/templates/common.yaml -charts/stable/zwavejs2mqtt/values.yaml -docs/CNAME -docs/_logo/Logo Export PNG Trans/1024T.png -docs/_logo/Logo Export PNG Trans/114.png -docs/_logo/Logo Export PNG Trans/120.png -docs/_logo/Logo Export PNG Trans/128.png -docs/_logo/Logo Export PNG Trans/144.png -docs/_logo/Logo Export PNG Trans/152.png -docs/_logo/Logo Export PNG Trans/16.png -docs/_logo/Logo Export PNG Trans/180.png -docs/_logo/Logo Export PNG Trans/192.png -docs/_logo/Logo Export PNG Trans/24.png -docs/_logo/Logo Export PNG Trans/256.png -docs/_logo/Logo Export PNG Trans/310.png -docs/_logo/Logo Export PNG Trans/32.png -docs/_logo/Logo Export PNG Trans/36.png -docs/_logo/Logo Export PNG Trans/48.png -docs/_logo/Logo Export PNG Trans/512.png -docs/_logo/Logo Export PNG Trans/57.png -docs/_logo/Logo Export PNG Trans/60.png -docs/_logo/Logo Export PNG Trans/64.png -docs/_logo/Logo Export PNG Trans/70.png -docs/_logo/Logo Export PNG Trans/72.png -docs/_logo/Logo Export PNG Trans/96.png -docs/_logo/Logo Export PNG Trans/Logo-NoBackground.png -docs/_logo/LogoTransparentBackground.ai -docs/_static/custom.css -docs/_static/form.css -docs/_static/img/LE/LE1.png -docs/_static/img/LE/LE2.png -docs/_static/img/LE/LE3.png -docs/_static/img/LE/LE4.PNG -docs/_static/img/LE/LE5.PNG -docs/_static/img/LE/LE6.PNG -docs/_static/img/collabora-icon.png -docs/_static/img/custom-app-icon.png -docs/_static/img/emby-icon.png -docs/_static/img/external-service-icon.png -docs/_static/img/favicon.png -docs/_static/img/jackett-icon.png -docs/_static/img/jellyfin-icon.png -docs/_static/img/kms-icon.jpg -docs/_static/img/linking/linking-example-sonarrsabnzbd.png -docs/_static/img/logo1024.png -docs/_static/img/postgres-operator-icon.png -docs/_static/img/sogo-icon.png -docs/_static/img/youtubedl-material-icon.png -docs/about/code_of_conduct.md -docs/about/contact.md -docs/about/index.md -docs/about/legal/Apach2-licence.md -docs/about/legal/LICENSE.md -docs/about/legal/NOTICE.md -docs/about/maintainers-wanted.md -docs/apps/common/helm-values.md -docs/apps/common/index.md -docs/apps/incubator/custom-app/CHANGELOG.md -docs/apps/incubator/custom-app/CONFIG.md -docs/apps/incubator/custom-app/helm-values.md -docs/apps/incubator/custom-app/index.md -docs/apps/incubator/nextcloud/CONFIG.md -docs/apps/incubator/nextcloud/helm-values.md -docs/apps/incubator/nextcloud/index.md -docs/apps/incubator/oscam/CHANGELOG.md -docs/apps/incubator/oscam/CONFIG.md -docs/apps/incubator/oscam/helm-values.md -docs/apps/incubator/oscam/index.md -docs/apps/incubator/sogo/CHANGELOG.md -docs/apps/incubator/sogo/CONFIG.md -docs/apps/incubator/sogo/helm-values.md -docs/apps/incubator/sogo/index.md -docs/apps/incubator/testbed/CHANGELOG.md -docs/apps/incubator/testbed/CONFIG.md -docs/apps/incubator/testbed/helm-values.md -docs/apps/incubator/testbed/index.md -docs/apps/stable/airsonic/CHANGELOG.md -docs/apps/stable/airsonic/CONFIG.md -docs/apps/stable/airsonic/helm-values.md -docs/apps/stable/airsonic/index.md -docs/apps/stable/appdaemon/CHANGELOG.md -docs/apps/stable/appdaemon/CONFIG.md -docs/apps/stable/appdaemon/helm-values.md -docs/apps/stable/appdaemon/index.md -docs/apps/stable/authelia/CHANGELOG.md -docs/apps/stable/authelia/CONFIG.md -docs/apps/stable/authelia/helm-values.md -docs/apps/stable/authelia/index.md -docs/apps/stable/bazarr/CHANGELOG.md -docs/apps/stable/bazarr/CONFIG.md -docs/apps/stable/bazarr/helm-values.md -docs/apps/stable/bazarr/index.md -docs/apps/stable/booksonic-air/CHANGELOG.md -docs/apps/stable/booksonic-air/CONFIG.md -docs/apps/stable/booksonic-air/helm-values.md -docs/apps/stable/booksonic-air/index.md -docs/apps/stable/calibre-web/CHANGELOG.md -docs/apps/stable/calibre-web/CONFIG.md -docs/apps/stable/calibre-web/helm-values.md -docs/apps/stable/calibre-web/index.md -docs/apps/stable/calibre/CHANGELOG.md -docs/apps/stable/calibre/CONFIG.md -docs/apps/stable/calibre/helm-values.md -docs/apps/stable/calibre/index.md -docs/apps/stable/collabora-online/CHANGELOG.md -docs/apps/stable/collabora-online/CONFIG.md -docs/apps/stable/collabora-online/helm-values.md -docs/apps/stable/collabora-online/index.md -docs/apps/stable/collabora-online/notes.md -docs/apps/stable/custom-app/CHANGELOG.md -docs/apps/stable/custom-app/CONFIG.md -docs/apps/stable/custom-app/helm-values.md -docs/apps/stable/custom-app/index.md -docs/apps/stable/deconz/CHANGELOG.md -docs/apps/stable/deconz/CONFIG.md -docs/apps/stable/deconz/helm-values.md -docs/apps/stable/deconz/index.md -docs/apps/stable/deepstack-cpu/CHANGELOG.md -docs/apps/stable/deepstack-cpu/CONFIG.md -docs/apps/stable/deepstack-cpu/helm-values.md -docs/apps/stable/deepstack-cpu/index.md -docs/apps/stable/deepstack-cpu/notes.md -docs/apps/stable/deluge/CHANGELOG.md -docs/apps/stable/deluge/CONFIG.md -docs/apps/stable/deluge/helm-values.md -docs/apps/stable/deluge/index.md -docs/apps/stable/dizquetv/CHANGELOG.md -docs/apps/stable/dizquetv/CONFIG.md -docs/apps/stable/dizquetv/helm-values.md -docs/apps/stable/dizquetv/index.md -docs/apps/stable/duplicati/CHANGELOG.md -docs/apps/stable/duplicati/CONFIG.md -docs/apps/stable/duplicati/helm-values.md -docs/apps/stable/duplicati/index.md -docs/apps/stable/emby/CHANGELOG.md -docs/apps/stable/emby/CONFIG.md -docs/apps/stable/emby/helm-values.md -docs/apps/stable/emby/index.md -docs/apps/stable/esphome/CHANGELOG.md -docs/apps/stable/esphome/CONFIG.md -docs/apps/stable/esphome/helm-values.md -docs/apps/stable/esphome/index.md -docs/apps/stable/external-service/CHANGELOG.md -docs/apps/stable/external-service/CONFIG.md -docs/apps/stable/external-service/helm-values.md -docs/apps/stable/external-service/index.md -docs/apps/stable/fireflyiii/CHANGELOG.md -docs/apps/stable/fireflyiii/CONFIG.md -docs/apps/stable/fireflyiii/helm-values.md -docs/apps/stable/fireflyiii/index.md -docs/apps/stable/flaresolverr/CHANGELOG.md -docs/apps/stable/flaresolverr/CONFIG.md -docs/apps/stable/flaresolverr/helm-values.md -docs/apps/stable/flaresolverr/index.md -docs/apps/stable/flood/CHANGELOG.md -docs/apps/stable/flood/CONFIG.md -docs/apps/stable/flood/helm-values.md -docs/apps/stable/flood/index.md -docs/apps/stable/focalboard/CHANGELOG.md -docs/apps/stable/focalboard/CONFIG.md -docs/apps/stable/focalboard/helm-values.md -docs/apps/stable/focalboard/index.md -docs/apps/stable/freeradius/CHANGELOG.md -docs/apps/stable/freeradius/CONFIG.md -docs/apps/stable/freeradius/helm-values.md -docs/apps/stable/freeradius/index.md -docs/apps/stable/freshrss/CHANGELOG.md -docs/apps/stable/freshrss/CONFIG.md -docs/apps/stable/freshrss/helm-values.md -docs/apps/stable/freshrss/index.md -docs/apps/stable/gaps/CHANGELOG.md -docs/apps/stable/gaps/CONFIG.md -docs/apps/stable/gaps/helm-values.md -docs/apps/stable/gaps/index.md -docs/apps/stable/gonic/CHANGELOG.md -docs/apps/stable/gonic/CONFIG.md -docs/apps/stable/gonic/helm-values.md -docs/apps/stable/gonic/index.md -docs/apps/stable/grocy/CHANGELOG.md -docs/apps/stable/grocy/CONFIG.md -docs/apps/stable/grocy/helm-values.md -docs/apps/stable/grocy/index.md -docs/apps/stable/handbrake/CHANGELOG.md -docs/apps/stable/handbrake/CONFIG.md -docs/apps/stable/handbrake/helm-values.md -docs/apps/stable/handbrake/index.md -docs/apps/stable/handbrake/notes.md -docs/apps/stable/haste-server/CHANGELOG.md -docs/apps/stable/haste-server/CONFIG.md -docs/apps/stable/haste-server/helm-values.md -docs/apps/stable/haste-server/index.md -docs/apps/stable/healthchecks/CHANGELOG.md -docs/apps/stable/healthchecks/CONFIG.md -docs/apps/stable/healthchecks/helm-values.md -docs/apps/stable/healthchecks/index.md -docs/apps/stable/heimdall/CHANGELOG.md -docs/apps/stable/heimdall/CONFIG.md -docs/apps/stable/heimdall/helm-values.md -docs/apps/stable/heimdall/index.md -docs/apps/stable/home-assistant/CHANGELOG.md -docs/apps/stable/home-assistant/CONFIG.md -docs/apps/stable/home-assistant/helm-values.md -docs/apps/stable/home-assistant/index.md -docs/apps/stable/hyperion-ng/CHANGELOG.md -docs/apps/stable/hyperion-ng/CONFIG.md -docs/apps/stable/hyperion-ng/helm-values.md -docs/apps/stable/hyperion-ng/index.md -docs/apps/stable/jackett/CHANGELOG.md -docs/apps/stable/jackett/CONFIG.md -docs/apps/stable/jackett/helm-values.md -docs/apps/stable/jackett/index.md -docs/apps/stable/jdownloader2/CHANGELOG.md -docs/apps/stable/jdownloader2/CONFIG.md -docs/apps/stable/jdownloader2/helm-values.md -docs/apps/stable/jdownloader2/index.md -docs/apps/stable/jellyfin/CHANGELOG.md -docs/apps/stable/jellyfin/CONFIG.md -docs/apps/stable/jellyfin/helm-values.md -docs/apps/stable/jellyfin/index.md -docs/apps/stable/k8s-gateway/CHANGELOG.md -docs/apps/stable/k8s-gateway/CONFIG.md -docs/apps/stable/k8s-gateway/helm-values.md -docs/apps/stable/k8s-gateway/index.md -docs/apps/stable/kms/CHANGELOG.md -docs/apps/stable/kms/CONFIG.md -docs/apps/stable/kms/helm-values.md -docs/apps/stable/kms/index.md -docs/apps/stable/komga/CHANGELOG.md -docs/apps/stable/komga/CONFIG.md -docs/apps/stable/komga/helm-values.md -docs/apps/stable/komga/index.md -docs/apps/stable/lazylibrarian/CHANGELOG.md -docs/apps/stable/lazylibrarian/CONFIG.md -docs/apps/stable/lazylibrarian/helm-values.md -docs/apps/stable/lazylibrarian/index.md -docs/apps/stable/librespeed/CHANGELOG.md -docs/apps/stable/librespeed/CONFIG.md -docs/apps/stable/librespeed/helm-values.md -docs/apps/stable/librespeed/index.md -docs/apps/stable/lidarr/CHANGELOG.md -docs/apps/stable/lidarr/CONFIG.md -docs/apps/stable/lidarr/helm-values.md -docs/apps/stable/lidarr/index.md -docs/apps/stable/littlelink/CHANGELOG.md -docs/apps/stable/littlelink/CONFIG.md -docs/apps/stable/littlelink/helm-values.md -docs/apps/stable/littlelink/index.md -docs/apps/stable/lychee/CHANGELOG.md -docs/apps/stable/lychee/CONFIG.md -docs/apps/stable/lychee/helm-values.md -docs/apps/stable/lychee/index.md -docs/apps/stable/mealie/CHANGELOG.md -docs/apps/stable/mealie/CONFIG.md -docs/apps/stable/mealie/helm-values.md -docs/apps/stable/mealie/index.md -docs/apps/stable/mosquitto/CHANGELOG.md -docs/apps/stable/mosquitto/CONFIG.md -docs/apps/stable/mosquitto/helm-values.md -docs/apps/stable/mosquitto/index.md -docs/apps/stable/mylar/CHANGELOG.md -docs/apps/stable/mylar/CONFIG.md -docs/apps/stable/mylar/helm-values.md -docs/apps/stable/mylar/index.md -docs/apps/stable/navidrome/CHANGELOG.md -docs/apps/stable/navidrome/CONFIG.md -docs/apps/stable/navidrome/helm-values.md -docs/apps/stable/navidrome/index.md -docs/apps/stable/nextcloud/CHANGELOG.md -docs/apps/stable/nextcloud/CONFIG.md -docs/apps/stable/nextcloud/helm-values.md -docs/apps/stable/nextcloud/index.md -docs/apps/stable/nextcloud/notes.md -docs/apps/stable/node-red/CHANGELOG.md -docs/apps/stable/node-red/CONFIG.md -docs/apps/stable/node-red/helm-values.md -docs/apps/stable/node-red/index.md -docs/apps/stable/nullserv/CHANGELOG.md -docs/apps/stable/nullserv/CONFIG.md -docs/apps/stable/nullserv/helm-values.md -docs/apps/stable/nullserv/index.md -docs/apps/stable/nzbget/CHANGELOG.md -docs/apps/stable/nzbget/CONFIG.md -docs/apps/stable/nzbget/helm-values.md -docs/apps/stable/nzbget/index.md -docs/apps/stable/nzbhydra/CHANGELOG.md -docs/apps/stable/nzbhydra/CONFIG.md -docs/apps/stable/nzbhydra/helm-values.md -docs/apps/stable/nzbhydra/index.md -docs/apps/stable/octoprint/CHANGELOG.md -docs/apps/stable/octoprint/CONFIG.md -docs/apps/stable/octoprint/helm-values.md -docs/apps/stable/octoprint/index.md -docs/apps/stable/omada-controller/CHANGELOG.md -docs/apps/stable/omada-controller/CONFIG.md -docs/apps/stable/omada-controller/helm-values.md -docs/apps/stable/omada-controller/index.md -docs/apps/stable/ombi/CHANGELOG.md -docs/apps/stable/ombi/CONFIG.md -docs/apps/stable/ombi/helm-values.md -docs/apps/stable/ombi/index.md -docs/apps/stable/openldap/CHANGELOG.md -docs/apps/stable/openldap/CONFIG.md -docs/apps/stable/openldap/helm-values.md -docs/apps/stable/openldap/index.md -docs/apps/stable/organizr/CHANGELOG.md -docs/apps/stable/organizr/CONFIG.md -docs/apps/stable/organizr/helm-values.md -docs/apps/stable/organizr/index.md -docs/apps/stable/overseerr/CHANGELOG.md -docs/apps/stable/overseerr/CONFIG.md -docs/apps/stable/overseerr/helm-values.md -docs/apps/stable/overseerr/index.md -docs/apps/stable/owncast/CHANGELOG.md -docs/apps/stable/owncast/CONFIG.md -docs/apps/stable/owncast/helm-values.md -docs/apps/stable/owncast/index.md -docs/apps/stable/owncloud-ocis/CHANGELOG.md -docs/apps/stable/owncloud-ocis/CONFIG.md -docs/apps/stable/owncloud-ocis/helm-values.md -docs/apps/stable/owncloud-ocis/index.md -docs/apps/stable/pgadmin/CHANGELOG.md -docs/apps/stable/pgadmin/CONFIG.md -docs/apps/stable/pgadmin/helm-values.md -docs/apps/stable/pgadmin/index.md -docs/apps/stable/photoprism/CHANGELOG.md -docs/apps/stable/photoprism/CONFIG.md -docs/apps/stable/photoprism/helm-values.md -docs/apps/stable/photoprism/index.md -docs/apps/stable/phpldapadmin/CHANGELOG.md -docs/apps/stable/phpldapadmin/CONFIG.md -docs/apps/stable/phpldapadmin/helm-values.md -docs/apps/stable/phpldapadmin/index.md -docs/apps/stable/piaware/CHANGELOG.md -docs/apps/stable/piaware/CONFIG.md -docs/apps/stable/piaware/helm-values.md -docs/apps/stable/piaware/index.md -docs/apps/stable/pihole/CHANGELOG.md -docs/apps/stable/pihole/CONFIG.md -docs/apps/stable/pihole/helm-values.md -docs/apps/stable/pihole/index.md -docs/apps/stable/plex/CHANGELOG.md -docs/apps/stable/plex/CONFIG.md -docs/apps/stable/plex/helm-values.md -docs/apps/stable/plex/index.md -docs/apps/stable/podgrab/CHANGELOG.md -docs/apps/stable/podgrab/CONFIG.md -docs/apps/stable/podgrab/helm-values.md -docs/apps/stable/podgrab/index.md -docs/apps/stable/postgresql/CHANGELOG.md -docs/apps/stable/postgresql/CONFIG.md -docs/apps/stable/postgresql/helm-values.md -docs/apps/stable/postgresql/index.md -docs/apps/stable/pretend-youre-xyzzy/CHANGELOG.md -docs/apps/stable/pretend-youre-xyzzy/CONFIG.md -docs/apps/stable/pretend-youre-xyzzy/helm-values.md -docs/apps/stable/pretend-youre-xyzzy/index.md -docs/apps/stable/protonmail-bridge/CHANGELOG.md -docs/apps/stable/protonmail-bridge/CONFIG.md -docs/apps/stable/protonmail-bridge/helm-values.md -docs/apps/stable/protonmail-bridge/index.md -docs/apps/stable/prowlarr/CHANGELOG.md -docs/apps/stable/prowlarr/CONFIG.md -docs/apps/stable/prowlarr/helm-values.md -docs/apps/stable/prowlarr/index.md -docs/apps/stable/pyload/CHANGELOG.md -docs/apps/stable/pyload/CONFIG.md -docs/apps/stable/pyload/helm-values.md -docs/apps/stable/pyload/index.md -docs/apps/stable/qbittorrent/CHANGELOG.md -docs/apps/stable/qbittorrent/CONFIG.md -docs/apps/stable/qbittorrent/helm-values.md -docs/apps/stable/qbittorrent/index.md -docs/apps/stable/radarr/CHANGELOG.md -docs/apps/stable/radarr/CONFIG.md -docs/apps/stable/radarr/helm-values.md -docs/apps/stable/radarr/index.md -docs/apps/stable/readarr/CHANGELOG.md -docs/apps/stable/readarr/CONFIG.md -docs/apps/stable/readarr/helm-values.md -docs/apps/stable/readarr/index.md -docs/apps/stable/reg/CHANGELOG.md -docs/apps/stable/reg/CONFIG.md -docs/apps/stable/reg/helm-values.md -docs/apps/stable/reg/index.md -docs/apps/stable/resilio-sync/CHANGELOG.md -docs/apps/stable/resilio-sync/CONFIG.md -docs/apps/stable/resilio-sync/helm-values.md -docs/apps/stable/resilio-sync/index.md -docs/apps/stable/sabnzbd/CHANGELOG.md -docs/apps/stable/sabnzbd/CONFIG.md -docs/apps/stable/sabnzbd/helm-values.md -docs/apps/stable/sabnzbd/index.md -docs/apps/stable/ser2sock/CHANGELOG.md -docs/apps/stable/ser2sock/CONFIG.md -docs/apps/stable/ser2sock/helm-values.md -docs/apps/stable/ser2sock/index.md -docs/apps/stable/sonarr/CHANGELOG.md -docs/apps/stable/sonarr/CONFIG.md -docs/apps/stable/sonarr/helm-values.md -docs/apps/stable/sonarr/index.md -docs/apps/stable/stash/CHANGELOG.md -docs/apps/stable/stash/CONFIG.md -docs/apps/stable/stash/helm-values.md -docs/apps/stable/stash/index.md -docs/apps/stable/syncthing/CHANGELOG.md -docs/apps/stable/syncthing/CONFIG.md -docs/apps/stable/syncthing/helm-values.md -docs/apps/stable/syncthing/index.md -docs/apps/stable/tautulli/CHANGELOG.md -docs/apps/stable/tautulli/CONFIG.md -docs/apps/stable/tautulli/helm-values.md -docs/apps/stable/tautulli/index.md -docs/apps/stable/thelounge/CHANGELOG.md -docs/apps/stable/thelounge/CONFIG.md -docs/apps/stable/thelounge/helm-values.md -docs/apps/stable/thelounge/index.md -docs/apps/stable/traefik/CHANGELOG.md -docs/apps/stable/traefik/CONFIG.md -docs/apps/stable/traefik/externalservices.md -docs/apps/stable/traefik/helm-values.md -docs/apps/stable/traefik/index.md -docs/apps/stable/traefik/used-ports.md -docs/apps/stable/transmission/CHANGELOG.md -docs/apps/stable/transmission/CONFIG.md -docs/apps/stable/transmission/helm-values.md -docs/apps/stable/transmission/index.md -docs/apps/stable/truecommand/CHANGELOG.md -docs/apps/stable/truecommand/CONFIG.md -docs/apps/stable/truecommand/helm-values.md -docs/apps/stable/truecommand/index.md -docs/apps/stable/tvheadend/CHANGELOG.md -docs/apps/stable/tvheadend/CONFIG.md -docs/apps/stable/tvheadend/helm-values.md -docs/apps/stable/tvheadend/index.md -docs/apps/stable/unifi/CHANGELOG.md -docs/apps/stable/unifi/CONFIG.md -docs/apps/stable/unifi/helm-values.md -docs/apps/stable/unifi/index.md -docs/apps/stable/unpackerr/CHANGELOG.md -docs/apps/stable/unpackerr/CONFIG.md -docs/apps/stable/unpackerr/helm-values.md -docs/apps/stable/unpackerr/index.md -docs/apps/stable/vaultwarden/CHANGELOG.md -docs/apps/stable/vaultwarden/CONFIG.md -docs/apps/stable/vaultwarden/helm-values.md -docs/apps/stable/vaultwarden/index.md -docs/apps/stable/xteve/CHANGELOG.md -docs/apps/stable/xteve/CONFIG.md -docs/apps/stable/xteve/helm-values.md -docs/apps/stable/xteve/index.md -docs/apps/stable/zwavejs2mqtt/CHANGELOG.md -docs/apps/stable/zwavejs2mqtt/CONFIG.md -docs/apps/stable/zwavejs2mqtt/helm-values.md -docs/apps/stable/zwavejs2mqtt/index.md -docs/artifacthub-repo.yml -docs/discord/index.html -docs/index.md -docs/index.yaml -docs/manual/Quick-Start Guides/01-Open-Apps.md -docs/manual/Quick-Start Guides/02-Adding-TrueCharts.md -docs/manual/Quick-Start Guides/03-Installing-an-App.md -docs/manual/Quick-Start Guides/04-Edit-an-App.md -docs/manual/Quick-Start Guides/05-Upgrade-an-App.md -docs/manual/Quick-Start Guides/06-Rollback-an-App.md -docs/manual/Quick-Start Guides/07-Deleting-an-App.md -docs/manual/Quick-Start Guides/08-Dealing-with-Errors.md -docs/manual/Quick-Start Guides/09-adding-letsencrypt.md -docs/manual/Quick-Start Guides/10-installing-Traefik.md -docs/manual/Quick-Start Guides/11-traefik-on-port80.md -docs/manual/Quick-Start Guides/12-add-ingress.md -docs/manual/Quick-Start Guides/13-add-middleware.md -docs/manual/Quick-Start Guides/14-linking-apps.md -docs/manual/Quick-Start Guides/15-add-storage.md -docs/manual/Quick-Start Guides/16-external-services.md -docs/manual/Quick-Start Guides/17-migrate from docker-compose.md -docs/manual/SUPPORT.md -docs/manual/default-ports.md -docs/manual/development/License-headers.md -docs/manual/development/apps-wishlist.md -docs/manual/development/chart-structure.md -docs/manual/development/chart-yaml-structure.md -docs/manual/development/common-libary.md -docs/manual/development/contributing.md -docs/manual/development/getting-started.md -docs/manual/development/handycommands.md -docs/manual/development/ingress.md -docs/manual/development/portal.md -docs/manual/development/questions-yaml.md -docs/manual/development/services.md -docs/manual/development/storage.md -docs/manual/development/unit-tests.md -docs/manual/development/values-yaml.md -docs/manual/indepth/certificates.md -docs/manual/indepth/clustering.md -docs/manual/indepth/networking.md -docs/manual/indepth/storage.md -docs/manual/indepth/validation.md -docs/manual/migration.md -docs/requirements.txt -go.mod -go.sum -mkdocs.yml -templates/app/.helmignore -templates/app/Chart.yaml -templates/app/README.md -templates/app/SCALE/item.yaml -templates/app/SCALE/ix_values.yaml -templates/app/SCALE/questions.yaml -templates/app/values.yaml -templates/docs/CONFIG.md.gotmpl -templates/docs/README.md.gotmpl -templates/docs/app-readme.md.gotmpl -templates/docs/common-README.md.gotmpl -templates/docs/common-helm-values.md.gotmpl -templates/docs/helm-values.md.gotmpl -test.txt -tests/helmunit/helmchart.go -tests/helmunit/manifestCollection.go -tests/helmunit/utils.go -tools/build-release.sh -tools/bump-major.sh -tools/bump-minor.sh -tools/bump-patch.sh -tools/input/.gitkeep -tools/pre-commit-install.bat -tools/process.sh diff --git a/test.txt b/test.txt deleted file mode 100644 index e0fba61ee9d..00000000000 --- a/test.txt +++ /dev/null @@ -1,52 +0,0 @@ -podgrab -homer -code -deepstack -navidrome -pgadmin4 -openvpn-client -eclipse-mosquitto -dockeryourxyzzy -esphome -core -focalboard -owncast -unpackerr -komga -mealie -home-assistant -gaps -truecommand -unifi -jellyfin -flood -handbrake -jdownloader-2 -lychee-laravel -deconz -omada-controller -piaware -nextcloud -netshoot -node-red -octoprint -organizr -openldap -phpldapadmin -ocis -photoprism -pihole -postgres -py-kms -k8s_gateway -gonic -protonmail-bridge -hyperion.ng -stash -syncthing -ser2sock -thelounge -traefik -server -dizquetv -zwavejs2mqtt diff --git a/tests/helmunit/helmchart.go b/tests/helmunit/helmchart.go deleted file mode 100644 index 3547a6cd0e1..00000000000 --- a/tests/helmunit/helmchart.go +++ /dev/null @@ -1,133 +0,0 @@ -package helmunit - -import ( - "io" - - "helm.sh/helm/v3/pkg/action" - "helm.sh/helm/v3/pkg/chart/loader" - "helm.sh/helm/v3/pkg/cli" - v "helm.sh/helm/v3/pkg/cli/values" - "helm.sh/helm/v3/pkg/downloader" - "helm.sh/helm/v3/pkg/getter" - "helm.sh/helm/v3/pkg/releaseutil" - "sigs.k8s.io/yaml" -) - -var settings *cli.EnvSettings - -type HelmChart struct { - Name string - ChartPath string - Manifests manifestCollection - Hooks manifestCollection - Notes string - Values map[string]interface{} -} - -func New(name string, chartPath string) HelmChart { - h := HelmChart{ - Name: name, - ChartPath: chartPath, - Manifests: make(manifestCollection), - Hooks: make(manifestCollection), - } - return h -} - -func (c *HelmChart) UpdateDependencies() error { - settings = cli.New() - client := defaultClient(c.Name, settings.Namespace()) - p := getter.All(&cli.EnvSettings{}) - - // Check chart dependencies to make sure all are present in /charts - chartRequested, err := loader.Load(c.ChartPath) - if err != nil { - return err - } - - if req := chartRequested.Metadata.Dependencies; req != nil { - if err := action.CheckDependencies(chartRequested, req); err != nil { - if client.DependencyUpdate { - man := &downloader.Manager{ - Out: io.Discard, - ChartPath: c.ChartPath, - Keyring: client.ChartPathOptions.Keyring, - SkipUpdate: false, - Getters: p, - } - if err := man.Update(); err != nil { - return err - } - } - } - } - return nil -} - -func (c *HelmChart) Render(valueFilePaths, stringValues []string, rawYamlValues *string) error { - settings = cli.New() - client := defaultClient(c.Name, settings.Namespace()) - c.Manifests.Initialize() - c.Hooks.Initialize() - - p := getter.All(&cli.EnvSettings{}) - valueOpts := &v.Options{ - ValueFiles: valueFilePaths, - Values: stringValues, - } - - values, err := valueOpts.MergeValues(p) - if err != nil { - return err - } - - if !(rawYamlValues == nil) { - currentMap := map[string]interface{}{} - if err := yaml.Unmarshal([]byte(*rawYamlValues), ¤tMap); err != nil { - panic(err) - } - values = mergeMaps(currentMap, values) - } - - c.Values = values - - chartRequested, err := loader.Load(c.ChartPath) - if err != nil { - return err - } - - release, err := client.Run(chartRequested, values) - if err != nil { - return err - } - - for _, manifest := range releaseutil.SplitManifests(release.Manifest) { - err := c.Manifests.Add([]byte(manifest)) - if err != nil { - return err - } - } - - for _, manifest := range release.Hooks { - err := c.Hooks.Add([]byte(manifest.Manifest)) - if err != nil { - return err - } - } - - c.Notes = release.Info.Notes - - return nil -} - -func defaultClient(name, namespace string) *action.Install { - client := action.NewInstall(&action.Configuration{}) - client.Version = ">0.0.0-0" - client.ReleaseName = name - client.Namespace = namespace - client.ClientOnly = true - client.DryRun = true - client.DependencyUpdate = true - - return client -} diff --git a/tests/helmunit/manifestCollection.go b/tests/helmunit/manifestCollection.go deleted file mode 100644 index ce879901b25..00000000000 --- a/tests/helmunit/manifestCollection.go +++ /dev/null @@ -1,47 +0,0 @@ -package helmunit - -import ( - "errors" - "strings" - - "github.com/Jeffail/gabs/v2" -) - -type manifestCollection map[string]map[string]gabs.Container - -func (c *manifestCollection) Initialize() { - *c = make(manifestCollection) -} - -func (c *manifestCollection) Add(yamlInput []byte) error { - collection := *c - jsonManifest, err := yamlToJson(yamlInput) - if err != nil { - return err - } - - kind := strings.ToLower(jsonManifest.Path("kind").Data().(string)) - name := strings.ToLower(jsonManifest.Path("metadata.name").Data().(string)) - - if kind == "" || name == "" { - return errors.New("invalid manifest") - } - - data, ok := collection[kind] - if !ok { - data = make(map[string]gabs.Container) - collection[kind] = data - } - data[name] = *jsonManifest - - return nil -} - -func (c *manifestCollection) Get(kind string, name string) *gabs.Container { - collection := *c - manifest, ok := collection[strings.ToLower(kind)][strings.ToLower(name)] - if !ok { - return nil - } - return &manifest -} diff --git a/tests/helmunit/utils.go b/tests/helmunit/utils.go deleted file mode 100644 index 47b39ae7ca5..00000000000 --- a/tests/helmunit/utils.go +++ /dev/null @@ -1,37 +0,0 @@ -package helmunit - -import ( - "github.com/Jeffail/gabs/v2" - "sigs.k8s.io/yaml" -) - -func mergeMaps(a, b map[string]interface{}) map[string]interface{} { - out := make(map[string]interface{}, len(a)) - for k, v := range a { - out[k] = v - } - for k, v := range b { - if v, ok := v.(map[string]interface{}); ok { - if bv, ok := out[k]; ok { - if bv, ok := bv.(map[string]interface{}); ok { - out[k] = mergeMaps(bv, v) - continue - } - } - } - out[k] = v - } - return out -} - -func yamlToJson(yamlInput []byte) (jsonOutput *gabs.Container, err error) { - jsonBytes, err := yaml.YAMLToJSON(yamlInput) - if err != nil { - return nil, err - } - jsonParsed, err := gabs.ParseJSON(jsonBytes) - if err != nil { - return nil, err - } - return jsonParsed, nil -} diff --git a/tests/library/common/cert_spec.rb b/tests/library/common/cert_spec.rb new file mode 100644 index 00000000000..c129c8285ea --- /dev/null +++ b/tests/library/common/cert_spec.rb @@ -0,0 +1,322 @@ +# frozen_string_literal: true +require_relative '../../test_helper' + +class Test < ChartTest + @@chart = Chart.new('charts/library/common-test') + describe @@chart.name do + describe 'scaleCertificate' do + it 'disabled by default' do + values = { + ingress: { + main: { + enabled: true + } + } + } + chart.value values + assert_nil(resource('Secret')) + end + it 'can be enabled and selected' do + values = { + "ixCertificateAuthorities": {}, + "ixCertificates": { + "1": { + "CA_type_existing": false, + "CA_type_intermediate": false, + "CA_type_internal": false, + "CSR": "", + "DN": "/C=US/O=iXsystems/CN=localhost/emailAddress=info@ixsystems.com/ST=Tennessee/L=Maryville/subjectAltName=DNS:localhost", + "cert_type": "CERTIFICATE", + "cert_type_CSR": false, + "cert_type_existing": true, + "cert_type_internal": false, + "certificate": "-----BEGIN CERTIFICATE-----\nMIIDqjCCApKgAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgDELMAkGA1UEBhMCVVMx\nEjAQBgNVBAoMCWlYc3lzdGVtczESMBAGA1UEAwwJbG9jYWxob3N0MSEwHwYJKoZI\nhvcNAQkBFhJpbmZvQGl4c3lzdGVtcy5jb20xEjAQBgNVBAgMCVRlbm5lc3NlZTES\nMBAGA1UEBwwJTWFyeXZpbGxlMB4XDTIwMDkyNTE0MDUzOFoXDTIyMTIyOTE0MDUz\nOFowgYAxCzAJBgNVBAYTAlVTMRIwEAYDVQQKDAlpWHN5c3RlbXMxEjAQBgNVBAMM\nCWxvY2FsaG9zdDEhMB8GCSqGSIb3DQEJARYSaW5mb0BpeHN5c3RlbXMuY29tMRIw\nEAYDVQQIDAlUZW5uZXNzZWUxEjAQBgNVBAcMCU1hcnl2aWxsZTCCASIwDQYJKoZI\nhvcNAQEBBQADggEPADCCAQoCggEBALpoGliii6X8DeoFdLcR7jjsfJIn3nC8f1pT\nLQ3RURHUOEyhPT3Z6TkhaHeHoj8D6kiXROhyJJq3kw5OeqGZisfpGQhkxjpxkfh9\nfAhlvhuLwCWHaMvSh1TaT+h9+eHfcx3un5CIaH8b1KYRBMH+jmKFpr7jkPNkBXLS\nMA7jKIIa8pD9R6lF4gAsbqJafCbT3R7bqkd9xp3n3j2YhqQzETU2lmu4fra3BPio\nofK47kSkguUC6mtk6VrDf2+QtCKlY0dtbF3e2ZBNWo1aj86sjCtoEmqOCMsPRLc/\nXwQcfEqHY4XfafXwqk0G0UxV2ce18xKoR/pN3MpLBZ65NzPnpn0CAwEAAaMtMCsw\nFAYDVR0RBA0wC4IJbG9jYWxob3N0MBMGA1UdJQQMMAoGCCsGAQUFBwMBMA0GCSqG\nSIb3DQEBCwUAA4IBAQBFW1R037y7wllg/gRk9p2T1stiG8iIXosblmL4Ak1YToTQ\n/0to5GY2ZYW29+rbA4SDTS5eeu2YqZ0A/fF3wey7ggzMS7KyNBOvx5QBJRw3PJGn\n+THfhXvdfkOyeUC6KWRGLgl+/zBFvgh6vFDq3jmv0NI4ehVBTBMCJn7r6577S16T\nwtgKMCooizII0Odu5HIF10gTieFIH3PQYm9JBji9iyemb9Ht3wn7fXQptfGadz/l\nWz/Dv9+a6IOr7JVJMHnqAIvPzpkav4efuVPOX1zbhjg4K5g+nRYfjr5F5upOd0Y3\nznWTUBUyI7CXRkpHtSDXfEqKgnk/8uv7GWw+hyKr\n-----END CERTIFICATE-----\n", + "certificate_path": "/etc/certificates/freenas_default.crt", + "chain": false, + "chain_list": [ + "-----BEGIN CERTIFICATE-----\nMIIDqjCCApKgAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgDELMAkGA1UEBhMCVVMx\nEjAQBgNVBAoMCWlYc3lzdGVtczESMBAGA1UEAwwJbG9jYWxob3N0MSEwHwYJKoZI\nhvcNAQkBFhJpbmZvQGl4c3lzdGVtcy5jb20xEjAQBgNVBAgMCVRlbm5lc3NlZTES\nMBAGA1UEBwwJTWFyeXZpbGxlMB4XDTIwMDkyNTE0MDUzOFoXDTIyMTIyOTE0MDUz\nOFowgYAxCzAJBgNVBAYTAlVTMRIwEAYDVQQKDAlpWHN5c3RlbXMxEjAQBgNVBAMM\nCWxvY2FsaG9zdDEhMB8GCSqGSIb3DQEJARYSaW5mb0BpeHN5c3RlbXMuY29tMRIw\nEAYDVQQIDAlUZW5uZXNzZWUxEjAQBgNVBAcMCU1hcnl2aWxsZTCCASIwDQYJKoZI\nhvcNAQEBBQADggEPADCCAQoCggEBALpoGliii6X8DeoFdLcR7jjsfJIn3nC8f1pT\nLQ3RURHUOEyhPT3Z6TkhaHeHoj8D6kiXROhyJJq3kw5OeqGZisfpGQhkxjpxkfh9\nfAhlvhuLwCWHaMvSh1TaT+h9+eHfcx3un5CIaH8b1KYRBMH+jmKFpr7jkPNkBXLS\nMA7jKIIa8pD9R6lF4gAsbqJafCbT3R7bqkd9xp3n3j2YhqQzETU2lmu4fra3BPio\nofK47kSkguUC6mtk6VrDf2+QtCKlY0dtbF3e2ZBNWo1aj86sjCtoEmqOCMsPRLc/\nXwQcfEqHY4XfafXwqk0G0UxV2ce18xKoR/pN3MpLBZ65NzPnpn0CAwEAAaMtMCsw\nFAYDVR0RBA0wC4IJbG9jYWxob3N0MBMGA1UdJQQMMAoGCCsGAQUFBwMBMA0GCSqG\nSIb3DQEBCwUAA4IBAQBFW1R037y7wllg/gRk9p2T1stiG8iIXosblmL4Ak1YToTQ\n/0to5GY2ZYW29+rbA4SDTS5eeu2YqZ0A/fF3wey7ggzMS7KyNBOvx5QBJRw3PJGn\n+THfhXvdfkOyeUC6KWRGLgl+/zBFvgh6vFDq3jmv0NI4ehVBTBMCJn7r6577S16T\nwtgKMCooizII0Odu5HIF10gTieFIH3PQYm9JBji9iyemb9Ht3wn7fXQptfGadz/l\nWz/Dv9+a6IOr7JVJMHnqAIvPzpkav4efuVPOX1zbhjg4K5g+nRYfjr5F5upOd0Y3\nznWTUBUyI7CXRkpHtSDXfEqKgnk/8uv7GWw+hyKr\n-----END CERTIFICATE-----\n" + ], + "city": "Maryville", + "common": "localhost", + "country": "US", + "csr_path": "/etc/certificates/freenas_default.csr", + "digest_algorithm": "SHA256", + "email": "info@ixsystems.com", + "extensions": { + "ExtendedKeyUsage": "TLS Web Server Authentication", + "SubjectAltName": "DNS:localhost" + }, + "fingerprint": "9C:5A:1D:1B:E7:9E:0B:89:2B:37:F4:19:83:ED:3C:6B:D8:14:0D:9B", + "from": "Fri Sep 25 16:05:38 2020", + "id": 1, + "internal": "NO", + "issuer": "external", + "key_length": 2048, + "key_type": "RSA", + "lifetime": 825, + "name": "freenas_default", + "organization": "iXsystems", + "organizational_unit": "", + "parsed": true, + "privatekey": "-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC6aBpYooul/A3q\nBXS3Ee447HySJ95wvH9aUy0N0VER1DhMoT092ek5IWh3h6I/A+pIl0TociSat5MO\nTnqhmYrH6RkIZMY6cZH4fXwIZb4bi8Alh2jL0odU2k/offnh33Md7p+QiGh/G9Sm\nEQTB/o5ihaa+45DzZAVy0jAO4yiCGvKQ/UepReIALG6iWnwm090e26pHfcad5949\nmIakMxE1NpZruH62twT4qKHyuO5EpILlAuprZOlaw39vkLQipWNHbWxd3tmQTVqN\nWo/OrIwraBJqjgjLD0S3P18EHHxKh2OF32n18KpNBtFMVdnHtfMSqEf6TdzKSwWe\nuTcz56Z9AgMBAAECggEARwcb4uIs7BZbBu0FSCyg5TfXT6m5bKOmszg2VqmHho+i\n1DAsMcEyyP4d3E3mWLSZNQfOzfOQVxPUCQOGXsUuyHXdgAFGN0bHJDRMara59a0O\njj5GhEO4JXD6OdCmwpZuOt2OF3iiuKxWHuElOvZQMuJSYzI7LULTgKjufv23lbsf\nxMO/v9yi57c5EGgnQ8siLKOy/FQZapn4Z9qKn+lVyk5gfaKP0pDsvV4d7nGYMDD2\nYijfkSyNecApFdtWiLE5zLUlvF6oNj8o66z3YrVNKrCPzhA/5Rkkwwk32SNxvKU3\nVZFSNPeOZ60BicxYcWO+b2aAa0WF+uazJAZ4q52gUQKBgQDu88R+0wm76secYkzE\nQglteLNZKFcvth0kI5xH42Hmk9IXkGimFoDJCIrLAuopyGnfNmqmh2is3QUMUPdR\n/wDLnKc4MCezEidNoD2RBC+bzM1hB9oye/b5sOZUDFXSa0k4XSLu1UEuy1yWhkuS\n6JjY1KQfc4FN0K0Fjqqo7UCTCwKBgQDHtKQh/NvMJ2ok4YW+/QAsus4mEK9eCyUy\nOuyDszQYrGvjkS7STKJVNxGLhWb0XKSIAxMZ66b1MwOt+71h7xNn6pcancfVdK7F\n1Xl5J+76SwbXSgQwTZuoMDxPIvZn7v/2ep5Ni/BcOhMcPIcobWb/OmXrFN1brBvo\nlFNQyWWhlwKBgFDAyPMjVvLO0U6kWdUpjA4W8GV9IJnbLdX8wt/4lClcY2/bOcKH\ncFaAMIeTIJemR0FMHpbQxCtHNmGHK03mo9orwsdWXtRBmk69jJDpnT1F5VKZWMAe\n7MRNaEmXMZm+8CvALgIQx8qMp2mnUPsA6Ea+9gg6/MPTdeWe5UXZiC0pAoGAGtSt\nPJfBXBNrklruYjORo3DRo5GYThVHQRFjl2orNKltsVxfIwgCw1ortEgPBgOwY0mu\ndkwP2V+qPeTVk+PQAqUk+gF6yLXtiUzeDiYMWHpeB+y81VSH9jfM0oELA/m7T/03\naYnEmE+BI8kKC6dvMBlDeisKdneQJFZRP0hfrC8CgYEAgYIyCGwcydKpe2Nkj0Fz\nKTtCMC/k4DvJfd5Kb9AbmrPUfKgA9Xj4GT6yPG6uBMi8r5etvLCKJ2x2NtN024a8\nQJLATYPrSsaZkE+9zM0j5nYAgbKpxBhlDzDAzn//3ByVzfgJ25S80XhTI2lfbLH/\nU07ssxdZaQCo+WuD82OvNcg=\n-----END PRIVATE KEY-----\n", + "privatekey_path": "/etc/certificates/freenas_default.key", + "revoked": false, + "revoked_date": "", + "root_path": "/etc/certificates", + "san": [ + "DNS:localhost" + ], + "serial": 1, + "signedby": "", + "state": "Tennessee", + "subject_name_hash": 3193428416, + "type": 8, + "until": "Thu Dec 29 15:05:38 2022" + } + }, + ingress: { + main: { + enabled: true, + tls: [ + { + scaleCert: 1 + } + ] + } + } + } + chart.value values + refute_nil(resource('Secret')) + secret = chart.resources(kind: "Secret").first + assert_equal("common-test-main-tls-0-ixcert-1", secret["metadata"]["name"]) + refute_nil(secret["data"]["tls.crt"]) + refute_nil(secret["data"]["tls.key"]) + end + + it 'secret can be used for TLS ingress' do + values = { + "ixCertificateAuthorities": {}, + "ixCertificates": { + "1": { + "CA_type_existing": false, + "CA_type_intermediate": false, + "CA_type_internal": false, + "CSR": "", + "DN": "/C=US/O=iXsystems/CN=localhost/emailAddress=info@ixsystems.com/ST=Tennessee/L=Maryville/subjectAltName=DNS:localhost", + "cert_type": "CERTIFICATE", + "cert_type_CSR": false, + "cert_type_existing": true, + "cert_type_internal": false, + "certificate": "-----BEGIN CERTIFICATE-----\nMIIDqjCCApKgAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgDELMAkGA1UEBhMCVVMx\nEjAQBgNVBAoMCWlYc3lzdGVtczESMBAGA1UEAwwJbG9jYWxob3N0MSEwHwYJKoZI\nhvcNAQkBFhJpbmZvQGl4c3lzdGVtcy5jb20xEjAQBgNVBAgMCVRlbm5lc3NlZTES\nMBAGA1UEBwwJTWFyeXZpbGxlMB4XDTIwMDkyNTE0MDUzOFoXDTIyMTIyOTE0MDUz\nOFowgYAxCzAJBgNVBAYTAlVTMRIwEAYDVQQKDAlpWHN5c3RlbXMxEjAQBgNVBAMM\nCWxvY2FsaG9zdDEhMB8GCSqGSIb3DQEJARYSaW5mb0BpeHN5c3RlbXMuY29tMRIw\nEAYDVQQIDAlUZW5uZXNzZWUxEjAQBgNVBAcMCU1hcnl2aWxsZTCCASIwDQYJKoZI\nhvcNAQEBBQADggEPADCCAQoCggEBALpoGliii6X8DeoFdLcR7jjsfJIn3nC8f1pT\nLQ3RURHUOEyhPT3Z6TkhaHeHoj8D6kiXROhyJJq3kw5OeqGZisfpGQhkxjpxkfh9\nfAhlvhuLwCWHaMvSh1TaT+h9+eHfcx3un5CIaH8b1KYRBMH+jmKFpr7jkPNkBXLS\nMA7jKIIa8pD9R6lF4gAsbqJafCbT3R7bqkd9xp3n3j2YhqQzETU2lmu4fra3BPio\nofK47kSkguUC6mtk6VrDf2+QtCKlY0dtbF3e2ZBNWo1aj86sjCtoEmqOCMsPRLc/\nXwQcfEqHY4XfafXwqk0G0UxV2ce18xKoR/pN3MpLBZ65NzPnpn0CAwEAAaMtMCsw\nFAYDVR0RBA0wC4IJbG9jYWxob3N0MBMGA1UdJQQMMAoGCCsGAQUFBwMBMA0GCSqG\nSIb3DQEBCwUAA4IBAQBFW1R037y7wllg/gRk9p2T1stiG8iIXosblmL4Ak1YToTQ\n/0to5GY2ZYW29+rbA4SDTS5eeu2YqZ0A/fF3wey7ggzMS7KyNBOvx5QBJRw3PJGn\n+THfhXvdfkOyeUC6KWRGLgl+/zBFvgh6vFDq3jmv0NI4ehVBTBMCJn7r6577S16T\nwtgKMCooizII0Odu5HIF10gTieFIH3PQYm9JBji9iyemb9Ht3wn7fXQptfGadz/l\nWz/Dv9+a6IOr7JVJMHnqAIvPzpkav4efuVPOX1zbhjg4K5g+nRYfjr5F5upOd0Y3\nznWTUBUyI7CXRkpHtSDXfEqKgnk/8uv7GWw+hyKr\n-----END CERTIFICATE-----\n", + "certificate_path": "/etc/certificates/freenas_default.crt", + "chain": false, + "chain_list": [ + "-----BEGIN CERTIFICATE-----\nMIIDqjCCApKgAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgDELMAkGA1UEBhMCVVMx\nEjAQBgNVBAoMCWlYc3lzdGVtczESMBAGA1UEAwwJbG9jYWxob3N0MSEwHwYJKoZI\nhvcNAQkBFhJpbmZvQGl4c3lzdGVtcy5jb20xEjAQBgNVBAgMCVRlbm5lc3NlZTES\nMBAGA1UEBwwJTWFyeXZpbGxlMB4XDTIwMDkyNTE0MDUzOFoXDTIyMTIyOTE0MDUz\nOFowgYAxCzAJBgNVBAYTAlVTMRIwEAYDVQQKDAlpWHN5c3RlbXMxEjAQBgNVBAMM\nCWxvY2FsaG9zdDEhMB8GCSqGSIb3DQEJARYSaW5mb0BpeHN5c3RlbXMuY29tMRIw\nEAYDVQQIDAlUZW5uZXNzZWUxEjAQBgNVBAcMCU1hcnl2aWxsZTCCASIwDQYJKoZI\nhvcNAQEBBQADggEPADCCAQoCggEBALpoGliii6X8DeoFdLcR7jjsfJIn3nC8f1pT\nLQ3RURHUOEyhPT3Z6TkhaHeHoj8D6kiXROhyJJq3kw5OeqGZisfpGQhkxjpxkfh9\nfAhlvhuLwCWHaMvSh1TaT+h9+eHfcx3un5CIaH8b1KYRBMH+jmKFpr7jkPNkBXLS\nMA7jKIIa8pD9R6lF4gAsbqJafCbT3R7bqkd9xp3n3j2YhqQzETU2lmu4fra3BPio\nofK47kSkguUC6mtk6VrDf2+QtCKlY0dtbF3e2ZBNWo1aj86sjCtoEmqOCMsPRLc/\nXwQcfEqHY4XfafXwqk0G0UxV2ce18xKoR/pN3MpLBZ65NzPnpn0CAwEAAaMtMCsw\nFAYDVR0RBA0wC4IJbG9jYWxob3N0MBMGA1UdJQQMMAoGCCsGAQUFBwMBMA0GCSqG\nSIb3DQEBCwUAA4IBAQBFW1R037y7wllg/gRk9p2T1stiG8iIXosblmL4Ak1YToTQ\n/0to5GY2ZYW29+rbA4SDTS5eeu2YqZ0A/fF3wey7ggzMS7KyNBOvx5QBJRw3PJGn\n+THfhXvdfkOyeUC6KWRGLgl+/zBFvgh6vFDq3jmv0NI4ehVBTBMCJn7r6577S16T\nwtgKMCooizII0Odu5HIF10gTieFIH3PQYm9JBji9iyemb9Ht3wn7fXQptfGadz/l\nWz/Dv9+a6IOr7JVJMHnqAIvPzpkav4efuVPOX1zbhjg4K5g+nRYfjr5F5upOd0Y3\nznWTUBUyI7CXRkpHtSDXfEqKgnk/8uv7GWw+hyKr\n-----END CERTIFICATE-----\n" + ], + "city": "Maryville", + "common": "localhost", + "country": "US", + "csr_path": "/etc/certificates/freenas_default.csr", + "digest_algorithm": "SHA256", + "email": "info@ixsystems.com", + "extensions": { + "ExtendedKeyUsage": "TLS Web Server Authentication", + "SubjectAltName": "DNS:localhost" + }, + "fingerprint": "9C:5A:1D:1B:E7:9E:0B:89:2B:37:F4:19:83:ED:3C:6B:D8:14:0D:9B", + "from": "Fri Sep 25 16:05:38 2020", + "id": 1, + "internal": "NO", + "issuer": "external", + "key_length": 2048, + "key_type": "RSA", + "lifetime": 825, + "name": "freenas_default", + "organization": "iXsystems", + "organizational_unit": "", + "parsed": true, + "privatekey": "-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC6aBpYooul/A3q\nBXS3Ee447HySJ95wvH9aUy0N0VER1DhMoT092ek5IWh3h6I/A+pIl0TociSat5MO\nTnqhmYrH6RkIZMY6cZH4fXwIZb4bi8Alh2jL0odU2k/offnh33Md7p+QiGh/G9Sm\nEQTB/o5ihaa+45DzZAVy0jAO4yiCGvKQ/UepReIALG6iWnwm090e26pHfcad5949\nmIakMxE1NpZruH62twT4qKHyuO5EpILlAuprZOlaw39vkLQipWNHbWxd3tmQTVqN\nWo/OrIwraBJqjgjLD0S3P18EHHxKh2OF32n18KpNBtFMVdnHtfMSqEf6TdzKSwWe\nuTcz56Z9AgMBAAECggEARwcb4uIs7BZbBu0FSCyg5TfXT6m5bKOmszg2VqmHho+i\n1DAsMcEyyP4d3E3mWLSZNQfOzfOQVxPUCQOGXsUuyHXdgAFGN0bHJDRMara59a0O\njj5GhEO4JXD6OdCmwpZuOt2OF3iiuKxWHuElOvZQMuJSYzI7LULTgKjufv23lbsf\nxMO/v9yi57c5EGgnQ8siLKOy/FQZapn4Z9qKn+lVyk5gfaKP0pDsvV4d7nGYMDD2\nYijfkSyNecApFdtWiLE5zLUlvF6oNj8o66z3YrVNKrCPzhA/5Rkkwwk32SNxvKU3\nVZFSNPeOZ60BicxYcWO+b2aAa0WF+uazJAZ4q52gUQKBgQDu88R+0wm76secYkzE\nQglteLNZKFcvth0kI5xH42Hmk9IXkGimFoDJCIrLAuopyGnfNmqmh2is3QUMUPdR\n/wDLnKc4MCezEidNoD2RBC+bzM1hB9oye/b5sOZUDFXSa0k4XSLu1UEuy1yWhkuS\n6JjY1KQfc4FN0K0Fjqqo7UCTCwKBgQDHtKQh/NvMJ2ok4YW+/QAsus4mEK9eCyUy\nOuyDszQYrGvjkS7STKJVNxGLhWb0XKSIAxMZ66b1MwOt+71h7xNn6pcancfVdK7F\n1Xl5J+76SwbXSgQwTZuoMDxPIvZn7v/2ep5Ni/BcOhMcPIcobWb/OmXrFN1brBvo\nlFNQyWWhlwKBgFDAyPMjVvLO0U6kWdUpjA4W8GV9IJnbLdX8wt/4lClcY2/bOcKH\ncFaAMIeTIJemR0FMHpbQxCtHNmGHK03mo9orwsdWXtRBmk69jJDpnT1F5VKZWMAe\n7MRNaEmXMZm+8CvALgIQx8qMp2mnUPsA6Ea+9gg6/MPTdeWe5UXZiC0pAoGAGtSt\nPJfBXBNrklruYjORo3DRo5GYThVHQRFjl2orNKltsVxfIwgCw1ortEgPBgOwY0mu\ndkwP2V+qPeTVk+PQAqUk+gF6yLXtiUzeDiYMWHpeB+y81VSH9jfM0oELA/m7T/03\naYnEmE+BI8kKC6dvMBlDeisKdneQJFZRP0hfrC8CgYEAgYIyCGwcydKpe2Nkj0Fz\nKTtCMC/k4DvJfd5Kb9AbmrPUfKgA9Xj4GT6yPG6uBMi8r5etvLCKJ2x2NtN024a8\nQJLATYPrSsaZkE+9zM0j5nYAgbKpxBhlDzDAzn//3ByVzfgJ25S80XhTI2lfbLH/\nU07ssxdZaQCo+WuD82OvNcg=\n-----END PRIVATE KEY-----\n", + "privatekey_path": "/etc/certificates/freenas_default.key", + "revoked": false, + "revoked_date": "", + "root_path": "/etc/certificates", + "san": [ + "DNS:localhost" + ], + "serial": 1, + "signedby": "", + "state": "Tennessee", + "subject_name_hash": 3193428416, + "type": 8, + "until": "Thu Dec 29 15:05:38 2022" + } + }, + ingress: { + main: { + enabled: true, + tls: [ + { + hosts: [ 'hostname' ], + scaleCert: 1 + } + ] + } + } + } + chart.value values + refute_nil(resource('Secret')) + secret = chart.resources(kind: "Secret").first + assert_equal("common-test-main-tls-0-ixcert-1", secret["metadata"]["name"]) + refute_nil(secret["data"]["tls.crt"]) + refute_nil(secret["data"]["tls.key"]) + + ingress = chart.resources(kind: "Ingress").find{ |s| s["metadata"]["name"] == "common-test-main" } + refute_nil(ingress) + assert_equal("common-test-main-tls-0-ixcert-1", ingress["spec"]["tls"][0]["secretName"]) + end + it 'multiple tls sections generate multiple secrets' do + values = { + "ixCertificateAuthorities": {}, + "ixCertificates": { + "2": { + "CA_type_existing": false, + "CA_type_intermediate": false, + "CA_type_internal": false, + "CSR": "", + "DN": "/C=US/O=iXsystems/CN=localhost/emailAddress=info@ixsystems.com/ST=Tennessee/L=Maryville/subjectAltName=DNS:localhost", + "cert_type": "CERTIFICATE", + "cert_type_CSR": false, + "cert_type_existing": true, + "cert_type_internal": false, + "certificate": "-----BEGIN CERTIFICATE-----\nMIIDqjCCApKgAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgDELMAkGA1UEBhMCVVMx\nEjAQBgNVBAoMCWlYc3lzdGVtczESMBAGA1UEAwwJbG9jYWxob3N0MSEwHwYJKoZI\nhvcNAQkBFhJpbmZvQGl4c3lzdGVtcy5jb20xEjAQBgNVBAgMCVRlbm5lc3NlZTES\nMBAGA1UEBwwJTWFyeXZpbGxlMB4XDTIwMDkyNTE0MDUzOFoXDTIyMTIyOTE0MDUz\nOFowgYAxCzAJBgNVBAYTAlVTMRIwEAYDVQQKDAlpWHN5c3RlbXMxEjAQBgNVBAMM\nCWxvY2FsaG9zdDEhMB8GCSqGSIb3DQEJARYSaW5mb0BpeHN5c3RlbXMuY29tMRIw\nEAYDVQQIDAlUZW5uZXNzZWUxEjAQBgNVBAcMCU1hcnl2aWxsZTCCASIwDQYJKoZI\nhvcNAQEBBQADggEPADCCAQoCggEBALpoGliii6X8DeoFdLcR7jjsfJIn3nC8f1pT\nLQ3RURHUOEyhPT3Z6TkhaHeHoj8D6kiXROhyJJq3kw5OeqGZisfpGQhkxjpxkfh9\nfAhlvhuLwCWHaMvSh1TaT+h9+eHfcx3un5CIaH8b1KYRBMH+jmKFpr7jkPNkBXLS\nMA7jKIIa8pD9R6lF4gAsbqJafCbT3R7bqkd9xp3n3j2YhqQzETU2lmu4fra3BPio\nofK47kSkguUC6mtk6VrDf2+QtCKlY0dtbF3e2ZBNWo1aj86sjCtoEmqOCMsPRLc/\nXwQcfEqHY4XfafXwqk0G0UxV2ce18xKoR/pN3MpLBZ65NzPnpn0CAwEAAaMtMCsw\nFAYDVR0RBA0wC4IJbG9jYWxob3N0MBMGA1UdJQQMMAoGCCsGAQUFBwMBMA0GCSqG\nSIb3DQEBCwUAA4IBAQBFW1R037y7wllg/gRk9p2T1stiG8iIXosblmL4Ak1YToTQ\n/0to5GY2ZYW29+rbA4SDTS5eeu2YqZ0A/fF3wey7ggzMS7KyNBOvx5QBJRw3PJGn\n+THfhXvdfkOyeUC6KWRGLgl+/zBFvgh6vFDq3jmv0NI4ehVBTBMCJn7r6577S16T\nwtgKMCooizII0Odu5HIF10gTieFIH3PQYm9JBji9iyemb9Ht3wn7fXQptfGadz/l\nWz/Dv9+a6IOr7JVJMHnqAIvPzpkav4efuVPOX1zbhjg4K5g+nRYfjr5F5upOd0Y3\nznWTUBUyI7CXRkpHtSDXfEqKgnk/8uv7GWw+hyKr\n-----END CERTIFICATE-----\n", + "certificate_path": "/etc/certificates/freenas_default.crt", + "chain": false, + "chain_list": [ + "-----BEGIN CERTIFICATE-----\nMIIDqjCCApKgAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgDELMAkGA1UEBhMCVVMx\nEjAQBgNVBAoMCWlYc3lzdGVtczESMBAGA1UEAwwJbG9jYWxob3N0MSEwHwYJKoZI\nhvcNAQkBFhJpbmZvQGl4c3lzdGVtcy5jb20xEjAQBgNVBAgMCVRlbm5lc3NlZTES\nMBAGA1UEBwwJTWFyeXZpbGxlMB4XDTIwMDkyNTE0MDUzOFoXDTIyMTIyOTE0MDUz\nOFowgYAxCzAJBgNVBAYTAlVTMRIwEAYDVQQKDAlpWHN5c3RlbXMxEjAQBgNVBAMM\nCWxvY2FsaG9zdDEhMB8GCSqGSIb3DQEJARYSaW5mb0BpeHN5c3RlbXMuY29tMRIw\nEAYDVQQIDAlUZW5uZXNzZWUxEjAQBgNVBAcMCU1hcnl2aWxsZTCCASIwDQYJKoZI\nhvcNAQEBBQADggEPADCCAQoCggEBALpoGliii6X8DeoFdLcR7jjsfJIn3nC8f1pT\nLQ3RURHUOEyhPT3Z6TkhaHeHoj8D6kiXROhyJJq3kw5OeqGZisfpGQhkxjpxkfh9\nfAhlvhuLwCWHaMvSh1TaT+h9+eHfcx3un5CIaH8b1KYRBMH+jmKFpr7jkPNkBXLS\nMA7jKIIa8pD9R6lF4gAsbqJafCbT3R7bqkd9xp3n3j2YhqQzETU2lmu4fra3BPio\nofK47kSkguUC6mtk6VrDf2+QtCKlY0dtbF3e2ZBNWo1aj86sjCtoEmqOCMsPRLc/\nXwQcfEqHY4XfafXwqk0G0UxV2ce18xKoR/pN3MpLBZ65NzPnpn0CAwEAAaMtMCsw\nFAYDVR0RBA0wC4IJbG9jYWxob3N0MBMGA1UdJQQMMAoGCCsGAQUFBwMBMA0GCSqG\nSIb3DQEBCwUAA4IBAQBFW1R037y7wllg/gRk9p2T1stiG8iIXosblmL4Ak1YToTQ\n/0to5GY2ZYW29+rbA4SDTS5eeu2YqZ0A/fF3wey7ggzMS7KyNBOvx5QBJRw3PJGn\n+THfhXvdfkOyeUC6KWRGLgl+/zBFvgh6vFDq3jmv0NI4ehVBTBMCJn7r6577S16T\nwtgKMCooizII0Odu5HIF10gTieFIH3PQYm9JBji9iyemb9Ht3wn7fXQptfGadz/l\nWz/Dv9+a6IOr7JVJMHnqAIvPzpkav4efuVPOX1zbhjg4K5g+nRYfjr5F5upOd0Y3\nznWTUBUyI7CXRkpHtSDXfEqKgnk/8uv7GWw+hyKr\n-----END CERTIFICATE-----\n" + ], + "city": "Maryville", + "common": "localhost", + "country": "US", + "csr_path": "/etc/certificates/freenas_default.csr", + "digest_algorithm": "SHA256", + "email": "info@ixsystems.com", + "extensions": { + "ExtendedKeyUsage": "TLS Web Server Authentication", + "SubjectAltName": "DNS:localhost" + }, + "fingerprint": "9C:5A:1D:1B:E7:9E:0B:89:2B:37:F4:19:83:ED:3C:6B:D8:14:0D:9B", + "from": "Fri Sep 25 16:05:38 2020", + "id": 2, + "internal": "NO", + "issuer": "external", + "key_length": 2048, + "key_type": "RSA", + "lifetime": 825, + "name": "freenas_default", + "organization": "iXsystems", + "organizational_unit": "", + "parsed": true, + "privatekey": "-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC6aBpYooul/A3q\nBXS3Ee447HySJ95wvH9aUy0N0VER1DhMoT092ek5IWh3h6I/A+pIl0TociSat5MO\nTnqhmYrH6RkIZMY6cZH4fXwIZb4bi8Alh2jL0odU2k/offnh33Md7p+QiGh/G9Sm\nEQTB/o5ihaa+45DzZAVy0jAO4yiCGvKQ/UepReIALG6iWnwm090e26pHfcad5949\nmIakMxE1NpZruH62twT4qKHyuO5EpILlAuprZOlaw39vkLQipWNHbWxd3tmQTVqN\nWo/OrIwraBJqjgjLD0S3P18EHHxKh2OF32n18KpNBtFMVdnHtfMSqEf6TdzKSwWe\nuTcz56Z9AgMBAAECggEARwcb4uIs7BZbBu0FSCyg5TfXT6m5bKOmszg2VqmHho+i\n1DAsMcEyyP4d3E3mWLSZNQfOzfOQVxPUCQOGXsUuyHXdgAFGN0bHJDRMara59a0O\njj5GhEO4JXD6OdCmwpZuOt2OF3iiuKxWHuElOvZQMuJSYzI7LULTgKjufv23lbsf\nxMO/v9yi57c5EGgnQ8siLKOy/FQZapn4Z9qKn+lVyk5gfaKP0pDsvV4d7nGYMDD2\nYijfkSyNecApFdtWiLE5zLUlvF6oNj8o66z3YrVNKrCPzhA/5Rkkwwk32SNxvKU3\nVZFSNPeOZ60BicxYcWO+b2aAa0WF+uazJAZ4q52gUQKBgQDu88R+0wm76secYkzE\nQglteLNZKFcvth0kI5xH42Hmk9IXkGimFoDJCIrLAuopyGnfNmqmh2is3QUMUPdR\n/wDLnKc4MCezEidNoD2RBC+bzM1hB9oye/b5sOZUDFXSa0k4XSLu1UEuy1yWhkuS\n6JjY1KQfc4FN0K0Fjqqo7UCTCwKBgQDHtKQh/NvMJ2ok4YW+/QAsus4mEK9eCyUy\nOuyDszQYrGvjkS7STKJVNxGLhWb0XKSIAxMZ66b1MwOt+71h7xNn6pcancfVdK7F\n1Xl5J+76SwbXSgQwTZuoMDxPIvZn7v/2ep5Ni/BcOhMcPIcobWb/OmXrFN1brBvo\nlFNQyWWhlwKBgFDAyPMjVvLO0U6kWdUpjA4W8GV9IJnbLdX8wt/4lClcY2/bOcKH\ncFaAMIeTIJemR0FMHpbQxCtHNmGHK03mo9orwsdWXtRBmk69jJDpnT1F5VKZWMAe\n7MRNaEmXMZm+8CvALgIQx8qMp2mnUPsA6Ea+9gg6/MPTdeWe5UXZiC0pAoGAGtSt\nPJfBXBNrklruYjORo3DRo5GYThVHQRFjl2orNKltsVxfIwgCw1ortEgPBgOwY0mu\ndkwP2V+qPeTVk+PQAqUk+gF6yLXtiUzeDiYMWHpeB+y81VSH9jfM0oELA/m7T/03\naYnEmE+BI8kKC6dvMBlDeisKdneQJFZRP0hfrC8CgYEAgYIyCGwcydKpe2Nkj0Fz\nKTtCMC/k4DvJfd5Kb9AbmrPUfKgA9Xj4GT6yPG6uBMi8r5etvLCKJ2x2NtN024a8\nQJLATYPrSsaZkE+9zM0j5nYAgbKpxBhlDzDAzn//3ByVzfgJ25S80XhTI2lfbLH/\nU07ssxdZaQCo+WuD82OvNcg=\n-----END PRIVATE KEY-----\n", + "privatekey_path": "/etc/certificates/freenas_default.key", + "revoked": false, + "revoked_date": "", + "root_path": "/etc/certificates", + "san": [ + "DNS:localhost" + ], + "serial": 1, + "signedby": "", + "state": "Tennessee", + "subject_name_hash": 3193428416, + "type": 8, + "until": "Thu Dec 29 15:05:38 2022" + }, + "1": { + "CA_type_existing": false, + "CA_type_intermediate": false, + "CA_type_internal": false, + "CSR": "", + "DN": "/C=US/O=iXsystems/CN=localhost/emailAddress=info@ixsystems.com/ST=Tennessee/L=Maryville/subjectAltName=DNS:localhost", + "cert_type": "CERTIFICATE", + "cert_type_CSR": false, + "cert_type_existing": true, + "cert_type_internal": false, + "certificate": "-----BEGIN CERTIFICATE-----\nMIIDqjCCApKgAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgDELMAkGA1UEBhMCVVMx\nEjAQBgNVBAoMCWlYc3lzdGVtczESMBAGA1UEAwwJbG9jYWxob3N0MSEwHwYJKoZI\nhvcNAQkBFhJpbmZvQGl4c3lzdGVtcy5jb20xEjAQBgNVBAgMCVRlbm5lc3NlZTES\nMBAGA1UEBwwJTWFyeXZpbGxlMB4XDTIwMDkyNTE0MDUzOFoXDTIyMTIyOTE0MDUz\nOFowgYAxCzAJBgNVBAYTAlVTMRIwEAYDVQQKDAlpWHN5c3RlbXMxEjAQBgNVBAMM\nCWxvY2FsaG9zdDEhMB8GCSqGSIb3DQEJARYSaW5mb0BpeHN5c3RlbXMuY29tMRIw\nEAYDVQQIDAlUZW5uZXNzZWUxEjAQBgNVBAcMCU1hcnl2aWxsZTCCASIwDQYJKoZI\nhvcNAQEBBQADggEPADCCAQoCggEBALpoGliii6X8DeoFdLcR7jjsfJIn3nC8f1pT\nLQ3RURHUOEyhPT3Z6TkhaHeHoj8D6kiXROhyJJq3kw5OeqGZisfpGQhkxjpxkfh9\nfAhlvhuLwCWHaMvSh1TaT+h9+eHfcx3un5CIaH8b1KYRBMH+jmKFpr7jkPNkBXLS\nMA7jKIIa8pD9R6lF4gAsbqJafCbT3R7bqkd9xp3n3j2YhqQzETU2lmu4fra3BPio\nofK47kSkguUC6mtk6VrDf2+QtCKlY0dtbF3e2ZBNWo1aj86sjCtoEmqOCMsPRLc/\nXwQcfEqHY4XfafXwqk0G0UxV2ce18xKoR/pN3MpLBZ65NzPnpn0CAwEAAaMtMCsw\nFAYDVR0RBA0wC4IJbG9jYWxob3N0MBMGA1UdJQQMMAoGCCsGAQUFBwMBMA0GCSqG\nSIb3DQEBCwUAA4IBAQBFW1R037y7wllg/gRk9p2T1stiG8iIXosblmL4Ak1YToTQ\n/0to5GY2ZYW29+rbA4SDTS5eeu2YqZ0A/fF3wey7ggzMS7KyNBOvx5QBJRw3PJGn\n+THfhXvdfkOyeUC6KWRGLgl+/zBFvgh6vFDq3jmv0NI4ehVBTBMCJn7r6577S16T\nwtgKMCooizII0Odu5HIF10gTieFIH3PQYm9JBji9iyemb9Ht3wn7fXQptfGadz/l\nWz/Dv9+a6IOr7JVJMHnqAIvPzpkav4efuVPOX1zbhjg4K5g+nRYfjr5F5upOd0Y3\nznWTUBUyI7CXRkpHtSDXfEqKgnk/8uv7GWw+hyKr\n-----END CERTIFICATE-----\n", + "certificate_path": "/etc/certificates/freenas_default.crt", + "chain": false, + "chain_list": [ + "-----BEGIN CERTIFICATE-----\nMIIDqjCCApKgAwIBAgIBATANBgkqhkiG9w0BAQsFADCBgDELMAkGA1UEBhMCVVMx\nEjAQBgNVBAoMCWlYc3lzdGVtczESMBAGA1UEAwwJbG9jYWxob3N0MSEwHwYJKoZI\nhvcNAQkBFhJpbmZvQGl4c3lzdGVtcy5jb20xEjAQBgNVBAgMCVRlbm5lc3NlZTES\nMBAGA1UEBwwJTWFyeXZpbGxlMB4XDTIwMDkyNTE0MDUzOFoXDTIyMTIyOTE0MDUz\nOFowgYAxCzAJBgNVBAYTAlVTMRIwEAYDVQQKDAlpWHN5c3RlbXMxEjAQBgNVBAMM\nCWxvY2FsaG9zdDEhMB8GCSqGSIb3DQEJARYSaW5mb0BpeHN5c3RlbXMuY29tMRIw\nEAYDVQQIDAlUZW5uZXNzZWUxEjAQBgNVBAcMCU1hcnl2aWxsZTCCASIwDQYJKoZI\nhvcNAQEBBQADggEPADCCAQoCggEBALpoGliii6X8DeoFdLcR7jjsfJIn3nC8f1pT\nLQ3RURHUOEyhPT3Z6TkhaHeHoj8D6kiXROhyJJq3kw5OeqGZisfpGQhkxjpxkfh9\nfAhlvhuLwCWHaMvSh1TaT+h9+eHfcx3un5CIaH8b1KYRBMH+jmKFpr7jkPNkBXLS\nMA7jKIIa8pD9R6lF4gAsbqJafCbT3R7bqkd9xp3n3j2YhqQzETU2lmu4fra3BPio\nofK47kSkguUC6mtk6VrDf2+QtCKlY0dtbF3e2ZBNWo1aj86sjCtoEmqOCMsPRLc/\nXwQcfEqHY4XfafXwqk0G0UxV2ce18xKoR/pN3MpLBZ65NzPnpn0CAwEAAaMtMCsw\nFAYDVR0RBA0wC4IJbG9jYWxob3N0MBMGA1UdJQQMMAoGCCsGAQUFBwMBMA0GCSqG\nSIb3DQEBCwUAA4IBAQBFW1R037y7wllg/gRk9p2T1stiG8iIXosblmL4Ak1YToTQ\n/0to5GY2ZYW29+rbA4SDTS5eeu2YqZ0A/fF3wey7ggzMS7KyNBOvx5QBJRw3PJGn\n+THfhXvdfkOyeUC6KWRGLgl+/zBFvgh6vFDq3jmv0NI4ehVBTBMCJn7r6577S16T\nwtgKMCooizII0Odu5HIF10gTieFIH3PQYm9JBji9iyemb9Ht3wn7fXQptfGadz/l\nWz/Dv9+a6IOr7JVJMHnqAIvPzpkav4efuVPOX1zbhjg4K5g+nRYfjr5F5upOd0Y3\nznWTUBUyI7CXRkpHtSDXfEqKgnk/8uv7GWw+hyKr\n-----END CERTIFICATE-----\n" + ], + "city": "Maryville", + "common": "localhost", + "country": "US", + "csr_path": "/etc/certificates/freenas_default.csr", + "digest_algorithm": "SHA256", + "email": "info@ixsystems.com", + "extensions": { + "ExtendedKeyUsage": "TLS Web Server Authentication", + "SubjectAltName": "DNS:localhost" + }, + "fingerprint": "9C:5A:1D:1B:E7:9E:0B:89:2B:37:F4:19:83:ED:3C:6B:D8:14:0D:9B", + "from": "Fri Sep 25 16:05:38 2020", + "id": 1, + "internal": "NO", + "issuer": "external", + "key_length": 2048, + "key_type": "RSA", + "lifetime": 825, + "name": "freenas_default", + "organization": "iXsystems", + "organizational_unit": "", + "parsed": true, + "privatekey": "-----BEGIN PRIVATE KEY-----\nMIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC6aBpYooul/A3q\nBXS3Ee447HySJ95wvH9aUy0N0VER1DhMoT092ek5IWh3h6I/A+pIl0TociSat5MO\nTnqhmYrH6RkIZMY6cZH4fXwIZb4bi8Alh2jL0odU2k/offnh33Md7p+QiGh/G9Sm\nEQTB/o5ihaa+45DzZAVy0jAO4yiCGvKQ/UepReIALG6iWnwm090e26pHfcad5949\nmIakMxE1NpZruH62twT4qKHyuO5EpILlAuprZOlaw39vkLQipWNHbWxd3tmQTVqN\nWo/OrIwraBJqjgjLD0S3P18EHHxKh2OF32n18KpNBtFMVdnHtfMSqEf6TdzKSwWe\nuTcz56Z9AgMBAAECggEARwcb4uIs7BZbBu0FSCyg5TfXT6m5bKOmszg2VqmHho+i\n1DAsMcEyyP4d3E3mWLSZNQfOzfOQVxPUCQOGXsUuyHXdgAFGN0bHJDRMara59a0O\njj5GhEO4JXD6OdCmwpZuOt2OF3iiuKxWHuElOvZQMuJSYzI7LULTgKjufv23lbsf\nxMO/v9yi57c5EGgnQ8siLKOy/FQZapn4Z9qKn+lVyk5gfaKP0pDsvV4d7nGYMDD2\nYijfkSyNecApFdtWiLE5zLUlvF6oNj8o66z3YrVNKrCPzhA/5Rkkwwk32SNxvKU3\nVZFSNPeOZ60BicxYcWO+b2aAa0WF+uazJAZ4q52gUQKBgQDu88R+0wm76secYkzE\nQglteLNZKFcvth0kI5xH42Hmk9IXkGimFoDJCIrLAuopyGnfNmqmh2is3QUMUPdR\n/wDLnKc4MCezEidNoD2RBC+bzM1hB9oye/b5sOZUDFXSa0k4XSLu1UEuy1yWhkuS\n6JjY1KQfc4FN0K0Fjqqo7UCTCwKBgQDHtKQh/NvMJ2ok4YW+/QAsus4mEK9eCyUy\nOuyDszQYrGvjkS7STKJVNxGLhWb0XKSIAxMZ66b1MwOt+71h7xNn6pcancfVdK7F\n1Xl5J+76SwbXSgQwTZuoMDxPIvZn7v/2ep5Ni/BcOhMcPIcobWb/OmXrFN1brBvo\nlFNQyWWhlwKBgFDAyPMjVvLO0U6kWdUpjA4W8GV9IJnbLdX8wt/4lClcY2/bOcKH\ncFaAMIeTIJemR0FMHpbQxCtHNmGHK03mo9orwsdWXtRBmk69jJDpnT1F5VKZWMAe\n7MRNaEmXMZm+8CvALgIQx8qMp2mnUPsA6Ea+9gg6/MPTdeWe5UXZiC0pAoGAGtSt\nPJfBXBNrklruYjORo3DRo5GYThVHQRFjl2orNKltsVxfIwgCw1ortEgPBgOwY0mu\ndkwP2V+qPeTVk+PQAqUk+gF6yLXtiUzeDiYMWHpeB+y81VSH9jfM0oELA/m7T/03\naYnEmE+BI8kKC6dvMBlDeisKdneQJFZRP0hfrC8CgYEAgYIyCGwcydKpe2Nkj0Fz\nKTtCMC/k4DvJfd5Kb9AbmrPUfKgA9Xj4GT6yPG6uBMi8r5etvLCKJ2x2NtN024a8\nQJLATYPrSsaZkE+9zM0j5nYAgbKpxBhlDzDAzn//3ByVzfgJ25S80XhTI2lfbLH/\nU07ssxdZaQCo+WuD82OvNcg=\n-----END PRIVATE KEY-----\n", + "privatekey_path": "/etc/certificates/freenas_default.key", + "revoked": false, + "revoked_date": "", + "root_path": "/etc/certificates", + "san": [ + "DNS:localhost" + ], + "serial": 1, + "signedby": "", + "state": "Tennessee", + "subject_name_hash": 3193428416, + "type": 8, + "until": "Thu Dec 29 15:05:38 2022" + } + }, + ingress: { + main: { + enabled: true, + tls: [ + { + hosts: [ 'hostname1' ], + scaleCert: 1 + }, + { + hosts: [ 'hostname2' ], + scaleCert: 2 + } + ] + } + } + } + chart.value values + refute_nil(resource('Secret')) + secret1 = chart.resources(kind: "Secret").first + assert_equal("common-test-main-tls-0-ixcert-1", secret1["metadata"]["name"]) + refute_nil(secret1["data"]["tls.crt"]) + refute_nil(secret1["data"]["tls.key"]) + secret2 = chart.resources(kind: "Secret").find{ |s| s["metadata"]["name"] == "common-test-main-tls-1-ixcert-2" } + refute_nil(secret2) + refute_nil(secret2["data"]["tls.crt"]) + refute_nil(secret2["data"]["tls.key"]) + + ingress = chart.resources(kind: "Ingress").find{ |s| s["metadata"]["name"] == "common-test-main" } + refute_nil(ingress) + assert_equal("common-test-main-tls-0-ixcert-1", ingress["spec"]["tls"][0]["secretName"]) + assert_equal("common-test-main-tls-1-ixcert-2", ingress["spec"]["tls"][1]["secretName"]) + end + end + end +end diff --git a/tests/library/common/container_resources_spec.rb b/tests/library/common/container_resources_spec.rb new file mode 100644 index 00000000000..f91d4116b9d --- /dev/null +++ b/tests/library/common/container_resources_spec.rb @@ -0,0 +1,90 @@ +# frozen_string_literal: true +require_relative '../../test_helper' + +class Test < ChartTest + @@chart = Chart.new('charts/library/common-test') + + describe @@chart.name do + describe 'container::resources' do + it 'no resources added by default' do + deployment = chart.resources(kind: "Deployment").first + containers = deployment["spec"]["template"]["spec"]["containers"] + mainContainer = containers.find{ |c| c["name"] == "common-test" } + assert_equal({"limits"=>{}}, mainContainer["resources"]) + end + it 'resources can be added' do + values = { + resources: { + testresourcename: "testresourcevalue" + } + } + chart.value values + deployment = chart.resources(kind: "Deployment").first + containers = deployment["spec"]["template"]["spec"]["containers"] + mainContainer = containers.find{ |c| c["name"] == "common-test" } + assert_equal({"limits"=>{}, "testresourcename"=>"testresourcevalue"}, mainContainer["resources"]) + end + it 'resources.limits can be added' do + values = { + resources: { + limits: { + testlimitkey: "testlimitvalue" + } + } + } + chart.value values + deployment = chart.resources(kind: "Deployment").first + containers = deployment["spec"]["template"]["spec"]["containers"] + mainContainer = containers.find{ |c| c["name"] == "common-test" } + assert_equal({"limits"=>{"testlimitkey"=>"testlimitvalue"}}, mainContainer["resources"]) + end + it 'resources and resources.limits can both be added' do + values = { + resources: { + testresourcekey: "testresourcevalue", + limits: { + testlimitkey: "testlimitvalue" + } + } + } + chart.value values + deployment = chart.resources(kind: "Deployment").first + containers = deployment["spec"]["template"]["spec"]["containers"] + mainContainer = containers.find{ |c| c["name"] == "common-test" } + assert_equal({"limits"=>{"testlimitkey"=>"testlimitvalue"}, "testresourcekey"=>"testresourcevalue"}, mainContainer["resources"]) + end + end + describe 'container::resources-scaleGPU' do + it 'scaleGPU can be set' do + values = { + scaleGPU: { + intelblabla: 1 + } + } + chart.value values + deployment = chart.resources(kind: "Deployment").first + containers = deployment["spec"]["template"]["spec"]["containers"] + mainContainer = containers.find{ |c| c["name"] == "common-test" } + assert_equal({"limits"=>{"intelblabla"=>1}}, mainContainer["resources"]) + end + it 'scaleGPU can be combined with resources and resource values' do + values = { + resources: { + testresourcekey: "testresourcevalue", + limits: { + testlimitkey: "testlimitvalue" + } + }, + scaleGPU: { + intelblabla: 1 + } + } + chart.value values + deployment = chart.resources(kind: "Deployment").first + containers = deployment["spec"]["template"]["spec"]["containers"] + mainContainer = containers.find{ |c| c["name"] == "common-test" } + assert_equal({"limits"=>{"intelblabla"=>1, "testlimitkey"=>"testlimitvalue"}, "testresourcekey"=>"testresourcevalue"}, mainContainer["resources"]) + end + end + end +end diff --git a/tests/library/common/container_spec.rb b/tests/library/common/container_spec.rb new file mode 100644 index 00000000000..bb1decec3a1 --- /dev/null +++ b/tests/library/common/container_spec.rb @@ -0,0 +1,380 @@ +# frozen_string_literal: true +require_relative '../../test_helper' + +class Test < ChartTest + @@chart = Chart.new('charts/library/common-test') + + describe @@chart.name do + describe 'container::command' do + it 'defaults to nil' do + deployment = chart.resources(kind: "Deployment").first + containers = deployment["spec"]["template"]["spec"]["containers"] + mainContainer = containers.find{ |c| c["name"] == "common-test" } + assert_nil(mainContainer["command"]) + end + + it 'accepts a single string' do + values = { + command: "/bin/sh" + } + chart.value values + deployment = chart.resources(kind: "Deployment").first + containers = deployment["spec"]["template"]["spec"]["containers"] + mainContainer = containers.find{ |c| c["name"] == "common-test" } + assert_equal(values[:command], mainContainer["command"]) + end + + it 'accepts a list of strings' do + values = { + command: [ + "/bin/sh", + "-c" + ] + } + chart.value values + deployment = chart.resources(kind: "Deployment").first + containers = deployment["spec"]["template"]["spec"]["containers"] + mainContainer = containers.find{ |c| c["name"] == "common-test" } + assert_equal(values[:command], mainContainer["command"]) + end + end + + describe 'container::arguments' do + it 'defaults to nil' do + deployment = chart.resources(kind: "Deployment").first + containers = deployment["spec"]["template"]["spec"]["containers"] + mainContainer = containers.find{ |c| c["name"] == "common-test" } + assert_nil(mainContainer["args"]) + end + + it 'accepts a single string' do + values = { + args: "sleep infinity" + } + chart.value values + deployment = chart.resources(kind: "Deployment").first + containers = deployment["spec"]["template"]["spec"]["containers"] + mainContainer = containers.find{ |c| c["name"] == "common-test" } + assert_equal(values[:args], mainContainer["args"]) + end + + it 'accepts a list of strings' do + values = { + args: [ + "sleep", + "infinity" + ] + } + chart.value values + deployment = chart.resources(kind: "Deployment").first + containers = deployment["spec"]["template"]["spec"]["containers"] + mainContainer = containers.find{ |c| c["name"] == "common-test" } + assert_equal(values[:args], mainContainer["args"]) + end + end + + describe 'container::environment settings' do + it 'Check no environment variables' do + values = {} + chart.value values + deployment = chart.resources(kind: "Deployment").first + containers = deployment["spec"]["template"]["spec"]["containers"] + mainContainer = containers.find{ |c| c["name"] == "common-test" } + assert_nil(mainContainer["env"]) + end + + it 'set "static" environment variables' do + values = { + env: { + STATIC_ENV: 'value_of_env', + TRUTHY_ENV: '0', + } + } + chart.value values + deployment = chart.resources(kind: "Deployment").first + containers = deployment["spec"]["template"]["spec"]["containers"] + mainContainer = containers.find{ |c| c["name"] == "common-test" } + assert_equal(values[:env].keys[0].to_s, mainContainer["env"][0]["name"]) + assert_equal(values[:env].values[0].to_s, mainContainer["env"][0]["value"]) + assert_equal(values[:env].keys[1].to_s, mainContainer["env"][1]["name"]) + assert_equal(values[:env].values[1].to_s, mainContainer["env"][1]["value"]) + end + + it 'set "list" of "static" environment variables' do + values = { + envList: [ + { + name: 'STATIC_ENV_FROM_LIST', + value: 'STATIC_ENV_VALUE_FROM_LIST' + } + + ] + } + chart.value values + deployment = chart.resources(kind: "Deployment").first + containers = deployment["spec"]["template"]["spec"]["containers"] + mainContainer = containers.find{ |c| c["name"] == "common-test" } + assert_equal(values[:envList][0][:name].to_s, mainContainer["env"][0]["name"]) + assert_equal(values[:envList][0][:value].to_s, mainContainer["env"][0]["value"]) + end + + it 'set both "list" AND "dict" of "static" environment variables' do + values = { + env: { + STATIC_ENV: 'value_of_env' + }, + envList: [ + { + name: 'STATIC_ENV_FROM_LIST', + value: 'STATIC_ENV_VALUE_FROM_LIST' + } + + ] + } + chart.value values + deployment = chart.resources(kind: "Deployment").first + containers = deployment["spec"]["template"]["spec"]["containers"] + mainContainer = containers.find{ |c| c["name"] == "common-test" } + assert_equal(values[:envList][0][:name].to_s, mainContainer["env"][0]["name"]) + assert_equal(values[:envList][0][:value].to_s, mainContainer["env"][0]["value"]) + assert_equal(values[:env].keys[0].to_s, mainContainer["env"][1]["name"]) + assert_equal(values[:env].values[0].to_s, mainContainer["env"][1]["value"]) + end + + it 'set "valueFrom" environment variables' do + values = { + envValueFrom: { + NODE_NAME: { + fieldRef: { + fieldPath: "spec.nodeName" + } + } + } + } + chart.value values + deployment = chart.resources(kind: "Deployment").first + containers = deployment["spec"]["template"]["spec"]["containers"] + mainContainer = containers.find{ |c| c["name"] == "common-test" } + assert_equal(values[:envValueFrom].keys[0].to_s, mainContainer["env"][0]["name"]) + assert_equal(values[:envValueFrom].values[0][:fieldRef][:fieldPath], mainContainer["env"][0]["valueFrom"]["fieldRef"]["fieldPath"]) + end + + it 'set "static" and "Dynamic/Tpl" environment variables' do + values = { + env: { + STATIC_ENV: 'value_of_env' + }, + envTpl: { + DYN_ENV: "{{ .Release.Name }}-admin" + } + } + chart.value values + deployment = chart.resources(kind: "Deployment").first + containers = deployment["spec"]["template"]["spec"]["containers"] + mainContainer = containers.find{ |c| c["name"] == "common-test" } + assert_equal(values[:env].keys[0].to_s, mainContainer["env"][0]["name"]) + assert_equal(values[:env].values[0].to_s, mainContainer["env"][0]["value"]) + assert_equal(values[:envTpl].keys[0].to_s, mainContainer["env"][1]["name"]) + assert_equal("common-test-admin", mainContainer["env"][1]["value"]) + end + + it 'set "Dynamic/Tpl" environment variables' do + values = { + envTpl: { + DYN_ENV: "{{ .Release.Name }}-admin" + } + } + chart.value values + deployment = chart.resources(kind: "Deployment").first + containers = deployment["spec"]["template"]["spec"]["containers"] + mainContainer = containers.find{ |c| c["name"] == "common-test" } + assert_equal(values[:envTpl].keys[0].to_s, mainContainer["env"][0]["name"]) + assert_equal("common-test-admin", mainContainer["env"][0]["value"]) + end + + it 'set "static" secret variables' do + expectedSecretName = 'common-test' + values = { + secret: { + STATIC_SECRET: 'value_of_secret' + } + } + chart.value values + secret = chart.resources(kind: "Secret").find{ |s| s["metadata"]["name"] == expectedSecretName } + refute_nil(secret) + assert_equal(values[:secret].values[0].to_s, secret["stringData"]["STATIC_SECRET"]) + + deployment = chart.resources(kind: "Deployment").first + containers = deployment["spec"]["template"]["spec"]["containers"] + mainContainer = containers.find{ |c| c["name"] == "common-test" } + assert_equal(expectedSecretName, mainContainer["envFrom"][0]["secretRef"]["name"]) + end + end + + describe 'container::persistence' do + it 'supports multiple volumeMounts' do + values = { + persistence: { + cache: { + enabled: true, + emptyDir: { + enabled: true + } + }, + config: { + enabled: true, + existingClaim: "configClaim" + }, + data: { + enabled: true, + existingClaim: "dataClaim" + } + } + } + chart.value values + deployment = chart.resources(kind: "Deployment").first + containers = deployment["spec"]["template"]["spec"]["containers"] + mainContainer = containers.find{ |c| c["name"] == "common-test" } + + # Check that all persistent volumes have mounts + values[:persistence].each { |key, value| + volumeMount = mainContainer["volumeMounts"].find{ |v| v["name"] == key.to_s } + refute_nil(volumeMount) + } + end + + it 'defaults mountPath to persistence key' do + values = { + persistence: { + data: { + enabled: true, + existingClaim: "dataClaim" + } + } + } + chart.value values + deployment = chart.resources(kind: "Deployment").first + containers = deployment["spec"]["template"]["spec"]["containers"] + mainContainer = containers.find{ |c| c["name"] == "common-test" } + + volumeMount = mainContainer["volumeMounts"].find{ |v| v["name"] == "data" } + refute_nil(volumeMount) + assert_equal("/data", volumeMount["mountPath"]) + end + + it 'supports setting custom mountPath' do + values = { + persistence: { + data: { + enabled: true, + existingClaim: "dataClaim", + mountPath: "/myMountPath" + } + } + } + chart.value values + deployment = chart.resources(kind: "Deployment").first + containers = deployment["spec"]["template"]["spec"]["containers"] + mainContainer = containers.find{ |c| c["name"] == "common-test" } + + volumeMount = mainContainer["volumeMounts"].find{ |v| v["name"] == "data" } + refute_nil(volumeMount) + assert_equal("/myMountPath", volumeMount["mountPath"]) + end + + it 'supports setting subPath' do + values = { + persistence: { + data: { + enabled: true, + existingClaim: "dataClaim", + subPath: "mySubPath" + } + } + } + chart.value values + deployment = chart.resources(kind: "Deployment").first + containers = deployment["spec"]["template"]["spec"]["containers"] + mainContainer = containers.find{ |c| c["name"] == "common-test" } + + volumeMount = mainContainer["volumeMounts"].find{ |v| v["name"] == "data" } + refute_nil(volumeMount) + assert_equal("mySubPath", volumeMount["subPath"]) + end + end + + describe 'container::hostPathMounts' do + it 'supports multiple hostPathMounts' do + values = { + hostPathMounts: [ + { + name: "data", + enabled: true, + mountPath: "/data", + hostPath: "/tmp" + }, + { + name: "config", + enabled: true, + mountPath: "/config", + hostPath: "/tmp" + } + ] + } + chart.value values + deployment = chart.resources(kind: "Deployment").first + containers = deployment["spec"]["template"]["spec"]["containers"] + mainContainer = containers.find{ |c| c["name"] == "common-test" } + + # Check that all hostPathMounts volumes have mounts + values[:hostPathMounts].each { |value| + volumeMount = mainContainer["volumeMounts"].find{ |v| v["name"] == "hostpathmounts-" + value[:name].to_s } + refute_nil(volumeMount) + } + end + + it 'supports setting mountPath' do + values = { + hostPathMounts: [ + { + name: "data", + enabled: true, + mountPath: "/data", + hostPath: "/tmp" + } + ] + } + chart.value values + deployment = chart.resources(kind: "Deployment").first + containers = deployment["spec"]["template"]["spec"]["containers"] + mainContainer = containers.find{ |c| c["name"] == "common-test" } + + volumeMount = mainContainer["volumeMounts"].find{ |v| v["name"] == "hostpathmounts-data" } + refute_nil(volumeMount) + assert_equal("/data", volumeMount["mountPath"]) + end + + it 'supports setting subPath' do + values = { + hostPathMounts: [ + { + name: "data", + enabled: true, + mountPath: "/data", + hostPath: "/tmp", + subPath: "mySubPath" + } + ] + } + chart.value values + deployment = chart.resources(kind: "Deployment").first + containers = deployment["spec"]["template"]["spec"]["containers"] + mainContainer = containers.find{ |c| c["name"] == "common-test" } + + volumeMount = mainContainer["volumeMounts"].find{ |v| v["name"] == "hostpathmounts-data" } + refute_nil(volumeMount) + assert_equal("mySubPath", volumeMount["subPath"]) + end + end + end +end diff --git a/tests/library/common/controller_spec.rb b/tests/library/common/controller_spec.rb new file mode 100644 index 00000000000..37fe729d75a --- /dev/null +++ b/tests/library/common/controller_spec.rb @@ -0,0 +1,60 @@ +# frozen_string_literal: true +require_relative '../../test_helper' + +class Test < ChartTest + @@chart = Chart.new('charts/library/common-test') + + describe @@chart.name do + describe 'controller::type' do + it 'defaults to "Deployment"' do + assert_nil(resource('StatefulSet')) + assert_nil(resource('DaemonSet')) + refute_nil(resource('Deployment')) + end + + it 'accepts "statefulset"' do + chart.value controllerType: 'statefulset' + assert_nil(resource('Deployment')) + assert_nil(resource('DaemonSet')) + refute_nil(resource('StatefulSet')) + end + + it 'accepts "daemonset"' do + chart.value controllerType: 'daemonset' + assert_nil(resource('Deployment')) + assert_nil(resource('StatefulSet')) + refute_nil(resource('DaemonSet')) + end + end + + describe 'controller::statefulset::volumeClaimTemplates' do + it 'volumeClaimTemplates should be empty by default' do + chart.value controllerType: 'statefulset' + statefulset = chart.resources(kind: "StatefulSet").first + assert_nil(statefulset['spec']['volumeClaimTemplates']) + end + + it 'can set values for volumeClaimTemplates' do + values = { + controllerType: 'statefulset', + volumeClaimTemplates: [ + { + name: 'storage', + accessMode: 'ReadWriteOnce', + size: '10Gi', + storageClass: 'storage' + } + ] + } + + chart.value values + statefulset = chart.resources(kind: "StatefulSet").first + volumeClaimTemplate = statefulset["spec"]["volumeClaimTemplates"].find{ |v| v["metadata"]["name"] == values[:volumeClaimTemplates][0][:name]} + refute_nil(volumeClaimTemplate) + assert_equal(values[:volumeClaimTemplates][0][:accessMode], volumeClaimTemplate["spec"]["accessModes"][0]) + assert_equal(values[:volumeClaimTemplates][0][:size], volumeClaimTemplate["spec"]["resources"]["requests"]["storage"]) + assert_equal(values[:volumeClaimTemplates][0][:storageClass], volumeClaimTemplate["spec"]["storageClassName"]) + end + end + end +end diff --git a/tests/library/common/hpa_spec.rb b/tests/library/common/hpa_spec.rb new file mode 100644 index 00000000000..7a859dc31d9 --- /dev/null +++ b/tests/library/common/hpa_spec.rb @@ -0,0 +1,120 @@ +# frozen_string_literal: true +require_relative '../../test_helper' + +class Test < ChartTest + @@chart = Chart.new('charts/library/common-test') + + describe @@chart.name do + + describe 'hpa::defaults' do + it 'does not exist by default' do + hpa = chart.resources(kind: "HorizontalPodAutoscaler").first + assert_nil(hpa) + end + + it 'can be enabled' do + values = { + autoscaling: { + enabled: true + } + } + chart.value values + hpa = chart.resources(kind: "HorizontalPodAutoscaler").first + refute_nil(hpa) + end + + it 'default target is common.names.fullname ' do + values = { + autoscaling: { + enabled: true + } + } + chart.value values + hpa = chart.resources(kind: "HorizontalPodAutoscaler").first + assert_equal("common-test",hpa["spec"]["scaleTargetRef"]["name"]) + end + + it 'default numer of replicas is min 1 max 3' do + values = { + autoscaling: { + enabled: true + } + } + chart.value values + hpa = chart.resources(kind: "HorizontalPodAutoscaler").first + assert_equal(1,hpa["spec"]["minReplicas"]) + assert_equal(3,hpa["spec"]["maxReplicas"]) + end + end + + describe 'hpa::customsettings' do + it 'can override target' do + values = { + autoscaling: { + enabled: true, + target: "targetname" + } + } + chart.value values + hpa = chart.resources(kind: "HorizontalPodAutoscaler").first + assert_equal(values[:autoscaling][:target],hpa["spec"]["scaleTargetRef"]["name"]) + end + + it 'can change min and max replicas' do + values = { + autoscaling: { + enabled: true, + minReplicas: 4, + maxReplicas: 8 + } + } + chart.value values + hpa = chart.resources(kind: "HorizontalPodAutoscaler").first + assert_equal(values[:autoscaling][:minReplicas],hpa["spec"]["minReplicas"]) + assert_equal(values[:autoscaling][:maxReplicas],hpa["spec"]["maxReplicas"]) + end + + it 'can set targetCPUUtilizationPercentage' do + values = { + autoscaling: { + enabled: true, + targetCPUUtilizationPercentage: 60 + } + } + chart.value values + hpa = chart.resources(kind: "HorizontalPodAutoscaler").first + assert_equal("cpu",hpa["spec"]["metrics"][0]["resource"]["name"]) + assert_equal(values[:autoscaling][:targetCPUUtilizationPercentage],hpa["spec"]["metrics"][0]["resource"]["targetAverageUtilization"]) + end + + it 'can set targetMemoryUtilizationPercentage' do + values = { + autoscaling: { + enabled: true, + targetMemoryUtilizationPercentage: 70 + } + } + chart.value values + hpa = chart.resources(kind: "HorizontalPodAutoscaler").first + assert_equal("memory",hpa["spec"]["metrics"][0]["resource"]["name"]) + assert_equal(values[:autoscaling][:targetMemoryUtilizationPercentage],hpa["spec"]["metrics"][0]["resource"]["targetAverageUtilization"]) + end + + it 'can set both targetCPU and targetMemoryUtilizationPercentage' do + values = { + autoscaling: { + enabled: true, + targetCPUUtilizationPercentage: 60, + targetMemoryUtilizationPercentage: 70 + } + } + chart.value values + hpa = chart.resources(kind: "HorizontalPodAutoscaler").first + assert_equal("cpu",hpa["spec"]["metrics"][0]["resource"]["name"]) + assert_equal(values[:autoscaling][:targetCPUUtilizationPercentage],hpa["spec"]["metrics"][0]["resource"]["targetAverageUtilization"]) + assert_equal("memory",hpa["spec"]["metrics"][1]["resource"]["name"]) + assert_equal(values[:autoscaling][:targetMemoryUtilizationPercentage],hpa["spec"]["metrics"][1]["resource"]["targetAverageUtilization"]) + end + end + end +end diff --git a/tests/library/common/ingress_spec.rb b/tests/library/common/ingress_spec.rb new file mode 100644 index 00000000000..339c837091f --- /dev/null +++ b/tests/library/common/ingress_spec.rb @@ -0,0 +1,281 @@ +# frozen_string_literal: true +require_relative '../../test_helper' + +class Test < ChartTest + @@chart = Chart.new('charts/library/common-test') + + describe @@chart.name do + describe 'ingress' do + it 'disabled when ingress.main.enabled: false' do + values = { + ingress: { + main: { + enabled: false + } + } + } + chart.value values + assert_nil(resource('Ingress')) + end + + it 'enabled when ingress.main.enabled: true' do + values = { + ingress: { + main: { + enabled: true + } + } + } + + chart.value values + refute_nil(resource('Ingress')) + end + + it 'tls can be provided' do + expectedPath = 'common-test.path' + values = { + ingress: { + main: { + enabled: true, + tls: [ + { + hosts: [ 'hostname' ], + secretName: 'secret-name' + } + ] + } + } + } + + chart.value values + ingress = chart.resources(kind: "Ingress").find{ |s| s["metadata"]["name"] == "common-test-main" } + refute_nil(ingress) + assert_equal(values[:ingress][:main][:tls][0][:hosts][0], ingress["spec"]["tls"][0]["hosts"][0]) + assert_equal(values[:ingress][:main][:tls][0][:secretName], ingress["spec"]["tls"][0]["secretName"]) + end + + it 'tls secret can be left empty' do + expectedPath = 'common-test.path' + values = { + ingress: { + main: { + enabled: true, + tls: [ + { + hosts: [ 'hostname' ] + } + ] + } + } + } + + chart.value values + ingress = chart.resources(kind: "Ingress").find{ |s| s["metadata"]["name"] == "common-test-main" } + refute_nil(ingress) + assert_equal(values[:ingress][:main][:tls][0][:hosts][0], ingress["spec"]["tls"][0]["hosts"][0]) + assert_equal(false, ingress["spec"]["tls"][0].key?("secretName")) + assert_nil(ingress["spec"]["tls"][0]["secretName"]) + end + + it 'tls secret template can be provided' do + expectedPath = 'common-test.path' + values = { + ingress: { + main: { + enabled: true, + tls: [ + { + secretNameTpl: '{{ .Release.Name }}-secret' + } + ] + } + } + } + + chart.value values + ingress = chart.resources(kind: "Ingress").find{ |s| s["metadata"]["name"] == "common-test-main" } + refute_nil(ingress) + assert_equal('common-test-secret', ingress["spec"]["tls"][0]["secretName"]) + end + + it 'path template can be provided' do + expectedPath = 'common-test.path' + values = { + ingress: { + main: { + enabled: true, + hosts: [ + { + paths: [ + { + pathTpl: '{{ .Release.Name }}.path' + } + ] + } + ] + } + } + } + + chart.value values + ingress = chart.resources(kind: "Ingress").find{ |s| s["metadata"]["name"] == "common-test-main" } + refute_nil(ingress) + assert_equal(expectedPath, ingress["spec"]["rules"][0]["http"]["paths"][0]["path"]) + end + + it 'hosts can be provided' do + values = { + ingress: { + main: { + enabled: true, + hosts: [ + { + host: 'hostname' + } + ] + } + } + } + + chart.value values + ingress = chart.resources(kind: "Ingress").find{ |s| s["metadata"]["name"] == "common-test-main" } + refute_nil(ingress) + assert_equal(values[:ingress][:main][:hosts][0][:host], ingress["spec"]["rules"][0]["host"]) + end + + it 'hosts template can be provided' do + expectedHostName = 'common-test.hostname' + values = { + ingress: { + main: { + enabled: true, + hosts: [ + { + hostTpl: '{{ .Release.Name }}.hostname' + } + ] + } + } + } + + chart.value values + ingress = chart.resources(kind: "Ingress").find{ |s| s["metadata"]["name"] == "common-test-main" } + refute_nil(ingress) + assert_equal(expectedHostName, ingress["spec"]["rules"][0]["host"]) + end + + it 'custom service name / port can optionally be set on path level' do + values = { + ingress: { + main: { + enabled: true, + hosts: [ + { + paths: [ + { + path: '/' + }, + { + path: '/second', + serviceName: 'pathService', + servicePort: 1234 + } + ] + } + ] + } + } + } + + chart.value values + ingress = chart.resources(kind: "Ingress").find{ |s| s["metadata"]["name"] == "common-test-main" } + firstPath = ingress["spec"]["rules"][0]["http"]["paths"][0] + secondPath = ingress["spec"]["rules"][0]["http"]["paths"][1] + assert_equal("common-test", firstPath["backend"]["service"]["name"]) + assert_equal(8080, firstPath["backend"]["service"]["port"]["number"]) + assert_equal("pathService", secondPath["backend"]["service"]["name"]) + assert_equal(1234, secondPath["backend"]["service"]["port"]["number"]) + end + end + + describe 'additionalIngress' do + ingressValues = { + ingress: { + extra: { + enabled: true, + hosts: [ + { + paths: [ + { + path: '/' + } + ] + } + ] + } + } + } + + it 'can be specified' do + values = ingressValues + chart.value values + additionalIngress = chart.resources(kind: "Ingress").find{ |s| s["metadata"]["name"] == "common-test-extra" } + refute_nil(additionalIngress) + end + + it 'refers to main Service by default' do + values = ingressValues + chart.value values + additionalIngress = chart.resources(kind: "Ingress").find{ |s| s["metadata"]["name"] == "common-test-extra" } + assert_equal("common-test", additionalIngress["spec"]["rules"][0]["http"]["paths"][0]["backend"]["service"]["name"]) + assert_equal(8080, additionalIngress["spec"]["rules"][0]["http"]["paths"][0]["backend"]["service"]["port"]["number"]) + end + + it 'custom service name / port can be set on Ingress level' do + values = ingressValues.deep_merge_override({ + ingress: { + extra: { + serviceName: "customService", + servicePort: 8081 + } + } + }) + chart.value values + additionalIngress = chart.resources(kind: "Ingress").find{ |s| s["metadata"]["name"] == "common-test-extra" } + assert_equal("customService", additionalIngress["spec"]["rules"][0]["http"]["paths"][0]["backend"]["service"]["name"]) + assert_equal(8081, additionalIngress["spec"]["rules"][0]["http"]["paths"][0]["backend"]["service"]["port"]["number"]) + end + + it 'custom service name / port can optionally be set on path level' do + values = ingressValues.deep_merge_override({ + ingress: { + extra: { + hosts: [ + { + paths: [ + { + path: '/' + }, + { + path: '/second', + serviceName: 'pathService', + servicePort: 1234 + } + ] + } + ] + } + } + }) + chart.value values + additionalIngress = chart.resources(kind: "Ingress").find{ |s| s["metadata"]["name"] == "common-test-extra" } + firstPath = additionalIngress["spec"]["rules"][0]["http"]["paths"][0] + secondPath = additionalIngress["spec"]["rules"][0]["http"]["paths"][1] + assert_equal("common-test", firstPath["backend"]["service"]["name"]) + assert_equal(8080, firstPath["backend"]["service"]["port"]["number"]) + assert_equal("pathService", secondPath["backend"]["service"]["name"]) + assert_equal(1234, secondPath["backend"]["service"]["port"]["number"]) + end + end + end +end diff --git a/tests/library/common/job_permissions_spec.rb b/tests/library/common/job_permissions_spec.rb new file mode 100644 index 00000000000..8de52e46e27 --- /dev/null +++ b/tests/library/common/job_permissions_spec.rb @@ -0,0 +1,347 @@ +# frozen_string_literal: true +require_relative '../../test_helper' + +class Test < ChartTest + @@chart = Chart.new('charts/library/common-test') + + describe @@chart.name do + describe 'job::permissions' do + it 'no job exists by default' do + job = chart.resources(kind: "Job").first + assert_nil(job) + end + + it 'hostPathMounts do not affect permissions job by default' do + values = { + hostPathMounts: [ + { + name: "data", + enabled: true, + mountPath: "/data", + hostPath: "/tmp" + } + ] + } + chart.value values + job = chart.resources(kind: "Job").first + assert_nil(job["spec"]["template"]["spec"]["volumes"]) + assert_nil(job["spec"]["template"]["spec"]["containers"][0]["volumeMounts"]) + end + it 'hostPathMounts.setPermissions adds volume(mounts)' do + values = { + hostPathMounts: [ + { + name: "data", + enabled: true, + setPermissions: true, + mountPath: "/data", + hostPath: "/tmp" + } + ] + } + chart.value values + job = chart.resources(kind: "Job").first + assert_equal("hostpathmounts-data", job["spec"]["template"]["spec"]["volumes"][0]["name"]) + assert_equal("hostpathmounts-data", job["spec"]["template"]["spec"]["containers"][0]["volumeMounts"][0]["name"]) + end + it 'supports multiple hostPathMounts' do + values = { + hostPathMounts: [ + { + name: "data", + enabled: true, + setPermissions: true, + mountPath: "/data", + hostPath: "/tmp" + }, + { + name: "config", + enabled: true, + setPermissions: true, + mountPath: "/config", + hostPath: "/tmp" + } + ] + } + chart.value values + job = chart.resources(kind: "Job").first + mainContainer = job["spec"]["template"]["spec"]["containers"][0] + + # Check that all hostPathMounts volumes have mounts + values[:hostPathMounts].each { |value| + volumeMount = mainContainer["volumeMounts"].find{ |v| v["name"] == "hostpathmounts-" + value[:name].to_s } + refute_nil(volumeMount) + } + end + + it 'supports setting mountPath' do + values = { + hostPathMounts: [ + { + name: "data", + enabled: true, + setPermissions: true, + mountPath: "/data", + hostPath: "/tmp" + } + ] + } + chart.value values + job = chart.resources(kind: "Job").first + mainContainer = job["spec"]["template"]["spec"]["containers"][0] + + volumeMount = mainContainer["volumeMounts"].find{ |v| v["name"] == "hostpathmounts-data" } + refute_nil(volumeMount) + assert_equal("/data", volumeMount["mountPath"]) + end + + it 'could mount multiple volumes' do + values = { + hostPathMounts: [ + { + name: "data", + enabled: true, + setPermissions: true, + mountPath: "/data", + hostPath: "/tmp1" + }, + { + name: "config", + enabled: true, + setPermissions: true, + mountPath: "/config", + hostPath: "/tmp2" + } + ] + } + chart.value values + job = chart.resources(kind: "Job").first + volumes = job["spec"]["template"]["spec"]["volumes"] + + volume = volumes.find{ |v| v["name"] == "hostpathmounts-data"} + refute_nil(volume) + assert_equal('/tmp1', volume["hostPath"]["path"]) + + volume = volumes.find{ |v| v["name"] == "hostpathmounts-config"} + refute_nil(volume) + assert_equal('/tmp2', volume["hostPath"]["path"]) + end + + it 'emptyDir can be enabled' do + values = { + hostPathMounts: [ + { + name: "data", + enabled: true, + setPermissions: true, + emptyDir: true, + mountPath: "/data" + } + ] + } + chart.value values + job = chart.resources(kind: "Job").first + volumes = job["spec"]["template"]["spec"]["volumes"] + volume = volumes.find{ |v| v["name"] == "hostpathmounts-data"} + refute_nil(volume) + assert_equal(Hash.new, volume["emptyDir"]) + end + + it 'can process default (568:568) permissions for multiple volumes' do + results= { + command: ["/bin/sh", "-c", "chown -R 568:568 /data +chown -R 568:568 /config +"] + } + values = { + hostPathMounts: [ + { + name: "data", + enabled: true, + setPermissions: true, + mountPath: "/data", + hostPath: "/tmp1" + }, + { + name: "config", + enabled: true, + setPermissions: true, + mountPath: "/config", + hostPath: "/tmp2" + } + ] + } + chart.value values + job = chart.resources(kind: "Job").first + mainContainer = job["spec"]["template"]["spec"]["containers"][0] + assert_equal(results[:command], mainContainer["command"]) + end + + it 'outputs default permissions with irrelevant podSecurityContext' do + results= { + command: ["/bin/sh", "-c", "chown -R 568:568 /data +chown -R 568:568 /config +"] + } + values = { + podSecurityContext: { + allowPrivilegeEscalation: false + }, + hostPathMounts: [ + { + name: "data", + enabled: true, + setPermissions: true, + mountPath: "/data", + hostPath: "/tmp1" + }, + { + name: "config", + enabled: true, + setPermissions: true, + mountPath: "/config", + hostPath: "/tmp2" + } + ] + } + chart.value values + job = chart.resources(kind: "Job").first + mainContainer = job["spec"]["template"]["spec"]["containers"][0] + assert_equal(results[:command], mainContainer["command"]) + end + + it 'outputs fsgroup permissions for multiple volumes when set' do + results= { + command: ["/bin/sh", "-c", "chown -R 568:666 /data +chown -R 568:666 /config +"] + } + values = { + podSecurityContext: { + fsGroup: 666 + }, + hostPathMounts: [ + { + name: "data", + enabled: true, + setPermissions: true, + mountPath: "/data", + hostPath: "/tmp1" + }, + { + name: "config", + enabled: true, + setPermissions: true, + mountPath: "/config", + hostPath: "/tmp2" + } + ] + } + chart.value values + job = chart.resources(kind: "Job").first + mainContainer = job["spec"]["template"]["spec"]["containers"][0] + assert_equal(results[:command], mainContainer["command"]) + end + + it 'outputs runAsUser permissions for multiple volumes when set' do + results= { + command: ["/bin/sh", "-c", "chown -R 999:568 /data +chown -R 999:568 /config +"] + } + values = { + podSecurityContext: { + runAsUser: 999 + }, + hostPathMounts: [ + { + name: "data", + enabled: true, + setPermissions: true, + mountPath: "/data", + hostPath: "/tmp1" + }, + { + name: "config", + enabled: true, + setPermissions: true, + mountPath: "/config", + hostPath: "/tmp2" + } + ] + } + chart.value values + job = chart.resources(kind: "Job").first + mainContainer = job["spec"]["template"]["spec"]["containers"][0] + assert_equal(results[:command], mainContainer["command"]) + end + + it 'outputs fsGroup AND runAsUser permissions for multiple volumes when both are set' do + results= { + command: ["/bin/sh", "-c", "chown -R 999:666 /data +chown -R 999:666 /config +"] + } + values = { + podSecurityContext: { + fsGroup: 666, + runAsUser: 999 + }, + hostPathMounts: [ + { + name: "data", + enabled: true, + setPermissions: true, + mountPath: "/data", + hostPath: "/tmp1" + }, + { + name: "config", + enabled: true, + setPermissions: true, + mountPath: "/config", + hostPath: "/tmp2" + } + ] + } + chart.value values + job = chart.resources(kind: "Job").first + mainContainer = job["spec"]["template"]["spec"]["containers"][0] + assert_equal(results[:command], mainContainer["command"]) + end + it 'outputs PUID AND PGID permissions for multiple volumes when both are set' do + results= { + command: ["/bin/sh", "-c", "chown -R 999:666 /data +chown -R 999:666 /config +"] + } + values = { + env: { + PGID: 666, + PUID: 999 + }, + hostPathMounts: [ + { + name: "data", + enabled: true, + setPermissions: true, + mountPath: "/data", + hostPath: "/tmp1" + }, + { + name: "config", + enabled: true, + setPermissions: true, + mountPath: "/config", + hostPath: "/tmp2" + } + ] + } + chart.value values + job = chart.resources(kind: "Job").first + mainContainer = job["spec"]["template"]["spec"]["containers"][0] + assert_equal(results[:command], mainContainer["command"]) + end + end + end +end diff --git a/tests/library/common/pod_spec.rb b/tests/library/common/pod_spec.rb new file mode 100644 index 00000000000..65657c979f4 --- /dev/null +++ b/tests/library/common/pod_spec.rb @@ -0,0 +1,316 @@ +# frozen_string_literal: true +require_relative '../../test_helper' + +class Test < ChartTest + @@chart = Chart.new('charts/library/common-test') + + describe @@chart.name do + describe 'pod::replicas' do + it 'defaults to 1' do + deployment = chart.resources(kind: "Deployment").first + assert_equal(1, deployment["spec"]["replicas"]) + end + + it 'accepts integer as value' do + chart.value replicas: 3 + deployment = chart.resources(kind: "Deployment").first + assert_equal(3, deployment["spec"]["replicas"]) + end + end + + describe 'pod::hostNetwork' do + it 'defaults to nil' do + deployment = chart.resources(kind: "Deployment").first + assert_nil(deployment["spec"]["template"]["spec"]["hostNetwork"]) + end + + it 'can be enabled' do + values = { + hostNetwork: true + } + chart.value values + deployment = chart.resources(kind: "Deployment").first + assert_equal(true, deployment["spec"]["template"]["spec"]["hostNetwork"]) + end + end + + describe 'pod::dnsPolicy' do + it 'defaults to "ClusterFirst" without hostNetwork' do + deployment = chart.resources(kind: "Deployment").first + assert_equal("ClusterFirst", deployment["spec"]["template"]["spec"]["dnsPolicy"]) + end + + it 'defaults to "ClusterFirst" when hostNetwork: false' do + values = { + hostNetwork: false + } + chart.value values + deployment = chart.resources(kind: "Deployment").first + assert_equal("ClusterFirst", deployment["spec"]["template"]["spec"]["dnsPolicy"]) + end + + it 'defaults to "ClusterFirstWithHostNet" when hostNetwork: true' do + values = { + hostNetwork: true + } + chart.value values + deployment = chart.resources(kind: "Deployment").first + assert_equal("ClusterFirstWithHostNet", deployment["spec"]["template"]["spec"]["dnsPolicy"]) + end + + it 'accepts manual override' do + values = { + dnsPolicy: "None" + } + chart.value values + deployment = chart.resources(kind: "Deployment").first + assert_equal("None", deployment["spec"]["template"]["spec"]["dnsPolicy"]) + end + end + + describe 'pod::additional containers' do + it 'accepts static additionalContainers' do + values = { + additionalContainers: [ + { + name: "template-test" + } + ] + } + chart.value values + deployment = chart.resources(kind: "Deployment").first + containers = deployment["spec"]["template"]["spec"]["containers"] + additionalContainer = containers.find{ |c| c["name"] == values[:additionalContainers][0][:name] } + refute_nil(additionalContainer) + end + + it 'accepts "Dynamic/Tpl" additionalContainers' do + expectedContainerName = "common-test-container" + values = { + additionalContainers: [ + { + name: "{{ .Release.Name }}-container", + } + ] + } + chart.value values + deployment = chart.resources(kind: "Deployment").first + containers = deployment["spec"]["template"]["spec"]["containers"] + additionalContainer = containers.find{ |c| c["name"] == expectedContainerName } + refute_nil(additionalContainer) + end + end + + describe 'pod::persistence' do + it 'multiple volumes' do + values = { + persistence: { + cache: { + enabled: true, + emptyDir: { + enabled: true + } + }, + config: { + enabled: true, + existingClaim: "configClaim", + emptyDir: { + enabled: false + } + }, + data: { + enabled: true, + existingClaim: "dataClaim" + } + } + } + chart.value values + deployment = chart.resources(kind: "Deployment").first + volumes = deployment["spec"]["template"]["spec"]["volumes"] + + volume = volumes.find{ |v| v["name"] == "cache"} + refute_nil(volume) + + volume = volumes.find{ |v| v["name"] == "config"} + refute_nil(volume) + assert_equal('configClaim', volume["persistentVolumeClaim"]["claimName"]) + + volume = volumes.find{ |v| v["name"] == "data"} + refute_nil(volume) + assert_equal('dataClaim', volume["persistentVolumeClaim"]["claimName"]) + end + + it 'default nameSuffix' do + values = { + persistence: { + config: { + enabled: true, + emptyDir: { + enabled: false + } + } + } + } + chart.value values + deployment = chart.resources(kind: "Deployment").first + volumes = deployment["spec"]["template"]["spec"]["volumes"] + volume = volumes.find{ |v| v["name"] == "config"} + refute_nil(volume) + assert_equal('common-test-config', volume["persistentVolumeClaim"]["claimName"]) + end + + it 'custom nameSuffix' do + values = { + persistence: { + config: { + enabled: true, + nameSuffix: "test", + emptyDir: { + enabled: false + } + } + } + } + chart.value values + deployment = chart.resources(kind: "Deployment").first + volumes = deployment["spec"]["template"]["spec"]["volumes"] + volume = volumes.find{ |v| v["name"] == "config"} + refute_nil(volume) + assert_equal('common-test-test', volume["persistentVolumeClaim"]["claimName"]) + end + + it 'no nameSuffix' do + values = { + persistence: { + config: { + enabled: true, + nameSuffix: "-", + emptyDir: { + enabled: false + } + } + } + } + chart.value values + deployment = chart.resources(kind: "Deployment").first + volumes = deployment["spec"]["template"]["spec"]["volumes"] + volume = volumes.find{ |v| v["name"] == "config"} + refute_nil(volume) + assert_equal('common-test', volume["persistentVolumeClaim"]["claimName"]) + end + end + + describe 'pod::persistence::emptyDir' do + it 'can be configured' do + values = { + persistence: { + config: { + enabled: true, + emptyDir: { + enabled: true + } + } + } + } + chart.value values + deployment = chart.resources(kind: "Deployment").first + volumes = deployment["spec"]["template"]["spec"]["volumes"] + volume = volumes.find{ |v| v["name"] == "config"} + refute_nil(volume) + assert_equal(Hash.new, volume["emptyDir"]) + end + + it 'medium can be configured' do + values = { + persistence: { + config: { + enabled: true, + emptyDir: { + enabled: true, + medium: "memory" + } + } + } + } + chart.value values + deployment = chart.resources(kind: "Deployment").first + volumes = deployment["spec"]["template"]["spec"]["volumes"] + volume = volumes.find{ |v| v["name"] == "config"} + refute_nil(volume) + assert_equal("memory", volume["emptyDir"]["medium"]) + end + + it 'sizeLimit can be configured' do + values = { + persistence: { + config: { + enabled: true, + emptyDir: { + enabled: true, + medium: "memory", + sizeLimit: "1Gi" + } + } + } + } + chart.value values + deployment = chart.resources(kind: "Deployment").first + volumes = deployment["spec"]["template"]["spec"]["volumes"] + volume = volumes.find{ |v| v["name"] == "config"} + refute_nil(volume) + assert_equal("1Gi", volume["emptyDir"]["sizeLimit"]) + end + end + + describe 'pod::hostPathMounts' do + it 'multiple volumes' do + values = { + hostPathMounts: [ + { + name: "data", + enabled: true, + mountPath: "/data", + hostPath: "/tmp1" + }, + { + name: "config", + enabled: true, + mountPath: "/config", + hostPath: "/tmp2" + } + ] + } + chart.value values + deployment = chart.resources(kind: "Deployment").first + volumes = deployment["spec"]["template"]["spec"]["volumes"] + + volume = volumes.find{ |v| v["name"] == "hostpathmounts-data"} + refute_nil(volume) + assert_equal('/tmp1', volume["hostPath"]["path"]) + + volume = volumes.find{ |v| v["name"] == "hostpathmounts-config"} + refute_nil(volume) + assert_equal('/tmp2', volume["hostPath"]["path"]) + end + + it 'emptyDir can be enabled' do + values = { + hostPathMounts: [ + { + name: "data", + enabled: true, + emptyDir: true, + mountPath: "/data" + } + ] + } + chart.value values + deployment = chart.resources(kind: "Deployment").first + volumes = deployment["spec"]["template"]["spec"]["volumes"] + volume = volumes.find{ |v| v["name"] == "hostpathmounts-data"} + refute_nil(volume) + assert_equal(Hash.new, volume["emptyDir"]) + end + end + end +end diff --git a/tests/library/common/portal_spec.rb b/tests/library/common/portal_spec.rb new file mode 100644 index 00000000000..8a76e4419fd --- /dev/null +++ b/tests/library/common/portal_spec.rb @@ -0,0 +1,313 @@ +# frozen_string_literal: true +require_relative '../../test_helper' + +class Test < ChartTest + @@chart = Chart.new('charts/library/common-test') + + describe @@chart.name do + describe 'configmap::portal-defaults' do + it 'no configmap exists by default' do + configmap = chart.resources(kind: "ConfigMap").first + assert_nil(configmap) + end + + it 'creates configmap whe enabled' do + values = { + portal: { + enabled: true + } + } + chart.value values + configmap = chart.resources(kind: "ConfigMap").first + refute_nil(configmap) + end + + it 'is named "portal"' do + values = { + portal: { + enabled: true + } + } + chart.value values + configmap = chart.resources(kind: "ConfigMap").first + assert_equal("portal", configmap["metadata"]["name"]) + end + + it 'uses "$node_ip" by default' do + values = { + portal: { + enabled: true + }, + ingress: { + main: { + enabled: false + } + } + } + chart.value values + configmap = chart.resources(kind: "ConfigMap").first + assert_equal("$node_ip", configmap["data"]["host"]) + end + + it 'uses port "443" by default' do + values = { + portal: { + enabled: true + }, + ingress: { + main: { + enabled: false + } + } + } + chart.value values + configmap = chart.resources(kind: "ConfigMap").first + assert_equal("443", configmap["data"]["port"]) + end + + it 'uses protocol "https" by default' do + values = { + portal: { + enabled: true + }, + ingress: { + main: { + enabled: false + } + } + } + chart.value values + configmap = chart.resources(kind: "ConfigMap").first + assert_equal("https", configmap["data"]["protocol"]) + end + + it 'uses path "/" by default' do + values = { + portal: { + enabled: true + }, + ingress: { + main: { + enabled: false + } + } + } + chart.value values + configmap = chart.resources(kind: "ConfigMap").first + assert_equal("/", configmap["data"]["path"]) + end + end + + describe 'configmap::portal-overrides' do + it 'ingressPort can be overridden' do + values = { + portal: { + enabled: true, + ingressPort: "666" + }, + ingress: { + main: { + enabled: true + } + } + } + chart.value values + configmap = chart.resources(kind: "ConfigMap").first + assert_equal(values[:portal][:ingressPort], configmap["data"]["port"]) + end + + it 'nodePort Host can be overridden' do + values = { + portal: { + enabled: true, + host: "test.host" + }, + ingress: { + main: { + enabled: false + } + } + } + chart.value values + configmap = chart.resources(kind: "ConfigMap").first + assert_equal(values[:portal][:host], configmap["data"]["host"]) + end + + it 'path can be overridden' do + values = { + portal: { + enabled: true, + path: "/path" + }, + ingress: { + main: { + enabled: false + } + } + } + chart.value values + configmap = chart.resources(kind: "ConfigMap").first + assert_equal(values[:portal][:path], configmap["data"]["path"]) + end + end + + describe 'configmap::portal-nodePort' do + it 'nodePort host defaults to "$node_ip"' do + values = { + portal: { + enabled: true + }, + ingress: { + main: { + enabled: false + } + }, + services: { + main: { + type: "NodePort", + port: { + nodePort: 666 + } + } + } + } + chart.value values + configmap = chart.resources(kind: "ConfigMap").first + assert_equal("$node_ip", configmap["data"]["host"]) + end + + it 'nodePort port defaults to the nodePort' do + values = { + portal: { + enabled: true + }, + ingress: { + main: { + enabled: false + } + }, + services: { + main: { + type: "NodePort", + port: { + nodePort: 666 + } + } + } + } + chart.value values + configmap = chart.resources(kind: "ConfigMap").first + assert_equal("666", configmap["data"]["port"]) + end + + it 'uses nodeport port protocol as protocol (HTTPS)' do + values = { + portal: { + enabled: true + }, + ingress: { + main: { + enabled: false + } + }, + services: { + main: { + type: "NodePort", + port: { + nodePort: 666, + protocol: "HTTPS" + } + } + } + } + chart.value values + configmap = chart.resources(kind: "ConfigMap").first + assert_equal(values[:services][:main][:port][:protocol], configmap["data"]["protocol"]) + end + + it 'uses nodeport port protocol as protocol (HTTP)' do + values = { + portal: { + enabled: true + }, + ingress: { + main: { + enabled: false + } + }, + services: { + main: { + type: "NodePort", + port: { + nodePort: 666, + protocol: "HTTP" + } + } + } + } + chart.value values + configmap = chart.resources(kind: "ConfigMap").first + assert_equal(values[:services][:main][:port][:protocol], configmap["data"]["protocol"]) + end + end + + describe 'configmap::portal-Ingress' do + it 'uses ingress host' do + values = { + portal: { + enabled: true + }, + ingress: { + main: { + enabled: true, + hosts: [ + { + host: "test.domain", + paths: + [ + { + path: "/test" + } + ] + + } + ] + } + } + } + chart.value values + chart.value values + configmap = chart.resources(kind: "ConfigMap").first + assert_equal("test.domain", configmap["data"]["host"]) + end + + it 'uses ingress path' do + values = { + portal: { + enabled: true + }, + ingress: { + main: { + enabled: true, + hosts: [ + { + host: "test.domain", + paths: + [ + { + path: "/test" + } + ] + + } + ] + } + } + } + chart.value values + configmap = chart.resources(kind: "ConfigMap").first + assert_equal("/test", configmap["data"]["path"]) + end + end + end +end diff --git a/tests/library/common/pvc_spec.rb b/tests/library/common/pvc_spec.rb new file mode 100644 index 00000000000..2baede12708 --- /dev/null +++ b/tests/library/common/pvc_spec.rb @@ -0,0 +1,110 @@ +# frozen_string_literal: true +require_relative '../../test_helper' + +class Test < ChartTest + @@chart = Chart.new('charts/library/common-test') + + describe @@chart.name do + describe 'pvc' do + it 'nameSuffix defaults to persistence key' do + values = { + persistence: { + config: { + enabled: true + } + } + } + chart.value values + pvc = chart.resources(kind: "PersistentVolumeClaim").find{ |s| s["metadata"]["name"] == "common-test-config" } + refute_nil(pvc) + end + + it 'nameSuffix can be overridden' do + values = { + persistence: { + config: { + enabled: true, + nameSuffix: 'customSuffix' + } + } + } + chart.value values + pvc = chart.resources(kind: "PersistentVolumeClaim").find{ |s| s["metadata"]["name"] == "common-test-customSuffix" } + refute_nil(pvc) + end + + it 'name can be overridden by nameOverride' do + values = { + persistence: { + config: { + enabled: true, + nameOverride: 'customname' + } + } + } + chart.value values + pvc = chart.resources(kind: "PersistentVolumeClaim").find{ |s| s["metadata"]["name"] == "customname" } + refute_nil(pvc) + end + + it 'nameSuffix can be skipped' do + values = { + persistence: { + config: { + enabled: true, + nameSuffix: '-' + } + } + } + chart.value values + pvc = chart.resources(kind: "PersistentVolumeClaim").find{ |s| s["metadata"]["name"] == "common-test" } + refute_nil(pvc) + end + + it 'storageClass can be set' do + values = { + persistence: { + config: { + enabled: true, + storageClass: "test" + } + } + } + chart.value values + pvc = chart.resources(kind: "PersistentVolumeClaim").find{ |s| s["metadata"]["name"] == "common-test-config" } + refute_nil(pvc) + assert_equal('test', pvc["spec"]["storageClassName"]) + end + + it 'can generate TrueNAS SCALE zfs storageClass' do + values = { + persistence: { + config: { + enabled: true, + storageClass: "SCALE-ZFS" + } + } + } + chart.value values + pvc = chart.resources(kind: "PersistentVolumeClaim").find{ |s| s["metadata"]["name"] == "common-test-config" } + refute_nil(pvc) + assert_equal('ix-storage-class-common-test', pvc["spec"]["storageClassName"]) + end + + it 'storageClass can be set to an empty value' do + values = { + persistence: { + config: { + enabled: true, + storageClass: "-" + } + } + } + chart.value values + pvc = chart.resources(kind: "PersistentVolumeClaim").find{ |s| s["metadata"]["name"] == "common-test-config" } + refute_nil(pvc) + assert_equal('', pvc["spec"]["storageClassName"]) + end + end + end +end diff --git a/tests/library/common/service_spec.rb b/tests/library/common/service_spec.rb new file mode 100644 index 00000000000..e17952c5417 --- /dev/null +++ b/tests/library/common/service_spec.rb @@ -0,0 +1,223 @@ +# frozen_string_literal: true +require_relative '../../test_helper' + +class Test < ChartTest + @@chart = Chart.new('charts/library/common-test') + + describe @@chart.name do + describe 'service::ports settings' do + default_name = 'main' + default_port = 8080 + + it 'defaults to name "servicename" on port 8080' do + service = chart.resources(kind: "Service").find{ |s| s["metadata"]["name"] == "common-test" } + refute_nil(service) + assert_equal(default_port, service["spec"]["ports"].first["port"]) + assert_equal(default_name, service["spec"]["ports"].first["targetPort"]) + assert_equal(default_name, service["spec"]["ports"].first["name"]) + + deployment = chart.resources(kind: "Deployment").first + containers = deployment["spec"]["template"]["spec"]["containers"] + mainContainer = containers.find{ |c| c["name"] == "common-test" } + assert_equal(default_port, mainContainer["ports"].first["containerPort"]) + assert_equal(default_name, mainContainer["ports"].first["name"]) + end + + it 'port name can be overridden' do + values = { + services: { + main: { + port: { + name: "server", + }, + }, + }, + } + chart.value values + service = chart.resources(kind: "Service").find{ |s| s["metadata"]["name"] == "common-test" } + refute_nil(service) + assert_equal(default_port, service["spec"]["ports"].first["port"]) + assert_equal(values[:services][:main][:port][:name], service["spec"]["ports"].first["targetPort"]) + assert_equal(values[:services][:main][:port][:name], service["spec"]["ports"].first["name"]) + + deployment = chart.resources(kind: "Deployment").first + containers = deployment["spec"]["template"]["spec"]["containers"] + mainContainer = containers.find{ |c| c["name"] == "common-test" } + assert_equal(default_port, mainContainer["ports"].first["containerPort"]) + assert_equal(values[:services][:main][:port][:name], mainContainer["ports"].first["name"]) + end + + it 'targetPort can be overridden' do + values = { + services: { + main: { + port: { + targetPort: 80, + }, + }, + }, + } + chart.value values + service = chart.resources(kind: "Service").find{ |s| s["metadata"]["name"] == "common-test" } + refute_nil(service) + assert_equal(default_port, service["spec"]["ports"].first["port"]) + assert_equal(values[:services][:main][:port][:targetPort], service["spec"]["ports"].first["targetPort"]) + assert_equal(default_name, service["spec"]["ports"].first["name"]) + + deployment = chart.resources(kind: "Deployment").first + containers = deployment["spec"]["template"]["spec"]["containers"] + mainContainer = containers.find{ |c| c["name"] == "common-test" } + assert_equal(values[:services][:main][:port][:targetPort], mainContainer["ports"].first["containerPort"]) + assert_equal(default_name, mainContainer["ports"].first["name"]) + end + + it 'targetPort cannot be a named port' do + values = { + services: { + main: { + port: { + targetPort: "test", + }, + }, + }, + } + chart.value values + exception = assert_raises HelmCompileError do + chart.execute_helm_template! + end + assert_match("Our charts do not support named ports for targetPort. (port name #{default_name}, targetPort #{values[:services][:main][:port][:targetPort]})", exception.message) + end + + it 'protocol defaults to TCP' do + service = chart.resources(kind: "Service").find{ |s| s["metadata"]["name"] == "common-test" } + refute_nil(service) + assert_equal("TCP", service["spec"]["ports"].first["protocol"]) + + deployment = chart.resources(kind: "Deployment").first + containers = deployment["spec"]["template"]["spec"]["containers"] + mainContainer = containers.find{ |c| c["name"] == "common-test" } + assert_equal("TCP", mainContainer["ports"].first["protocol"]) + end + + it 'protocol is TCP when set to TCP explicitly' do + values = { + services: { + main: { + port: { + protocol: "TCP", + }, + }, + }, + } + chart.value values + service = chart.resources(kind: "Service").find{ |s| s["metadata"]["name"] == "common-test" } + refute_nil(service) + assert_equal("TCP", service["spec"]["ports"].first["protocol"]) + + deployment = chart.resources(kind: "Deployment").first + containers = deployment["spec"]["template"]["spec"]["containers"] + mainContainer = containers.find{ |c| c["name"] == "common-test" } + assert_equal("TCP", mainContainer["ports"].first["protocol"]) + end + + it 'protocol is TCP when set to HTTP explicitly' do + values = { + services: { + main: { + port: { + protocol: "HTTP", + }, + }, + }, + } + chart.value values + service = chart.resources(kind: "Service").find{ |s| s["metadata"]["name"] == "common-test" } + refute_nil(service) + assert_equal("TCP", service["spec"]["ports"].first["protocol"]) + + deployment = chart.resources(kind: "Deployment").first + containers = deployment["spec"]["template"]["spec"]["containers"] + mainContainer = containers.find{ |c| c["name"] == "common-test" } + assert_equal("TCP", mainContainer["ports"].first["protocol"]) + end + + it 'protocol is TCP when set to HTTPS explicitly' do + values = { + services: { + main: { + port: { + protocol: "HTTPS", + }, + }, + }, + } + chart.value values + service = chart.resources(kind: "Service").find{ |s| s["metadata"]["name"] == "common-test" } + refute_nil(service) + assert_equal("TCP", service["spec"]["ports"].first["protocol"]) + + deployment = chart.resources(kind: "Deployment").first + containers = deployment["spec"]["template"]["spec"]["containers"] + mainContainer = containers.find{ |c| c["name"] == "common-test" } + assert_equal("TCP", mainContainer["ports"].first["protocol"]) + end + + it 'protocol is UDP when set to UDP explicitly' do + values = { + services: { + main: { + port: { + protocol: "UDP", + }, + }, + }, + } + chart.value values + service = chart.resources(kind: "Service").find{ |s| s["metadata"]["name"] == "common-test" } + refute_nil(service) + assert_equal("UDP", service["spec"]["ports"].first["protocol"]) + + deployment = chart.resources(kind: "Deployment").first + containers = deployment["spec"]["template"]["spec"]["containers"] + mainContainer = containers.find{ |c| c["name"] == "common-test" } + assert_equal("UDP", mainContainer["ports"].first["protocol"]) + end + + it 'No annotations get set by default' do + service = chart.resources(kind: "Service").find{ |s| s["metadata"]["name"] == "common-test" } + refute_nil(service) + assert_nil(service["metadata"]["annotations"]) + end + it 'TCP port protocol does not set annotations' do + values = { + services: { + main: { + port: { + protocol: 'TCP' + } + } + } + } + chart.value values + service = chart.resources(kind: "Service").find{ |s| s["metadata"]["name"] == "common-test" } + refute_nil(service) + assert_nil(service["metadata"]["annotations"]) + end + it 'HTTPS port protocol sets traefik HTTPS annotation' do + values = { + services: { + main: { + port: { + protocol: 'HTTPS' + } + } + } + } + chart.value values + service = chart.resources(kind: "Service").find{ |s| s["metadata"]["name"] == "common-test" } + refute_nil(service) + assert_equal("https", service["metadata"]["annotations"]["traefik.ingress.kubernetes.io/service.serversscheme"]) + end + end + end +end diff --git a/tests/test_helper.rb b/tests/test_helper.rb new file mode 100644 index 00000000000..6170486bdbb --- /dev/null +++ b/tests/test_helper.rb @@ -0,0 +1,146 @@ +# frozen_string_literal: true + +require 'json' +require 'yaml' +require 'open3' + +require 'minitest-implicit-subject' +require "minitest/reporters" +require 'minitest/autorun' +require 'minitest/pride' + +class HelmCompileError < StandardError +end + +class HelmDepsError < StandardError +end + +class Chart + attr_reader :name, :path, :values + + def initialize(chart) + @name = chart.split('/').last + + @path = File.expand_path(chart) + + @values = default_values + + update_deps! + end + + def update_deps! + command = "helm dep update '#{path}'" + stdout, stderr, status = Open3.capture3(command) + raise HelmDepsError, stderr if status != 0 + end + + def reset! + @values = default_values + @parsed_resources = nil + end + + def value(value) + values.merge!(value) + end + + def configure_custom_name(name) + @name = name + end + + def execute_helm_template! + file = Tempfile.new(name) + file.write(JSON.parse(values.to_json).to_yaml) + file.close + + begin + command = "helm template '#{name}' '#{path}' --namespace='default' --values='#{file.path}'" + stdout, stderr, status = Open3.capture3(command) + + raise HelmCompileError, stderr if status != 0 + + stdout + ensure + file.unlink + end + end + + def parsed_resources + @parsed_resources ||= begin + output = execute_helm_template! + puts output if ENV.fetch('DEBUG', 'false') == 'true' + YAML.load_stream(output) + end + end + + def resources(matcher = nil) + return parsed_resources unless matcher + + parsed_resources.select do |r| + r >= Hash[matcher.map { |k, v| [k.to_s, v] }] + end + end + + def default_values + { + } + end +end + +class ExtendedMinitest < Minitest::Test + extend MiniTest::Spec::DSL +end + +class ChartTest < ExtendedMinitest + Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new + + before do + chart.reset! + end + + def chart + self.class.class_variable_get('@@chart') + end + + def resource(name) + chart.resources(kind: name).first + end +end + +class Minitest::Result + def name + test_name = defined?(@name) ? @name : super + test_name.to_s.gsub /\Atest_\d{4,}_/, "" + end +end + +class ::Hash + def deep_merge_override(second) + merger = proc do |key, original, override| + if original.instance_of?(Hash) && override.instance_of?(Hash) + original.merge(override, &merger) + else + if original.instance_of?(Array) && override.instance_of?(Array) + # if the lengths are different, prefer the override + if original.length != override.length + override + else + # if the first element in the override's Array is a Hash, then we assume they all are + if override[0].instance_of?(Hash) + original.map.with_index do |v, i| + # deep merge everything between the two arrays + original[i].merge(override[i], &merger) + end + else + # if we don't have a Hash in the override, + # override the whole array with our new one + override + end + end + else + override + end + end + end + self.merge(second.to_h, &merger) + end +end