From 2dca1c3999fe25794a82280f1705c60f28abdd8b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Dec 2023 17:18:41 +0600 Subject: [PATCH 01/42] Bump k8s.io/kubectl from 0.28.3 to 0.28.4 (#232) Bumps [k8s.io/kubectl](https://github.com/kubernetes/kubectl) from 0.28.3 to 0.28.4. - [Commits](https://github.com/kubernetes/kubectl/compare/v0.28.3...v0.28.4) --- updated-dependencies: - dependency-name: k8s.io/kubectl dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 61ecfab7..bbb77185 100644 --- a/go.mod +++ b/go.mod @@ -24,7 +24,7 @@ require ( k8s.io/apimachinery v0.28.4 k8s.io/cli-runtime v0.28.4 k8s.io/client-go v0.28.4 - k8s.io/kubectl v0.28.3 + k8s.io/kubectl v0.28.4 sigs.k8s.io/controller-runtime v0.16.3 ) diff --git a/go.sum b/go.sum index 97d01fd6..484a920b 100644 --- a/go.sum +++ b/go.sum @@ -856,14 +856,14 @@ k8s.io/cli-runtime v0.28.4 h1:IW3aqSNFXiGDllJF4KVYM90YX4cXPGxuCxCVqCD8X+Q= k8s.io/cli-runtime v0.28.4/go.mod h1:MLGRB7LWTIYyYR3d/DOgtUC8ihsAPA3P8K8FDNIqJ0k= k8s.io/client-go v0.28.4 h1:Np5ocjlZcTrkyRJ3+T3PkXDpe4UpatQxj85+xjaD2wY= k8s.io/client-go v0.28.4/go.mod h1:0VDZFpgoZfelyP5Wqu0/r/TRYcLYuJ2U1KEeoaPa1N4= -k8s.io/component-base v0.28.3 h1:rDy68eHKxq/80RiMb2Ld/tbH8uAE75JdCqJyi6lXMzI= -k8s.io/component-base v0.28.3/go.mod h1:fDJ6vpVNSk6cRo5wmDa6eKIG7UlIQkaFmZN2fYgIUD8= +k8s.io/component-base v0.28.4 h1:c/iQLWPdUgI90O+T9TeECg8o7N3YJTiuz2sKxILYcYo= +k8s.io/component-base v0.28.4/go.mod h1:m9hR0uvqXDybiGL2nf/3Lf0MerAfQXzkfWhUY58JUbU= k8s.io/klog/v2 v2.100.1 h1:7WCHKK6K8fNhTqfBhISHQ97KrnJNFZMcQvKp7gP/tmg= k8s.io/klog/v2 v2.100.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= k8s.io/kube-openapi v0.0.0-20230816210353-14e408962443 h1:CAIciCnJnSOQxPd0xvpV6JU3D4AJvnYbImPpFpO9Hnw= k8s.io/kube-openapi v0.0.0-20230816210353-14e408962443/go.mod h1:wZK2AVp1uHCp4VamDVgBP2COHZjqD1T68Rf0CM3YjSM= -k8s.io/kubectl v0.28.3 h1:H1Peu1O3EbN9zHkJCcvhiJ4NUj6lb88sGPO5wrWIM6k= -k8s.io/kubectl v0.28.3/go.mod h1:RDAudrth/2wQ3Sg46fbKKl4/g+XImzvbsSRZdP2RiyE= +k8s.io/kubectl v0.28.4 h1:gWpUXW/T7aFne+rchYeHkyB8eVDl5UZce8G4X//kjUQ= +k8s.io/kubectl v0.28.4/go.mod h1:CKOccVx3l+3MmDbkXtIUtibq93nN2hkDR99XDCn7c/c= k8s.io/utils v0.0.0-20230726121419-3b25d923346b h1:sgn3ZU783SCgtaSJjpcVVlRqd6GSnlTLKgpAAttJvpI= k8s.io/utils v0.0.0-20230726121419-3b25d923346b/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= From 1b35a7877b5b94244da27a0c10b5ec86b881d3de Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Dec 2023 17:19:16 +0600 Subject: [PATCH 02/42] Bump github.com/operator-framework/api from 0.19.0 to 0.20.0 (#230) Bumps [github.com/operator-framework/api](https://github.com/operator-framework/api) from 0.19.0 to 0.20.0. - [Release notes](https://github.com/operator-framework/api/releases) - [Changelog](https://github.com/operator-framework/api/blob/master/RELEASE.md) - [Commits](https://github.com/operator-framework/api/compare/v0.19.0...v0.20.0) --- updated-dependencies: - dependency-name: github.com/operator-framework/api dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index bbb77185..53414f4f 100644 --- a/go.mod +++ b/go.mod @@ -7,7 +7,7 @@ require ( github.com/dchest/uniuri v1.2.0 github.com/go-logr/zapr v1.3.0 github.com/hashicorp/go-version v1.6.0 - github.com/operator-framework/api v0.19.0 + github.com/operator-framework/api v0.20.0 github.com/operator-framework/operator-lifecycle-manager v0.26.0 github.com/percona/everest-operator v0.4.1-0.20231106102613-c61926d6c066 github.com/percona/percona-everest-backend v0.4.1-0.20231114121440-f3f3d38a6bfe diff --git a/go.sum b/go.sum index 484a920b..72afadcb 100644 --- a/go.sum +++ b/go.sum @@ -357,8 +357,8 @@ github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8 github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.1.0-rc2.0.20221005185240-3a7f492d3f1b h1:YWuSjZCQAPM8UUBLkYUk1e+rZcvWHJmFb6i6rM44Xs8= github.com/opencontainers/image-spec v1.1.0-rc2.0.20221005185240-3a7f492d3f1b/go.mod h1:3OVijpioIKYWTqjiG0zfF6wvoJ4fAXGbjdZuI2NgsRQ= -github.com/operator-framework/api v0.19.0 h1:QU1CTJU+CufoeneA5rsNlP/uP96s8vDHWUYDFZTauzA= -github.com/operator-framework/api v0.19.0/go.mod h1:SCCslqke6AVOJ5JM+NqNE1CHuAgJLScsL66pnPaSMXs= +github.com/operator-framework/api v0.20.0 h1:A2YCRhr+6s0k3pRJacnwjh1Ue8BqjIGuQ2jvPg9XCB4= +github.com/operator-framework/api v0.20.0/go.mod h1:rXPOhrQ6mMeXqCmpDgt1ALoar9ZlHL+Iy5qut9R99a4= github.com/operator-framework/operator-lifecycle-manager v0.26.0 h1:16vEJZ5gzMXlcvNlJBnLsEfa+8h5+mvp7/xHwj+u230= github.com/operator-framework/operator-lifecycle-manager v0.26.0/go.mod h1:uDY8iANE0neSPEYNsT/AE3fpuKS9OhgcKqKEBMhGO6A= github.com/operator-framework/operator-registry v1.30.1 h1:7XvISZrwi+j9z4MIiApRRU+K7v3qMXIcgBs88eQ724Q= From 9f24be6d3af477e72cc426031508333b7ba14614 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Dec 2023 17:19:32 +0600 Subject: [PATCH 03/42] Bump golang.org/x/crypto from 0.14.0 to 0.16.0 (#229) Bumps [golang.org/x/crypto](https://github.com/golang/crypto) from 0.14.0 to 0.16.0. - [Commits](https://github.com/golang/crypto/compare/v0.14.0...v0.16.0) --- updated-dependencies: - dependency-name: golang.org/x/crypto dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 8 ++++---- go.sum | 16 ++++++++-------- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/go.mod b/go.mod index 53414f4f..67211239 100644 --- a/go.mod +++ b/go.mod @@ -15,7 +15,7 @@ require ( github.com/spf13/viper v1.17.0 github.com/stretchr/testify v1.8.4 go.uber.org/zap v1.26.0 - golang.org/x/crypto v0.14.0 + golang.org/x/crypto v0.16.0 golang.org/x/sync v0.5.0 gopkg.in/yaml.v3 v3.0.1 gotest.tools v2.2.0+incompatible @@ -100,9 +100,9 @@ require ( golang.org/x/exp v0.0.0-20230905200255-921286631fa9 // indirect golang.org/x/net v0.17.0 // indirect golang.org/x/oauth2 v0.12.0 // indirect - golang.org/x/sys v0.13.0 // indirect - golang.org/x/term v0.13.0 // indirect - golang.org/x/text v0.13.0 // indirect + golang.org/x/sys v0.15.0 // indirect + golang.org/x/term v0.15.0 // indirect + golang.org/x/text v0.14.0 // indirect golang.org/x/time v0.3.0 // indirect google.golang.org/appengine v1.6.8 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20231002182017-d307bd883b97 // indirect diff --git a/go.sum b/go.sum index 72afadcb..d3948fa8 100644 --- a/go.sum +++ b/go.sum @@ -493,8 +493,8 @@ golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.14.0 h1:wBqGXzWJW6m1XrIKlAH0Hs1JJ7+9KBwnIO8v66Q9cHc= -golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= +golang.org/x/crypto v0.16.0 h1:mMMrFzRSCF0GvB7Ne27XVtVAaXLrPmgPC7/v0tkwHaY= +golang.org/x/crypto v0.16.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= 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= @@ -634,13 +634,13 @@ golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.13.0 h1:Af8nKPmuFypiUBjVoU9V20FiaFXOcuZI21p0ycVYYGE= -golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= +golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc= +golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.0.0-20220526004731-065cf7ba2467/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.13.0 h1:bb+I9cTfFazGW51MZqBVmZy7+JEJMouUHTUSKVQLBek= -golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U= +golang.org/x/term v0.15.0 h1:y/Oo/a/q3IXu26lQgl04j/gjuBDOBlx7X6Om1j2CPW4= +golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0= 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= @@ -651,8 +651,8 @@ golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.13.0 h1:ablQoSUd0tRdKxZewP80B+BaqeKJuVhuRxj/dkrun3k= -golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= +golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= +golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= 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= From 1f72cb29cb2d6aea73a5fe2d270fcebd7bff73cb Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Dec 2023 17:20:18 +0600 Subject: [PATCH 04/42] Bump golang.org/x/tools from 0.15.0 to 0.16.0 in /tools (#227) Bumps [golang.org/x/tools](https://github.com/golang/tools) from 0.15.0 to 0.16.0. - [Release notes](https://github.com/golang/tools/releases) - [Commits](https://github.com/golang/tools/compare/v0.15.0...v0.16.0) --- updated-dependencies: - dependency-name: golang.org/x/tools dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- tools/go.mod | 10 +++++----- tools/go.sum | 20 ++++++++++---------- 2 files changed, 15 insertions(+), 15 deletions(-) diff --git a/tools/go.mod b/tools/go.mod index 577acab6..265c92c7 100644 --- a/tools/go.mod +++ b/tools/go.mod @@ -10,7 +10,7 @@ require ( github.com/reviewdog/reviewdog v0.15.0 github.com/vburenin/ifacemaker v1.2.1 github.com/vektra/mockery/v2 v2.36.1 - golang.org/x/tools v0.15.0 + golang.org/x/tools v0.16.0 mvdan.cc/gofumpt v0.5.0 ) @@ -221,15 +221,15 @@ require ( go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.24.0 // indirect golang.org/x/build v0.0.0-20230905185615-7f65e2bc812a // indirect - golang.org/x/crypto v0.15.0 // indirect + golang.org/x/crypto v0.16.0 // indirect golang.org/x/exp v0.0.0-20230809094429-853ea248256d // indirect golang.org/x/exp/typeparams v0.0.0-20230522175609-2e198f4a06a1 // indirect golang.org/x/mod v0.14.0 // indirect - golang.org/x/net v0.18.0 // indirect + golang.org/x/net v0.19.0 // indirect golang.org/x/oauth2 v0.12.0 // indirect golang.org/x/sync v0.5.0 // indirect - golang.org/x/sys v0.14.0 // indirect - golang.org/x/term v0.14.0 // indirect + golang.org/x/sys v0.15.0 // indirect + golang.org/x/term v0.15.0 // indirect golang.org/x/text v0.14.0 // indirect golang.org/x/time v0.3.0 // indirect golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect diff --git a/tools/go.sum b/tools/go.sum index 83642e8d..f139357e 100644 --- a/tools/go.sum +++ b/tools/go.sum @@ -751,8 +751,8 @@ golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0 golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= -golang.org/x/crypto v0.15.0 h1:frVn1TEaCEaZcn3Tmd7Y2b5KKPaZ+I32Q2OA3kYp5TA= -golang.org/x/crypto v0.15.0/go.mod h1:4ChreQoLWfG3xLDer1WdlH5NdlQ3+mwnQq1YTKY+72g= +golang.org/x/crypto v0.16.0 h1:mMMrFzRSCF0GvB7Ne27XVtVAaXLrPmgPC7/v0tkwHaY= +golang.org/x/crypto v0.16.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= 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= @@ -848,8 +848,8 @@ golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= -golang.org/x/net v0.18.0 h1:mIYleuAkSbHh0tCv7RvjL3F6ZVbLjq4+R7zbOn3Kokg= -golang.org/x/net v0.18.0/go.mod h1:/czyP5RqHAH4odGYxBJ1qz0+CE5WZ+2j1YgoEo8F2jQ= +golang.org/x/net v0.19.0 h1:zTwKpTd2XuCqf8huc7Fo2iSy+4RHPd10s4KzeTnVr1c= +golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U= 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= @@ -943,8 +943,8 @@ golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.14.0 h1:Vz7Qs629MkJkGyHxUlRHizWJRG2j8fbQKjELVSNhy7Q= -golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc= +golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= @@ -953,8 +953,8 @@ golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= -golang.org/x/term v0.14.0 h1:LGK9IlZ8T9jvdy6cTdfKUCltatMFOehAQo9SRC46UQ8= -golang.org/x/term v0.14.0/go.mod h1:TySc+nGkYR6qt8km8wUhuFRTVSMIX3XPR58y2lC8vww= +golang.org/x/term v0.15.0 h1:y/Oo/a/q3IXu26lQgl04j/gjuBDOBlx7X6Om1j2CPW4= +golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0= 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= @@ -1044,8 +1044,8 @@ golang.org/x/tools v0.2.0/go.mod h1:y4OqIKeOV/fWJetJ8bXPU1sEVniLMIyDAZWeHdV+NTA= golang.org/x/tools v0.3.0/go.mod h1:/rWhSS2+zyEVwoJf8YAX6L2f0ntZ7Kn/mGgAWcipA5k= golang.org/x/tools v0.5.0/go.mod h1:N+Kgy78s5I24c24dU8OfWNEotWjutIs8SnJvn5IDq+k= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.15.0 h1:zdAyfUGbYmuVokhzVmghFl2ZJh5QhcfebBgmVPFYA+8= -golang.org/x/tools v0.15.0/go.mod h1:hpksKq4dtpQWS1uQ61JkdqWM3LscIS6Slf+VVkm+wQk= +golang.org/x/tools v0.16.0 h1:GO788SKMRunPIBCXiQyo2AaexLstOrVhuAL5YwsckQM= +golang.org/x/tools v0.16.0/go.mod h1:kYVVN6I1mBNoB1OX+noeBjbRk4IUEPa7JJ+TJMEooJ0= 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= From 6e81abe39add93b9abb5f88c0b3b17f53df80e29 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 4 Dec 2023 17:20:41 +0600 Subject: [PATCH 05/42] Bump k8s.io/apiextensions-apiserver from 0.28.3 to 0.28.4 (#228) Bumps [k8s.io/apiextensions-apiserver](https://github.com/kubernetes/apiextensions-apiserver) from 0.28.3 to 0.28.4. - [Release notes](https://github.com/kubernetes/apiextensions-apiserver/releases) - [Commits](https://github.com/kubernetes/apiextensions-apiserver/compare/v0.28.3...v0.28.4) --- updated-dependencies: - dependency-name: k8s.io/apiextensions-apiserver dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 67211239..291ee0aa 100644 --- a/go.mod +++ b/go.mod @@ -20,7 +20,7 @@ require ( gopkg.in/yaml.v3 v3.0.1 gotest.tools v2.2.0+incompatible k8s.io/api v0.28.4 - k8s.io/apiextensions-apiserver v0.28.3 + k8s.io/apiextensions-apiserver v0.28.4 k8s.io/apimachinery v0.28.4 k8s.io/cli-runtime v0.28.4 k8s.io/client-go v0.28.4 diff --git a/go.sum b/go.sum index d3948fa8..9e581983 100644 --- a/go.sum +++ b/go.sum @@ -846,12 +846,12 @@ honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9 honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= k8s.io/api v0.28.4 h1:8ZBrLjwosLl/NYgv1P7EQLqoO8MGQApnbgH8tu3BMzY= k8s.io/api v0.28.4/go.mod h1:axWTGrY88s/5YE+JSt4uUi6NMM+gur1en2REMR7IRj0= -k8s.io/apiextensions-apiserver v0.28.3 h1:Od7DEnhXHnHPZG+W9I97/fSQkVpVPQx2diy+2EtmY08= -k8s.io/apiextensions-apiserver v0.28.3/go.mod h1:NE1XJZ4On0hS11aWWJUTNkmVB03j9LM7gJSisbRt8Lc= +k8s.io/apiextensions-apiserver v0.28.4 h1:AZpKY/7wQ8n+ZYDtNHbAJBb+N4AXXJvyZx6ww6yAJvU= +k8s.io/apiextensions-apiserver v0.28.4/go.mod h1:pgQIZ1U8eJSMQcENew/0ShUTlePcSGFq6dxSxf2mwPM= k8s.io/apimachinery v0.28.4 h1:zOSJe1mc+GxuMnFzD4Z/U1wst50X28ZNsn5bhgIIao8= k8s.io/apimachinery v0.28.4/go.mod h1:wI37ncBvfAoswfq626yPTe6Bz1c22L7uaJ8dho83mgg= -k8s.io/apiserver v0.28.3 h1:8Ov47O1cMyeDzTXz0rwcfIIGAP/dP7L8rWbEljRcg5w= -k8s.io/apiserver v0.28.3/go.mod h1:YIpM+9wngNAv8Ctt0rHG4vQuX/I5rvkEMtZtsxW2rNM= +k8s.io/apiserver v0.28.4 h1:BJXlaQbAU/RXYX2lRz+E1oPe3G3TKlozMMCZWu5GMgg= +k8s.io/apiserver v0.28.4/go.mod h1:Idq71oXugKZoVGUUL2wgBCTHbUR+FYTWa4rq9j4n23w= k8s.io/cli-runtime v0.28.4 h1:IW3aqSNFXiGDllJF4KVYM90YX4cXPGxuCxCVqCD8X+Q= k8s.io/cli-runtime v0.28.4/go.mod h1:MLGRB7LWTIYyYR3d/DOgtUC8ihsAPA3P8K8FDNIqJ0k= k8s.io/client-go v0.28.4 h1:Np5ocjlZcTrkyRJ3+T3PkXDpe4UpatQxj85+xjaD2wY= From 6b5b35380d2e258e974ab27e04c47e28bdc8f7c0 Mon Sep 17 00:00:00 2001 From: Andrew Minkin Date: Wed, 6 Dec 2023 22:15:14 +0600 Subject: [PATCH 06/42] EVEREST-633 Multi environment support (#211) --- .github/workflows/ci.yml | 3 +- cli-tests/Makefile | 4 + cli-tests/tests/flow/all-operators.spec.ts | 21 +- cli-tests/tests/flow/mongodb-operator.spec.ts | 12 +- .../multi-namespace-mongo-operator.spec.ts | 105 +++++++ cli-tests/tests/flow/pg-operator.spec.ts | 19 +- cli-tests/tests/flow/pxc-operator.spec.ts | 11 +- cli-tests/tests/list/database-engines.spec.ts | 14 +- cli-tests/tests/version.spec.ts | 4 +- commands/delete/cluster.go | 2 - commands/install.go | 7 +- commands/uninstall.go | 2 +- commands/upgrade.go | 4 +- pkg/install/install.go | 274 +++++++++++++----- pkg/kubernetes/client/client.go | 85 +++--- pkg/kubernetes/client/kubeclient_interface.go | 10 +- .../client/mock_kube_client_connector.go | 251 +++++++++++----- pkg/kubernetes/kubernetes.go | 221 ++++++++++++-- pkg/kubernetes/olm_operator_test.go | 8 +- pkg/uninstall/uninstall.go | 34 +-- pkg/upgrade/upgrade.go | 84 ++++-- 21 files changed, 845 insertions(+), 330 deletions(-) create mode 100644 cli-tests/tests/flow/multi-namespace-mongo-operator.spec.ts diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 50c4c53a..524dce7b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -271,7 +271,8 @@ jobs: 'test-all-operators', 'test-mongo-operator', 'test-pg-operator', - 'test-pxc-operator' + 'test-pxc-operator', + 'multi-namespace-mongo-operator' ] name: CLI tests uses: ./.github/workflows/cli-tests.yml diff --git a/cli-tests/Makefile b/cli-tests/Makefile index 3e22c3b9..1462bdcb 100644 --- a/cli-tests/Makefile +++ b/cli-tests/Makefile @@ -5,6 +5,7 @@ init: ## Install dependencies install-operators: ## Install operators to k8s ../bin/everest install \ --skip-wizard \ + --namespace=testing \ --monitoring.enable=0 test-cli: ## Run all tests @@ -16,6 +17,9 @@ test-all-operators: ## Run mongo operator flow tests. Requires minikube in test-mongo-operator: ## Run mongo operator flow tests. Requires minikube installed and /etc/hosts updated npx playwright test tests/flow/mongodb-operator.spec.ts +multi-namespace-mongo-operator: ## Run mongo operator multi namespace flow tests. Requires minikube installed and /etc/hosts updated + npx playwright test tests/flow/multi-namespace-mongo-operator.spec.ts + test-pg-operator: ## Run pg operator flow tests. Requires minikube installed and /etc/hosts updated npx playwright test tests/flow/pg-operator.spec.ts diff --git a/cli-tests/tests/flow/all-operators.spec.ts b/cli-tests/tests/flow/all-operators.spec.ts index 6e57deb7..c3395572 100644 --- a/cli-tests/tests/flow/all-operators.spec.ts +++ b/cli-tests/tests/flow/all-operators.spec.ts @@ -18,7 +18,6 @@ import { faker } from '@faker-js/faker'; test.describe('Everest CLI install', async () => { test.beforeEach(async ({ cli }) => { - await cli.execute('docker-compose -f quickstart.yml up -d --force-recreate --renew-anon-volumes'); await cli.execute('minikube delete'); await cli.execute('minikube start'); // await cli.execute('minikube start --apiserver-name=host.docker.internal'); @@ -27,21 +26,25 @@ test.describe('Everest CLI install', async () => { test('install all operators', async ({ page, cli, request }) => { const verifyClusterResources = async () => { await test.step('verify installed operators in k8s', async () => { + const everest = await cli.exec('kubectl get pods --namespace=percona-everest'); + + await everest.outContainsNormalizedMany([ + 'percona-everest', + 'everest-operator-controller-manager', + ]); const out = await cli.exec('kubectl get pods --namespace=percona-everest-all'); await out.outContainsNormalizedMany([ 'percona-xtradb-cluster-operator', 'percona-server-mongodb-operator', 'percona-postgresql-operator', - 'everest-operator-controller-manager', ]); }); }; - const clusterName = `test-${faker.number.int()}`; await test.step('run everest install command', async () => { const out = await cli.everestExecSkipWizard( - `install --monitoring.enable=0 --name=${clusterName} --namespace=percona-everest-all`, + 'install --monitoring.enable=0 --namespace=percona-everest-all', ); await out.assertSuccess(); @@ -81,12 +84,13 @@ test.describe('Everest CLI install', async () => { }); await test.step('run everest install command using a different namespace', async () => { const install = await cli.everestExecSkipWizard( - `install --monitoring.enable=0 --namespace=different-everest`, + 'install --monitoring.enable=0 --namespace=different-everest --namespace=percona-everest-all', ); await install.assertSuccess(); - const out = await cli.exec('kubectl get clusterrolebinding everest-admin-cluster-role-binding -o yaml'); + const out = await cli.exec('kubectl get clusterrolebinding -n percona-everest everest-admin-cluster-role-binding -o yaml'); + await out.assertSuccess(); await out.outContainsNormalizedMany([ @@ -98,17 +102,16 @@ test.describe('Everest CLI install', async () => { await test.step('uninstall Everest', async () => { let out = await cli.everestExec( - `uninstall --namespace=percona-everest-all --assume-yes`, + 'uninstall --namespace=percona-everest-all --assume-yes', ); await out.assertSuccess(); // check that the deployment does not exist - out = await cli.exec('kubectl get deploy percona-everest -n percona-everest-all'); + out = await cli.exec('kubectl get deploy percona-everest -n percona-everest'); await out.outErrContainsNormalizedMany([ 'Error from server (NotFound): deployments.apps "percona-everest" not found', ]); - }); }); }); diff --git a/cli-tests/tests/flow/mongodb-operator.spec.ts b/cli-tests/tests/flow/mongodb-operator.spec.ts index 3cc7d960..c8c10340 100644 --- a/cli-tests/tests/flow/mongodb-operator.spec.ts +++ b/cli-tests/tests/flow/mongodb-operator.spec.ts @@ -27,24 +27,28 @@ test.describe('Everest CLI install', async () => { test('install only mongodb-operator', async ({ page, cli, request }) => { const verifyClusterResources = async () => { await test.step('verify installed operators in k8s', async () => { - const out = await cli.exec('kubectl get pods --namespace=percona-everest'); + let out = await cli.exec('kubectl get pods --namespace=percona-everest'); await out.outContainsNormalizedMany([ - 'percona-server-mongodb-operator', 'everest-operator-controller-manager', ]); + out = await cli.exec('kubectl get pods --namespace=testing'); + + await out.outContainsNormalizedMany([ + 'percona-server-mongodb-operator', + ]); + await out.outNotContains([ 'percona-postgresql-operator', 'percona-xtradb-cluster-operator', ]); }); }; - const clusterName = `test-${faker.number.int()}`; await test.step('run everest install command', async () => { const out = await cli.everestExecSkipWizard( - `install --operator.mongodb=true --operator.postgresql=false --operator.xtradb-cluster=false --monitoring.enable=0 --name=${clusterName}`, + 'install --operator.mongodb=true --operator.postgresql=false --operator.xtradb-cluster=false --monitoring.enable=0 --namespace=testing', ); await out.assertSuccess(); diff --git a/cli-tests/tests/flow/multi-namespace-mongo-operator.spec.ts b/cli-tests/tests/flow/multi-namespace-mongo-operator.spec.ts new file mode 100644 index 00000000..a15434f9 --- /dev/null +++ b/cli-tests/tests/flow/multi-namespace-mongo-operator.spec.ts @@ -0,0 +1,105 @@ +// percona-everest-cli +// Copyright (C) 2023 Percona LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +import { test } from '@fixtures'; +// eslint-disable-next-line import/no-extraneous-dependencies +import { faker } from '@faker-js/faker'; + +test.describe('Everest CLI install', async () => { + test.beforeEach(async ({ cli }) => { + await cli.execute('minikube delete'); + await cli.execute('minikube start'); + }); + + test('multiple runs against multiple namespaces', async ({ page, cli, request }) => { + const verifyClusterResources = async () => { + await test.step('verify installed operators in k8s', async () => { + let out = await cli.exec('kubectl get pods --namespace=percona-everest'); + + await out.outContainsNormalizedMany([ + 'everest-operator-controller-manager', + ]); + + out = await cli.exec('kubectl get pods --namespace=dev'); + + await out.outContainsNormalizedMany([ + 'percona-server-mongodb-operator', + ]); + + await out.outNotContains([ + 'percona-postgresql-operator', + 'percona-xtradb-cluster-operator', + ]); + out = await cli.exec('kubectl get pods --namespace=prod'); + + await out.outContainsNormalizedMany([ + 'percona-server-mongodb-operator', + ]); + + await out.outNotContains([ + 'percona-postgresql-operator', + 'percona-xtradb-cluster-operator', + ]); + }); + }; + + await test.step('run everest install command', async () => { + const out = await cli.everestExecSkipWizard( + 'install --operator.mongodb=true --operator.postgresql=false --operator.xtradb-cluster=false --monitoring.enable=0 --namespace=prod --namespace=dev', + ); + + await out.assertSuccess(); + await out.outErrContainsNormalizedMany([ + 'percona-server-mongodb-operator operator has been installed', + 'everest-operator operator has been installed', + ]); + }); + + await page.waitForTimeout(10_000); + + await verifyClusterResources(); + await test.step('re-run everest install command', async () => { + let out = await cli.everestExecSkipWizard( + 'install --operator.mongodb=true --operator.postgresql=true --operator.xtradb-cluster=false --monitoring.enable=0 --namespace=prod --namespace=dev', + ); + + await out.assertSuccess(); + await out.outErrContainsNormalizedMany([ + 'percona-server-mongodb-operator operator has been installed', + 'everest-operator operator has been installed', + ]); + out = await cli.exec('kubectl -n percona-everest get configmap everest-configuration -o yaml'); + await out.outContainsNormalizedMany([ + 'namespaces: prod,dev', + 'operators: percona-server-mongodb-operator,percona-postgresql-operator', + ]); + }); + await test.step('re-run everest install command in the different namespace', async () => { + let out = await cli.everestExecSkipWizard( + 'install --operator.mongodb=true --operator.postgresql=true --operator.xtradb-cluster=false --monitoring.enable=0 --namespace=prod --namespace=dev --namespace=staging', + ); + + await out.assertSuccess(); + await out.outErrContainsNormalizedMany([ + 'percona-server-mongodb-operator operator has been installed', + 'everest-operator operator has been installed', + ]); + out = await cli.exec('kubectl -n percona-everest get configmap everest-configuration -o yaml'); + await out.outContainsNormalizedMany([ + 'namespaces: prod,dev,staging', + 'operators: percona-server-mongodb-operator,percona-postgresql-operator', + ]); + }); + }); +}); diff --git a/cli-tests/tests/flow/pg-operator.spec.ts b/cli-tests/tests/flow/pg-operator.spec.ts index e8824bed..ef2cb40b 100644 --- a/cli-tests/tests/flow/pg-operator.spec.ts +++ b/cli-tests/tests/flow/pg-operator.spec.ts @@ -27,23 +27,26 @@ test.describe('Everest CLI install', async () => { test('install only postgresql-operator', async ({ page, cli, request }) => { const verifyClusterResources = async () => { await test.step('verify installed operators in k8s', async () => { - const out = await cli.exec('kubectl get pods --namespace=percona-everest'); + let out = await cli.exec('kubectl get pods --namespace=percona-everest'); await out.outContainsNormalizedMany([ - 'percona-postgresql-operator', 'everest-operator-controller-manager', ]); + out = await cli.exec('kubectl get pods --namespace=testing'); + + await out.outContainsNormalizedMany([ + 'percona-postgresql-operator', + ]); await out.outNotContains([ 'percona-server-mongodb-operator', ]); }); }; - const clusterName = `test-${faker.number.int()}`; await test.step('run everest install command', async () => { const out = await cli.everestExecSkipWizard( - `install --operator.mongodb=false --operator.postgresql=true --operator.xtradb-cluster=false --monitoring.enable=0 --name=${clusterName}`, + 'install --operator.mongodb=false --operator.postgresql=true --operator.xtradb-cluster=false --monitoring.enable=0 --namespace=testing', ); await out.assertSuccess(); @@ -59,13 +62,15 @@ test.describe('Everest CLI install', async () => { await test.step('re-run everest install command', async () => { await page.waitForTimeout(60_000); - const operator = await cli.exec(`kubectl -n percona-everest get po | grep everest|awk {'print $1'}`); + const operator = await cli.exec('kubectl -n percona-everest get po | grep everest|awk {\'print $1\'}'); + await operator.assertSuccess(); const out = await cli.everestExecSkipWizard( - `install --operator.mongodb=false --operator.postgresql=true --operator.xtradb-cluster=true --monitoring.enable=0 --name=${clusterName}`, + 'install --operator.mongodb=false --operator.postgresql=true --operator.xtradb-cluster=true --monitoring.enable=0 --namespace=testing', ); - const restartedOperator = await cli.exec(`kubectl -n percona-everest get po | grep everest|awk {'print $1'}`); + const restartedOperator = await cli.exec('kubectl -n percona-everest get po | grep everest|awk {\'print $1\'}'); + await restartedOperator.assertSuccess(); expect(operator.getStdOutLines()[0]).not.toEqual(restartedOperator.getStdOutLines()[0]); diff --git a/cli-tests/tests/flow/pxc-operator.spec.ts b/cli-tests/tests/flow/pxc-operator.spec.ts index 21d61711..9eaf13db 100644 --- a/cli-tests/tests/flow/pxc-operator.spec.ts +++ b/cli-tests/tests/flow/pxc-operator.spec.ts @@ -27,12 +27,16 @@ test.describe('Everest CLI install', async () => { test('install only xtradb-cluster-operator', async ({ page, cli, request }) => { const verifyClusterResources = async () => { await test.step('verify installed operators in k8s', async () => { - const out = await cli.exec('kubectl get pods --namespace=percona-everest'); + let out = await cli.exec('kubectl get pods --namespace=percona-everest'); await out.outContainsNormalizedMany([ - 'percona-xtradb-cluster-operator', 'everest-operator-controller-manager', ]); + out = await cli.exec('kubectl get pods --namespace=testing'); + + await out.outContainsNormalizedMany([ + 'percona-xtradb-cluster-operator', + ]); await out.outNotContains([ 'percona-server-mongodb-operator', @@ -40,11 +44,10 @@ test.describe('Everest CLI install', async () => { ]); }); }; - const clusterName = `test-${faker.number.int()}`; await test.step('run everest install command', async () => { const out = await cli.everestExecSkipWizard( - `install --operator.mongodb=false --operator.postgresql=false --operator.xtradb-cluster=true --monitoring.enable=0 --name=${clusterName}`, + 'install --operator.mongodb=false --operator.postgresql=false --operator.xtradb-cluster=true --monitoring.enable=0 --namespace=testing', ); await out.assertSuccess(); diff --git a/cli-tests/tests/list/database-engines.spec.ts b/cli-tests/tests/list/database-engines.spec.ts index 6aa61d8b..34d7ffdd 100644 --- a/cli-tests/tests/list/database-engines.spec.ts +++ b/cli-tests/tests/list/database-engines.spec.ts @@ -12,12 +12,12 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. -//import { test, expect } from '@fixtures'; -//import { waitForDBEngines } from '@tests/support/kubernetes'; +// import { test, expect } from '@fixtures'; +// import { waitForDBEngines } from '@tests/support/kubernetes'; // -//let kubernetesId = ''; +// let kubernetesId = ''; // -//test.beforeAll(async ({ cli, request }) => { +// test.beforeAll(async ({ cli, request }) => { // const kubernetesList = await request.get('/v1/kubernetes'); // // kubernetesId = (await kubernetesList.json())[0].id; @@ -29,9 +29,9 @@ // intervals: [1000], // timeout: 240 * 1000, // }).toBe(true); -//}); +// }); // -//test.describe('Database engines', async () => { +// test.describe('Database engines', async () => { // test('list', async ({ cli }) => { // const out = await cli.everestExecSilent(`list databaseengines --kubernetes-id ${kubernetesId}`); // @@ -53,4 +53,4 @@ // expect(res?.psmdb?.version).toBeTruthy(); // expect(res?.pxc?.version).toBeTruthy(); // }); -//}); +// }); diff --git a/cli-tests/tests/version.spec.ts b/cli-tests/tests/version.spec.ts index a616c2cb..25295171 100644 --- a/cli-tests/tests/version.spec.ts +++ b/cli-tests/tests/version.spec.ts @@ -18,13 +18,13 @@ test.describe('Everest CLI "version" validation', async () => { test('version validation', async ({ cli }) => { const out = await cli.everestExecSilent('version'); const version = await cli.exec('git describe --always --dirty|cut -b2-'); + await version.assertSuccess(); await out.assertSuccess(); await out.outContainsNormalizedMany([ 'ProjectName: everestctl', - 'Version: ' + version.getStdOutLines()[0], + `Version: ${version.getStdOutLines()[0]}`, ]); }); - }); diff --git a/commands/delete/cluster.go b/commands/delete/cluster.go index 7c6ae2a2..8f19f2ac 100644 --- a/commands/delete/cluster.go +++ b/commands/delete/cluster.go @@ -44,7 +44,6 @@ func NewClusterCmd(l *zap.SugaredLogger) *cobra.Command { func initClusterFlags(cmd *cobra.Command) { cmd.Flags().StringP("kubeconfig", "k", "~/.kube/config", "Path to a kubeconfig") cmd.Flags().String("namespace", "percona-everest", "Namespace into which Percona Everest components are deployed to") - cmd.Flags().String("name", "", "Kubernetes cluster name in Everest") cmd.Flags().BoolP("assume-yes", "y", false, "Assume yes to all questions") cmd.Flags().BoolP("force", "f", false, "Force removal in case there are database clusters running") cmd.Flags().Bool("ignore-kubernetes-unavailable", false, "Remove cluster even if Kubernetes is not available") @@ -54,7 +53,6 @@ func initClusterViperFlags(cmd *cobra.Command) { viper.BindEnv("kubeconfig") //nolint:errcheck,gosec viper.BindPFlag("kubeconfig", cmd.Flags().Lookup("kubeconfig")) //nolint:errcheck,gosec viper.BindPFlag("namespace", cmd.Flags().Lookup("namespace")) //nolint:errcheck,gosec - viper.BindPFlag("name", cmd.Flags().Lookup("name")) //nolint:errcheck,gosec viper.BindPFlag("assume-yes", cmd.Flags().Lookup("assume-yes")) //nolint:errcheck,gosec viper.BindPFlag("force", cmd.Flags().Lookup("force")) //nolint:errcheck,gosec viper.BindPFlag( //nolint:errcheck,gosec diff --git a/commands/install.go b/commands/install.go index d3889a31..19ae60a8 100644 --- a/commands/install.go +++ b/commands/install.go @@ -30,7 +30,8 @@ import ( func newInstallCmd(l *zap.SugaredLogger) *cobra.Command { cmd := &cobra.Command{ - Use: "install", + Use: "install", + Example: "everestctl install --namespace dev --namespace staging --namespace prod --monitoring.enable=0", Run: func(cmd *cobra.Command, args []string) { initInstallViperFlags(cmd) c := &install.Config{} @@ -69,8 +70,7 @@ func newInstallCmd(l *zap.SugaredLogger) *cobra.Command { func initInstallFlags(cmd *cobra.Command) { cmd.Flags().StringP("kubeconfig", "k", "~/.kube/config", "Path to a kubeconfig") - cmd.Flags().StringP("name", "n", "", "Kubernetes cluster name") - cmd.Flags().String("namespace", "percona-everest", "Namespace into which Percona Everest components are deployed to") + cmd.Flags().StringArray("namespace", []string{}, "Namespaces list Percona Everest can manage") cmd.Flags().Bool("skip-wizard", false, "Skip installation wizard") cmd.Flags().BoolP("monitoring.enable", "m", false, "Enable monitoring") @@ -109,7 +109,6 @@ func initInstallViperFlags(cmd *cobra.Command) { viper.BindEnv("kubeconfig") //nolint:errcheck,gosec viper.BindPFlag("kubeconfig", cmd.Flags().Lookup("kubeconfig")) //nolint:errcheck,gosec - viper.BindPFlag("name", cmd.Flags().Lookup("name")) //nolint:errcheck,gosec viper.BindPFlag("namespace", cmd.Flags().Lookup("namespace")) //nolint:errcheck,gosec viper.BindPFlag("operator.mongodb", cmd.Flags().Lookup("operator.mongodb")) //nolint:errcheck,gosec diff --git a/commands/uninstall.go b/commands/uninstall.go index 8523cabb..4e529596 100644 --- a/commands/uninstall.go +++ b/commands/uninstall.go @@ -58,7 +58,7 @@ func newUninstallCmd(l *zap.SugaredLogger) *cobra.Command { func initUninstallFlags(cmd *cobra.Command) { cmd.Flags().StringP("kubeconfig", "k", "~/.kube/config", "Path to a kubeconfig") - cmd.Flags().String("namespace", "percona-everest", "Namespace into which Percona Everest components are deployed to") + cmd.Flags().StringArray("namespace", []string{}, "Namespaces list Percona Everest can manage") cmd.Flags().BoolP("assume-yes", "y", false, "Assume yes to all questions") cmd.Flags().BoolP("force", "f", false, "Force removal in case there are database clusters running") } diff --git a/commands/upgrade.go b/commands/upgrade.go index 7118de5a..3c6f5f54 100644 --- a/commands/upgrade.go +++ b/commands/upgrade.go @@ -59,8 +59,7 @@ func newUpgradeCmd(l *zap.SugaredLogger) *cobra.Command { func initUpgradeFlags(cmd *cobra.Command) { cmd.Flags().StringP("kubeconfig", "k", "~/.kube/config", "Path to a kubeconfig") - cmd.Flags().StringP("name", "n", "", "Kubernetes cluster name") - cmd.Flags().String("namespace", "percona-everest", "Namespace into which Percona Everest components are deployed to") + cmd.Flags().StringArray("namespace", []string{}, "Namespaces list Percona Everest can manage") cmd.Flags().Bool("upgrade-olm", false, "Upgrade OLM distribution") cmd.Flags().Bool("skip-wizard", false, "Skip installation wizard") } @@ -68,7 +67,6 @@ func initUpgradeFlags(cmd *cobra.Command) { func initUpgradeViperFlags(cmd *cobra.Command) { viper.BindEnv("kubeconfig") //nolint:errcheck,gosec viper.BindPFlag("kubeconfig", cmd.Flags().Lookup("kubeconfig")) //nolint:errcheck,gosec - viper.BindPFlag("name", cmd.Flags().Lookup("name")) //nolint:errcheck,gosec viper.BindPFlag("namespace", cmd.Flags().Lookup("namespace")) //nolint:errcheck,gosec viper.BindPFlag("upgrade-olm", cmd.Flags().Lookup("upgrade-olm")) //nolint:errcheck,gosec viper.BindPFlag("skip-wizard", cmd.Flags().Lookup("skip-wizard")) //nolint:errcheck,gosec diff --git a/pkg/install/install.go b/pkg/install/install.go index 57797baa..00cec4db 100644 --- a/pkg/install/install.go +++ b/pkg/install/install.go @@ -22,6 +22,7 @@ import ( "errors" "fmt" "net/url" + "strings" "time" "github.com/AlecAivazis/survey/v2" @@ -29,6 +30,8 @@ import ( "github.com/percona/percona-everest-backend/client" "go.uber.org/zap" "golang.org/x/sync/errgroup" + corev1 "k8s.io/api/core/v1" + rbacv1 "k8s.io/api/rbac/v1" k8serrors "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/util/wait" @@ -61,6 +64,13 @@ const ( pgOperatorName = "percona-postgresql-operator" vmOperatorName = "victoriametrics-operator" operatorInstallThreads = 1 + + everestServiceAccount = "everest-admin" + everestServiceAccountRole = "everest-admin-role" + everestServiceAccountRoleBinding = "everest-admin-role-binding" + everestServiceAccountClusterRoleBinding = "everest-admin-cluster-role-binding" + everestWatchNamespacesEnvVar = "WATCH_NAMESPACES" + everestNamespace = "percona-everest" ) type ( @@ -69,10 +79,8 @@ type ( // Config stores configuration for the operators. Config struct { - // Name of the Kubernetes Cluster - Name string - // Namespace defines the namespace operators shall be installed to. - Namespace string + // Namespaces defines namespaces that everest can operate in. + Namespaces []string `mapstructure:"namespace"` // SkipWizard skips wizard during installation. SkipWizard bool `mapstructure:"skip-wizard"` // KubeconfigPath is a path to a kubeconfig @@ -134,6 +142,20 @@ type ( } ) +func (o OperatorConfig) operatorsList() []string { + var operators []string + if o.PXC { + operators = append(operators, pxcOperatorName) + } + if o.PSMDB { + operators = append(operators, psmdbOperatorName) + } + if o.PG { + operators = append(operators, pgOperatorName) + } + return operators +} + // NewInstall returns a new Install struct. func NewInstall(c Config, l *zap.SugaredLogger) (*Install, error) { cli := &Install{ @@ -159,19 +181,59 @@ func (o *Install) Run(ctx context.Context) error { if err := o.populateConfig(); err != nil { return err } - if err := o.provisionNamespace(); err != nil { + if len(o.config.Namespaces) == 0 { + return errors.New("namespace list is empty") + } + if err := o.createNamespace(everestNamespace); err != nil { return err } pwd, err := o.generatePassword(ctx) if err != nil { return err } - if err := o.configureEverestConnector(pwd.Password); err != nil { + if err := o.provisionOLM(ctx); err != nil { + return err + } + o.l.Info("Creating operator group for the everest") + if err := o.kubeClient.CreateOperatorGroup(ctx, operatorGroup, everestNamespace, o.config.Namespaces); err != nil { return err } - if err := o.performProvisioning(ctx); err != nil { + if err := o.provisionAllNamespaces(ctx); err != nil { return err } + if err := o.installEverest(ctx, pwd); err != nil { + return err + } + o.l.Info("Updating cluster role bingings for the everest-admin") + if err := o.kubeClient.UpdateClusterRoleBinding(ctx, everestServiceAccountClusterRoleBinding, o.config.Namespaces); err != nil { + return err + } + if o.config.Monitoring.Enable { + if err := o.provisionMonitoring(ctx); err != nil { + return err + } + } + sleep := time.Second + for i := 0; i < 3; i++ { + updated, err := o.kubeClient.PersistConfiguration(ctx, everestNamespace, o.config.Namespaces, o.config.Operator.operatorsList()) + if err != nil && k8serrors.IsConflict(err) { + sleep *= 2 + o.l.Debug(fmt.Sprintf("retrying persisting configuration. Received error +%v", err)) + continue + } + if err != nil { + return errors.Join(err, errors.New("could not persist configuration")) + } + if updated { + if err := o.kubeClient.RestartEverest(ctx, everestOperatorName, everestNamespace); err != nil { + return err + } + if err := o.kubeClient.RestartEverest(ctx, everestBackendServiceName, everestNamespace); err != nil { + return err + } + } + break + } o.l.Info(pwd) @@ -185,10 +247,6 @@ func (o *Install) populateConfig() error { } } - if o.config.Name == "" { - o.config.Name = o.kubeClient.ClusterName() - } - return nil } @@ -198,11 +256,11 @@ func (o *Install) checkEverestConnection(ctx context.Context) error { return err } -func (o *Install) performProvisioning(ctx context.Context) error { - if err := o.provisionAllOperators(ctx); err != nil { +func (o *Install) installEverest(ctx context.Context, pwd *password.ResetResponse) error { + if err := o.installOperator(ctx, o.config.Channel.Everest, everestOperatorName, everestNamespace)(); err != nil { return err } - d, err := o.kubeClient.GetDeployment(ctx, kubernetes.PerconaEverestDeploymentName, o.config.Namespace) + d, err := o.kubeClient.GetDeployment(ctx, kubernetes.PerconaEverestDeploymentName, everestNamespace) var everestExists bool if err != nil && !k8serrors.IsNotFound(err) { return err @@ -212,25 +270,58 @@ func (o *Install) performProvisioning(ctx context.Context) error { } if !everestExists { - o.l.Info(fmt.Sprintf("Deploying Everest to %s", o.config.Namespace)) - err = o.kubeClient.InstallEverest(ctx, o.config.Namespace) + o.l.Info(fmt.Sprintf("Deploying Everest to %s", everestNamespace)) + err = o.kubeClient.InstallEverest(ctx, everestNamespace) if err != nil { return err } + o.l.Info("Everest has been installed. Configuring connection") } - o.l.Info("Everest has been installed. Configuring connection") - if o.config.Monitoring.Enable { - if err := o.provisionMonitoring(ctx, everestExists); err != nil { + if err := o.configureEverestConnector(pwd.Password); err != nil { + return err + } + return nil +} + +func (o *Install) provisionAllNamespaces(ctx context.Context) error { + for _, namespace := range o.config.Namespaces { + namespace := namespace + if err := o.createNamespace(namespace); err != nil { return err } + if err := o.kubeClient.CreateOperatorGroup(ctx, operatorGroup, namespace, []string{}); err != nil { + return err + } + + o.l.Infof("Installing operators into %s namespace", namespace) + if err := o.provisionOperators(ctx, namespace); err != nil { + return err + } + o.l.Info("Creating role for the Everest service account") + err := o.kubeClient.CreateRole(namespace, everestServiceAccountRole, o.serviceAccountRolePolicyRules()) + if err != nil { + return errors.Join(err, errors.New("could not create role")) + } + + o.l.Info("Binding role to the Everest Service account") + err = o.kubeClient.CreateRoleBinding( + namespace, + everestServiceAccountRoleBinding, + everestServiceAccountRole, + everestServiceAccount, + ) + if err != nil { + return errors.Join(err, errors.New("could not create role binding")) + } } + return nil } -func (o *Install) provisionMonitoring(ctx context.Context, everestExists bool) error { +func (o *Install) provisionMonitoring(ctx context.Context) error { l := o.l.With("action", "monitoring") l.Info("Preparing k8s cluster for monitoring") - if err := o.kubeClient.ProvisionMonitoring(o.config.Namespace); err != nil { + if err := o.kubeClient.ProvisionMonitoring(everestNamespace); err != nil { return errors.Join(err, errors.New("could not provision monitoring configuration")) } @@ -239,11 +330,6 @@ func (o *Install) provisionMonitoring(ctx context.Context, everestExists bool) e return err } o.l.Info("Deploying VMAgent to k8s cluster") - if everestExists { - if err := o.kubeClient.RestartEverest(ctx, everestBackendServiceName, o.config.Namespace); err != nil { - return err - } - } if err := o.checkEverestConnection(ctx); err != nil { var u *url.Error if errors.As(err, &u) { @@ -331,7 +417,7 @@ func (o *Install) createPMMMonitoringInstance(ctx context.Context, name, url, us } func (o *Install) configureEverestConnector(everestPwd string) error { - e, err := everestClient.NewProxiedEverest(o.kubeClient.Config(), o.config.Namespace, everestPwd) + e, err := everestClient.NewProxiedEverest(o.kubeClient.Config(), everestNamespace, everestPwd) if err != nil { return err } @@ -353,11 +439,19 @@ func (o *Install) runWizard() error { } func (o *Install) runEverestWizard() error { + var namespaces string pNamespace := &survey.Input{ - Message: "Namespace to deploy Everest to", - Default: o.config.Namespace, + Message: "Namespaces to deploy Everest to. Comma separated", + Default: namespaces, + } + if err := survey.AskOne(pNamespace, &namespaces); err != nil { + return err } - return survey.AskOne(pNamespace, &o.config.Namespace) + nsList := strings.Split(namespaces, ",") + for i := range nsList { + o.config.Namespaces = append(o.config.Namespaces, strings.TrimSpace(nsList[i])) + } + return nil } func (o *Install) runMonitoringWizard() error { @@ -494,30 +588,15 @@ func (o *Install) runInstallWizard() error { return nil } -// provisionNamespace provisions a namespace for Everest. -func (o *Install) provisionNamespace() error { - o.l.Infof("Creating namespace %s", o.config.Namespace) - err := o.kubeClient.CreateNamespace(o.config.Namespace) +// createNamespace provisions a namespace for Everest. +func (o *Install) createNamespace(namespace string) error { + o.l.Infof("Creating namespace %s", namespace) + err := o.kubeClient.CreateNamespace(namespace) if err != nil { return errors.Join(err, errors.New("could not provision namespace")) } - o.l.Infof("Namespace %s has been created", o.config.Namespace) - return nil -} - -// provisionAllOperators provisions all configured operators to a k8s cluster. -func (o *Install) provisionAllOperators(ctx context.Context) error { - o.l.Info("Started provisioning the cluster") - - if err := o.provisionOLM(ctx); err != nil { - return err - } - - if err := o.provisionInstall(ctx); err != nil { - return err - } - + o.l.Infof("Namespace %s has been created", namespace) return nil } @@ -538,11 +617,7 @@ func (o *Install) provisionOLM(ctx context.Context) error { return nil } -func (o *Install) provisionInstall(ctx context.Context) error { - deploymentsBefore, err := o.kubeClient.ListEngineDeploymentNames(ctx, o.config.Namespace) - if err != nil { - return err - } +func (o *Install) provisionOperators(ctx context.Context, namespace string) error { g, gCtx := errgroup.WithContext(ctx) // We set the limit to 1 since operator installation // requires an update to the same installation plan which @@ -551,36 +626,26 @@ func (o *Install) provisionInstall(ctx context.Context) error { g.SetLimit(operatorInstallThreads) if o.config.Monitoring.Enable { - g.Go(o.installOperator(gCtx, o.config.Channel.VictoriaMetrics, vmOperatorName)) + g.Go(o.installOperator(gCtx, o.config.Channel.VictoriaMetrics, vmOperatorName, namespace)) } if o.config.Operator.PXC { - g.Go(o.installOperator(gCtx, o.config.Channel.PXC, pxcOperatorName)) + g.Go(o.installOperator(gCtx, o.config.Channel.PXC, pxcOperatorName, namespace)) } if o.config.Operator.PSMDB { - g.Go(o.installOperator(gCtx, o.config.Channel.PSMDB, psmdbOperatorName)) + g.Go(o.installOperator(gCtx, o.config.Channel.PSMDB, psmdbOperatorName, namespace)) } if o.config.Operator.PG { - g.Go(o.installOperator(gCtx, o.config.Channel.PG, pgOperatorName)) + g.Go(o.installOperator(gCtx, o.config.Channel.PG, pgOperatorName, namespace)) } if err := g.Wait(); err != nil { return err } - if err := o.installOperator(ctx, o.config.Channel.Everest, everestOperatorName)(); err != nil { - return err - } - deploymentsAfter, err := o.kubeClient.ListEngineDeploymentNames(ctx, o.config.Namespace) - if err != nil { - return err - } - if len(deploymentsBefore) != 0 && len(deploymentsBefore) != len(deploymentsAfter) { - return o.restartEverestOperatorPod(ctx) - } return nil } -func (o *Install) installOperator(ctx context.Context, channel, operatorName string) func() error { +func (o *Install) installOperator(ctx context.Context, channel, operatorName, namespace string) func() error { return func() error { // We check if the context has not been cancelled yet to return early if err := ctx.Err(); err != nil { @@ -591,7 +656,7 @@ func (o *Install) installOperator(ctx context.Context, channel, operatorName str o.l.Infof("Installing %s operator", operatorName) params := kubernetes.InstallOperatorRequest{ - Namespace: o.config.Namespace, + Namespace: namespace, Name: operatorName, OperatorGroup: operatorGroup, CatalogSource: catalogSource, @@ -599,6 +664,17 @@ func (o *Install) installOperator(ctx context.Context, channel, operatorName str Channel: channel, InstallPlanApproval: v1alpha1.ApprovalManual, } + if len(o.config.Namespaces) != 0 && operatorName == everestOperatorName { + params.TargetNamespaces = o.config.Namespaces + params.SubscriptionConfig = &v1alpha1.SubscriptionConfig{ + Env: []corev1.EnvVar{ + { + Name: everestWatchNamespacesEnvVar, + Value: strings.Join(o.config.Namespaces, ","), + }, + }, + } + } if err := o.kubeClient.InstallOperator(ctx, params); err != nil { o.l.Errorf("failed installing %s operator", operatorName) @@ -610,13 +686,63 @@ func (o *Install) installOperator(ctx context.Context, channel, operatorName str } } +func (o *Install) serviceAccountRolePolicyRules() []rbacv1.PolicyRule { + return []rbacv1.PolicyRule{ + { + APIGroups: []string{"everest.percona.com"}, + Resources: []string{"databaseclusters"}, + Verbs: []string{"*"}, + }, + { + APIGroups: []string{"everest.percona.com"}, + Resources: []string{"databaseengines"}, + Verbs: []string{"*"}, + }, + { + APIGroups: []string{"everest.percona.com"}, + Resources: []string{"databaseclusterrestores"}, + Verbs: []string{"*"}, + }, + { + APIGroups: []string{"everest.percona.com"}, + Resources: []string{"databaseclusterbackups"}, + Verbs: []string{"*"}, + }, + { + APIGroups: []string{"everest.percona.com"}, + Resources: []string{"backupstorages"}, + Verbs: []string{"*"}, + }, + { + APIGroups: []string{"everest.percona.com"}, + Resources: []string{"monitoringconfigs"}, + Verbs: []string{"*"}, + }, + { + APIGroups: []string{"operator.victoriametrics.com"}, + Resources: []string{"vmagents"}, + Verbs: []string{"*"}, + }, + { + APIGroups: []string{""}, + Resources: []string{"namespaces"}, + Verbs: []string{"get"}, + }, + { + APIGroups: []string{""}, + Resources: []string{"secrets"}, + Verbs: []string{"*"}, + }, + } +} + func (o *Install) generatePassword(ctx context.Context) (*password.ResetResponse, error) { o.l.Info("Creating password for Everest") r, err := password.NewReset( password.ResetConfig{ KubeconfigPath: o.config.KubeconfigPath, - Namespace: o.config.Namespace, + Namespace: everestNamespace, }, o.l, ) @@ -633,7 +759,3 @@ func (o *Install) generatePassword(ctx context.Context) (*password.ResetResponse return res, nil } - -func (o *Install) restartEverestOperatorPod(ctx context.Context) error { - return o.kubeClient.RestartEverest(ctx, "everest-operator", o.config.Namespace) -} diff --git a/pkg/kubernetes/client/client.go b/pkg/kubernetes/client/client.go index c839eabb..8e9b09b8 100644 --- a/pkg/kubernetes/client/client.go +++ b/pkg/kubernetes/client/client.go @@ -41,6 +41,7 @@ import ( "gopkg.in/yaml.v3" appsv1 "k8s.io/api/apps/v1" corev1 "k8s.io/api/core/v1" + rbacv1 "k8s.io/api/rbac/v1" storagev1 "k8s.io/api/storage/v1" apiextv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" apiextv1clientset "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset" @@ -84,8 +85,6 @@ const ( defaultAPIURIPath = "/api" defaultAPIsURIPath = "/apis" - - disableTelemetryEnvVar = "DISABLE_TELEMETRY" ) // Each level has 2 spaces for PrefixWriter. @@ -799,21 +798,6 @@ func (c *Client) applyTemplateCustomization(u *unstructured.Unstructured, namesp } func (c *Client) updateClusterRoleBinding(u *unstructured.Unstructured, namespace string) error { - cl, err := c.kubeClient() - if err != nil { - return err - } - binding := &unstructured.Unstructured{} - binding.SetGroupVersionKind(schema.GroupVersionKind{ - Group: "rbac.authorization.k8s.io", - Kind: "ClusterRoleBinding", - Version: "v1", - }) - err = cl.Get(context.Background(), types.NamespacedName{Name: "everest-admin-cluster-role-binding"}, binding) - if err != nil && !apierrors.IsNotFound(err) { - return err - } - sub, ok, err := unstructured.NestedFieldNoCopy(u.Object, "subjects") if err != nil { return err @@ -838,22 +822,6 @@ func (c *Client) updateClusterRoleBinding(u *unstructured.Unstructured, namespac return err } } - if binding.GetName() == "" { - return nil - } - - bindingSub, ok, err := unstructured.NestedFieldNoCopy(binding.Object, "subjects") - if err != nil { - return err - } - if !ok { - return nil - } - bindingSubjects, ok := bindingSub.([]interface{}) - if !ok { - return nil - } - subjects = append(subjects, bindingSubjects...) return unstructured.SetNestedSlice(u.Object, subjects, "subjects") } @@ -1155,7 +1123,7 @@ func (c *Client) GetOperatorGroup(ctx context.Context, namespace, name string) ( } // CreateOperatorGroup creates an operator group to be used as part of a subscription. -func (c *Client) CreateOperatorGroup(ctx context.Context, namespace, name string) (*v1.OperatorGroup, error) { +func (c *Client) CreateOperatorGroup(ctx context.Context, namespace, name string, targetNamespaces []string) (*v1.OperatorGroup, error) { operatorClient, err := versioned.NewForConfig(c.restConfig) if err != nil { return nil, errors.Join(err, errors.New("cannot create an operator client instance")) @@ -1170,7 +1138,7 @@ func (c *Client) CreateOperatorGroup(ctx context.Context, namespace, name string Namespace: namespace, }, Spec: v1.OperatorGroupSpec{ - TargetNamespaces: []string{namespace}, + TargetNamespaces: targetNamespaces, }, Status: v1.OperatorGroupStatus{ LastUpdated: &metav1.Time{ @@ -1182,6 +1150,25 @@ func (c *Client) CreateOperatorGroup(ctx context.Context, namespace, name string return operatorClient.OperatorsV1().OperatorGroups(namespace).Create(ctx, og, metav1.CreateOptions{}) } +// CreateSubscription creates an OLM subscription. +func (c *Client) CreateSubscription(ctx context.Context, namespace string, subscription *v1alpha1.Subscription) (*v1alpha1.Subscription, error) { + operatorClient, err := versioned.NewForConfig(c.restConfig) + if err != nil { + return nil, errors.Join(err, errors.New("cannot create an operator client instance")) + } + sub, err := operatorClient. + OperatorsV1alpha1(). + Subscriptions(namespace). + Create(ctx, subscription, metav1.CreateOptions{}) + if err != nil { + if apierrors.IsAlreadyExists(err) { + return sub, nil + } + return sub, err + } + return sub, nil +} + // CreateSubscriptionForCatalog creates an OLM subscription. func (c *Client) CreateSubscriptionForCatalog(ctx context.Context, namespace, name, catalogNamespace, catalog, packageName, channel, startingCSV string, approval v1alpha1.Approval, @@ -1191,11 +1178,6 @@ func (c *Client) CreateSubscriptionForCatalog(ctx context.Context, namespace, na return nil, errors.Join(err, errors.New("cannot create an operator client instance")) } - disableTelemetry, ok := os.LookupEnv(disableTelemetryEnvVar) - if !ok || disableTelemetry != "true" { - disableTelemetry = "false" - } - subscription := &v1alpha1.Subscription{ TypeMeta: metav1.TypeMeta{ Kind: v1alpha1.SubscriptionKind, @@ -1212,14 +1194,6 @@ func (c *Client) CreateSubscriptionForCatalog(ctx context.Context, namespace, na Channel: channel, StartingCSV: startingCSV, InstallPlanApproval: approval, - Config: &v1alpha1.SubscriptionConfig{ - Env: []corev1.EnvVar{ - { - Name: disableTelemetryEnvVar, - Value: disableTelemetry, - }, - }, - }, }, } sub, err := operatorClient. @@ -1391,3 +1365,18 @@ func (c *Client) DeleteFile(fileBytes []byte) error { func (c *Client) GetService(ctx context.Context, namespace, name string) (*corev1.Service, error) { return c.clientset.CoreV1().Services(namespace).Get(ctx, name, metav1.GetOptions{}) } + +// CreateConfigMap creates config map in the provided namespace. +func (c *Client) CreateConfigMap(ctx context.Context, namespace string, configMap *corev1.ConfigMap) (*corev1.ConfigMap, error) { + return c.clientset.CoreV1().ConfigMaps(namespace).Create(ctx, configMap, metav1.CreateOptions{}) +} + +// GetConfigMap fetches the config map in the provided namespace. +func (c *Client) GetConfigMap(ctx context.Context, namespace, name string) (*corev1.ConfigMap, error) { + return c.clientset.CoreV1().ConfigMaps(namespace).Get(ctx, name, metav1.GetOptions{}) +} + +// GetClusterRoleBinding returns cluster role binding by given name. +func (c *Client) GetClusterRoleBinding(ctx context.Context, name string) (*rbacv1.ClusterRoleBinding, error) { + return c.clientset.RbacV1().ClusterRoleBindings().Get(ctx, name, metav1.GetOptions{}) +} diff --git a/pkg/kubernetes/client/kubeclient_interface.go b/pkg/kubernetes/client/kubeclient_interface.go index e5c55768..439ae506 100644 --- a/pkg/kubernetes/client/kubeclient_interface.go +++ b/pkg/kubernetes/client/kubeclient_interface.go @@ -11,6 +11,7 @@ import ( everestv1alpha1 "github.com/percona/everest-operator/api/v1alpha1" appsv1 "k8s.io/api/apps/v1" corev1 "k8s.io/api/core/v1" + rbacv1 "k8s.io/api/rbac/v1" storagev1 "k8s.io/api/storage/v1" apiextv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -87,7 +88,9 @@ type KubeClientConnector interface { // GetOperatorGroup retrieves an operator group details by namespace and name. GetOperatorGroup(ctx context.Context, namespace, name string) (*v1.OperatorGroup, error) // CreateOperatorGroup creates an operator group to be used as part of a subscription. - CreateOperatorGroup(ctx context.Context, namespace, name string) (*v1.OperatorGroup, error) + CreateOperatorGroup(ctx context.Context, namespace, name string, targetNamespaces []string) (*v1.OperatorGroup, error) + // CreateSubscription creates an OLM subscription. + CreateSubscription(ctx context.Context, namespace string, subscription *v1alpha1.Subscription) (*v1alpha1.Subscription, error) // CreateSubscriptionForCatalog creates an OLM subscription. CreateSubscriptionForCatalog(ctx context.Context, namespace, name, catalogNamespace, catalog, packageName, channel, startingCSV string, approval v1alpha1.Approval) (*v1alpha1.Subscription, error) // GetSubscription retrieves an OLM subscription by namespace and name. @@ -115,6 +118,11 @@ type KubeClientConnector interface { DeleteFile(fileBytes []byte) error // GetService returns k8s service by provided namespace and name. GetService(ctx context.Context, namespace, name string) (*corev1.Service, error) + // CreateConfigMap creates config map in the provided namespace. + CreateConfigMap(ctx context.Context, namespace string, configMap *corev1.ConfigMap) (*corev1.ConfigMap, error) + // GetConfigMap fetches the config map in the provided namespace. + GetConfigMap(ctx context.Context, namespace, name string) (*corev1.ConfigMap, error) + GetClusterRoleBinding(ctx context.Context, name string) (*rbacv1.ClusterRoleBinding, error) // DeleteAllMonitoringResources deletes all resources related to monitoring from k8s cluster. DeleteAllMonitoringResources(ctx context.Context, namespace string) error // GetNamespace returns a namespace. diff --git a/pkg/kubernetes/client/mock_kube_client_connector.go b/pkg/kubernetes/client/mock_kube_client_connector.go index aa4c055f..1550c4ee 100644 --- a/pkg/kubernetes/client/mock_kube_client_connector.go +++ b/pkg/kubernetes/client/mock_kube_client_connector.go @@ -5,13 +5,14 @@ package client import ( context "context" - v1 "github.com/operator-framework/api/pkg/operators/v1" + operatorsv1 "github.com/operator-framework/api/pkg/operators/v1" v1alpha1 "github.com/operator-framework/api/pkg/operators/v1alpha1" - operatorsv1 "github.com/operator-framework/operator-lifecycle-manager/pkg/package-server/apis/operators/v1" + apisoperatorsv1 "github.com/operator-framework/operator-lifecycle-manager/pkg/package-server/apis/operators/v1" apiv1alpha1 "github.com/percona/everest-operator/api/v1alpha1" mock "github.com/stretchr/testify/mock" appsv1 "k8s.io/api/apps/v1" - corev1 "k8s.io/api/core/v1" + v1 "k8s.io/api/core/v1" + rbacv1 "k8s.io/api/rbac/v1" storagev1 "k8s.io/api/storage/v1" apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -100,6 +101,32 @@ func (_m *MockKubeClientConnector) Config() *rest.Config { return r0 } +// CreateConfigMap provides a mock function with given fields: ctx, namespace, configMap +func (_m *MockKubeClientConnector) CreateConfigMap(ctx context.Context, namespace string, configMap *v1.ConfigMap) (*v1.ConfigMap, error) { + ret := _m.Called(ctx, namespace, configMap) + + var r0 *v1.ConfigMap + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, string, *v1.ConfigMap) (*v1.ConfigMap, error)); ok { + return rf(ctx, namespace, configMap) + } + if rf, ok := ret.Get(0).(func(context.Context, string, *v1.ConfigMap) *v1.ConfigMap); ok { + r0 = rf(ctx, namespace, configMap) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*v1.ConfigMap) + } + } + + if rf, ok := ret.Get(1).(func(context.Context, string, *v1.ConfigMap) error); ok { + r1 = rf(ctx, namespace, configMap) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + // CreateNamespace provides a mock function with given fields: name func (_m *MockKubeClientConnector) CreateNamespace(name string) error { ret := _m.Called(name) @@ -114,25 +141,51 @@ func (_m *MockKubeClientConnector) CreateNamespace(name string) error { return r0 } -// CreateOperatorGroup provides a mock function with given fields: ctx, namespace, name -func (_m *MockKubeClientConnector) CreateOperatorGroup(ctx context.Context, namespace string, name string) (*v1.OperatorGroup, error) { - ret := _m.Called(ctx, namespace, name) +// CreateOperatorGroup provides a mock function with given fields: ctx, namespace, name, targetNamespaces +func (_m *MockKubeClientConnector) CreateOperatorGroup(ctx context.Context, namespace string, name string, targetNamespaces []string) (*operatorsv1.OperatorGroup, error) { + ret := _m.Called(ctx, namespace, name, targetNamespaces) - var r0 *v1.OperatorGroup + var r0 *operatorsv1.OperatorGroup var r1 error - if rf, ok := ret.Get(0).(func(context.Context, string, string) (*v1.OperatorGroup, error)); ok { - return rf(ctx, namespace, name) + if rf, ok := ret.Get(0).(func(context.Context, string, string, []string) (*operatorsv1.OperatorGroup, error)); ok { + return rf(ctx, namespace, name, targetNamespaces) } - if rf, ok := ret.Get(0).(func(context.Context, string, string) *v1.OperatorGroup); ok { - r0 = rf(ctx, namespace, name) + if rf, ok := ret.Get(0).(func(context.Context, string, string, []string) *operatorsv1.OperatorGroup); ok { + r0 = rf(ctx, namespace, name, targetNamespaces) } else { if ret.Get(0) != nil { - r0 = ret.Get(0).(*v1.OperatorGroup) + r0 = ret.Get(0).(*operatorsv1.OperatorGroup) } } - if rf, ok := ret.Get(1).(func(context.Context, string, string) error); ok { - r1 = rf(ctx, namespace, name) + if rf, ok := ret.Get(1).(func(context.Context, string, string, []string) error); ok { + r1 = rf(ctx, namespace, name, targetNamespaces) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// CreateSubscription provides a mock function with given fields: ctx, namespace, subscription +func (_m *MockKubeClientConnector) CreateSubscription(ctx context.Context, namespace string, subscription *v1alpha1.Subscription) (*v1alpha1.Subscription, error) { + ret := _m.Called(ctx, namespace, subscription) + + var r0 *v1alpha1.Subscription + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, string, *v1alpha1.Subscription) (*v1alpha1.Subscription, error)); ok { + return rf(ctx, namespace, subscription) + } + if rf, ok := ret.Get(0).(func(context.Context, string, *v1alpha1.Subscription) *v1alpha1.Subscription); ok { + r0 = rf(ctx, namespace, subscription) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*v1alpha1.Subscription) + } + } + + if rf, ok := ret.Get(1).(func(context.Context, string, *v1alpha1.Subscription) error); ok { + r1 = rf(ctx, namespace, subscription) } else { r1 = ret.Error(1) } @@ -279,15 +332,15 @@ func (_m *MockKubeClientConnector) DoRolloutWait(ctx context.Context, key types. } // GenerateKubeConfigWithToken provides a mock function with given fields: user, secret -func (_m *MockKubeClientConnector) GenerateKubeConfigWithToken(user string, secret *corev1.Secret) ([]byte, error) { +func (_m *MockKubeClientConnector) GenerateKubeConfigWithToken(user string, secret *v1.Secret) ([]byte, error) { ret := _m.Called(user, secret) var r0 []byte var r1 error - if rf, ok := ret.Get(0).(func(string, *corev1.Secret) ([]byte, error)); ok { + if rf, ok := ret.Get(0).(func(string, *v1.Secret) ([]byte, error)); ok { return rf(user, secret) } - if rf, ok := ret.Get(0).(func(string, *corev1.Secret) []byte); ok { + if rf, ok := ret.Get(0).(func(string, *v1.Secret) []byte); ok { r0 = rf(user, secret) } else { if ret.Get(0) != nil { @@ -295,7 +348,7 @@ func (_m *MockKubeClientConnector) GenerateKubeConfigWithToken(user string, secr } } - if rf, ok := ret.Get(1).(func(string, *corev1.Secret) error); ok { + if rf, ok := ret.Get(1).(func(string, *v1.Secret) error); ok { r1 = rf(user, secret) } else { r1 = ret.Error(1) @@ -304,6 +357,32 @@ func (_m *MockKubeClientConnector) GenerateKubeConfigWithToken(user string, secr return r0, r1 } +// GetClusterRoleBinding provides a mock function with given fields: ctx, name +func (_m *MockKubeClientConnector) GetClusterRoleBinding(ctx context.Context, name string) (*rbacv1.ClusterRoleBinding, error) { + ret := _m.Called(ctx, name) + + var r0 *rbacv1.ClusterRoleBinding + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, string) (*rbacv1.ClusterRoleBinding, error)); ok { + return rf(ctx, name) + } + if rf, ok := ret.Get(0).(func(context.Context, string) *rbacv1.ClusterRoleBinding); ok { + r0 = rf(ctx, name) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*rbacv1.ClusterRoleBinding) + } + } + + if rf, ok := ret.Get(1).(func(context.Context, string) error); ok { + r1 = rf(ctx, name) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + // GetClusterServiceVersion provides a mock function with given fields: ctx, key func (_m *MockKubeClientConnector) GetClusterServiceVersion(ctx context.Context, key types.NamespacedName) (*v1alpha1.ClusterServiceVersion, error) { ret := _m.Called(ctx, key) @@ -330,6 +409,32 @@ func (_m *MockKubeClientConnector) GetClusterServiceVersion(ctx context.Context, return r0, r1 } +// GetConfigMap provides a mock function with given fields: ctx, namespace, name +func (_m *MockKubeClientConnector) GetConfigMap(ctx context.Context, namespace string, name string) (*v1.ConfigMap, error) { + ret := _m.Called(ctx, namespace, name) + + var r0 *v1.ConfigMap + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, string, string) (*v1.ConfigMap, error)); ok { + return rf(ctx, namespace, name) + } + if rf, ok := ret.Get(0).(func(context.Context, string, string) *v1.ConfigMap); ok { + r0 = rf(ctx, namespace, name) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*v1.ConfigMap) + } + } + + if rf, ok := ret.Get(1).(func(context.Context, string, string) error); ok { + r1 = rf(ctx, namespace, name) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + // GetDatabaseCluster provides a mock function with given fields: ctx, name func (_m *MockKubeClientConnector) GetDatabaseCluster(ctx context.Context, name string) (*apiv1alpha1.DatabaseCluster, error) { ret := _m.Called(ctx, name) @@ -457,19 +562,19 @@ func (_m *MockKubeClientConnector) GetLogs(ctx context.Context, pod string, cont } // GetNamespace provides a mock function with given fields: ctx, name -func (_m *MockKubeClientConnector) GetNamespace(ctx context.Context, name string) (*corev1.Namespace, error) { +func (_m *MockKubeClientConnector) GetNamespace(ctx context.Context, name string) (*v1.Namespace, error) { ret := _m.Called(ctx, name) - var r0 *corev1.Namespace + var r0 *v1.Namespace var r1 error - if rf, ok := ret.Get(0).(func(context.Context, string) (*corev1.Namespace, error)); ok { + if rf, ok := ret.Get(0).(func(context.Context, string) (*v1.Namespace, error)); ok { return rf(ctx, name) } - if rf, ok := ret.Get(0).(func(context.Context, string) *corev1.Namespace); ok { + if rf, ok := ret.Get(0).(func(context.Context, string) *v1.Namespace); ok { r0 = rf(ctx, name) } else { if ret.Get(0) != nil { - r0 = ret.Get(0).(*corev1.Namespace) + r0 = ret.Get(0).(*v1.Namespace) } } @@ -483,19 +588,19 @@ func (_m *MockKubeClientConnector) GetNamespace(ctx context.Context, name string } // GetNodes provides a mock function with given fields: ctx -func (_m *MockKubeClientConnector) GetNodes(ctx context.Context) (*corev1.NodeList, error) { +func (_m *MockKubeClientConnector) GetNodes(ctx context.Context) (*v1.NodeList, error) { ret := _m.Called(ctx) - var r0 *corev1.NodeList + var r0 *v1.NodeList var r1 error - if rf, ok := ret.Get(0).(func(context.Context) (*corev1.NodeList, error)); ok { + if rf, ok := ret.Get(0).(func(context.Context) (*v1.NodeList, error)); ok { return rf(ctx) } - if rf, ok := ret.Get(0).(func(context.Context) *corev1.NodeList); ok { + if rf, ok := ret.Get(0).(func(context.Context) *v1.NodeList); ok { r0 = rf(ctx) } else { if ret.Get(0) != nil { - r0 = ret.Get(0).(*corev1.NodeList) + r0 = ret.Get(0).(*v1.NodeList) } } @@ -509,19 +614,19 @@ func (_m *MockKubeClientConnector) GetNodes(ctx context.Context) (*corev1.NodeLi } // GetOperatorGroup provides a mock function with given fields: ctx, namespace, name -func (_m *MockKubeClientConnector) GetOperatorGroup(ctx context.Context, namespace string, name string) (*v1.OperatorGroup, error) { +func (_m *MockKubeClientConnector) GetOperatorGroup(ctx context.Context, namespace string, name string) (*operatorsv1.OperatorGroup, error) { ret := _m.Called(ctx, namespace, name) - var r0 *v1.OperatorGroup + var r0 *operatorsv1.OperatorGroup var r1 error - if rf, ok := ret.Get(0).(func(context.Context, string, string) (*v1.OperatorGroup, error)); ok { + if rf, ok := ret.Get(0).(func(context.Context, string, string) (*operatorsv1.OperatorGroup, error)); ok { return rf(ctx, namespace, name) } - if rf, ok := ret.Get(0).(func(context.Context, string, string) *v1.OperatorGroup); ok { + if rf, ok := ret.Get(0).(func(context.Context, string, string) *operatorsv1.OperatorGroup); ok { r0 = rf(ctx, namespace, name) } else { if ret.Get(0) != nil { - r0 = ret.Get(0).(*v1.OperatorGroup) + r0 = ret.Get(0).(*operatorsv1.OperatorGroup) } } @@ -535,19 +640,19 @@ func (_m *MockKubeClientConnector) GetOperatorGroup(ctx context.Context, namespa } // GetPackageManifest provides a mock function with given fields: ctx, name -func (_m *MockKubeClientConnector) GetPackageManifest(ctx context.Context, name string) (*operatorsv1.PackageManifest, error) { +func (_m *MockKubeClientConnector) GetPackageManifest(ctx context.Context, name string) (*apisoperatorsv1.PackageManifest, error) { ret := _m.Called(ctx, name) - var r0 *operatorsv1.PackageManifest + var r0 *apisoperatorsv1.PackageManifest var r1 error - if rf, ok := ret.Get(0).(func(context.Context, string) (*operatorsv1.PackageManifest, error)); ok { + if rf, ok := ret.Get(0).(func(context.Context, string) (*apisoperatorsv1.PackageManifest, error)); ok { return rf(ctx, name) } - if rf, ok := ret.Get(0).(func(context.Context, string) *operatorsv1.PackageManifest); ok { + if rf, ok := ret.Get(0).(func(context.Context, string) *apisoperatorsv1.PackageManifest); ok { r0 = rf(ctx, name) } else { if ret.Get(0) != nil { - r0 = ret.Get(0).(*operatorsv1.PackageManifest) + r0 = ret.Get(0).(*apisoperatorsv1.PackageManifest) } } @@ -561,19 +666,19 @@ func (_m *MockKubeClientConnector) GetPackageManifest(ctx context.Context, name } // GetPersistentVolumes provides a mock function with given fields: ctx -func (_m *MockKubeClientConnector) GetPersistentVolumes(ctx context.Context) (*corev1.PersistentVolumeList, error) { +func (_m *MockKubeClientConnector) GetPersistentVolumes(ctx context.Context) (*v1.PersistentVolumeList, error) { ret := _m.Called(ctx) - var r0 *corev1.PersistentVolumeList + var r0 *v1.PersistentVolumeList var r1 error - if rf, ok := ret.Get(0).(func(context.Context) (*corev1.PersistentVolumeList, error)); ok { + if rf, ok := ret.Get(0).(func(context.Context) (*v1.PersistentVolumeList, error)); ok { return rf(ctx) } - if rf, ok := ret.Get(0).(func(context.Context) *corev1.PersistentVolumeList); ok { + if rf, ok := ret.Get(0).(func(context.Context) *v1.PersistentVolumeList); ok { r0 = rf(ctx) } else { if ret.Get(0) != nil { - r0 = ret.Get(0).(*corev1.PersistentVolumeList) + r0 = ret.Get(0).(*v1.PersistentVolumeList) } } @@ -587,19 +692,19 @@ func (_m *MockKubeClientConnector) GetPersistentVolumes(ctx context.Context) (*c } // GetPods provides a mock function with given fields: ctx, namespace, labelSelector -func (_m *MockKubeClientConnector) GetPods(ctx context.Context, namespace string, labelSelector *metav1.LabelSelector) (*corev1.PodList, error) { +func (_m *MockKubeClientConnector) GetPods(ctx context.Context, namespace string, labelSelector *metav1.LabelSelector) (*v1.PodList, error) { ret := _m.Called(ctx, namespace, labelSelector) - var r0 *corev1.PodList + var r0 *v1.PodList var r1 error - if rf, ok := ret.Get(0).(func(context.Context, string, *metav1.LabelSelector) (*corev1.PodList, error)); ok { + if rf, ok := ret.Get(0).(func(context.Context, string, *metav1.LabelSelector) (*v1.PodList, error)); ok { return rf(ctx, namespace, labelSelector) } - if rf, ok := ret.Get(0).(func(context.Context, string, *metav1.LabelSelector) *corev1.PodList); ok { + if rf, ok := ret.Get(0).(func(context.Context, string, *metav1.LabelSelector) *v1.PodList); ok { r0 = rf(ctx, namespace, labelSelector) } else { if ret.Get(0) != nil { - r0 = ret.Get(0).(*corev1.PodList) + r0 = ret.Get(0).(*v1.PodList) } } @@ -613,19 +718,19 @@ func (_m *MockKubeClientConnector) GetPods(ctx context.Context, namespace string } // GetSecret provides a mock function with given fields: ctx, name, namespace -func (_m *MockKubeClientConnector) GetSecret(ctx context.Context, name string, namespace string) (*corev1.Secret, error) { +func (_m *MockKubeClientConnector) GetSecret(ctx context.Context, name string, namespace string) (*v1.Secret, error) { ret := _m.Called(ctx, name, namespace) - var r0 *corev1.Secret + var r0 *v1.Secret var r1 error - if rf, ok := ret.Get(0).(func(context.Context, string, string) (*corev1.Secret, error)); ok { + if rf, ok := ret.Get(0).(func(context.Context, string, string) (*v1.Secret, error)); ok { return rf(ctx, name, namespace) } - if rf, ok := ret.Get(0).(func(context.Context, string, string) *corev1.Secret); ok { + if rf, ok := ret.Get(0).(func(context.Context, string, string) *v1.Secret); ok { r0 = rf(ctx, name, namespace) } else { if ret.Get(0) != nil { - r0 = ret.Get(0).(*corev1.Secret) + r0 = ret.Get(0).(*v1.Secret) } } @@ -639,19 +744,19 @@ func (_m *MockKubeClientConnector) GetSecret(ctx context.Context, name string, n } // GetSecretsForServiceAccount provides a mock function with given fields: ctx, accountName -func (_m *MockKubeClientConnector) GetSecretsForServiceAccount(ctx context.Context, accountName string) (*corev1.Secret, error) { +func (_m *MockKubeClientConnector) GetSecretsForServiceAccount(ctx context.Context, accountName string) (*v1.Secret, error) { ret := _m.Called(ctx, accountName) - var r0 *corev1.Secret + var r0 *v1.Secret var r1 error - if rf, ok := ret.Get(0).(func(context.Context, string) (*corev1.Secret, error)); ok { + if rf, ok := ret.Get(0).(func(context.Context, string) (*v1.Secret, error)); ok { return rf(ctx, accountName) } - if rf, ok := ret.Get(0).(func(context.Context, string) *corev1.Secret); ok { + if rf, ok := ret.Get(0).(func(context.Context, string) *v1.Secret); ok { r0 = rf(ctx, accountName) } else { if ret.Get(0) != nil { - r0 = ret.Get(0).(*corev1.Secret) + r0 = ret.Get(0).(*v1.Secret) } } @@ -691,19 +796,19 @@ func (_m *MockKubeClientConnector) GetServerVersion() (*version.Info, error) { } // GetService provides a mock function with given fields: ctx, namespace, name -func (_m *MockKubeClientConnector) GetService(ctx context.Context, namespace string, name string) (*corev1.Service, error) { +func (_m *MockKubeClientConnector) GetService(ctx context.Context, namespace string, name string) (*v1.Service, error) { ret := _m.Called(ctx, namespace, name) - var r0 *corev1.Service + var r0 *v1.Service var r1 error - if rf, ok := ret.Get(0).(func(context.Context, string, string) (*corev1.Service, error)); ok { + if rf, ok := ret.Get(0).(func(context.Context, string, string) (*v1.Service, error)); ok { return rf(ctx, namespace, name) } - if rf, ok := ret.Get(0).(func(context.Context, string, string) *corev1.Service); ok { + if rf, ok := ret.Get(0).(func(context.Context, string, string) *v1.Service); ok { r0 = rf(ctx, namespace, name) } else { if ret.Get(0) != nil { - r0 = ret.Get(0).(*corev1.Service) + r0 = ret.Get(0).(*v1.Service) } } @@ -923,19 +1028,19 @@ func (_m *MockKubeClientConnector) ListDeployments(ctx context.Context, namespac } // ListPods provides a mock function with given fields: ctx, namespace, options -func (_m *MockKubeClientConnector) ListPods(ctx context.Context, namespace string, options metav1.ListOptions) (*corev1.PodList, error) { +func (_m *MockKubeClientConnector) ListPods(ctx context.Context, namespace string, options metav1.ListOptions) (*v1.PodList, error) { ret := _m.Called(ctx, namespace, options) - var r0 *corev1.PodList + var r0 *v1.PodList var r1 error - if rf, ok := ret.Get(0).(func(context.Context, string, metav1.ListOptions) (*corev1.PodList, error)); ok { + if rf, ok := ret.Get(0).(func(context.Context, string, metav1.ListOptions) (*v1.PodList, error)); ok { return rf(ctx, namespace, options) } - if rf, ok := ret.Get(0).(func(context.Context, string, metav1.ListOptions) *corev1.PodList); ok { + if rf, ok := ret.Get(0).(func(context.Context, string, metav1.ListOptions) *v1.PodList); ok { r0 = rf(ctx, namespace, options) } else { if ret.Get(0) != nil { - r0 = ret.Get(0).(*corev1.PodList) + r0 = ret.Get(0).(*v1.PodList) } } @@ -949,19 +1054,19 @@ func (_m *MockKubeClientConnector) ListPods(ctx context.Context, namespace strin } // ListSecrets provides a mock function with given fields: ctx -func (_m *MockKubeClientConnector) ListSecrets(ctx context.Context) (*corev1.SecretList, error) { +func (_m *MockKubeClientConnector) ListSecrets(ctx context.Context) (*v1.SecretList, error) { ret := _m.Called(ctx) - var r0 *corev1.SecretList + var r0 *v1.SecretList var r1 error - if rf, ok := ret.Get(0).(func(context.Context) (*corev1.SecretList, error)); ok { + if rf, ok := ret.Get(0).(func(context.Context) (*v1.SecretList, error)); ok { return rf(ctx) } - if rf, ok := ret.Get(0).(func(context.Context) *corev1.SecretList); ok { + if rf, ok := ret.Get(0).(func(context.Context) *v1.SecretList); ok { r0 = rf(ctx) } else { if ret.Get(0) != nil { - r0 = ret.Get(0).(*corev1.SecretList) + r0 = ret.Get(0).(*v1.SecretList) } } diff --git a/pkg/kubernetes/kubernetes.go b/pkg/kubernetes/kubernetes.go index b6919bfa..d67fc77b 100644 --- a/pkg/kubernetes/kubernetes.go +++ b/pkg/kubernetes/kubernetes.go @@ -26,15 +26,18 @@ import ( "io/fs" "log" "net/http" + "os" "strings" "time" - "github.com/operator-framework/api/pkg/operators/v1alpha1" + olmv1 "github.com/operator-framework/api/pkg/operators/v1" + olmv1alpha1 "github.com/operator-framework/api/pkg/operators/v1alpha1" everestv1alpha1 "github.com/percona/everest-operator/api/v1alpha1" "go.uber.org/zap" yamlv3 "gopkg.in/yaml.v3" appsv1 "k8s.io/api/apps/v1" corev1 "k8s.io/api/core/v1" + rbacv1 "k8s.io/api/rbac/v1" storagev1 "k8s.io/api/storage/v1" apierrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -79,6 +82,8 @@ const ( databaseClusterAPIVersion = "everest.percona.com/v1alpha1" restartAnnotationKey = "everest.percona.com/restart" managedByKey = "everest.percona.com/managed-by" + disableTelemetryEnvVar = "DISABLE_TELEMETRY" + configMapName = "everest-configuration" // ContainerStateWaiting represents a state when container requires some // operations being done in order to complete start up. ContainerStateWaiting ContainerState = "waiting" @@ -466,9 +471,9 @@ func (k *Kubernetes) InstallOLMOperator(ctx context.Context, upgrade bool) error func (k *Kubernetes) applyCSVs(ctx context.Context, resources []unstructured.Unstructured) error { subscriptions := filterResources(resources, func(r unstructured.Unstructured) bool { return r.GroupVersionKind() == schema.GroupVersionKind{ - Group: v1alpha1.GroupName, - Version: v1alpha1.GroupVersion, - Kind: v1alpha1.SubscriptionKind, + Group: olmv1alpha1.GroupName, + Version: olmv1alpha1.GroupVersion, + Kind: olmv1alpha1.SubscriptionKind, } }) @@ -614,20 +619,46 @@ type InstallOperatorRequest struct { CatalogSource string CatalogSourceNamespace string Channel string - InstallPlanApproval v1alpha1.Approval + InstallPlanApproval olmv1alpha1.Approval StartingCSV string + TargetNamespaces []string + SubscriptionConfig *olmv1alpha1.SubscriptionConfig } // InstallOperator installs an operator via OLM. func (k *Kubernetes) InstallOperator(ctx context.Context, req InstallOperatorRequest) error { - if err := createOperatorGroupIfNeeded(ctx, k.client, req.OperatorGroup, req.Namespace); err != nil { - return err + disableTelemetry, ok := os.LookupEnv(disableTelemetryEnvVar) + if !ok || disableTelemetry != "true" { + disableTelemetry = "false" } - - subs, err := k.client.CreateSubscriptionForCatalog( - ctx, req.Namespace, req.Name, "olm", req.CatalogSource, - req.Name, req.Channel, req.StartingCSV, v1alpha1.ApprovalManual, - ) + config := &olmv1alpha1.SubscriptionConfig{Env: []corev1.EnvVar{}} + if req.SubscriptionConfig != nil { + config = req.SubscriptionConfig + } + config.Env = append(config.Env, corev1.EnvVar{ + Name: disableTelemetryEnvVar, + Value: disableTelemetry, + }) + subscription := &olmv1alpha1.Subscription{ + TypeMeta: metav1.TypeMeta{ + Kind: olmv1alpha1.SubscriptionKind, + APIVersion: olmv1alpha1.SubscriptionCRDAPIVersion, + }, + ObjectMeta: metav1.ObjectMeta{ + Namespace: req.Namespace, + Name: req.Name, + }, + Spec: &olmv1alpha1.SubscriptionSpec{ + CatalogSource: req.CatalogSource, + CatalogSourceNamespace: "olm", + Package: req.Name, + Channel: req.Channel, + StartingCSV: req.StartingCSV, + InstallPlanApproval: olmv1alpha1.ApprovalManual, + Config: config, + }, + } + subs, err := k.client.CreateSubscription(ctx, req.Namespace, subscription) if err != nil { return errors.Join(err, errors.New("cannot create a subscription to install the operator")) } @@ -680,23 +711,38 @@ func (k *Kubernetes) approveInstallPlan(ctx context.Context, namespace, installP return true, nil } -func createOperatorGroupIfNeeded( - ctx context.Context, - client client.KubeClientConnector, - name, namespace string, -) error { - _, err := client.GetOperatorGroup(ctx, namespace, name) - if err == nil { +// CreateOperatorGroup creates operator group in the given namespace. +func (k *Kubernetes) CreateOperatorGroup(ctx context.Context, name, namespace string, targetNamespaces []string) error { + targetNamespaces = append(targetNamespaces, namespace) + og, err := k.client.GetOperatorGroup(ctx, namespace, name) + if err != nil && !apierrors.IsNotFound(err) { + return err + } + if err != nil && apierrors.IsNotFound(err) { + _, err = k.client.CreateOperatorGroup(ctx, namespace, name, targetNamespaces) + if err != nil { + return err + } return nil } - - _, err = client.CreateOperatorGroup(ctx, namespace, name) - - return err + og.Kind = olmv1.OperatorGroupKind + og.APIVersion = "operators.coreos.com/v1" + var update bool + for _, namespace := range targetNamespaces { + namespace := namespace + if !arrayContains(og.Spec.TargetNamespaces, namespace) { + update = true + } + } + if update { + og.Spec.TargetNamespaces = targetNamespaces + return k.client.ApplyObject(og) + } + return nil } // ListSubscriptions all the subscriptions in the namespace. -func (k *Kubernetes) ListSubscriptions(ctx context.Context, namespace string) (*v1alpha1.SubscriptionList, error) { +func (k *Kubernetes) ListSubscriptions(ctx context.Context, namespace string) (*olmv1alpha1.SubscriptionList, error) { return k.client.ListSubscriptions(ctx, namespace) } @@ -718,8 +764,8 @@ func (k *Kubernetes) UpgradeOperator(ctx context.Context, namespace, name string return err } -func (k *Kubernetes) getInstallPlan(ctx context.Context, namespace, name string) (*v1alpha1.InstallPlan, error) { - var subs *v1alpha1.Subscription +func (k *Kubernetes) getInstallPlan(ctx context.Context, namespace, name string) (*olmv1alpha1.InstallPlan, error) { + var subs *olmv1alpha1.Subscription // If the subscription was recently created, the install plan might not be ready yet. err := wait.PollUntilContextTimeout(ctx, pollInterval, pollDuration, false, func(ctx context.Context) (bool, error) { @@ -758,7 +804,7 @@ func (k *Kubernetes) GetServerVersion() (*version.Info, error) { func (k *Kubernetes) GetClusterServiceVersion( ctx context.Context, key types.NamespacedName, -) (*v1alpha1.ClusterServiceVersion, error) { +) (*olmv1alpha1.ClusterServiceVersion, error) { return k.client.GetClusterServiceVersion(ctx, key) } @@ -766,7 +812,7 @@ func (k *Kubernetes) GetClusterServiceVersion( func (k *Kubernetes) ListClusterServiceVersion( ctx context.Context, namespace string, -) (*v1alpha1.ClusterServiceVersionList, error) { +) (*olmv1alpha1.ClusterServiceVersionList, error) { return k.client.ListClusterServiceVersion(ctx, namespace) } @@ -943,7 +989,126 @@ func (k *Kubernetes) DeleteEverest(ctx context.Context, namespace string) error return nil } +// PersistConfiguration stores provided namespaces in the configMap. +func (k *Kubernetes) PersistConfiguration(ctx context.Context, namespace string, namespaces []string, operatorsList []string) (bool, error) { + cMap, err := k.client.GetConfigMap(ctx, namespace, configMapName) + if err != nil && !apierrors.IsNotFound(err) { + return false, err + } + if err != nil && apierrors.IsNotFound(err) { + configMap := &corev1.ConfigMap{ + ObjectMeta: metav1.ObjectMeta{ + Name: configMapName, + Namespace: namespace, + }, + Data: map[string]string{ + "namespaces": strings.Join(namespaces, ","), + "operators": strings.Join(operatorsList, ","), + }, + } + _, err := k.client.CreateConfigMap(ctx, namespace, configMap) + return false, err + } + if cMap != nil && cMap.Name != configMapName { + return false, nil + } + v, ok := cMap.Data["namespaces"] + if !ok { + return false, nil + } + o, ok := cMap.Data["operators"] + if !ok { + return false, nil + } + cMap.Kind = "ConfigMap" + cMap.APIVersion = "/v1" + var update bool + existingNamespaces := strings.Split(v, ",") + for _, ns := range namespaces { + ns := ns + if !arrayContains(existingNamespaces, ns) { + update = true + } + } + existingOperators := strings.Split(o, ",") + for _, operator := range operatorsList { + operator := operator + if !arrayContains(existingOperators, operator) { + update = true + } + } + if update { + cMap.Data["namespaces"] = strings.Join(namespaces, ",") + cMap.Data["operators"] = strings.Join(operatorsList, ",") + return true, k.client.ApplyObject(cMap) + } + return false, nil +} + +// GetPersistedNamespaces returns list of persisted namespaces. +func (k *Kubernetes) GetPersistedNamespaces(ctx context.Context, namespace string) ([]string, error) { + var namespaces []string + cMap, err := k.client.GetConfigMap(ctx, namespace, configMapName) + if err != nil { + return namespaces, err + } + v, ok := cMap.Data["namespaces"] + if !ok { + return namespaces, errors.New("`namespaces` key does not exist in the configmap") + } + namespaces = strings.Split(v, ",") + return namespaces, nil +} + // GetDeployment returns k8s deployment by provided name and namespace. func (k *Kubernetes) GetDeployment(ctx context.Context, name, namespace string) (*appsv1.Deployment, error) { return k.client.GetDeployment(ctx, name, namespace) } + +// UpdateClusterRoleBinding updates namespaces list for the cluster role by provided name. +func (k *Kubernetes) UpdateClusterRoleBinding(ctx context.Context, name string, namespaces []string) error { + binding, err := k.client.GetClusterRoleBinding(ctx, name) + if err != nil { + return err + } + if len(binding.Subjects) == 0 { + return fmt.Errorf("no subjects available for the cluster role binding %s", name) + } + var needsUpdate bool + for _, namespace := range namespaces { + namespace := namespace + if !subjectsContains(binding.Subjects, namespace) { + subject := binding.Subjects[0] + subject.Namespace = namespace + binding.Subjects = append(binding.Subjects, subject) + needsUpdate = true + } + } + if needsUpdate { + binding.Kind = "ClusterRoleBinding" + binding.APIVersion = "rbac.authorization.k8s.io/v1" + return k.client.ApplyObject(binding) + } + + return nil +} + +func arrayContains(s []string, e string) bool { + for _, a := range s { + a := a + if a == e { + return true + } + } + return false +} + +func subjectsContains(s []rbacv1.Subject, n string) bool { + for _, a := range s { + a := a + if a.Namespace == n { + return true + } + } + return false +} diff --git a/pkg/kubernetes/olm_operator_test.go b/pkg/kubernetes/olm_operator_test.go index 2b40bcf5..e82863d4 100644 --- a/pkg/kubernetes/olm_operator_test.go +++ b/pkg/kubernetes/olm_operator_test.go @@ -46,8 +46,7 @@ func TestInstallOlmOperator(t *testing.T) { //nolint:paralleltest t.Run("Install OLM Operator", func(t *testing.T) { k8sclient.On( - "CreateSubscriptionForCatalog", mock.Anything, mock.Anything, mock.Anything, - mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything, + "CreateSubscription", mock.Anything, mock.Anything, mock.Anything, ).Return(&v1alpha1.Subscription{}, nil) k8sclient.On("GetDeployment", ctx, mock.Anything, "olm").Return(&appsv1.Deployment{}, nil) k8sclient.On("ApplyFile", mock.Anything).Return(nil) @@ -85,9 +84,8 @@ func TestInstallOlmOperator(t *testing.T) { }, } k8sclient.On( - "CreateSubscriptionForCatalog", - mock.Anything, subscriptionNamespace, operatorName, "olm", - catalogSource, operatorName, "stable", "", v1alpha1.ApprovalManual, + "CreateSubscription", + mock.Anything, subscriptionNamespace, mockSubscription, ).Return(mockSubscription, nil) k8sclient.On("GetSubscription", mock.Anything, subscriptionNamespace, operatorName).Return(mockSubscription, nil) mockInstallPlan := &v1alpha1.InstallPlan{} diff --git a/pkg/uninstall/uninstall.go b/pkg/uninstall/uninstall.go index 41f3b238..97128b8e 100644 --- a/pkg/uninstall/uninstall.go +++ b/pkg/uninstall/uninstall.go @@ -27,6 +27,10 @@ import ( "github.com/percona/percona-everest-cli/pkg/kubernetes" ) +const ( + everestNamespace = "percona-everest" +) + // Uninstall implements logic for the cluster command. type Uninstall struct { config Config @@ -38,8 +42,6 @@ type Uninstall struct { type Config struct { // KubeconfigPath is a path to a kubeconfig KubeconfigPath string `mapstructure:"kubeconfig"` - // Namespace defines the namespace operators shall be installed to. - Namespace string // AssumeYes is true when all questions can be skipped. AssumeYes bool `mapstructure:"assume-yes"` // Force is true when we shall not prompt for removal. @@ -61,32 +63,8 @@ func NewUninstall(c Config, l *zap.SugaredLogger) (*Uninstall, error) { return cli, nil } -func (u *Uninstall) runEverestWizard() error { - if !u.config.AssumeYes { - pNamespace := &survey.Input{ - Message: "Please select namespace", - Default: u.config.Namespace, - } - if err := survey.AskOne( - pNamespace, - &u.config.Namespace, - ); err != nil { - return err - } - } - - return nil -} - // Run runs the cluster command. func (u *Uninstall) Run(ctx context.Context) error { - if err := u.runEverestWizard(); err != nil { - return err - } - if u.config.Namespace == "" { - return errors.New("namespace is not provided") - } - if !u.config.AssumeYes { msg := `You are about to uninstall Everest from the Kubernetes cluster. This will uninstall Everest and all monitoring resources deployed by it. All other resources such as Databases and Database Backups will not be affected.` @@ -108,7 +86,7 @@ This will uninstall Everest and all monitoring resources deployed by it. All oth if err := u.uninstallK8sResources(ctx); err != nil { return err } - if err := u.kubeClient.DeleteEverest(ctx, u.config.Namespace); err != nil { + if err := u.kubeClient.DeleteEverest(ctx, everestNamespace); err != nil { return err } @@ -117,7 +95,7 @@ This will uninstall Everest and all monitoring resources deployed by it. All oth func (u *Uninstall) uninstallK8sResources(ctx context.Context) error { u.l.Info("Deleting all Kubernetes monitoring resources in Kubernetes cluster") - if err := u.kubeClient.DeleteAllMonitoringResources(ctx, u.config.Namespace); err != nil { + if err := u.kubeClient.DeleteAllMonitoringResources(ctx, everestNamespace); err != nil { return errors.Join(err, errors.New("could not uninstall monitoring resources from the Kubernetes cluster")) } diff --git a/pkg/upgrade/upgrade.go b/pkg/upgrade/upgrade.go index fb613598..8b907ba6 100644 --- a/pkg/upgrade/upgrade.go +++ b/pkg/upgrade/upgrade.go @@ -24,22 +24,22 @@ import ( "github.com/AlecAivazis/survey/v2" goversion "github.com/hashicorp/go-version" - "github.com/operator-framework/api/pkg/operators/v1alpha1" "go.uber.org/zap" - corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/types" "github.com/percona/percona-everest-cli/data" "github.com/percona/percona-everest-cli/pkg/kubernetes" ) +const ( + everestNamespace = "percona-everest" +) + type ( // Config defines configuration required for upgrade command. Config struct { - // Name of the Kubernetes Cluster - Name string - // Namespace defines the namespace operators shall be installed to. - Namespace string + // Namespaces defines namespaces that everest can operate in. + Namespaces []string `mapstructure:"namespace"` // KubeconfigPath is a path to a kubeconfig KubeconfigPath string `mapstructure:"kubeconfig"` // UpgradeOLM defines do we need to upgrade OLM or not. @@ -78,6 +78,12 @@ func NewUpgrade(c Config, l *zap.SugaredLogger) (*Upgrade, error) { // Run runs the operators installation process. func (u *Upgrade) Run(ctx context.Context) error { + if err := u.runEverestWizard(ctx); err != nil { + return err + } + if len(u.config.Namespaces) == 0 { + return errors.New("namespace list is empty") + } if err := u.upgradeOLM(ctx); err != nil { return err } @@ -92,37 +98,61 @@ func (u *Upgrade) Run(ctx context.Context) error { } u.l.Info("Subscriptions have been patched") u.l.Info("Upgrading Everest") - if err := u.kubeClient.InstallEverest(ctx, u.config.Namespace); err != nil { + if err := u.kubeClient.InstallEverest(ctx, everestNamespace); err != nil { return err } u.l.Info("Everest has been upgraded") return nil } -func (u *Upgrade) patchSubscriptions(ctx context.Context) error { - subList, err := u.kubeClient.ListSubscriptions(ctx, u.config.Namespace) - if err != nil { - return err - } - disableTelemetryEnvVar := "DISABLE_TELEMETRY" - disableTelemetry, ok := os.LookupEnv(disableTelemetryEnvVar) - if !ok || disableTelemetry != "true" { - disableTelemetry = "false" - } - for _, subscription := range subList.Items { - subscription := subscription - subscription.Spec.Config = &v1alpha1.SubscriptionConfig{ - Env: []corev1.EnvVar{ - { - Name: disableTelemetryEnvVar, - Value: disableTelemetry, - }, - }, +func (u *Upgrade) runEverestWizard(ctx context.Context) error { + if !u.config.SkipWizard { + namespaces, err := u.kubeClient.GetPersistedNamespaces(ctx, everestNamespace) + if err != nil { + return err } - if err := u.kubeClient.ApplyObject(&subscription); err != nil { + pNamespace := &survey.MultiSelect{ + Message: "Please select namespaces", + Options: namespaces, + } + if err := survey.AskOne( + pNamespace, + &u.config.Namespaces, + survey.WithValidator(survey.MinItems(1)), + ); err != nil { return err } } + + return nil +} + +func (u *Upgrade) patchSubscriptions(ctx context.Context) error { + for _, namespace := range u.config.Namespaces { + namespace := namespace + subList, err := u.kubeClient.ListSubscriptions(ctx, namespace) + if err != nil { + return err + } + disableTelemetryEnvVar := "DISABLE_TELEMETRY" + disableTelemetry, ok := os.LookupEnv(disableTelemetryEnvVar) + if !ok || disableTelemetry != "true" { + disableTelemetry = "false" + } + for _, subscription := range subList.Items { + subscription := subscription + for i := range subscription.Spec.Config.Env { + env := subscription.Spec.Config.Env[i] + if env.Name == disableTelemetryEnvVar { + env.Value = disableTelemetry + subscription.Spec.Config.Env[i] = env + } + } + if err := u.kubeClient.ApplyObject(&subscription); err != nil { + return err + } + } + } return nil } From 46f6ab8972c1cfecbe35f217b800d2942a19972b Mon Sep 17 00:00:00 2001 From: Michal Kralik Date: Thu, 7 Dec 2023 12:02:43 +0100 Subject: [PATCH 07/42] EVEREST-107: use cookie instead of auth header (#233) --- pkg/everest/client/client.go | 8 +++++++- pkg/kubernetes/kubernetes.go | 4 ++++ 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/pkg/everest/client/client.go b/pkg/everest/client/client.go index 9cfd8a9e..7f06b019 100644 --- a/pkg/everest/client/client.go +++ b/pkg/everest/client/client.go @@ -75,7 +75,13 @@ func NewProxiedEverest(config *rest.Config, namespace, everestPwd string) (*Ever url.PathEscape(namespace), ), client.WithRequestEditorFn(func(ctx context.Context, req *http.Request) error { - req.Header.Add("Authentication", fmt.Sprintf("Bearer %s", everestPwd)) + // We can't use the Authorization header because it's automatically + // removed by the k8s proxy. + // See https://github.com/kubernetes/kubernetes/issues/38775 for details. + req.AddCookie(&http.Cookie{ + Name: "everest_token", + Value: everestPwd, + }) return nil }), ) diff --git a/pkg/kubernetes/kubernetes.go b/pkg/kubernetes/kubernetes.go index d67fc77b..4075eb33 100644 --- a/pkg/kubernetes/kubernetes.go +++ b/pkg/kubernetes/kubernetes.go @@ -686,6 +686,8 @@ func (k *Kubernetes) InstallOperator(ctx context.Context, req InstallOperatorReq deploymentName = "vm-operator-vm-operator" } + k.l.Debugf("Waiting for deployment rollout %s/%s", req.Namespace, deploymentName) + return k.client.DoRolloutWait(ctx, types.NamespacedName{Namespace: req.Namespace, Name: deploymentName}) } @@ -695,6 +697,8 @@ func (k *Kubernetes) approveInstallPlan(ctx context.Context, namespace, installP return false, err } + k.l.Debugf("Approving install plan %s/%s", namespace, installPlanName) + ip.Spec.Approved = true _, err = k.client.UpdateInstallPlan(ctx, namespace, ip) if err != nil { From 4e636d91600e93478b2dcb1a897939560956152b Mon Sep 17 00:00:00 2001 From: Diogo Recharte Date: Thu, 7 Dec 2023 11:22:51 +0000 Subject: [PATCH 08/42] Revert "EVEREST-633 Multi environment support (#211)" (#234) This reverts commit 6b5b35380d2e258e974ab27e04c47e28bdc8f7c0. --- .github/workflows/ci.yml | 3 +- cli-tests/Makefile | 4 - cli-tests/tests/flow/all-operators.spec.ts | 21 +- cli-tests/tests/flow/mongodb-operator.spec.ts | 12 +- .../multi-namespace-mongo-operator.spec.ts | 105 ------- cli-tests/tests/flow/pg-operator.spec.ts | 19 +- cli-tests/tests/flow/pxc-operator.spec.ts | 11 +- cli-tests/tests/list/database-engines.spec.ts | 14 +- cli-tests/tests/version.spec.ts | 4 +- commands/delete/cluster.go | 2 + commands/install.go | 7 +- commands/uninstall.go | 2 +- commands/upgrade.go | 4 +- pkg/install/install.go | 274 +++++------------- pkg/kubernetes/client/client.go | 85 +++--- pkg/kubernetes/client/kubeclient_interface.go | 10 +- .../client/mock_kube_client_connector.go | 251 +++++----------- pkg/kubernetes/kubernetes.go | 221 ++------------ pkg/kubernetes/olm_operator_test.go | 8 +- pkg/uninstall/uninstall.go | 34 ++- pkg/upgrade/upgrade.go | 84 ++---- 21 files changed, 330 insertions(+), 845 deletions(-) delete mode 100644 cli-tests/tests/flow/multi-namespace-mongo-operator.spec.ts diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 524dce7b..50c4c53a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -271,8 +271,7 @@ jobs: 'test-all-operators', 'test-mongo-operator', 'test-pg-operator', - 'test-pxc-operator', - 'multi-namespace-mongo-operator' + 'test-pxc-operator' ] name: CLI tests uses: ./.github/workflows/cli-tests.yml diff --git a/cli-tests/Makefile b/cli-tests/Makefile index 1462bdcb..3e22c3b9 100644 --- a/cli-tests/Makefile +++ b/cli-tests/Makefile @@ -5,7 +5,6 @@ init: ## Install dependencies install-operators: ## Install operators to k8s ../bin/everest install \ --skip-wizard \ - --namespace=testing \ --monitoring.enable=0 test-cli: ## Run all tests @@ -17,9 +16,6 @@ test-all-operators: ## Run mongo operator flow tests. Requires minikube in test-mongo-operator: ## Run mongo operator flow tests. Requires minikube installed and /etc/hosts updated npx playwright test tests/flow/mongodb-operator.spec.ts -multi-namespace-mongo-operator: ## Run mongo operator multi namespace flow tests. Requires minikube installed and /etc/hosts updated - npx playwright test tests/flow/multi-namespace-mongo-operator.spec.ts - test-pg-operator: ## Run pg operator flow tests. Requires minikube installed and /etc/hosts updated npx playwright test tests/flow/pg-operator.spec.ts diff --git a/cli-tests/tests/flow/all-operators.spec.ts b/cli-tests/tests/flow/all-operators.spec.ts index c3395572..6e57deb7 100644 --- a/cli-tests/tests/flow/all-operators.spec.ts +++ b/cli-tests/tests/flow/all-operators.spec.ts @@ -18,6 +18,7 @@ import { faker } from '@faker-js/faker'; test.describe('Everest CLI install', async () => { test.beforeEach(async ({ cli }) => { + await cli.execute('docker-compose -f quickstart.yml up -d --force-recreate --renew-anon-volumes'); await cli.execute('minikube delete'); await cli.execute('minikube start'); // await cli.execute('minikube start --apiserver-name=host.docker.internal'); @@ -26,25 +27,21 @@ test.describe('Everest CLI install', async () => { test('install all operators', async ({ page, cli, request }) => { const verifyClusterResources = async () => { await test.step('verify installed operators in k8s', async () => { - const everest = await cli.exec('kubectl get pods --namespace=percona-everest'); - - await everest.outContainsNormalizedMany([ - 'percona-everest', - 'everest-operator-controller-manager', - ]); const out = await cli.exec('kubectl get pods --namespace=percona-everest-all'); await out.outContainsNormalizedMany([ 'percona-xtradb-cluster-operator', 'percona-server-mongodb-operator', 'percona-postgresql-operator', + 'everest-operator-controller-manager', ]); }); }; + const clusterName = `test-${faker.number.int()}`; await test.step('run everest install command', async () => { const out = await cli.everestExecSkipWizard( - 'install --monitoring.enable=0 --namespace=percona-everest-all', + `install --monitoring.enable=0 --name=${clusterName} --namespace=percona-everest-all`, ); await out.assertSuccess(); @@ -84,13 +81,12 @@ test.describe('Everest CLI install', async () => { }); await test.step('run everest install command using a different namespace', async () => { const install = await cli.everestExecSkipWizard( - 'install --monitoring.enable=0 --namespace=different-everest --namespace=percona-everest-all', + `install --monitoring.enable=0 --namespace=different-everest`, ); await install.assertSuccess(); - const out = await cli.exec('kubectl get clusterrolebinding -n percona-everest everest-admin-cluster-role-binding -o yaml'); - + const out = await cli.exec('kubectl get clusterrolebinding everest-admin-cluster-role-binding -o yaml'); await out.assertSuccess(); await out.outContainsNormalizedMany([ @@ -102,16 +98,17 @@ test.describe('Everest CLI install', async () => { await test.step('uninstall Everest', async () => { let out = await cli.everestExec( - 'uninstall --namespace=percona-everest-all --assume-yes', + `uninstall --namespace=percona-everest-all --assume-yes`, ); await out.assertSuccess(); // check that the deployment does not exist - out = await cli.exec('kubectl get deploy percona-everest -n percona-everest'); + out = await cli.exec('kubectl get deploy percona-everest -n percona-everest-all'); await out.outErrContainsNormalizedMany([ 'Error from server (NotFound): deployments.apps "percona-everest" not found', ]); + }); }); }); diff --git a/cli-tests/tests/flow/mongodb-operator.spec.ts b/cli-tests/tests/flow/mongodb-operator.spec.ts index c8c10340..3cc7d960 100644 --- a/cli-tests/tests/flow/mongodb-operator.spec.ts +++ b/cli-tests/tests/flow/mongodb-operator.spec.ts @@ -27,16 +27,11 @@ test.describe('Everest CLI install', async () => { test('install only mongodb-operator', async ({ page, cli, request }) => { const verifyClusterResources = async () => { await test.step('verify installed operators in k8s', async () => { - let out = await cli.exec('kubectl get pods --namespace=percona-everest'); - - await out.outContainsNormalizedMany([ - 'everest-operator-controller-manager', - ]); - - out = await cli.exec('kubectl get pods --namespace=testing'); + const out = await cli.exec('kubectl get pods --namespace=percona-everest'); await out.outContainsNormalizedMany([ 'percona-server-mongodb-operator', + 'everest-operator-controller-manager', ]); await out.outNotContains([ @@ -45,10 +40,11 @@ test.describe('Everest CLI install', async () => { ]); }); }; + const clusterName = `test-${faker.number.int()}`; await test.step('run everest install command', async () => { const out = await cli.everestExecSkipWizard( - 'install --operator.mongodb=true --operator.postgresql=false --operator.xtradb-cluster=false --monitoring.enable=0 --namespace=testing', + `install --operator.mongodb=true --operator.postgresql=false --operator.xtradb-cluster=false --monitoring.enable=0 --name=${clusterName}`, ); await out.assertSuccess(); diff --git a/cli-tests/tests/flow/multi-namespace-mongo-operator.spec.ts b/cli-tests/tests/flow/multi-namespace-mongo-operator.spec.ts deleted file mode 100644 index a15434f9..00000000 --- a/cli-tests/tests/flow/multi-namespace-mongo-operator.spec.ts +++ /dev/null @@ -1,105 +0,0 @@ -// percona-everest-cli -// Copyright (C) 2023 Percona LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -import { test } from '@fixtures'; -// eslint-disable-next-line import/no-extraneous-dependencies -import { faker } from '@faker-js/faker'; - -test.describe('Everest CLI install', async () => { - test.beforeEach(async ({ cli }) => { - await cli.execute('minikube delete'); - await cli.execute('minikube start'); - }); - - test('multiple runs against multiple namespaces', async ({ page, cli, request }) => { - const verifyClusterResources = async () => { - await test.step('verify installed operators in k8s', async () => { - let out = await cli.exec('kubectl get pods --namespace=percona-everest'); - - await out.outContainsNormalizedMany([ - 'everest-operator-controller-manager', - ]); - - out = await cli.exec('kubectl get pods --namespace=dev'); - - await out.outContainsNormalizedMany([ - 'percona-server-mongodb-operator', - ]); - - await out.outNotContains([ - 'percona-postgresql-operator', - 'percona-xtradb-cluster-operator', - ]); - out = await cli.exec('kubectl get pods --namespace=prod'); - - await out.outContainsNormalizedMany([ - 'percona-server-mongodb-operator', - ]); - - await out.outNotContains([ - 'percona-postgresql-operator', - 'percona-xtradb-cluster-operator', - ]); - }); - }; - - await test.step('run everest install command', async () => { - const out = await cli.everestExecSkipWizard( - 'install --operator.mongodb=true --operator.postgresql=false --operator.xtradb-cluster=false --monitoring.enable=0 --namespace=prod --namespace=dev', - ); - - await out.assertSuccess(); - await out.outErrContainsNormalizedMany([ - 'percona-server-mongodb-operator operator has been installed', - 'everest-operator operator has been installed', - ]); - }); - - await page.waitForTimeout(10_000); - - await verifyClusterResources(); - await test.step('re-run everest install command', async () => { - let out = await cli.everestExecSkipWizard( - 'install --operator.mongodb=true --operator.postgresql=true --operator.xtradb-cluster=false --monitoring.enable=0 --namespace=prod --namespace=dev', - ); - - await out.assertSuccess(); - await out.outErrContainsNormalizedMany([ - 'percona-server-mongodb-operator operator has been installed', - 'everest-operator operator has been installed', - ]); - out = await cli.exec('kubectl -n percona-everest get configmap everest-configuration -o yaml'); - await out.outContainsNormalizedMany([ - 'namespaces: prod,dev', - 'operators: percona-server-mongodb-operator,percona-postgresql-operator', - ]); - }); - await test.step('re-run everest install command in the different namespace', async () => { - let out = await cli.everestExecSkipWizard( - 'install --operator.mongodb=true --operator.postgresql=true --operator.xtradb-cluster=false --monitoring.enable=0 --namespace=prod --namespace=dev --namespace=staging', - ); - - await out.assertSuccess(); - await out.outErrContainsNormalizedMany([ - 'percona-server-mongodb-operator operator has been installed', - 'everest-operator operator has been installed', - ]); - out = await cli.exec('kubectl -n percona-everest get configmap everest-configuration -o yaml'); - await out.outContainsNormalizedMany([ - 'namespaces: prod,dev,staging', - 'operators: percona-server-mongodb-operator,percona-postgresql-operator', - ]); - }); - }); -}); diff --git a/cli-tests/tests/flow/pg-operator.spec.ts b/cli-tests/tests/flow/pg-operator.spec.ts index ef2cb40b..e8824bed 100644 --- a/cli-tests/tests/flow/pg-operator.spec.ts +++ b/cli-tests/tests/flow/pg-operator.spec.ts @@ -27,15 +27,11 @@ test.describe('Everest CLI install', async () => { test('install only postgresql-operator', async ({ page, cli, request }) => { const verifyClusterResources = async () => { await test.step('verify installed operators in k8s', async () => { - let out = await cli.exec('kubectl get pods --namespace=percona-everest'); - - await out.outContainsNormalizedMany([ - 'everest-operator-controller-manager', - ]); - out = await cli.exec('kubectl get pods --namespace=testing'); + const out = await cli.exec('kubectl get pods --namespace=percona-everest'); await out.outContainsNormalizedMany([ 'percona-postgresql-operator', + 'everest-operator-controller-manager', ]); await out.outNotContains([ @@ -43,10 +39,11 @@ test.describe('Everest CLI install', async () => { ]); }); }; + const clusterName = `test-${faker.number.int()}`; await test.step('run everest install command', async () => { const out = await cli.everestExecSkipWizard( - 'install --operator.mongodb=false --operator.postgresql=true --operator.xtradb-cluster=false --monitoring.enable=0 --namespace=testing', + `install --operator.mongodb=false --operator.postgresql=true --operator.xtradb-cluster=false --monitoring.enable=0 --name=${clusterName}`, ); await out.assertSuccess(); @@ -62,15 +59,13 @@ test.describe('Everest CLI install', async () => { await test.step('re-run everest install command', async () => { await page.waitForTimeout(60_000); - const operator = await cli.exec('kubectl -n percona-everest get po | grep everest|awk {\'print $1\'}'); - + const operator = await cli.exec(`kubectl -n percona-everest get po | grep everest|awk {'print $1'}`); await operator.assertSuccess(); const out = await cli.everestExecSkipWizard( - 'install --operator.mongodb=false --operator.postgresql=true --operator.xtradb-cluster=true --monitoring.enable=0 --namespace=testing', + `install --operator.mongodb=false --operator.postgresql=true --operator.xtradb-cluster=true --monitoring.enable=0 --name=${clusterName}`, ); - const restartedOperator = await cli.exec('kubectl -n percona-everest get po | grep everest|awk {\'print $1\'}'); - + const restartedOperator = await cli.exec(`kubectl -n percona-everest get po | grep everest|awk {'print $1'}`); await restartedOperator.assertSuccess(); expect(operator.getStdOutLines()[0]).not.toEqual(restartedOperator.getStdOutLines()[0]); diff --git a/cli-tests/tests/flow/pxc-operator.spec.ts b/cli-tests/tests/flow/pxc-operator.spec.ts index 9eaf13db..21d61711 100644 --- a/cli-tests/tests/flow/pxc-operator.spec.ts +++ b/cli-tests/tests/flow/pxc-operator.spec.ts @@ -27,15 +27,11 @@ test.describe('Everest CLI install', async () => { test('install only xtradb-cluster-operator', async ({ page, cli, request }) => { const verifyClusterResources = async () => { await test.step('verify installed operators in k8s', async () => { - let out = await cli.exec('kubectl get pods --namespace=percona-everest'); - - await out.outContainsNormalizedMany([ - 'everest-operator-controller-manager', - ]); - out = await cli.exec('kubectl get pods --namespace=testing'); + const out = await cli.exec('kubectl get pods --namespace=percona-everest'); await out.outContainsNormalizedMany([ 'percona-xtradb-cluster-operator', + 'everest-operator-controller-manager', ]); await out.outNotContains([ @@ -44,10 +40,11 @@ test.describe('Everest CLI install', async () => { ]); }); }; + const clusterName = `test-${faker.number.int()}`; await test.step('run everest install command', async () => { const out = await cli.everestExecSkipWizard( - 'install --operator.mongodb=false --operator.postgresql=false --operator.xtradb-cluster=true --monitoring.enable=0 --namespace=testing', + `install --operator.mongodb=false --operator.postgresql=false --operator.xtradb-cluster=true --monitoring.enable=0 --name=${clusterName}`, ); await out.assertSuccess(); diff --git a/cli-tests/tests/list/database-engines.spec.ts b/cli-tests/tests/list/database-engines.spec.ts index 34d7ffdd..6aa61d8b 100644 --- a/cli-tests/tests/list/database-engines.spec.ts +++ b/cli-tests/tests/list/database-engines.spec.ts @@ -12,12 +12,12 @@ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. -// import { test, expect } from '@fixtures'; -// import { waitForDBEngines } from '@tests/support/kubernetes'; +//import { test, expect } from '@fixtures'; +//import { waitForDBEngines } from '@tests/support/kubernetes'; // -// let kubernetesId = ''; +//let kubernetesId = ''; // -// test.beforeAll(async ({ cli, request }) => { +//test.beforeAll(async ({ cli, request }) => { // const kubernetesList = await request.get('/v1/kubernetes'); // // kubernetesId = (await kubernetesList.json())[0].id; @@ -29,9 +29,9 @@ // intervals: [1000], // timeout: 240 * 1000, // }).toBe(true); -// }); +//}); // -// test.describe('Database engines', async () => { +//test.describe('Database engines', async () => { // test('list', async ({ cli }) => { // const out = await cli.everestExecSilent(`list databaseengines --kubernetes-id ${kubernetesId}`); // @@ -53,4 +53,4 @@ // expect(res?.psmdb?.version).toBeTruthy(); // expect(res?.pxc?.version).toBeTruthy(); // }); -// }); +//}); diff --git a/cli-tests/tests/version.spec.ts b/cli-tests/tests/version.spec.ts index 25295171..a616c2cb 100644 --- a/cli-tests/tests/version.spec.ts +++ b/cli-tests/tests/version.spec.ts @@ -18,13 +18,13 @@ test.describe('Everest CLI "version" validation', async () => { test('version validation', async ({ cli }) => { const out = await cli.everestExecSilent('version'); const version = await cli.exec('git describe --always --dirty|cut -b2-'); - await version.assertSuccess(); await out.assertSuccess(); await out.outContainsNormalizedMany([ 'ProjectName: everestctl', - `Version: ${version.getStdOutLines()[0]}`, + 'Version: ' + version.getStdOutLines()[0], ]); }); + }); diff --git a/commands/delete/cluster.go b/commands/delete/cluster.go index 8f19f2ac..7c6ae2a2 100644 --- a/commands/delete/cluster.go +++ b/commands/delete/cluster.go @@ -44,6 +44,7 @@ func NewClusterCmd(l *zap.SugaredLogger) *cobra.Command { func initClusterFlags(cmd *cobra.Command) { cmd.Flags().StringP("kubeconfig", "k", "~/.kube/config", "Path to a kubeconfig") cmd.Flags().String("namespace", "percona-everest", "Namespace into which Percona Everest components are deployed to") + cmd.Flags().String("name", "", "Kubernetes cluster name in Everest") cmd.Flags().BoolP("assume-yes", "y", false, "Assume yes to all questions") cmd.Flags().BoolP("force", "f", false, "Force removal in case there are database clusters running") cmd.Flags().Bool("ignore-kubernetes-unavailable", false, "Remove cluster even if Kubernetes is not available") @@ -53,6 +54,7 @@ func initClusterViperFlags(cmd *cobra.Command) { viper.BindEnv("kubeconfig") //nolint:errcheck,gosec viper.BindPFlag("kubeconfig", cmd.Flags().Lookup("kubeconfig")) //nolint:errcheck,gosec viper.BindPFlag("namespace", cmd.Flags().Lookup("namespace")) //nolint:errcheck,gosec + viper.BindPFlag("name", cmd.Flags().Lookup("name")) //nolint:errcheck,gosec viper.BindPFlag("assume-yes", cmd.Flags().Lookup("assume-yes")) //nolint:errcheck,gosec viper.BindPFlag("force", cmd.Flags().Lookup("force")) //nolint:errcheck,gosec viper.BindPFlag( //nolint:errcheck,gosec diff --git a/commands/install.go b/commands/install.go index 19ae60a8..d3889a31 100644 --- a/commands/install.go +++ b/commands/install.go @@ -30,8 +30,7 @@ import ( func newInstallCmd(l *zap.SugaredLogger) *cobra.Command { cmd := &cobra.Command{ - Use: "install", - Example: "everestctl install --namespace dev --namespace staging --namespace prod --monitoring.enable=0", + Use: "install", Run: func(cmd *cobra.Command, args []string) { initInstallViperFlags(cmd) c := &install.Config{} @@ -70,7 +69,8 @@ func newInstallCmd(l *zap.SugaredLogger) *cobra.Command { func initInstallFlags(cmd *cobra.Command) { cmd.Flags().StringP("kubeconfig", "k", "~/.kube/config", "Path to a kubeconfig") - cmd.Flags().StringArray("namespace", []string{}, "Namespaces list Percona Everest can manage") + cmd.Flags().StringP("name", "n", "", "Kubernetes cluster name") + cmd.Flags().String("namespace", "percona-everest", "Namespace into which Percona Everest components are deployed to") cmd.Flags().Bool("skip-wizard", false, "Skip installation wizard") cmd.Flags().BoolP("monitoring.enable", "m", false, "Enable monitoring") @@ -109,6 +109,7 @@ func initInstallViperFlags(cmd *cobra.Command) { viper.BindEnv("kubeconfig") //nolint:errcheck,gosec viper.BindPFlag("kubeconfig", cmd.Flags().Lookup("kubeconfig")) //nolint:errcheck,gosec + viper.BindPFlag("name", cmd.Flags().Lookup("name")) //nolint:errcheck,gosec viper.BindPFlag("namespace", cmd.Flags().Lookup("namespace")) //nolint:errcheck,gosec viper.BindPFlag("operator.mongodb", cmd.Flags().Lookup("operator.mongodb")) //nolint:errcheck,gosec diff --git a/commands/uninstall.go b/commands/uninstall.go index 4e529596..8523cabb 100644 --- a/commands/uninstall.go +++ b/commands/uninstall.go @@ -58,7 +58,7 @@ func newUninstallCmd(l *zap.SugaredLogger) *cobra.Command { func initUninstallFlags(cmd *cobra.Command) { cmd.Flags().StringP("kubeconfig", "k", "~/.kube/config", "Path to a kubeconfig") - cmd.Flags().StringArray("namespace", []string{}, "Namespaces list Percona Everest can manage") + cmd.Flags().String("namespace", "percona-everest", "Namespace into which Percona Everest components are deployed to") cmd.Flags().BoolP("assume-yes", "y", false, "Assume yes to all questions") cmd.Flags().BoolP("force", "f", false, "Force removal in case there are database clusters running") } diff --git a/commands/upgrade.go b/commands/upgrade.go index 3c6f5f54..7118de5a 100644 --- a/commands/upgrade.go +++ b/commands/upgrade.go @@ -59,7 +59,8 @@ func newUpgradeCmd(l *zap.SugaredLogger) *cobra.Command { func initUpgradeFlags(cmd *cobra.Command) { cmd.Flags().StringP("kubeconfig", "k", "~/.kube/config", "Path to a kubeconfig") - cmd.Flags().StringArray("namespace", []string{}, "Namespaces list Percona Everest can manage") + cmd.Flags().StringP("name", "n", "", "Kubernetes cluster name") + cmd.Flags().String("namespace", "percona-everest", "Namespace into which Percona Everest components are deployed to") cmd.Flags().Bool("upgrade-olm", false, "Upgrade OLM distribution") cmd.Flags().Bool("skip-wizard", false, "Skip installation wizard") } @@ -67,6 +68,7 @@ func initUpgradeFlags(cmd *cobra.Command) { func initUpgradeViperFlags(cmd *cobra.Command) { viper.BindEnv("kubeconfig") //nolint:errcheck,gosec viper.BindPFlag("kubeconfig", cmd.Flags().Lookup("kubeconfig")) //nolint:errcheck,gosec + viper.BindPFlag("name", cmd.Flags().Lookup("name")) //nolint:errcheck,gosec viper.BindPFlag("namespace", cmd.Flags().Lookup("namespace")) //nolint:errcheck,gosec viper.BindPFlag("upgrade-olm", cmd.Flags().Lookup("upgrade-olm")) //nolint:errcheck,gosec viper.BindPFlag("skip-wizard", cmd.Flags().Lookup("skip-wizard")) //nolint:errcheck,gosec diff --git a/pkg/install/install.go b/pkg/install/install.go index 00cec4db..57797baa 100644 --- a/pkg/install/install.go +++ b/pkg/install/install.go @@ -22,7 +22,6 @@ import ( "errors" "fmt" "net/url" - "strings" "time" "github.com/AlecAivazis/survey/v2" @@ -30,8 +29,6 @@ import ( "github.com/percona/percona-everest-backend/client" "go.uber.org/zap" "golang.org/x/sync/errgroup" - corev1 "k8s.io/api/core/v1" - rbacv1 "k8s.io/api/rbac/v1" k8serrors "k8s.io/apimachinery/pkg/api/errors" "k8s.io/apimachinery/pkg/util/wait" @@ -64,13 +61,6 @@ const ( pgOperatorName = "percona-postgresql-operator" vmOperatorName = "victoriametrics-operator" operatorInstallThreads = 1 - - everestServiceAccount = "everest-admin" - everestServiceAccountRole = "everest-admin-role" - everestServiceAccountRoleBinding = "everest-admin-role-binding" - everestServiceAccountClusterRoleBinding = "everest-admin-cluster-role-binding" - everestWatchNamespacesEnvVar = "WATCH_NAMESPACES" - everestNamespace = "percona-everest" ) type ( @@ -79,8 +69,10 @@ type ( // Config stores configuration for the operators. Config struct { - // Namespaces defines namespaces that everest can operate in. - Namespaces []string `mapstructure:"namespace"` + // Name of the Kubernetes Cluster + Name string + // Namespace defines the namespace operators shall be installed to. + Namespace string // SkipWizard skips wizard during installation. SkipWizard bool `mapstructure:"skip-wizard"` // KubeconfigPath is a path to a kubeconfig @@ -142,20 +134,6 @@ type ( } ) -func (o OperatorConfig) operatorsList() []string { - var operators []string - if o.PXC { - operators = append(operators, pxcOperatorName) - } - if o.PSMDB { - operators = append(operators, psmdbOperatorName) - } - if o.PG { - operators = append(operators, pgOperatorName) - } - return operators -} - // NewInstall returns a new Install struct. func NewInstall(c Config, l *zap.SugaredLogger) (*Install, error) { cli := &Install{ @@ -181,59 +159,19 @@ func (o *Install) Run(ctx context.Context) error { if err := o.populateConfig(); err != nil { return err } - if len(o.config.Namespaces) == 0 { - return errors.New("namespace list is empty") - } - if err := o.createNamespace(everestNamespace); err != nil { + if err := o.provisionNamespace(); err != nil { return err } pwd, err := o.generatePassword(ctx) if err != nil { return err } - if err := o.provisionOLM(ctx); err != nil { - return err - } - o.l.Info("Creating operator group for the everest") - if err := o.kubeClient.CreateOperatorGroup(ctx, operatorGroup, everestNamespace, o.config.Namespaces); err != nil { - return err - } - if err := o.provisionAllNamespaces(ctx); err != nil { - return err - } - if err := o.installEverest(ctx, pwd); err != nil { + if err := o.configureEverestConnector(pwd.Password); err != nil { return err } - o.l.Info("Updating cluster role bingings for the everest-admin") - if err := o.kubeClient.UpdateClusterRoleBinding(ctx, everestServiceAccountClusterRoleBinding, o.config.Namespaces); err != nil { + if err := o.performProvisioning(ctx); err != nil { return err } - if o.config.Monitoring.Enable { - if err := o.provisionMonitoring(ctx); err != nil { - return err - } - } - sleep := time.Second - for i := 0; i < 3; i++ { - updated, err := o.kubeClient.PersistConfiguration(ctx, everestNamespace, o.config.Namespaces, o.config.Operator.operatorsList()) - if err != nil && k8serrors.IsConflict(err) { - sleep *= 2 - o.l.Debug(fmt.Sprintf("retrying persisting configuration. Received error +%v", err)) - continue - } - if err != nil { - return errors.Join(err, errors.New("could not persist configuration")) - } - if updated { - if err := o.kubeClient.RestartEverest(ctx, everestOperatorName, everestNamespace); err != nil { - return err - } - if err := o.kubeClient.RestartEverest(ctx, everestBackendServiceName, everestNamespace); err != nil { - return err - } - } - break - } o.l.Info(pwd) @@ -247,6 +185,10 @@ func (o *Install) populateConfig() error { } } + if o.config.Name == "" { + o.config.Name = o.kubeClient.ClusterName() + } + return nil } @@ -256,11 +198,11 @@ func (o *Install) checkEverestConnection(ctx context.Context) error { return err } -func (o *Install) installEverest(ctx context.Context, pwd *password.ResetResponse) error { - if err := o.installOperator(ctx, o.config.Channel.Everest, everestOperatorName, everestNamespace)(); err != nil { +func (o *Install) performProvisioning(ctx context.Context) error { + if err := o.provisionAllOperators(ctx); err != nil { return err } - d, err := o.kubeClient.GetDeployment(ctx, kubernetes.PerconaEverestDeploymentName, everestNamespace) + d, err := o.kubeClient.GetDeployment(ctx, kubernetes.PerconaEverestDeploymentName, o.config.Namespace) var everestExists bool if err != nil && !k8serrors.IsNotFound(err) { return err @@ -270,58 +212,25 @@ func (o *Install) installEverest(ctx context.Context, pwd *password.ResetRespons } if !everestExists { - o.l.Info(fmt.Sprintf("Deploying Everest to %s", everestNamespace)) - err = o.kubeClient.InstallEverest(ctx, everestNamespace) + o.l.Info(fmt.Sprintf("Deploying Everest to %s", o.config.Namespace)) + err = o.kubeClient.InstallEverest(ctx, o.config.Namespace) if err != nil { return err } - o.l.Info("Everest has been installed. Configuring connection") } - if err := o.configureEverestConnector(pwd.Password); err != nil { - return err - } - return nil -} - -func (o *Install) provisionAllNamespaces(ctx context.Context) error { - for _, namespace := range o.config.Namespaces { - namespace := namespace - if err := o.createNamespace(namespace); err != nil { - return err - } - if err := o.kubeClient.CreateOperatorGroup(ctx, operatorGroup, namespace, []string{}); err != nil { - return err - } - - o.l.Infof("Installing operators into %s namespace", namespace) - if err := o.provisionOperators(ctx, namespace); err != nil { + o.l.Info("Everest has been installed. Configuring connection") + if o.config.Monitoring.Enable { + if err := o.provisionMonitoring(ctx, everestExists); err != nil { return err } - o.l.Info("Creating role for the Everest service account") - err := o.kubeClient.CreateRole(namespace, everestServiceAccountRole, o.serviceAccountRolePolicyRules()) - if err != nil { - return errors.Join(err, errors.New("could not create role")) - } - - o.l.Info("Binding role to the Everest Service account") - err = o.kubeClient.CreateRoleBinding( - namespace, - everestServiceAccountRoleBinding, - everestServiceAccountRole, - everestServiceAccount, - ) - if err != nil { - return errors.Join(err, errors.New("could not create role binding")) - } } - return nil } -func (o *Install) provisionMonitoring(ctx context.Context) error { +func (o *Install) provisionMonitoring(ctx context.Context, everestExists bool) error { l := o.l.With("action", "monitoring") l.Info("Preparing k8s cluster for monitoring") - if err := o.kubeClient.ProvisionMonitoring(everestNamespace); err != nil { + if err := o.kubeClient.ProvisionMonitoring(o.config.Namespace); err != nil { return errors.Join(err, errors.New("could not provision monitoring configuration")) } @@ -330,6 +239,11 @@ func (o *Install) provisionMonitoring(ctx context.Context) error { return err } o.l.Info("Deploying VMAgent to k8s cluster") + if everestExists { + if err := o.kubeClient.RestartEverest(ctx, everestBackendServiceName, o.config.Namespace); err != nil { + return err + } + } if err := o.checkEverestConnection(ctx); err != nil { var u *url.Error if errors.As(err, &u) { @@ -417,7 +331,7 @@ func (o *Install) createPMMMonitoringInstance(ctx context.Context, name, url, us } func (o *Install) configureEverestConnector(everestPwd string) error { - e, err := everestClient.NewProxiedEverest(o.kubeClient.Config(), everestNamespace, everestPwd) + e, err := everestClient.NewProxiedEverest(o.kubeClient.Config(), o.config.Namespace, everestPwd) if err != nil { return err } @@ -439,19 +353,11 @@ func (o *Install) runWizard() error { } func (o *Install) runEverestWizard() error { - var namespaces string pNamespace := &survey.Input{ - Message: "Namespaces to deploy Everest to. Comma separated", - Default: namespaces, - } - if err := survey.AskOne(pNamespace, &namespaces); err != nil { - return err + Message: "Namespace to deploy Everest to", + Default: o.config.Namespace, } - nsList := strings.Split(namespaces, ",") - for i := range nsList { - o.config.Namespaces = append(o.config.Namespaces, strings.TrimSpace(nsList[i])) - } - return nil + return survey.AskOne(pNamespace, &o.config.Namespace) } func (o *Install) runMonitoringWizard() error { @@ -588,15 +494,30 @@ func (o *Install) runInstallWizard() error { return nil } -// createNamespace provisions a namespace for Everest. -func (o *Install) createNamespace(namespace string) error { - o.l.Infof("Creating namespace %s", namespace) - err := o.kubeClient.CreateNamespace(namespace) +// provisionNamespace provisions a namespace for Everest. +func (o *Install) provisionNamespace() error { + o.l.Infof("Creating namespace %s", o.config.Namespace) + err := o.kubeClient.CreateNamespace(o.config.Namespace) if err != nil { return errors.Join(err, errors.New("could not provision namespace")) } - o.l.Infof("Namespace %s has been created", namespace) + o.l.Infof("Namespace %s has been created", o.config.Namespace) + return nil +} + +// provisionAllOperators provisions all configured operators to a k8s cluster. +func (o *Install) provisionAllOperators(ctx context.Context) error { + o.l.Info("Started provisioning the cluster") + + if err := o.provisionOLM(ctx); err != nil { + return err + } + + if err := o.provisionInstall(ctx); err != nil { + return err + } + return nil } @@ -617,7 +538,11 @@ func (o *Install) provisionOLM(ctx context.Context) error { return nil } -func (o *Install) provisionOperators(ctx context.Context, namespace string) error { +func (o *Install) provisionInstall(ctx context.Context) error { + deploymentsBefore, err := o.kubeClient.ListEngineDeploymentNames(ctx, o.config.Namespace) + if err != nil { + return err + } g, gCtx := errgroup.WithContext(ctx) // We set the limit to 1 since operator installation // requires an update to the same installation plan which @@ -626,26 +551,36 @@ func (o *Install) provisionOperators(ctx context.Context, namespace string) erro g.SetLimit(operatorInstallThreads) if o.config.Monitoring.Enable { - g.Go(o.installOperator(gCtx, o.config.Channel.VictoriaMetrics, vmOperatorName, namespace)) + g.Go(o.installOperator(gCtx, o.config.Channel.VictoriaMetrics, vmOperatorName)) } if o.config.Operator.PXC { - g.Go(o.installOperator(gCtx, o.config.Channel.PXC, pxcOperatorName, namespace)) + g.Go(o.installOperator(gCtx, o.config.Channel.PXC, pxcOperatorName)) } if o.config.Operator.PSMDB { - g.Go(o.installOperator(gCtx, o.config.Channel.PSMDB, psmdbOperatorName, namespace)) + g.Go(o.installOperator(gCtx, o.config.Channel.PSMDB, psmdbOperatorName)) } if o.config.Operator.PG { - g.Go(o.installOperator(gCtx, o.config.Channel.PG, pgOperatorName, namespace)) + g.Go(o.installOperator(gCtx, o.config.Channel.PG, pgOperatorName)) } if err := g.Wait(); err != nil { return err } + if err := o.installOperator(ctx, o.config.Channel.Everest, everestOperatorName)(); err != nil { + return err + } + deploymentsAfter, err := o.kubeClient.ListEngineDeploymentNames(ctx, o.config.Namespace) + if err != nil { + return err + } + if len(deploymentsBefore) != 0 && len(deploymentsBefore) != len(deploymentsAfter) { + return o.restartEverestOperatorPod(ctx) + } return nil } -func (o *Install) installOperator(ctx context.Context, channel, operatorName, namespace string) func() error { +func (o *Install) installOperator(ctx context.Context, channel, operatorName string) func() error { return func() error { // We check if the context has not been cancelled yet to return early if err := ctx.Err(); err != nil { @@ -656,7 +591,7 @@ func (o *Install) installOperator(ctx context.Context, channel, operatorName, na o.l.Infof("Installing %s operator", operatorName) params := kubernetes.InstallOperatorRequest{ - Namespace: namespace, + Namespace: o.config.Namespace, Name: operatorName, OperatorGroup: operatorGroup, CatalogSource: catalogSource, @@ -664,17 +599,6 @@ func (o *Install) installOperator(ctx context.Context, channel, operatorName, na Channel: channel, InstallPlanApproval: v1alpha1.ApprovalManual, } - if len(o.config.Namespaces) != 0 && operatorName == everestOperatorName { - params.TargetNamespaces = o.config.Namespaces - params.SubscriptionConfig = &v1alpha1.SubscriptionConfig{ - Env: []corev1.EnvVar{ - { - Name: everestWatchNamespacesEnvVar, - Value: strings.Join(o.config.Namespaces, ","), - }, - }, - } - } if err := o.kubeClient.InstallOperator(ctx, params); err != nil { o.l.Errorf("failed installing %s operator", operatorName) @@ -686,63 +610,13 @@ func (o *Install) installOperator(ctx context.Context, channel, operatorName, na } } -func (o *Install) serviceAccountRolePolicyRules() []rbacv1.PolicyRule { - return []rbacv1.PolicyRule{ - { - APIGroups: []string{"everest.percona.com"}, - Resources: []string{"databaseclusters"}, - Verbs: []string{"*"}, - }, - { - APIGroups: []string{"everest.percona.com"}, - Resources: []string{"databaseengines"}, - Verbs: []string{"*"}, - }, - { - APIGroups: []string{"everest.percona.com"}, - Resources: []string{"databaseclusterrestores"}, - Verbs: []string{"*"}, - }, - { - APIGroups: []string{"everest.percona.com"}, - Resources: []string{"databaseclusterbackups"}, - Verbs: []string{"*"}, - }, - { - APIGroups: []string{"everest.percona.com"}, - Resources: []string{"backupstorages"}, - Verbs: []string{"*"}, - }, - { - APIGroups: []string{"everest.percona.com"}, - Resources: []string{"monitoringconfigs"}, - Verbs: []string{"*"}, - }, - { - APIGroups: []string{"operator.victoriametrics.com"}, - Resources: []string{"vmagents"}, - Verbs: []string{"*"}, - }, - { - APIGroups: []string{""}, - Resources: []string{"namespaces"}, - Verbs: []string{"get"}, - }, - { - APIGroups: []string{""}, - Resources: []string{"secrets"}, - Verbs: []string{"*"}, - }, - } -} - func (o *Install) generatePassword(ctx context.Context) (*password.ResetResponse, error) { o.l.Info("Creating password for Everest") r, err := password.NewReset( password.ResetConfig{ KubeconfigPath: o.config.KubeconfigPath, - Namespace: everestNamespace, + Namespace: o.config.Namespace, }, o.l, ) @@ -759,3 +633,7 @@ func (o *Install) generatePassword(ctx context.Context) (*password.ResetResponse return res, nil } + +func (o *Install) restartEverestOperatorPod(ctx context.Context) error { + return o.kubeClient.RestartEverest(ctx, "everest-operator", o.config.Namespace) +} diff --git a/pkg/kubernetes/client/client.go b/pkg/kubernetes/client/client.go index 8e9b09b8..c839eabb 100644 --- a/pkg/kubernetes/client/client.go +++ b/pkg/kubernetes/client/client.go @@ -41,7 +41,6 @@ import ( "gopkg.in/yaml.v3" appsv1 "k8s.io/api/apps/v1" corev1 "k8s.io/api/core/v1" - rbacv1 "k8s.io/api/rbac/v1" storagev1 "k8s.io/api/storage/v1" apiextv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" apiextv1clientset "k8s.io/apiextensions-apiserver/pkg/client/clientset/clientset" @@ -85,6 +84,8 @@ const ( defaultAPIURIPath = "/api" defaultAPIsURIPath = "/apis" + + disableTelemetryEnvVar = "DISABLE_TELEMETRY" ) // Each level has 2 spaces for PrefixWriter. @@ -798,6 +799,21 @@ func (c *Client) applyTemplateCustomization(u *unstructured.Unstructured, namesp } func (c *Client) updateClusterRoleBinding(u *unstructured.Unstructured, namespace string) error { + cl, err := c.kubeClient() + if err != nil { + return err + } + binding := &unstructured.Unstructured{} + binding.SetGroupVersionKind(schema.GroupVersionKind{ + Group: "rbac.authorization.k8s.io", + Kind: "ClusterRoleBinding", + Version: "v1", + }) + err = cl.Get(context.Background(), types.NamespacedName{Name: "everest-admin-cluster-role-binding"}, binding) + if err != nil && !apierrors.IsNotFound(err) { + return err + } + sub, ok, err := unstructured.NestedFieldNoCopy(u.Object, "subjects") if err != nil { return err @@ -822,6 +838,22 @@ func (c *Client) updateClusterRoleBinding(u *unstructured.Unstructured, namespac return err } } + if binding.GetName() == "" { + return nil + } + + bindingSub, ok, err := unstructured.NestedFieldNoCopy(binding.Object, "subjects") + if err != nil { + return err + } + if !ok { + return nil + } + bindingSubjects, ok := bindingSub.([]interface{}) + if !ok { + return nil + } + subjects = append(subjects, bindingSubjects...) return unstructured.SetNestedSlice(u.Object, subjects, "subjects") } @@ -1123,7 +1155,7 @@ func (c *Client) GetOperatorGroup(ctx context.Context, namespace, name string) ( } // CreateOperatorGroup creates an operator group to be used as part of a subscription. -func (c *Client) CreateOperatorGroup(ctx context.Context, namespace, name string, targetNamespaces []string) (*v1.OperatorGroup, error) { +func (c *Client) CreateOperatorGroup(ctx context.Context, namespace, name string) (*v1.OperatorGroup, error) { operatorClient, err := versioned.NewForConfig(c.restConfig) if err != nil { return nil, errors.Join(err, errors.New("cannot create an operator client instance")) @@ -1138,7 +1170,7 @@ func (c *Client) CreateOperatorGroup(ctx context.Context, namespace, name string Namespace: namespace, }, Spec: v1.OperatorGroupSpec{ - TargetNamespaces: targetNamespaces, + TargetNamespaces: []string{namespace}, }, Status: v1.OperatorGroupStatus{ LastUpdated: &metav1.Time{ @@ -1150,25 +1182,6 @@ func (c *Client) CreateOperatorGroup(ctx context.Context, namespace, name string return operatorClient.OperatorsV1().OperatorGroups(namespace).Create(ctx, og, metav1.CreateOptions{}) } -// CreateSubscription creates an OLM subscription. -func (c *Client) CreateSubscription(ctx context.Context, namespace string, subscription *v1alpha1.Subscription) (*v1alpha1.Subscription, error) { - operatorClient, err := versioned.NewForConfig(c.restConfig) - if err != nil { - return nil, errors.Join(err, errors.New("cannot create an operator client instance")) - } - sub, err := operatorClient. - OperatorsV1alpha1(). - Subscriptions(namespace). - Create(ctx, subscription, metav1.CreateOptions{}) - if err != nil { - if apierrors.IsAlreadyExists(err) { - return sub, nil - } - return sub, err - } - return sub, nil -} - // CreateSubscriptionForCatalog creates an OLM subscription. func (c *Client) CreateSubscriptionForCatalog(ctx context.Context, namespace, name, catalogNamespace, catalog, packageName, channel, startingCSV string, approval v1alpha1.Approval, @@ -1178,6 +1191,11 @@ func (c *Client) CreateSubscriptionForCatalog(ctx context.Context, namespace, na return nil, errors.Join(err, errors.New("cannot create an operator client instance")) } + disableTelemetry, ok := os.LookupEnv(disableTelemetryEnvVar) + if !ok || disableTelemetry != "true" { + disableTelemetry = "false" + } + subscription := &v1alpha1.Subscription{ TypeMeta: metav1.TypeMeta{ Kind: v1alpha1.SubscriptionKind, @@ -1194,6 +1212,14 @@ func (c *Client) CreateSubscriptionForCatalog(ctx context.Context, namespace, na Channel: channel, StartingCSV: startingCSV, InstallPlanApproval: approval, + Config: &v1alpha1.SubscriptionConfig{ + Env: []corev1.EnvVar{ + { + Name: disableTelemetryEnvVar, + Value: disableTelemetry, + }, + }, + }, }, } sub, err := operatorClient. @@ -1365,18 +1391,3 @@ func (c *Client) DeleteFile(fileBytes []byte) error { func (c *Client) GetService(ctx context.Context, namespace, name string) (*corev1.Service, error) { return c.clientset.CoreV1().Services(namespace).Get(ctx, name, metav1.GetOptions{}) } - -// CreateConfigMap creates config map in the provided namespace. -func (c *Client) CreateConfigMap(ctx context.Context, namespace string, configMap *corev1.ConfigMap) (*corev1.ConfigMap, error) { - return c.clientset.CoreV1().ConfigMaps(namespace).Create(ctx, configMap, metav1.CreateOptions{}) -} - -// GetConfigMap fetches the config map in the provided namespace. -func (c *Client) GetConfigMap(ctx context.Context, namespace, name string) (*corev1.ConfigMap, error) { - return c.clientset.CoreV1().ConfigMaps(namespace).Get(ctx, name, metav1.GetOptions{}) -} - -// GetClusterRoleBinding returns cluster role binding by given name. -func (c *Client) GetClusterRoleBinding(ctx context.Context, name string) (*rbacv1.ClusterRoleBinding, error) { - return c.clientset.RbacV1().ClusterRoleBindings().Get(ctx, name, metav1.GetOptions{}) -} diff --git a/pkg/kubernetes/client/kubeclient_interface.go b/pkg/kubernetes/client/kubeclient_interface.go index 439ae506..e5c55768 100644 --- a/pkg/kubernetes/client/kubeclient_interface.go +++ b/pkg/kubernetes/client/kubeclient_interface.go @@ -11,7 +11,6 @@ import ( everestv1alpha1 "github.com/percona/everest-operator/api/v1alpha1" appsv1 "k8s.io/api/apps/v1" corev1 "k8s.io/api/core/v1" - rbacv1 "k8s.io/api/rbac/v1" storagev1 "k8s.io/api/storage/v1" apiextv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -88,9 +87,7 @@ type KubeClientConnector interface { // GetOperatorGroup retrieves an operator group details by namespace and name. GetOperatorGroup(ctx context.Context, namespace, name string) (*v1.OperatorGroup, error) // CreateOperatorGroup creates an operator group to be used as part of a subscription. - CreateOperatorGroup(ctx context.Context, namespace, name string, targetNamespaces []string) (*v1.OperatorGroup, error) - // CreateSubscription creates an OLM subscription. - CreateSubscription(ctx context.Context, namespace string, subscription *v1alpha1.Subscription) (*v1alpha1.Subscription, error) + CreateOperatorGroup(ctx context.Context, namespace, name string) (*v1.OperatorGroup, error) // CreateSubscriptionForCatalog creates an OLM subscription. CreateSubscriptionForCatalog(ctx context.Context, namespace, name, catalogNamespace, catalog, packageName, channel, startingCSV string, approval v1alpha1.Approval) (*v1alpha1.Subscription, error) // GetSubscription retrieves an OLM subscription by namespace and name. @@ -118,11 +115,6 @@ type KubeClientConnector interface { DeleteFile(fileBytes []byte) error // GetService returns k8s service by provided namespace and name. GetService(ctx context.Context, namespace, name string) (*corev1.Service, error) - // CreateConfigMap creates config map in the provided namespace. - CreateConfigMap(ctx context.Context, namespace string, configMap *corev1.ConfigMap) (*corev1.ConfigMap, error) - // GetConfigMap fetches the config map in the provided namespace. - GetConfigMap(ctx context.Context, namespace, name string) (*corev1.ConfigMap, error) - GetClusterRoleBinding(ctx context.Context, name string) (*rbacv1.ClusterRoleBinding, error) // DeleteAllMonitoringResources deletes all resources related to monitoring from k8s cluster. DeleteAllMonitoringResources(ctx context.Context, namespace string) error // GetNamespace returns a namespace. diff --git a/pkg/kubernetes/client/mock_kube_client_connector.go b/pkg/kubernetes/client/mock_kube_client_connector.go index 1550c4ee..aa4c055f 100644 --- a/pkg/kubernetes/client/mock_kube_client_connector.go +++ b/pkg/kubernetes/client/mock_kube_client_connector.go @@ -5,14 +5,13 @@ package client import ( context "context" - operatorsv1 "github.com/operator-framework/api/pkg/operators/v1" + v1 "github.com/operator-framework/api/pkg/operators/v1" v1alpha1 "github.com/operator-framework/api/pkg/operators/v1alpha1" - apisoperatorsv1 "github.com/operator-framework/operator-lifecycle-manager/pkg/package-server/apis/operators/v1" + operatorsv1 "github.com/operator-framework/operator-lifecycle-manager/pkg/package-server/apis/operators/v1" apiv1alpha1 "github.com/percona/everest-operator/api/v1alpha1" mock "github.com/stretchr/testify/mock" appsv1 "k8s.io/api/apps/v1" - v1 "k8s.io/api/core/v1" - rbacv1 "k8s.io/api/rbac/v1" + corev1 "k8s.io/api/core/v1" storagev1 "k8s.io/api/storage/v1" apiextensionsv1 "k8s.io/apiextensions-apiserver/pkg/apis/apiextensions/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -101,32 +100,6 @@ func (_m *MockKubeClientConnector) Config() *rest.Config { return r0 } -// CreateConfigMap provides a mock function with given fields: ctx, namespace, configMap -func (_m *MockKubeClientConnector) CreateConfigMap(ctx context.Context, namespace string, configMap *v1.ConfigMap) (*v1.ConfigMap, error) { - ret := _m.Called(ctx, namespace, configMap) - - var r0 *v1.ConfigMap - var r1 error - if rf, ok := ret.Get(0).(func(context.Context, string, *v1.ConfigMap) (*v1.ConfigMap, error)); ok { - return rf(ctx, namespace, configMap) - } - if rf, ok := ret.Get(0).(func(context.Context, string, *v1.ConfigMap) *v1.ConfigMap); ok { - r0 = rf(ctx, namespace, configMap) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(*v1.ConfigMap) - } - } - - if rf, ok := ret.Get(1).(func(context.Context, string, *v1.ConfigMap) error); ok { - r1 = rf(ctx, namespace, configMap) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - // CreateNamespace provides a mock function with given fields: name func (_m *MockKubeClientConnector) CreateNamespace(name string) error { ret := _m.Called(name) @@ -141,51 +114,25 @@ func (_m *MockKubeClientConnector) CreateNamespace(name string) error { return r0 } -// CreateOperatorGroup provides a mock function with given fields: ctx, namespace, name, targetNamespaces -func (_m *MockKubeClientConnector) CreateOperatorGroup(ctx context.Context, namespace string, name string, targetNamespaces []string) (*operatorsv1.OperatorGroup, error) { - ret := _m.Called(ctx, namespace, name, targetNamespaces) - - var r0 *operatorsv1.OperatorGroup - var r1 error - if rf, ok := ret.Get(0).(func(context.Context, string, string, []string) (*operatorsv1.OperatorGroup, error)); ok { - return rf(ctx, namespace, name, targetNamespaces) - } - if rf, ok := ret.Get(0).(func(context.Context, string, string, []string) *operatorsv1.OperatorGroup); ok { - r0 = rf(ctx, namespace, name, targetNamespaces) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(*operatorsv1.OperatorGroup) - } - } - - if rf, ok := ret.Get(1).(func(context.Context, string, string, []string) error); ok { - r1 = rf(ctx, namespace, name, targetNamespaces) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - -// CreateSubscription provides a mock function with given fields: ctx, namespace, subscription -func (_m *MockKubeClientConnector) CreateSubscription(ctx context.Context, namespace string, subscription *v1alpha1.Subscription) (*v1alpha1.Subscription, error) { - ret := _m.Called(ctx, namespace, subscription) +// CreateOperatorGroup provides a mock function with given fields: ctx, namespace, name +func (_m *MockKubeClientConnector) CreateOperatorGroup(ctx context.Context, namespace string, name string) (*v1.OperatorGroup, error) { + ret := _m.Called(ctx, namespace, name) - var r0 *v1alpha1.Subscription + var r0 *v1.OperatorGroup var r1 error - if rf, ok := ret.Get(0).(func(context.Context, string, *v1alpha1.Subscription) (*v1alpha1.Subscription, error)); ok { - return rf(ctx, namespace, subscription) + if rf, ok := ret.Get(0).(func(context.Context, string, string) (*v1.OperatorGroup, error)); ok { + return rf(ctx, namespace, name) } - if rf, ok := ret.Get(0).(func(context.Context, string, *v1alpha1.Subscription) *v1alpha1.Subscription); ok { - r0 = rf(ctx, namespace, subscription) + if rf, ok := ret.Get(0).(func(context.Context, string, string) *v1.OperatorGroup); ok { + r0 = rf(ctx, namespace, name) } else { if ret.Get(0) != nil { - r0 = ret.Get(0).(*v1alpha1.Subscription) + r0 = ret.Get(0).(*v1.OperatorGroup) } } - if rf, ok := ret.Get(1).(func(context.Context, string, *v1alpha1.Subscription) error); ok { - r1 = rf(ctx, namespace, subscription) + if rf, ok := ret.Get(1).(func(context.Context, string, string) error); ok { + r1 = rf(ctx, namespace, name) } else { r1 = ret.Error(1) } @@ -332,15 +279,15 @@ func (_m *MockKubeClientConnector) DoRolloutWait(ctx context.Context, key types. } // GenerateKubeConfigWithToken provides a mock function with given fields: user, secret -func (_m *MockKubeClientConnector) GenerateKubeConfigWithToken(user string, secret *v1.Secret) ([]byte, error) { +func (_m *MockKubeClientConnector) GenerateKubeConfigWithToken(user string, secret *corev1.Secret) ([]byte, error) { ret := _m.Called(user, secret) var r0 []byte var r1 error - if rf, ok := ret.Get(0).(func(string, *v1.Secret) ([]byte, error)); ok { + if rf, ok := ret.Get(0).(func(string, *corev1.Secret) ([]byte, error)); ok { return rf(user, secret) } - if rf, ok := ret.Get(0).(func(string, *v1.Secret) []byte); ok { + if rf, ok := ret.Get(0).(func(string, *corev1.Secret) []byte); ok { r0 = rf(user, secret) } else { if ret.Get(0) != nil { @@ -348,7 +295,7 @@ func (_m *MockKubeClientConnector) GenerateKubeConfigWithToken(user string, secr } } - if rf, ok := ret.Get(1).(func(string, *v1.Secret) error); ok { + if rf, ok := ret.Get(1).(func(string, *corev1.Secret) error); ok { r1 = rf(user, secret) } else { r1 = ret.Error(1) @@ -357,32 +304,6 @@ func (_m *MockKubeClientConnector) GenerateKubeConfigWithToken(user string, secr return r0, r1 } -// GetClusterRoleBinding provides a mock function with given fields: ctx, name -func (_m *MockKubeClientConnector) GetClusterRoleBinding(ctx context.Context, name string) (*rbacv1.ClusterRoleBinding, error) { - ret := _m.Called(ctx, name) - - var r0 *rbacv1.ClusterRoleBinding - var r1 error - if rf, ok := ret.Get(0).(func(context.Context, string) (*rbacv1.ClusterRoleBinding, error)); ok { - return rf(ctx, name) - } - if rf, ok := ret.Get(0).(func(context.Context, string) *rbacv1.ClusterRoleBinding); ok { - r0 = rf(ctx, name) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(*rbacv1.ClusterRoleBinding) - } - } - - if rf, ok := ret.Get(1).(func(context.Context, string) error); ok { - r1 = rf(ctx, name) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - // GetClusterServiceVersion provides a mock function with given fields: ctx, key func (_m *MockKubeClientConnector) GetClusterServiceVersion(ctx context.Context, key types.NamespacedName) (*v1alpha1.ClusterServiceVersion, error) { ret := _m.Called(ctx, key) @@ -409,32 +330,6 @@ func (_m *MockKubeClientConnector) GetClusterServiceVersion(ctx context.Context, return r0, r1 } -// GetConfigMap provides a mock function with given fields: ctx, namespace, name -func (_m *MockKubeClientConnector) GetConfigMap(ctx context.Context, namespace string, name string) (*v1.ConfigMap, error) { - ret := _m.Called(ctx, namespace, name) - - var r0 *v1.ConfigMap - var r1 error - if rf, ok := ret.Get(0).(func(context.Context, string, string) (*v1.ConfigMap, error)); ok { - return rf(ctx, namespace, name) - } - if rf, ok := ret.Get(0).(func(context.Context, string, string) *v1.ConfigMap); ok { - r0 = rf(ctx, namespace, name) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(*v1.ConfigMap) - } - } - - if rf, ok := ret.Get(1).(func(context.Context, string, string) error); ok { - r1 = rf(ctx, namespace, name) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - // GetDatabaseCluster provides a mock function with given fields: ctx, name func (_m *MockKubeClientConnector) GetDatabaseCluster(ctx context.Context, name string) (*apiv1alpha1.DatabaseCluster, error) { ret := _m.Called(ctx, name) @@ -562,19 +457,19 @@ func (_m *MockKubeClientConnector) GetLogs(ctx context.Context, pod string, cont } // GetNamespace provides a mock function with given fields: ctx, name -func (_m *MockKubeClientConnector) GetNamespace(ctx context.Context, name string) (*v1.Namespace, error) { +func (_m *MockKubeClientConnector) GetNamespace(ctx context.Context, name string) (*corev1.Namespace, error) { ret := _m.Called(ctx, name) - var r0 *v1.Namespace + var r0 *corev1.Namespace var r1 error - if rf, ok := ret.Get(0).(func(context.Context, string) (*v1.Namespace, error)); ok { + if rf, ok := ret.Get(0).(func(context.Context, string) (*corev1.Namespace, error)); ok { return rf(ctx, name) } - if rf, ok := ret.Get(0).(func(context.Context, string) *v1.Namespace); ok { + if rf, ok := ret.Get(0).(func(context.Context, string) *corev1.Namespace); ok { r0 = rf(ctx, name) } else { if ret.Get(0) != nil { - r0 = ret.Get(0).(*v1.Namespace) + r0 = ret.Get(0).(*corev1.Namespace) } } @@ -588,19 +483,19 @@ func (_m *MockKubeClientConnector) GetNamespace(ctx context.Context, name string } // GetNodes provides a mock function with given fields: ctx -func (_m *MockKubeClientConnector) GetNodes(ctx context.Context) (*v1.NodeList, error) { +func (_m *MockKubeClientConnector) GetNodes(ctx context.Context) (*corev1.NodeList, error) { ret := _m.Called(ctx) - var r0 *v1.NodeList + var r0 *corev1.NodeList var r1 error - if rf, ok := ret.Get(0).(func(context.Context) (*v1.NodeList, error)); ok { + if rf, ok := ret.Get(0).(func(context.Context) (*corev1.NodeList, error)); ok { return rf(ctx) } - if rf, ok := ret.Get(0).(func(context.Context) *v1.NodeList); ok { + if rf, ok := ret.Get(0).(func(context.Context) *corev1.NodeList); ok { r0 = rf(ctx) } else { if ret.Get(0) != nil { - r0 = ret.Get(0).(*v1.NodeList) + r0 = ret.Get(0).(*corev1.NodeList) } } @@ -614,19 +509,19 @@ func (_m *MockKubeClientConnector) GetNodes(ctx context.Context) (*v1.NodeList, } // GetOperatorGroup provides a mock function with given fields: ctx, namespace, name -func (_m *MockKubeClientConnector) GetOperatorGroup(ctx context.Context, namespace string, name string) (*operatorsv1.OperatorGroup, error) { +func (_m *MockKubeClientConnector) GetOperatorGroup(ctx context.Context, namespace string, name string) (*v1.OperatorGroup, error) { ret := _m.Called(ctx, namespace, name) - var r0 *operatorsv1.OperatorGroup + var r0 *v1.OperatorGroup var r1 error - if rf, ok := ret.Get(0).(func(context.Context, string, string) (*operatorsv1.OperatorGroup, error)); ok { + if rf, ok := ret.Get(0).(func(context.Context, string, string) (*v1.OperatorGroup, error)); ok { return rf(ctx, namespace, name) } - if rf, ok := ret.Get(0).(func(context.Context, string, string) *operatorsv1.OperatorGroup); ok { + if rf, ok := ret.Get(0).(func(context.Context, string, string) *v1.OperatorGroup); ok { r0 = rf(ctx, namespace, name) } else { if ret.Get(0) != nil { - r0 = ret.Get(0).(*operatorsv1.OperatorGroup) + r0 = ret.Get(0).(*v1.OperatorGroup) } } @@ -640,19 +535,19 @@ func (_m *MockKubeClientConnector) GetOperatorGroup(ctx context.Context, namespa } // GetPackageManifest provides a mock function with given fields: ctx, name -func (_m *MockKubeClientConnector) GetPackageManifest(ctx context.Context, name string) (*apisoperatorsv1.PackageManifest, error) { +func (_m *MockKubeClientConnector) GetPackageManifest(ctx context.Context, name string) (*operatorsv1.PackageManifest, error) { ret := _m.Called(ctx, name) - var r0 *apisoperatorsv1.PackageManifest + var r0 *operatorsv1.PackageManifest var r1 error - if rf, ok := ret.Get(0).(func(context.Context, string) (*apisoperatorsv1.PackageManifest, error)); ok { + if rf, ok := ret.Get(0).(func(context.Context, string) (*operatorsv1.PackageManifest, error)); ok { return rf(ctx, name) } - if rf, ok := ret.Get(0).(func(context.Context, string) *apisoperatorsv1.PackageManifest); ok { + if rf, ok := ret.Get(0).(func(context.Context, string) *operatorsv1.PackageManifest); ok { r0 = rf(ctx, name) } else { if ret.Get(0) != nil { - r0 = ret.Get(0).(*apisoperatorsv1.PackageManifest) + r0 = ret.Get(0).(*operatorsv1.PackageManifest) } } @@ -666,19 +561,19 @@ func (_m *MockKubeClientConnector) GetPackageManifest(ctx context.Context, name } // GetPersistentVolumes provides a mock function with given fields: ctx -func (_m *MockKubeClientConnector) GetPersistentVolumes(ctx context.Context) (*v1.PersistentVolumeList, error) { +func (_m *MockKubeClientConnector) GetPersistentVolumes(ctx context.Context) (*corev1.PersistentVolumeList, error) { ret := _m.Called(ctx) - var r0 *v1.PersistentVolumeList + var r0 *corev1.PersistentVolumeList var r1 error - if rf, ok := ret.Get(0).(func(context.Context) (*v1.PersistentVolumeList, error)); ok { + if rf, ok := ret.Get(0).(func(context.Context) (*corev1.PersistentVolumeList, error)); ok { return rf(ctx) } - if rf, ok := ret.Get(0).(func(context.Context) *v1.PersistentVolumeList); ok { + if rf, ok := ret.Get(0).(func(context.Context) *corev1.PersistentVolumeList); ok { r0 = rf(ctx) } else { if ret.Get(0) != nil { - r0 = ret.Get(0).(*v1.PersistentVolumeList) + r0 = ret.Get(0).(*corev1.PersistentVolumeList) } } @@ -692,19 +587,19 @@ func (_m *MockKubeClientConnector) GetPersistentVolumes(ctx context.Context) (*v } // GetPods provides a mock function with given fields: ctx, namespace, labelSelector -func (_m *MockKubeClientConnector) GetPods(ctx context.Context, namespace string, labelSelector *metav1.LabelSelector) (*v1.PodList, error) { +func (_m *MockKubeClientConnector) GetPods(ctx context.Context, namespace string, labelSelector *metav1.LabelSelector) (*corev1.PodList, error) { ret := _m.Called(ctx, namespace, labelSelector) - var r0 *v1.PodList + var r0 *corev1.PodList var r1 error - if rf, ok := ret.Get(0).(func(context.Context, string, *metav1.LabelSelector) (*v1.PodList, error)); ok { + if rf, ok := ret.Get(0).(func(context.Context, string, *metav1.LabelSelector) (*corev1.PodList, error)); ok { return rf(ctx, namespace, labelSelector) } - if rf, ok := ret.Get(0).(func(context.Context, string, *metav1.LabelSelector) *v1.PodList); ok { + if rf, ok := ret.Get(0).(func(context.Context, string, *metav1.LabelSelector) *corev1.PodList); ok { r0 = rf(ctx, namespace, labelSelector) } else { if ret.Get(0) != nil { - r0 = ret.Get(0).(*v1.PodList) + r0 = ret.Get(0).(*corev1.PodList) } } @@ -718,19 +613,19 @@ func (_m *MockKubeClientConnector) GetPods(ctx context.Context, namespace string } // GetSecret provides a mock function with given fields: ctx, name, namespace -func (_m *MockKubeClientConnector) GetSecret(ctx context.Context, name string, namespace string) (*v1.Secret, error) { +func (_m *MockKubeClientConnector) GetSecret(ctx context.Context, name string, namespace string) (*corev1.Secret, error) { ret := _m.Called(ctx, name, namespace) - var r0 *v1.Secret + var r0 *corev1.Secret var r1 error - if rf, ok := ret.Get(0).(func(context.Context, string, string) (*v1.Secret, error)); ok { + if rf, ok := ret.Get(0).(func(context.Context, string, string) (*corev1.Secret, error)); ok { return rf(ctx, name, namespace) } - if rf, ok := ret.Get(0).(func(context.Context, string, string) *v1.Secret); ok { + if rf, ok := ret.Get(0).(func(context.Context, string, string) *corev1.Secret); ok { r0 = rf(ctx, name, namespace) } else { if ret.Get(0) != nil { - r0 = ret.Get(0).(*v1.Secret) + r0 = ret.Get(0).(*corev1.Secret) } } @@ -744,19 +639,19 @@ func (_m *MockKubeClientConnector) GetSecret(ctx context.Context, name string, n } // GetSecretsForServiceAccount provides a mock function with given fields: ctx, accountName -func (_m *MockKubeClientConnector) GetSecretsForServiceAccount(ctx context.Context, accountName string) (*v1.Secret, error) { +func (_m *MockKubeClientConnector) GetSecretsForServiceAccount(ctx context.Context, accountName string) (*corev1.Secret, error) { ret := _m.Called(ctx, accountName) - var r0 *v1.Secret + var r0 *corev1.Secret var r1 error - if rf, ok := ret.Get(0).(func(context.Context, string) (*v1.Secret, error)); ok { + if rf, ok := ret.Get(0).(func(context.Context, string) (*corev1.Secret, error)); ok { return rf(ctx, accountName) } - if rf, ok := ret.Get(0).(func(context.Context, string) *v1.Secret); ok { + if rf, ok := ret.Get(0).(func(context.Context, string) *corev1.Secret); ok { r0 = rf(ctx, accountName) } else { if ret.Get(0) != nil { - r0 = ret.Get(0).(*v1.Secret) + r0 = ret.Get(0).(*corev1.Secret) } } @@ -796,19 +691,19 @@ func (_m *MockKubeClientConnector) GetServerVersion() (*version.Info, error) { } // GetService provides a mock function with given fields: ctx, namespace, name -func (_m *MockKubeClientConnector) GetService(ctx context.Context, namespace string, name string) (*v1.Service, error) { +func (_m *MockKubeClientConnector) GetService(ctx context.Context, namespace string, name string) (*corev1.Service, error) { ret := _m.Called(ctx, namespace, name) - var r0 *v1.Service + var r0 *corev1.Service var r1 error - if rf, ok := ret.Get(0).(func(context.Context, string, string) (*v1.Service, error)); ok { + if rf, ok := ret.Get(0).(func(context.Context, string, string) (*corev1.Service, error)); ok { return rf(ctx, namespace, name) } - if rf, ok := ret.Get(0).(func(context.Context, string, string) *v1.Service); ok { + if rf, ok := ret.Get(0).(func(context.Context, string, string) *corev1.Service); ok { r0 = rf(ctx, namespace, name) } else { if ret.Get(0) != nil { - r0 = ret.Get(0).(*v1.Service) + r0 = ret.Get(0).(*corev1.Service) } } @@ -1028,19 +923,19 @@ func (_m *MockKubeClientConnector) ListDeployments(ctx context.Context, namespac } // ListPods provides a mock function with given fields: ctx, namespace, options -func (_m *MockKubeClientConnector) ListPods(ctx context.Context, namespace string, options metav1.ListOptions) (*v1.PodList, error) { +func (_m *MockKubeClientConnector) ListPods(ctx context.Context, namespace string, options metav1.ListOptions) (*corev1.PodList, error) { ret := _m.Called(ctx, namespace, options) - var r0 *v1.PodList + var r0 *corev1.PodList var r1 error - if rf, ok := ret.Get(0).(func(context.Context, string, metav1.ListOptions) (*v1.PodList, error)); ok { + if rf, ok := ret.Get(0).(func(context.Context, string, metav1.ListOptions) (*corev1.PodList, error)); ok { return rf(ctx, namespace, options) } - if rf, ok := ret.Get(0).(func(context.Context, string, metav1.ListOptions) *v1.PodList); ok { + if rf, ok := ret.Get(0).(func(context.Context, string, metav1.ListOptions) *corev1.PodList); ok { r0 = rf(ctx, namespace, options) } else { if ret.Get(0) != nil { - r0 = ret.Get(0).(*v1.PodList) + r0 = ret.Get(0).(*corev1.PodList) } } @@ -1054,19 +949,19 @@ func (_m *MockKubeClientConnector) ListPods(ctx context.Context, namespace strin } // ListSecrets provides a mock function with given fields: ctx -func (_m *MockKubeClientConnector) ListSecrets(ctx context.Context) (*v1.SecretList, error) { +func (_m *MockKubeClientConnector) ListSecrets(ctx context.Context) (*corev1.SecretList, error) { ret := _m.Called(ctx) - var r0 *v1.SecretList + var r0 *corev1.SecretList var r1 error - if rf, ok := ret.Get(0).(func(context.Context) (*v1.SecretList, error)); ok { + if rf, ok := ret.Get(0).(func(context.Context) (*corev1.SecretList, error)); ok { return rf(ctx) } - if rf, ok := ret.Get(0).(func(context.Context) *v1.SecretList); ok { + if rf, ok := ret.Get(0).(func(context.Context) *corev1.SecretList); ok { r0 = rf(ctx) } else { if ret.Get(0) != nil { - r0 = ret.Get(0).(*v1.SecretList) + r0 = ret.Get(0).(*corev1.SecretList) } } diff --git a/pkg/kubernetes/kubernetes.go b/pkg/kubernetes/kubernetes.go index 4075eb33..8ed05028 100644 --- a/pkg/kubernetes/kubernetes.go +++ b/pkg/kubernetes/kubernetes.go @@ -26,18 +26,15 @@ import ( "io/fs" "log" "net/http" - "os" "strings" "time" - olmv1 "github.com/operator-framework/api/pkg/operators/v1" - olmv1alpha1 "github.com/operator-framework/api/pkg/operators/v1alpha1" + "github.com/operator-framework/api/pkg/operators/v1alpha1" everestv1alpha1 "github.com/percona/everest-operator/api/v1alpha1" "go.uber.org/zap" yamlv3 "gopkg.in/yaml.v3" appsv1 "k8s.io/api/apps/v1" corev1 "k8s.io/api/core/v1" - rbacv1 "k8s.io/api/rbac/v1" storagev1 "k8s.io/api/storage/v1" apierrors "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -82,8 +79,6 @@ const ( databaseClusterAPIVersion = "everest.percona.com/v1alpha1" restartAnnotationKey = "everest.percona.com/restart" managedByKey = "everest.percona.com/managed-by" - disableTelemetryEnvVar = "DISABLE_TELEMETRY" - configMapName = "everest-configuration" // ContainerStateWaiting represents a state when container requires some // operations being done in order to complete start up. ContainerStateWaiting ContainerState = "waiting" @@ -471,9 +466,9 @@ func (k *Kubernetes) InstallOLMOperator(ctx context.Context, upgrade bool) error func (k *Kubernetes) applyCSVs(ctx context.Context, resources []unstructured.Unstructured) error { subscriptions := filterResources(resources, func(r unstructured.Unstructured) bool { return r.GroupVersionKind() == schema.GroupVersionKind{ - Group: olmv1alpha1.GroupName, - Version: olmv1alpha1.GroupVersion, - Kind: olmv1alpha1.SubscriptionKind, + Group: v1alpha1.GroupName, + Version: v1alpha1.GroupVersion, + Kind: v1alpha1.SubscriptionKind, } }) @@ -619,46 +614,20 @@ type InstallOperatorRequest struct { CatalogSource string CatalogSourceNamespace string Channel string - InstallPlanApproval olmv1alpha1.Approval + InstallPlanApproval v1alpha1.Approval StartingCSV string - TargetNamespaces []string - SubscriptionConfig *olmv1alpha1.SubscriptionConfig } // InstallOperator installs an operator via OLM. func (k *Kubernetes) InstallOperator(ctx context.Context, req InstallOperatorRequest) error { - disableTelemetry, ok := os.LookupEnv(disableTelemetryEnvVar) - if !ok || disableTelemetry != "true" { - disableTelemetry = "false" - } - config := &olmv1alpha1.SubscriptionConfig{Env: []corev1.EnvVar{}} - if req.SubscriptionConfig != nil { - config = req.SubscriptionConfig - } - config.Env = append(config.Env, corev1.EnvVar{ - Name: disableTelemetryEnvVar, - Value: disableTelemetry, - }) - subscription := &olmv1alpha1.Subscription{ - TypeMeta: metav1.TypeMeta{ - Kind: olmv1alpha1.SubscriptionKind, - APIVersion: olmv1alpha1.SubscriptionCRDAPIVersion, - }, - ObjectMeta: metav1.ObjectMeta{ - Namespace: req.Namespace, - Name: req.Name, - }, - Spec: &olmv1alpha1.SubscriptionSpec{ - CatalogSource: req.CatalogSource, - CatalogSourceNamespace: "olm", - Package: req.Name, - Channel: req.Channel, - StartingCSV: req.StartingCSV, - InstallPlanApproval: olmv1alpha1.ApprovalManual, - Config: config, - }, + if err := createOperatorGroupIfNeeded(ctx, k.client, req.OperatorGroup, req.Namespace); err != nil { + return err } - subs, err := k.client.CreateSubscription(ctx, req.Namespace, subscription) + + subs, err := k.client.CreateSubscriptionForCatalog( + ctx, req.Namespace, req.Name, "olm", req.CatalogSource, + req.Name, req.Channel, req.StartingCSV, v1alpha1.ApprovalManual, + ) if err != nil { return errors.Join(err, errors.New("cannot create a subscription to install the operator")) } @@ -715,38 +684,23 @@ func (k *Kubernetes) approveInstallPlan(ctx context.Context, namespace, installP return true, nil } -// CreateOperatorGroup creates operator group in the given namespace. -func (k *Kubernetes) CreateOperatorGroup(ctx context.Context, name, namespace string, targetNamespaces []string) error { - targetNamespaces = append(targetNamespaces, namespace) - og, err := k.client.GetOperatorGroup(ctx, namespace, name) - if err != nil && !apierrors.IsNotFound(err) { - return err - } - if err != nil && apierrors.IsNotFound(err) { - _, err = k.client.CreateOperatorGroup(ctx, namespace, name, targetNamespaces) - if err != nil { - return err - } +func createOperatorGroupIfNeeded( + ctx context.Context, + client client.KubeClientConnector, + name, namespace string, +) error { + _, err := client.GetOperatorGroup(ctx, namespace, name) + if err == nil { return nil } - og.Kind = olmv1.OperatorGroupKind - og.APIVersion = "operators.coreos.com/v1" - var update bool - for _, namespace := range targetNamespaces { - namespace := namespace - if !arrayContains(og.Spec.TargetNamespaces, namespace) { - update = true - } - } - if update { - og.Spec.TargetNamespaces = targetNamespaces - return k.client.ApplyObject(og) - } - return nil + + _, err = client.CreateOperatorGroup(ctx, namespace, name) + + return err } // ListSubscriptions all the subscriptions in the namespace. -func (k *Kubernetes) ListSubscriptions(ctx context.Context, namespace string) (*olmv1alpha1.SubscriptionList, error) { +func (k *Kubernetes) ListSubscriptions(ctx context.Context, namespace string) (*v1alpha1.SubscriptionList, error) { return k.client.ListSubscriptions(ctx, namespace) } @@ -768,8 +722,8 @@ func (k *Kubernetes) UpgradeOperator(ctx context.Context, namespace, name string return err } -func (k *Kubernetes) getInstallPlan(ctx context.Context, namespace, name string) (*olmv1alpha1.InstallPlan, error) { - var subs *olmv1alpha1.Subscription +func (k *Kubernetes) getInstallPlan(ctx context.Context, namespace, name string) (*v1alpha1.InstallPlan, error) { + var subs *v1alpha1.Subscription // If the subscription was recently created, the install plan might not be ready yet. err := wait.PollUntilContextTimeout(ctx, pollInterval, pollDuration, false, func(ctx context.Context) (bool, error) { @@ -808,7 +762,7 @@ func (k *Kubernetes) GetServerVersion() (*version.Info, error) { func (k *Kubernetes) GetClusterServiceVersion( ctx context.Context, key types.NamespacedName, -) (*olmv1alpha1.ClusterServiceVersion, error) { +) (*v1alpha1.ClusterServiceVersion, error) { return k.client.GetClusterServiceVersion(ctx, key) } @@ -816,7 +770,7 @@ func (k *Kubernetes) GetClusterServiceVersion( func (k *Kubernetes) ListClusterServiceVersion( ctx context.Context, namespace string, -) (*olmv1alpha1.ClusterServiceVersionList, error) { +) (*v1alpha1.ClusterServiceVersionList, error) { return k.client.ListClusterServiceVersion(ctx, namespace) } @@ -993,126 +947,7 @@ func (k *Kubernetes) DeleteEverest(ctx context.Context, namespace string) error return nil } -// PersistConfiguration stores provided namespaces in the configMap. -func (k *Kubernetes) PersistConfiguration(ctx context.Context, namespace string, namespaces []string, operatorsList []string) (bool, error) { - cMap, err := k.client.GetConfigMap(ctx, namespace, configMapName) - if err != nil && !apierrors.IsNotFound(err) { - return false, err - } - if err != nil && apierrors.IsNotFound(err) { - configMap := &corev1.ConfigMap{ - ObjectMeta: metav1.ObjectMeta{ - Name: configMapName, - Namespace: namespace, - }, - Data: map[string]string{ - "namespaces": strings.Join(namespaces, ","), - "operators": strings.Join(operatorsList, ","), - }, - } - _, err := k.client.CreateConfigMap(ctx, namespace, configMap) - return false, err - } - if cMap != nil && cMap.Name != configMapName { - return false, nil - } - v, ok := cMap.Data["namespaces"] - if !ok { - return false, nil - } - o, ok := cMap.Data["operators"] - if !ok { - return false, nil - } - cMap.Kind = "ConfigMap" - cMap.APIVersion = "/v1" - var update bool - existingNamespaces := strings.Split(v, ",") - for _, ns := range namespaces { - ns := ns - if !arrayContains(existingNamespaces, ns) { - update = true - } - } - existingOperators := strings.Split(o, ",") - for _, operator := range operatorsList { - operator := operator - if !arrayContains(existingOperators, operator) { - update = true - } - } - if update { - cMap.Data["namespaces"] = strings.Join(namespaces, ",") - cMap.Data["operators"] = strings.Join(operatorsList, ",") - return true, k.client.ApplyObject(cMap) - } - return false, nil -} - -// GetPersistedNamespaces returns list of persisted namespaces. -func (k *Kubernetes) GetPersistedNamespaces(ctx context.Context, namespace string) ([]string, error) { - var namespaces []string - cMap, err := k.client.GetConfigMap(ctx, namespace, configMapName) - if err != nil { - return namespaces, err - } - v, ok := cMap.Data["namespaces"] - if !ok { - return namespaces, errors.New("`namespaces` key does not exist in the configmap") - } - namespaces = strings.Split(v, ",") - return namespaces, nil -} - // GetDeployment returns k8s deployment by provided name and namespace. func (k *Kubernetes) GetDeployment(ctx context.Context, name, namespace string) (*appsv1.Deployment, error) { return k.client.GetDeployment(ctx, name, namespace) } - -// UpdateClusterRoleBinding updates namespaces list for the cluster role by provided name. -func (k *Kubernetes) UpdateClusterRoleBinding(ctx context.Context, name string, namespaces []string) error { - binding, err := k.client.GetClusterRoleBinding(ctx, name) - if err != nil { - return err - } - if len(binding.Subjects) == 0 { - return fmt.Errorf("no subjects available for the cluster role binding %s", name) - } - var needsUpdate bool - for _, namespace := range namespaces { - namespace := namespace - if !subjectsContains(binding.Subjects, namespace) { - subject := binding.Subjects[0] - subject.Namespace = namespace - binding.Subjects = append(binding.Subjects, subject) - needsUpdate = true - } - } - if needsUpdate { - binding.Kind = "ClusterRoleBinding" - binding.APIVersion = "rbac.authorization.k8s.io/v1" - return k.client.ApplyObject(binding) - } - - return nil -} - -func arrayContains(s []string, e string) bool { - for _, a := range s { - a := a - if a == e { - return true - } - } - return false -} - -func subjectsContains(s []rbacv1.Subject, n string) bool { - for _, a := range s { - a := a - if a.Namespace == n { - return true - } - } - return false -} diff --git a/pkg/kubernetes/olm_operator_test.go b/pkg/kubernetes/olm_operator_test.go index e82863d4..2b40bcf5 100644 --- a/pkg/kubernetes/olm_operator_test.go +++ b/pkg/kubernetes/olm_operator_test.go @@ -46,7 +46,8 @@ func TestInstallOlmOperator(t *testing.T) { //nolint:paralleltest t.Run("Install OLM Operator", func(t *testing.T) { k8sclient.On( - "CreateSubscription", mock.Anything, mock.Anything, mock.Anything, + "CreateSubscriptionForCatalog", mock.Anything, mock.Anything, mock.Anything, + mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything, mock.Anything, ).Return(&v1alpha1.Subscription{}, nil) k8sclient.On("GetDeployment", ctx, mock.Anything, "olm").Return(&appsv1.Deployment{}, nil) k8sclient.On("ApplyFile", mock.Anything).Return(nil) @@ -84,8 +85,9 @@ func TestInstallOlmOperator(t *testing.T) { }, } k8sclient.On( - "CreateSubscription", - mock.Anything, subscriptionNamespace, mockSubscription, + "CreateSubscriptionForCatalog", + mock.Anything, subscriptionNamespace, operatorName, "olm", + catalogSource, operatorName, "stable", "", v1alpha1.ApprovalManual, ).Return(mockSubscription, nil) k8sclient.On("GetSubscription", mock.Anything, subscriptionNamespace, operatorName).Return(mockSubscription, nil) mockInstallPlan := &v1alpha1.InstallPlan{} diff --git a/pkg/uninstall/uninstall.go b/pkg/uninstall/uninstall.go index 97128b8e..41f3b238 100644 --- a/pkg/uninstall/uninstall.go +++ b/pkg/uninstall/uninstall.go @@ -27,10 +27,6 @@ import ( "github.com/percona/percona-everest-cli/pkg/kubernetes" ) -const ( - everestNamespace = "percona-everest" -) - // Uninstall implements logic for the cluster command. type Uninstall struct { config Config @@ -42,6 +38,8 @@ type Uninstall struct { type Config struct { // KubeconfigPath is a path to a kubeconfig KubeconfigPath string `mapstructure:"kubeconfig"` + // Namespace defines the namespace operators shall be installed to. + Namespace string // AssumeYes is true when all questions can be skipped. AssumeYes bool `mapstructure:"assume-yes"` // Force is true when we shall not prompt for removal. @@ -63,8 +61,32 @@ func NewUninstall(c Config, l *zap.SugaredLogger) (*Uninstall, error) { return cli, nil } +func (u *Uninstall) runEverestWizard() error { + if !u.config.AssumeYes { + pNamespace := &survey.Input{ + Message: "Please select namespace", + Default: u.config.Namespace, + } + if err := survey.AskOne( + pNamespace, + &u.config.Namespace, + ); err != nil { + return err + } + } + + return nil +} + // Run runs the cluster command. func (u *Uninstall) Run(ctx context.Context) error { + if err := u.runEverestWizard(); err != nil { + return err + } + if u.config.Namespace == "" { + return errors.New("namespace is not provided") + } + if !u.config.AssumeYes { msg := `You are about to uninstall Everest from the Kubernetes cluster. This will uninstall Everest and all monitoring resources deployed by it. All other resources such as Databases and Database Backups will not be affected.` @@ -86,7 +108,7 @@ This will uninstall Everest and all monitoring resources deployed by it. All oth if err := u.uninstallK8sResources(ctx); err != nil { return err } - if err := u.kubeClient.DeleteEverest(ctx, everestNamespace); err != nil { + if err := u.kubeClient.DeleteEverest(ctx, u.config.Namespace); err != nil { return err } @@ -95,7 +117,7 @@ This will uninstall Everest and all monitoring resources deployed by it. All oth func (u *Uninstall) uninstallK8sResources(ctx context.Context) error { u.l.Info("Deleting all Kubernetes monitoring resources in Kubernetes cluster") - if err := u.kubeClient.DeleteAllMonitoringResources(ctx, everestNamespace); err != nil { + if err := u.kubeClient.DeleteAllMonitoringResources(ctx, u.config.Namespace); err != nil { return errors.Join(err, errors.New("could not uninstall monitoring resources from the Kubernetes cluster")) } diff --git a/pkg/upgrade/upgrade.go b/pkg/upgrade/upgrade.go index 8b907ba6..fb613598 100644 --- a/pkg/upgrade/upgrade.go +++ b/pkg/upgrade/upgrade.go @@ -24,22 +24,22 @@ import ( "github.com/AlecAivazis/survey/v2" goversion "github.com/hashicorp/go-version" + "github.com/operator-framework/api/pkg/operators/v1alpha1" "go.uber.org/zap" + corev1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/types" "github.com/percona/percona-everest-cli/data" "github.com/percona/percona-everest-cli/pkg/kubernetes" ) -const ( - everestNamespace = "percona-everest" -) - type ( // Config defines configuration required for upgrade command. Config struct { - // Namespaces defines namespaces that everest can operate in. - Namespaces []string `mapstructure:"namespace"` + // Name of the Kubernetes Cluster + Name string + // Namespace defines the namespace operators shall be installed to. + Namespace string // KubeconfigPath is a path to a kubeconfig KubeconfigPath string `mapstructure:"kubeconfig"` // UpgradeOLM defines do we need to upgrade OLM or not. @@ -78,12 +78,6 @@ func NewUpgrade(c Config, l *zap.SugaredLogger) (*Upgrade, error) { // Run runs the operators installation process. func (u *Upgrade) Run(ctx context.Context) error { - if err := u.runEverestWizard(ctx); err != nil { - return err - } - if len(u.config.Namespaces) == 0 { - return errors.New("namespace list is empty") - } if err := u.upgradeOLM(ctx); err != nil { return err } @@ -98,59 +92,35 @@ func (u *Upgrade) Run(ctx context.Context) error { } u.l.Info("Subscriptions have been patched") u.l.Info("Upgrading Everest") - if err := u.kubeClient.InstallEverest(ctx, everestNamespace); err != nil { + if err := u.kubeClient.InstallEverest(ctx, u.config.Namespace); err != nil { return err } u.l.Info("Everest has been upgraded") return nil } -func (u *Upgrade) runEverestWizard(ctx context.Context) error { - if !u.config.SkipWizard { - namespaces, err := u.kubeClient.GetPersistedNamespaces(ctx, everestNamespace) - if err != nil { - return err - } - pNamespace := &survey.MultiSelect{ - Message: "Please select namespaces", - Options: namespaces, - } - if err := survey.AskOne( - pNamespace, - &u.config.Namespaces, - survey.WithValidator(survey.MinItems(1)), - ); err != nil { - return err - } - } - - return nil -} - func (u *Upgrade) patchSubscriptions(ctx context.Context) error { - for _, namespace := range u.config.Namespaces { - namespace := namespace - subList, err := u.kubeClient.ListSubscriptions(ctx, namespace) - if err != nil { - return err - } - disableTelemetryEnvVar := "DISABLE_TELEMETRY" - disableTelemetry, ok := os.LookupEnv(disableTelemetryEnvVar) - if !ok || disableTelemetry != "true" { - disableTelemetry = "false" + subList, err := u.kubeClient.ListSubscriptions(ctx, u.config.Namespace) + if err != nil { + return err + } + disableTelemetryEnvVar := "DISABLE_TELEMETRY" + disableTelemetry, ok := os.LookupEnv(disableTelemetryEnvVar) + if !ok || disableTelemetry != "true" { + disableTelemetry = "false" + } + for _, subscription := range subList.Items { + subscription := subscription + subscription.Spec.Config = &v1alpha1.SubscriptionConfig{ + Env: []corev1.EnvVar{ + { + Name: disableTelemetryEnvVar, + Value: disableTelemetry, + }, + }, } - for _, subscription := range subList.Items { - subscription := subscription - for i := range subscription.Spec.Config.Env { - env := subscription.Spec.Config.Env[i] - if env.Name == disableTelemetryEnvVar { - env.Value = disableTelemetry - subscription.Spec.Config.Env[i] = env - } - } - if err := u.kubeClient.ApplyObject(&subscription); err != nil { - return err - } + if err := u.kubeClient.ApplyObject(&subscription); err != nil { + return err } } return nil From 41117dfbdacc1469bba667a97579005d96d24003 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Dec 2023 11:28:52 +0100 Subject: [PATCH 09/42] Bump actions/setup-go from 4 to 5 (#236) Bumps [actions/setup-go](https://github.com/actions/setup-go) from 4 to 5. - [Release notes](https://github.com/actions/setup-go/releases) - [Commits](https://github.com/actions/setup-go/compare/v4...v5) --- updated-dependencies: - dependency-name: actions/setup-go dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/ci.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 50c4c53a..66143c6a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -40,7 +40,7 @@ jobs: - name: Set up Go release if: matrix.go-version != 'tip' - uses: actions/setup-go@v4 + uses: actions/setup-go@v5 with: go-version: ${{ matrix.go-version }} @@ -137,7 +137,7 @@ jobs: - name: Set up Go release if: env.GO_VERSION != 'tip' - uses: actions/setup-go@v4 + uses: actions/setup-go@v5 with: go-version: ${{ matrix.go-version }} From bafe97bc5f56c9ec63c92e2d85dea79b99fccfb4 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 11 Dec 2023 11:33:03 +0100 Subject: [PATCH 10/42] Bump github.com/spf13/viper from 1.17.0 to 1.18.1 (#235) Bumps [github.com/spf13/viper](https://github.com/spf13/viper) from 1.17.0 to 1.18.1. - [Release notes](https://github.com/spf13/viper/releases) - [Commits](https://github.com/spf13/viper/compare/v1.17.0...v1.18.1) --- updated-dependencies: - dependency-name: github.com/spf13/viper dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 20 +-- go.sum | 381 ++++----------------------------------------------------- 2 files changed, 34 insertions(+), 367 deletions(-) diff --git a/go.mod b/go.mod index 291ee0aa..4f1b1baa 100644 --- a/go.mod +++ b/go.mod @@ -12,7 +12,7 @@ require ( github.com/percona/everest-operator v0.4.1-0.20231106102613-c61926d6c066 github.com/percona/percona-everest-backend v0.4.1-0.20231114121440-f3f3d38a6bfe github.com/spf13/cobra v1.8.0 - github.com/spf13/viper v1.17.0 + github.com/spf13/viper v1.18.1 github.com/stretchr/testify v1.8.4 go.uber.org/zap v1.26.0 golang.org/x/crypto v0.16.0 @@ -38,7 +38,7 @@ require ( github.com/emicklei/go-restful/v3 v3.11.0 // indirect github.com/evanphx/json-patch v5.6.0+incompatible // indirect github.com/evanphx/json-patch/v5 v5.6.0 // indirect - github.com/fsnotify/fsnotify v1.6.0 // indirect + github.com/fsnotify/fsnotify v1.7.0 // indirect github.com/getkin/kin-openapi v0.120.0 // indirect github.com/go-errors/errors v1.5.0 // indirect github.com/go-logr/logr v1.3.0 // indirect @@ -84,12 +84,12 @@ require ( github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/prometheus/procfs v0.11.1 // indirect - github.com/sagikazarmark/locafero v0.3.0 // indirect + github.com/sagikazarmark/locafero v0.4.0 // indirect github.com/sagikazarmark/slog-shim v0.1.0 // indirect github.com/sirupsen/logrus v1.9.3 // indirect github.com/sourcegraph/conc v0.3.0 // indirect - github.com/spf13/afero v1.10.0 // indirect - github.com/spf13/cast v1.5.1 // indirect + github.com/spf13/afero v1.11.0 // indirect + github.com/spf13/cast v1.6.0 // indirect github.com/spf13/pflag v1.0.5 // indirect github.com/stoewer/go-strcase v1.2.0 // indirect github.com/stretchr/objx v0.5.0 // indirect @@ -98,15 +98,15 @@ require ( go.starlark.net v0.0.0-20230525235612-a134d8f9ddca // indirect go.uber.org/multierr v1.11.0 // indirect golang.org/x/exp v0.0.0-20230905200255-921286631fa9 // indirect - golang.org/x/net v0.17.0 // indirect - golang.org/x/oauth2 v0.12.0 // indirect + golang.org/x/net v0.19.0 // indirect + golang.org/x/oauth2 v0.15.0 // indirect golang.org/x/sys v0.15.0 // indirect golang.org/x/term v0.15.0 // indirect golang.org/x/text v0.14.0 // indirect - golang.org/x/time v0.3.0 // indirect + golang.org/x/time v0.5.0 // indirect google.golang.org/appengine v1.6.8 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20231002182017-d307bd883b97 // indirect - google.golang.org/genproto/googleapis/rpc v0.0.0-20231016165738-49dd2c1f3d0b // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17 // indirect + google.golang.org/genproto/googleapis/rpc v0.0.0-20231120223509-83a465c0220f // indirect google.golang.org/grpc v1.59.0 // indirect google.golang.org/protobuf v1.31.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect diff --git a/go.sum b/go.sum index 9e581983..cde27696 100644 --- a/go.sum +++ b/go.sum @@ -1,41 +1,4 @@ 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.44.3/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 v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= -cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= -cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= -cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= -cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= -cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= -cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY= -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/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= -cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= -cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= -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/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/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= -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= -cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= -cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= -cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= -dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/AdaLogics/go-fuzz-headers v0.0.0-20230106234847-43070de90fa1 h1:EKPd1INOIyr5hWOWhvpmQpY6tKjeG0hT1s3AMC/9fic= github.com/AdaLogics/go-fuzz-headers v0.0.0-20230106234847-43070de90fa1/go.mod h1:VzwV+t+dZ9j/H867F1M2ziD+yLHtB46oM35FxxMJ4d0= github.com/AlecAivazis/survey/v2 v2.3.7 h1:6I/u8FvytdGsgonrYsVn2t8t4QiRnh6QSTqkkhIiSjQ= @@ -43,7 +6,6 @@ github.com/AlecAivazis/survey/v2 v2.3.7/go.mod h1:xUTIdE4KCOIjsBAE1JYsUPoCqYdZ1r github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25UVaW/CKtUDjefjrs0SPonmDGUVOYP0= github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= 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/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= github.com/Microsoft/hcsshim v0.10.0-rc.7 h1:HBytQPxcv8Oy4244zbQbe6hnOnx544eL5QPUqhJldz8= @@ -81,9 +43,6 @@ github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWR 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/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/containerd/cgroups v1.1.0 h1:v8rEWFl6EoqHB+swVNjVoCJE8o3jX7e8nqBGPLaDFBM= github.com/containerd/cgroups v1.1.0/go.mod h1:6ppBcbh/NOOUU+dMKrykgaBnK9lCIBxHqJDGwsa1mIw= github.com/containerd/containerd v1.7.0 h1:G/ZQr3gMZs6ZT0qPUZ15znx5QSdQdASW11nXTLTM2Pg= @@ -125,11 +84,7 @@ github.com/docker/libtrust v0.0.0-20160708172513-aabc10ec26b7 h1:UhxFibDNY/bfvqU github.com/docker/libtrust v0.0.0-20160708172513-aabc10ec26b7/go.mod h1:cyGadeNEkKy96OOhEzfZl+yxihPEzKnqJwvfuSUqbZE= github.com/emicklei/go-restful/v3 v3.11.0 h1:rAQeMHw1c7zTmncogyy8VvRZwtkmkZ4FxERmMY4rD+g= github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= -github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= -github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= -github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= github.com/evanphx/json-patch v5.6.0+incompatible h1:jBYDEEiFBPxA0v50tFdvOzQQTCvpL6mnFh5mB2/l16U= github.com/evanphx/json-patch v5.6.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= @@ -138,10 +93,10 @@ github.com/evanphx/json-patch/v5 v5.6.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2Vvl github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/felixge/httpsnoop v1.0.3 h1:s/nj+GCswXYzN5v2DpNMuMQYe+0DDwt5WVCU6CWBdXk= github.com/felixge/httpsnoop v1.0.3/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= -github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY= -github.com/frankban/quicktest v1.14.4/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= -github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= -github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= +github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= +github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= +github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= +github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= github.com/garyburd/redigo v1.6.0 h1:0VruCpn7yAIIu7pWVClQC8wxCJEcG3nyzpMSHKi1PQc= github.com/garyburd/redigo v1.6.0/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY= github.com/getkin/kin-openapi v0.120.0 h1:MqJcNJFrMDFNc07iwE8iFC5eT2k/NPUFDIpNeiZv8Jg= @@ -150,9 +105,6 @@ github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/go-errors/errors v1.5.0 h1:/EuijeGOu7ckFxzhkj4CXJ8JaenxK7bKUxpPYqeLHqQ= github.com/go-errors/errors v1.5.0/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= -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-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY= github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= @@ -179,38 +131,21 @@ github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69 github.com/golang-migrate/migrate/v4 v4.16.1 h1:O+0C55RbMN66pWm5MjO6mw0px6usGpY0+bkSGW9zCo0= github.com/golang-migrate/migrate/v4 v4.16.1/go.mod h1:qXiwa/3Zeqaltm1MxOCZDYysW/F6folYiBgBG03l9hc= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -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/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/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/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= 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.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= 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/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/cel-go v0.16.1 h1:3hZfSNiAU3KOiNtxuFXVp5WFy4hf/Ly3Sa4/7F8SXNo= github.com/google/cel-go v0.16.1/go.mod h1:HXZKzB0LXqer5lHHgfWAnlYwJaQBDKMjxjulNQzhwhY= github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I= @@ -219,41 +154,20 @@ github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5a 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.4.1/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.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= -github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -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/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1 h1:K6RDEckDVWvDI9JAJYCmNdQXq6neHJOYx3V6jnqNEec= github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -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.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4= github.com/google/uuid v1.4.0/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/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4= github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q= github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= @@ -267,14 +181,10 @@ github.com/h2non/go-is-svg v0.0.0-20160927212452-35e8c4b0612c h1:fEE5/5VNnYUoBOj github.com/h2non/go-is-svg v0.0.0-20160927212452-35e8c4b0612c/go.mod h1:ObS/W+h8RYb1Y7fYivughjxojTmIu5iAIjSrSLCLeqE= github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= -github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/hcl v1.0.1-vault-5 h1:kI3hhbbyzr4dldA8UdTb7ZlVVlI2DACdCfz31RPDgJM= github.com/hashicorp/hcl v1.0.1-vault-5/go.mod h1:XYhtn6ijBSAj6n4YqAaf7RBPS4I06AItNorpy+MoQNM= github.com/hinshun/vt10x v0.0.0-20220119200601-820417d04eec h1:qv2VnGeEQHchGaZ/u7lxST/RaJw+cv273q79D81Xbog= github.com/hinshun/vt10x v0.0.0-20220119200601-820417d04eec/go.mod h1:Q48J4R4DvxnHolD5P8pOtXigYlRuPLGl6moFx3ulM68= -github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= github.com/imdario/mergo v0.3.16 h1:wwQJbIsHYGMUyLSPrEq1CT16AhnhNJQ51+4fdHUnCl4= github.com/imdario/mergo v0.3.16/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= @@ -286,8 +196,6 @@ github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8Hm github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= -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/juju/gnuflag v0.0.0-20171113085948-2ce1bb71843d/go.mod h1:2PavIy+JPciBPrBUjwbNvtwB6RQlve+hkpll6QSNmOE= github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 h1:iQTw/8FWTuc7uiaSepXwyf3o52HaUYcV+Tu66S3F5GA= github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0/go.mod h1:1NbS8ALrpOvjt0rHPNLyCIeMtbizbir8U//inJ+zuB8= @@ -297,8 +205,6 @@ github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= github.com/klauspost/compress v1.17.0 h1:Rnbp4K9EjcDuVuHtd0dgA4qNuv9yKDYKK1ulpJwgrqM= github.com/klauspost/compress v1.17.0/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= -github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= -github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= @@ -378,7 +284,6 @@ github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5/go.mod h1:iIss55rK 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/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= @@ -391,12 +296,11 @@ github.com/prometheus/common v0.44.0 h1:+5BrQJwiBB9xsMygAB3TNvpQKOwlkc25LbISbrdO github.com/prometheus/common v0.44.0/go.mod h1:ofAIvZbQ1e/nugmZGz4/qCb9Ap1VoSTIO7x0VV9VvuY= github.com/prometheus/procfs v0.11.1 h1:xRC8Iq1yyca5ypa9n1EZnWZkt7dwcoRPQwX/5gwaUuI= github.com/prometheus/procfs v0.11.1/go.mod h1:eesXgaPo1q7lBpVMoMy0ZOFTth9hBn4W/y0/p/ScXhY= -github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/sagikazarmark/locafero v0.3.0 h1:zT7VEGWC2DTflmccN/5T1etyKvxSxpHsjb9cJvm4SvQ= -github.com/sagikazarmark/locafero v0.3.0/go.mod h1:w+v7UsPNFwzF1cHuOajOOzoq4U7v/ig1mpRjqV+Bu1U= +github.com/sagikazarmark/locafero v0.4.0 h1:HApY1R9zGo4DBgr7dqsTH/JJxLTTsOt7u6keLGt6kNQ= +github.com/sagikazarmark/locafero v0.4.0/go.mod h1:Pe1W6UlPYUk/+wc/6KFhbORCfqzgYEpgQ3O5fPuL3H4= github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE= github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ= github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8= @@ -405,16 +309,16 @@ github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo= github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0= -github.com/spf13/afero v1.10.0 h1:EaGW2JJh15aKOejeuJ+wpFSHnbd7GE6Wvp3TsNhb6LY= -github.com/spf13/afero v1.10.0/go.mod h1:UBogFpq8E9Hx+xc5CNTTEpTnuHVmXDwZcZcE1eb/UhQ= -github.com/spf13/cast v1.5.1 h1:R+kOtfhWQE6TVQzY+4D7wJLBgkdVasCEFxSUBYBYIlA= -github.com/spf13/cast v1.5.1/go.mod h1:b9PdjNptOpzXr7Rq1q9gJML/2cdGQAo69NKzQ10KN48= +github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8= +github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY= +github.com/spf13/cast v1.6.0 h1:GEiTHELF+vaR5dhz3VqZfFSzZjYbgeKDpBxQVS4GYJ0= +github.com/spf13/cast v1.6.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= github.com/spf13/cobra v1.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0= github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho= 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.17.0 h1:I5txKw7MJasPL/BrfkbA0Jyo/oELqVmux4pR/UxOMfI= -github.com/spf13/viper v1.17.0/go.mod h1:BmMMMLQXSbcHK6KAOiFLz0l5JHrU89OdIRHvsk0+yVI= +github.com/spf13/viper v1.18.1 h1:rmuU42rScKWlhhJDyXZRKJQHXFX02chSVW1IvkPGiVM= +github.com/spf13/viper v1.18.1/go.mod h1:EKmWIqdnk5lOcmR72yw6hS+8OPYcwD0jteitLMVB+yk= github.com/spkg/bom v0.0.0-20160624110644-59b7046e48ad/go.mod h1:qLr4V1qq6nMqFKkMo8ZTx3f+BZEkzsRUY10Xsm2mwU0= github.com/stoewer/go-strcase v1.2.0 h1:Z2iHWqGXH00XYgqDmNgQbIBxf3wrNq0F3feEy0ainaU= github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= @@ -423,7 +327,6 @@ github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSS github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= 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/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= @@ -438,9 +341,7 @@ github.com/ugorji/go/codec v1.2.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4d github.com/ugorji/go/codec v1.2.11/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= github.com/xlab/treeprint v1.2.0 h1:HzHnuAF1plUN2zGlAFHbSQP2qJ0ZAD3XF5XD7OesXRQ= github.com/xlab/treeprint v1.2.0/go.mod h1:gj5Gd3gPdKtR1ikdDK6fnFLdmIS0X30kTTuNd/WEJu0= -github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= github.com/yvasiyarov/go-metrics v0.0.0-20150112132944-c25f46c4b940 h1:p7OofyZ509h8DmPLh8Hn+EIIZm/xYhdZHJ9GnXHdr6U= @@ -451,12 +352,6 @@ github.com/yvasiyarov/newrelic_platform_go v0.0.0-20160601141957-9c099fbc30e9 h1 github.com/yvasiyarov/newrelic_platform_go v0.0.0-20160601141957-9c099fbc30e9/go.mod h1:GlGEuHIJweS1mbCqG+7vt2nvWLzLLnRHbXz5JKd/Qbg= go.etcd.io/bbolt v1.3.7 h1:j+zJOnnEjF/kyHlDDgGnVL/AIqIJPq8UoB2GSNfkUfQ= go.etcd.io/bbolt v1.3.7/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw= -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/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.40.0 h1:lE9EJyw3/JhrjWH/hEy9FptnalDQgj7vpbgC2KCCCxE= @@ -486,153 +381,56 @@ go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN8 go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo= go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/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-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.16.0 h1:mMMrFzRSCF0GvB7Ne27XVtVAaXLrPmgPC7/v0tkwHaY= golang.org/x/crypto v0.16.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= 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/exp v0.0.0-20230905200255-921286631fa9 h1:GoHiUyI/Tp2nVkLI2mCxVkOjsbSXD66ic0XW0js0R9g= golang.org/x/exp v0.0.0-20230905200255-921286631fa9/go.mod h1:S2oDrQGGwySpoQPVqRShND87VCbxmc6bL1Yd2oYrm6k= -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/lint v0.0.0-20201208152925-83fdc39ff7b5/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.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= golang.org/x/mod v0.12.0 h1:rmsUpXtvNzj340zd98LZ4KntptpfRHwpFOHG188oHXc= golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= 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-20190108225652-1e06a53dbb7e/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-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-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190628185345-da137c7871d7/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-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-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.17.0 h1:pVaXccu2ozPjCXewfr1S7xza/zcXTity9cCdXQYSjIM= -golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= +golang.org/x/net v0.19.0 h1:zTwKpTd2XuCqf8huc7Fo2iSy+4RHPd10s4KzeTnVr1c= +golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U= 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/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.12.0 h1:smVPGxink+n1ZI5pkQa8y6fZT0RW0MgCO5bFpepy4B4= -golang.org/x/oauth2 v0.12.0/go.mod h1:A74bZ3aGXgCY0qaIC9Ahg6Lglin4AMAco8cIv9baba4= +golang.org/x/oauth2 v0.15.0 h1:s8pnnxNVzjWyrvYdFUQq5llS1PX2zhPXmccZv99h7uQ= +golang.org/x/oauth2 v0.15.0/go.mod h1:q48ptWNTY5XWf+JNten23lcvHpLJ0ZSxF5ttTHKVCAM= 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-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/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/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE= golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/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-20190606165138-5da285871e9c/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-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/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-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-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-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc= golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= @@ -641,72 +439,23 @@ golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuX golang.org/x/term v0.0.0-20220526004731-065cf7ba2467/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.15.0 h1:y/Oo/a/q3IXu26lQgl04j/gjuBDOBlx7X6Om1j2CPW4= golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0= -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/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= -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.3.0 h1:rg5rLMjNzMS1RkNLzCG38eapWhnYLFYXDXj2gOlr8j4= -golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= +golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= +golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/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-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-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-20190621195816-6e04913cbbac/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-20191012152004-8de300cfc20a/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-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-20200227222343-706bc42d1f0d/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-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/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-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= -golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= golang.org/x/tools v0.13.0 h1:Iey4qkscZuv0VvIt8E0neZjtPVQFSc870HQ448QgEmQ= golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= @@ -716,92 +465,22 @@ golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8T golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= gomodules.xyz/jsonpatch/v2 v2.4.0 h1:Ci3iUJyx9UeRx7CeFN8ARgGbkESwJK+KB9lLcWxY/Zw= gomodules.xyz/jsonpatch/v2 v2.4.0/go.mod h1:AH3dM2RI6uoBZxn3LVrfvJ3E0/9dG4cSrbuBJT4moAY= -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.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= -google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= -google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= -google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= -google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= 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/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/appengine v1.6.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= 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-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-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= -google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20231012201019-e917dd12ba7a h1:fwgW9j3vHirt4ObdHoYNwuO24BEZjSzbh+zPaNWoiY8= -google.golang.org/genproto v0.0.0-20231012201019-e917dd12ba7a/go.mod h1:EMfReVxb80Dq1hhioy0sOsY9jCE46YDgHlJ7fWVUWRE= -google.golang.org/genproto/googleapis/api v0.0.0-20231002182017-d307bd883b97 h1:W18sezcAYs+3tDZX4F80yctqa12jcP1PUS2gQu1zTPU= -google.golang.org/genproto/googleapis/api v0.0.0-20231002182017-d307bd883b97/go.mod h1:iargEX0SFPm3xcfMI0d1domjg0ZF4Aa0p2awqyxhvF0= -google.golang.org/genproto/googleapis/rpc v0.0.0-20231016165738-49dd2c1f3d0b h1:ZlWIi1wSK56/8hn4QcBp/j9M7Gt3U/3hZw3mC7vDICo= -google.golang.org/genproto/googleapis/rpc v0.0.0-20231016165738-49dd2c1f3d0b/go.mod h1:swOH3j0KzcDDgGUWr+SNpyTen5YrXjS3eyPzFYKc6lc= +google.golang.org/genproto v0.0.0-20231106174013-bbf56f31fb17 h1:wpZ8pe2x1Q3f2KyT5f8oP/fa9rHAKgFPr/HZdNuS+PQ= +google.golang.org/genproto v0.0.0-20231106174013-bbf56f31fb17/go.mod h1:J7XzRzVy1+IPwWHZUzoD0IccYZIrXILAQpc+Qy9CMhY= +google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17 h1:JpwMPBpFN3uKhdaekDpiNlImDdkUAyiJ6ez/uxGaUSo= +google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17/go.mod h1:0xJLfVdJqpAPl8tDg1ujOCGzx6LFLttXT5NhllGOXY4= +google.golang.org/genproto/googleapis/rpc v0.0.0-20231120223509-83a465c0220f h1:ultW7fxlIvee4HYrtnaRPon9HpEgFk5zYpmfMgtKB5I= +google.golang.org/genproto/googleapis/rpc v0.0.0-20231120223509-83a465c0220f/go.mod h1:L9KNLi232K1/xB6f7AlSX692koaRnKaWSR0stBki0Yc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= -google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -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/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= -google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= -google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= -google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk= google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= @@ -810,19 +489,15 @@ google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQ 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/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/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-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/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.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= @@ -838,12 +513,7 @@ gopkg.in/yaml.v3 v3.0.1/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= 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= -honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= k8s.io/api v0.28.4 h1:8ZBrLjwosLl/NYgv1P7EQLqoO8MGQApnbgH8tu3BMzY= k8s.io/api v0.28.4/go.mod h1:axWTGrY88s/5YE+JSt4uUi6NMM+gur1en2REMR7IRj0= k8s.io/apiextensions-apiserver v0.28.4 h1:AZpKY/7wQ8n+ZYDtNHbAJBb+N4AXXJvyZx6ww6yAJvU= @@ -866,11 +536,8 @@ k8s.io/kubectl v0.28.4 h1:gWpUXW/T7aFne+rchYeHkyB8eVDl5UZce8G4X//kjUQ= k8s.io/kubectl v0.28.4/go.mod h1:CKOccVx3l+3MmDbkXtIUtibq93nN2hkDR99XDCn7c/c= k8s.io/utils v0.0.0-20230726121419-3b25d923346b h1:sgn3ZU783SCgtaSJjpcVVlRqd6GSnlTLKgpAAttJvpI= k8s.io/utils v0.0.0-20230726121419-3b25d923346b/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= -rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= rsc.io/letsencrypt v0.0.3 h1:H7xDfhkaFFSYEJlKeq38RwX2jYcnTeHuDQyT+mMNMwM= rsc.io/letsencrypt v0.0.3/go.mod h1:buyQKZ6IXrRnB7TdkHP0RyEybLx18HHyOSoTyoOLqNY= -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.1.2 h1:trsWhjU5jZrx6UvFu4WzQDrN7Pga4a7Qg+zcfcj64PA= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.1.2/go.mod h1:+qG7ISXqCDVVcyO8hLn12AKVYYUjM7ftlqsqmrhMZE0= sigs.k8s.io/controller-runtime v0.16.3 h1:2TuvuokmfXvDUamSx1SuAOO3eTyye+47mJCigwG62c4= From 11f7574123fe798e9b727a6f4aeb362782c58e61 Mon Sep 17 00:00:00 2001 From: Andrew Minkin Date: Mon, 11 Dec 2023 16:50:23 +0100 Subject: [PATCH 11/42] EVEREST-650 Do not override spec.type for everest service (#237) --- cli-tests/tests/flow/all-operators.spec.ts | 8 ++++++++ pkg/kubernetes/client/client.go | 23 ++++++++++++++++++++++ 2 files changed, 31 insertions(+) diff --git a/cli-tests/tests/flow/all-operators.spec.ts b/cli-tests/tests/flow/all-operators.spec.ts index 6e57deb7..12003582 100644 --- a/cli-tests/tests/flow/all-operators.spec.ts +++ b/cli-tests/tests/flow/all-operators.spec.ts @@ -65,6 +65,9 @@ test.describe('Everest CLI install', async () => { await out.outContains( 'name: DISABLE_TELEMETRY\n value: "false"', ); + out = await cli.exec(`kubectl patch service everest --patch '{"spec": {"type": "LoadBalancer"}}' --namespace=percona-everest-all`) + + await out.assertSuccess(); out = await cli.everestExecSkipWizardWithEnv('upgrade --namespace=percona-everest-all', 'DISABLE_TELEMETRY=true'); await out.assertSuccess(); @@ -78,6 +81,11 @@ test.describe('Everest CLI install', async () => { await out.outContains( 'name: DISABLE_TELEMETRY\n value: "true"', ); + // check that the spec.type is not overrided + out = await cli.exec('kubectl get service/everest --namespace=percona-everest-all -o yaml'); + await out.outContains( + 'type: LoadBalancer', + ); }); await test.step('run everest install command using a different namespace', async () => { const install = await cli.everestExecSkipWizard( diff --git a/pkg/kubernetes/client/client.go b/pkg/kubernetes/client/client.go index c839eabb..18f4d5b7 100644 --- a/pkg/kubernetes/client/client.go +++ b/pkg/kubernetes/client/client.go @@ -794,10 +794,33 @@ func (c *Client) applyTemplateCustomization(u *unstructured.Unstructured, namesp return err } } + if ok && kind == "Service" { + // During installation or upgrading of the everest backend + // CLI should keep spec.type untouched to prevent overriding of it. + if err := c.setEverestServiceType(u, namespace); err != nil { + return err + } + } return nil } +func (c *Client) setEverestServiceType(u *unstructured.Unstructured, namespace string) error { + s, err := c.GetService(context.Background(), namespace, "everest") + if err != nil && !apierrors.IsNotFound(err) { + return err + } + if err != nil && apierrors.IsNotFound(err) { + return nil + } + if s != nil && s.Name != "" { + if err := unstructured.SetNestedField(u.Object, string(s.Spec.Type), "spec", "type"); err != nil { + return err + } + } + return nil +} + func (c *Client) updateClusterRoleBinding(u *unstructured.Unstructured, namespace string) error { cl, err := c.kubeClient() if err != nil { From b6a237d2f9e172aebaeae44416eec9a2776958c2 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 13 Dec 2023 10:55:20 +0100 Subject: [PATCH 12/42] Bump github.com/percona/percona-everest-backend (#231) Bumps [github.com/percona/percona-everest-backend](https://github.com/percona/percona-everest-backend) from 0.4.1-0.20231114121440-f3f3d38a6bfe to 0.5.0. - [Commits](https://github.com/percona/percona-everest-backend/commits/v0.5.0) --- updated-dependencies: - dependency-name: github.com/percona/percona-everest-backend dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 4f1b1baa..6b300e5e 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/operator-framework/api v0.20.0 github.com/operator-framework/operator-lifecycle-manager v0.26.0 github.com/percona/everest-operator v0.4.1-0.20231106102613-c61926d6c066 - github.com/percona/percona-everest-backend v0.4.1-0.20231114121440-f3f3d38a6bfe + github.com/percona/percona-everest-backend v0.5.0 github.com/spf13/cobra v1.8.0 github.com/spf13/viper v1.18.1 github.com/stretchr/testify v1.8.4 diff --git a/go.sum b/go.sum index cde27696..826cab96 100644 --- a/go.sum +++ b/go.sum @@ -275,8 +275,8 @@ github.com/pelletier/go-toml/v2 v2.1.0 h1:FnwAJ4oYMvbT/34k9zzHuZNrhlz48GB3/s6at6 github.com/pelletier/go-toml/v2 v2.1.0/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdUvyaeZurnPPDc= github.com/percona/everest-operator v0.4.1-0.20231106102613-c61926d6c066 h1:/a8DCJZBh5oG/1aAqCOHHTxQqoqs5uHu1xOM6hdNz4o= github.com/percona/everest-operator v0.4.1-0.20231106102613-c61926d6c066/go.mod h1:35PbvNvDsfgNgATppkqXz+NnRMHDHuNtA5mI3t7oRCY= -github.com/percona/percona-everest-backend v0.4.1-0.20231114121440-f3f3d38a6bfe h1:UXyAIdf7FXkodVqnfTcNLEBtBZnOG9YZP/vVyq/0DK4= -github.com/percona/percona-everest-backend v0.4.1-0.20231114121440-f3f3d38a6bfe/go.mod h1:lB1x6b5sIMddEw6kt1QlWqA6x6tL+R7rr7dmPwTT3bE= +github.com/percona/percona-everest-backend v0.5.0 h1:NqRJxepDP6Lm0ZEP26WYh9DpRlBhNkw8A5jJw4581lg= +github.com/percona/percona-everest-backend v0.5.0/go.mod h1:lB1x6b5sIMddEw6kt1QlWqA6x6tL+R7rr7dmPwTT3bE= github.com/perimeterx/marshmallow v1.1.5 h1:a2LALqQ1BlHM8PZblsDdidgv1mWi1DgC2UmX50IvK2s= github.com/perimeterx/marshmallow v1.1.5/go.mod h1:dsXbUu8CRzfYP5a87xpp0xq9S3u0Vchtcl8we9tYaXw= github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 h1:Ii+DKncOVM8Cu1Hc+ETb5K+23HdAMvESYE3ZJ5b5cMI= From 4dd48593fd5d64195ca2345055f34f2761631d2f Mon Sep 17 00:00:00 2001 From: Andrew Minkin Date: Thu, 14 Dec 2023 15:04:07 +0100 Subject: [PATCH 13/42] EVEREST-702 Generate token only once during the installation (#240) --- cli-tests/Makefile | 1 - cli-tests/tests/flow/all-operators.spec.ts | 4 +- cli-tests/tests/flow/mongodb-operator.spec.ts | 2 +- cli-tests/tests/flow/pg-operator.spec.ts | 4 +- cli-tests/tests/flow/pxc-operator.spec.ts | 3 +- commands/install.go | 20 - commands/monitoring.go | 34 ++ commands/monitoring/enable.go | 92 +++++ commands/root.go | 1 + pkg/install/install.go | 280 +------------- pkg/install/install_test.go | 192 ---------- .../mock_everest_client_connector_test.go | 122 ------- pkg/{install => monitoring}/deps.go | 4 +- pkg/monitoring/enable.go | 344 ++++++++++++++++++ pkg/password/reset.go | 5 +- 15 files changed, 496 insertions(+), 612 deletions(-) create mode 100644 commands/monitoring.go create mode 100644 commands/monitoring/enable.go delete mode 100644 pkg/install/install_test.go delete mode 100644 pkg/install/mock_everest_client_connector_test.go rename pkg/{install => monitoring}/deps.go (96%) create mode 100644 pkg/monitoring/enable.go diff --git a/cli-tests/Makefile b/cli-tests/Makefile index 3e22c3b9..59935e6d 100644 --- a/cli-tests/Makefile +++ b/cli-tests/Makefile @@ -5,7 +5,6 @@ init: ## Install dependencies install-operators: ## Install operators to k8s ../bin/everest install \ --skip-wizard \ - --monitoring.enable=0 test-cli: ## Run all tests npx playwright test --project=cli diff --git a/cli-tests/tests/flow/all-operators.spec.ts b/cli-tests/tests/flow/all-operators.spec.ts index 12003582..6267dbc0 100644 --- a/cli-tests/tests/flow/all-operators.spec.ts +++ b/cli-tests/tests/flow/all-operators.spec.ts @@ -41,7 +41,7 @@ test.describe('Everest CLI install', async () => { await test.step('run everest install command', async () => { const out = await cli.everestExecSkipWizard( - `install --monitoring.enable=0 --name=${clusterName} --namespace=percona-everest-all`, + `install --name=${clusterName} --namespace=percona-everest-all`, ); await out.assertSuccess(); @@ -89,7 +89,7 @@ test.describe('Everest CLI install', async () => { }); await test.step('run everest install command using a different namespace', async () => { const install = await cli.everestExecSkipWizard( - `install --monitoring.enable=0 --namespace=different-everest`, + `install --namespace=different-everest`, ); await install.assertSuccess(); diff --git a/cli-tests/tests/flow/mongodb-operator.spec.ts b/cli-tests/tests/flow/mongodb-operator.spec.ts index 3cc7d960..53108fa2 100644 --- a/cli-tests/tests/flow/mongodb-operator.spec.ts +++ b/cli-tests/tests/flow/mongodb-operator.spec.ts @@ -44,7 +44,7 @@ test.describe('Everest CLI install', async () => { await test.step('run everest install command', async () => { const out = await cli.everestExecSkipWizard( - `install --operator.mongodb=true --operator.postgresql=false --operator.xtradb-cluster=false --monitoring.enable=0 --name=${clusterName}`, + `install --operator.mongodb=true --operator.postgresql=false --operator.xtradb-cluster=false --name=${clusterName}`, ); await out.assertSuccess(); diff --git a/cli-tests/tests/flow/pg-operator.spec.ts b/cli-tests/tests/flow/pg-operator.spec.ts index e8824bed..6be0f71d 100644 --- a/cli-tests/tests/flow/pg-operator.spec.ts +++ b/cli-tests/tests/flow/pg-operator.spec.ts @@ -43,7 +43,7 @@ test.describe('Everest CLI install', async () => { await test.step('run everest install command', async () => { const out = await cli.everestExecSkipWizard( - `install --operator.mongodb=false --operator.postgresql=true --operator.xtradb-cluster=false --monitoring.enable=0 --name=${clusterName}`, + `install --operator.mongodb=false --operator.postgresql=true --operator.xtradb-cluster=false --name=${clusterName}`, ); await out.assertSuccess(); @@ -63,7 +63,7 @@ test.describe('Everest CLI install', async () => { await operator.assertSuccess(); const out = await cli.everestExecSkipWizard( - `install --operator.mongodb=false --operator.postgresql=true --operator.xtradb-cluster=true --monitoring.enable=0 --name=${clusterName}`, + `install --operator.mongodb=false --operator.postgresql=true --operator.xtradb-cluster=true --name=${clusterName}`, ); const restartedOperator = await cli.exec(`kubectl -n percona-everest get po | grep everest|awk {'print $1'}`); await restartedOperator.assertSuccess(); diff --git a/cli-tests/tests/flow/pxc-operator.spec.ts b/cli-tests/tests/flow/pxc-operator.spec.ts index 21d61711..142bcd8b 100644 --- a/cli-tests/tests/flow/pxc-operator.spec.ts +++ b/cli-tests/tests/flow/pxc-operator.spec.ts @@ -44,14 +44,13 @@ test.describe('Everest CLI install', async () => { await test.step('run everest install command', async () => { const out = await cli.everestExecSkipWizard( - `install --operator.mongodb=false --operator.postgresql=false --operator.xtradb-cluster=true --monitoring.enable=0 --name=${clusterName}`, + `install --operator.mongodb=false --operator.postgresql=false --operator.xtradb-cluster=true --name=${clusterName}`, ); await out.assertSuccess(); await out.outErrContainsNormalizedMany([ 'percona-xtradb-cluster-operator operator has been installed', 'everest-operator operator has been installed', - 'Everest has been installed. Configuring connection', ]); }); diff --git a/commands/install.go b/commands/install.go index d3889a31..65f1e12e 100644 --- a/commands/install.go +++ b/commands/install.go @@ -73,18 +73,6 @@ func initInstallFlags(cmd *cobra.Command) { cmd.Flags().String("namespace", "percona-everest", "Namespace into which Percona Everest components are deployed to") cmd.Flags().Bool("skip-wizard", false, "Skip installation wizard") - cmd.Flags().BoolP("monitoring.enable", "m", false, "Enable monitoring") - cmd.Flags().String("monitoring.instance-name", "", - "Monitoring instance name from Everest. If defined, other monitoring configuration is ignored", - ) - cmd.Flags().String("monitoring.new-instance-name", "", - "Name for a new monitoring instance if it's going to be created", - ) - cmd.Flags().String("monitoring.type", "pmm", "Monitoring type") - cmd.Flags().String("monitoring.pmm.endpoint", "http://127.0.0.1", "PMM endpoint URL") - cmd.Flags().String("monitoring.pmm.username", "admin", "PMM username") - cmd.Flags().String("monitoring.pmm.password", "", "PMM password") - cmd.Flags().Bool("operator.mongodb", true, "Install MongoDB operator") cmd.Flags().Bool("operator.postgresql", true, "Install PostgreSQL operator") cmd.Flags().Bool("operator.xtradb-cluster", true, "Install XtraDB Cluster operator") @@ -99,14 +87,6 @@ func initInstallFlags(cmd *cobra.Command) { func initInstallViperFlags(cmd *cobra.Command) { viper.BindPFlag("skip-wizard", cmd.Flags().Lookup("skip-wizard")) //nolint:errcheck,gosec - viper.BindPFlag("monitoring.enable", cmd.Flags().Lookup("monitoring.enable")) //nolint:errcheck,gosec - viper.BindPFlag("monitoring.instance-name", cmd.Flags().Lookup("monitoring.instance-name")) //nolint:errcheck,gosec - viper.BindPFlag("monitoring.new-instance-name", cmd.Flags().Lookup("monitoring.new-instance-name")) //nolint:errcheck,gosec - viper.BindPFlag("monitoring.type", cmd.Flags().Lookup("monitoring.type")) //nolint:errcheck,gosec - viper.BindPFlag("monitoring.pmm.endpoint", cmd.Flags().Lookup("monitoring.pmm.endpoint")) //nolint:errcheck,gosec - viper.BindPFlag("monitoring.pmm.username", cmd.Flags().Lookup("monitoring.pmm.username")) //nolint:errcheck,gosec - viper.BindPFlag("monitoring.pmm.password", cmd.Flags().Lookup("monitoring.pmm.password")) //nolint:errcheck,gosec - viper.BindEnv("kubeconfig") //nolint:errcheck,gosec viper.BindPFlag("kubeconfig", cmd.Flags().Lookup("kubeconfig")) //nolint:errcheck,gosec viper.BindPFlag("name", cmd.Flags().Lookup("name")) //nolint:errcheck,gosec diff --git a/commands/monitoring.go b/commands/monitoring.go new file mode 100644 index 00000000..8e9c6a26 --- /dev/null +++ b/commands/monitoring.go @@ -0,0 +1,34 @@ +// percona-everest-cli +// Copyright (C) 2023 Percona LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Package commands ... +package commands + +import ( + "github.com/spf13/cobra" + "go.uber.org/zap" + + "github.com/percona/percona-everest-cli/commands/monitoring" +) + +func newMonitoringCmd(l *zap.SugaredLogger) *cobra.Command { + cmd := &cobra.Command{ + Use: "monitoring", + } + + cmd.AddCommand(monitoring.NewMonitoringCmd(l)) + + return cmd +} diff --git a/commands/monitoring/enable.go b/commands/monitoring/enable.go new file mode 100644 index 00000000..9e30d445 --- /dev/null +++ b/commands/monitoring/enable.go @@ -0,0 +1,92 @@ +// percona-everest-cli +// Copyright (C) 2023 Percona LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Package monitoring holds commands for monitoring command. +package monitoring + +import ( + "os" + + "github.com/spf13/cobra" + "github.com/spf13/viper" + "go.uber.org/zap" + + "github.com/percona/percona-everest-cli/pkg/monitoring" + "github.com/percona/percona-everest-cli/pkg/output" +) + +// NewMonitoringCmd returns a new enable monitoring command. +func NewMonitoringCmd(l *zap.SugaredLogger) *cobra.Command { + cmd := &cobra.Command{ + Use: "enable", + Run: func(cmd *cobra.Command, args []string) { + initMonitoringViperFlags(cmd) + + c, err := parseResetConfig() + if err != nil { + os.Exit(1) + } + + command, err := monitoring.NewMonitoring(*c, l) + if err != nil { + output.PrintError(err, l) + os.Exit(1) + } + + err = command.Run(cmd.Context()) + if err != nil { + output.PrintError(err, l) + os.Exit(1) + } + }, + } + + initMonitoringFlags(cmd) + + return cmd +} + +func initMonitoringFlags(cmd *cobra.Command) { + cmd.Flags().StringP("kubeconfig", "k", "~/.kube/config", "Path to a kubeconfig") + cmd.Flags().String("namespace", "percona-everest", "Namespace where Percona Everest is deployed") + cmd.Flags().String("instance-name", "", + "Monitoring instance name from Everest. If defined, other monitoring configuration is ignored", + ) + cmd.Flags().String("new-instance-name", "", + "Name for a new monitoring instance if it's going to be created", + ) + cmd.Flags().String("type", "pmm", "Monitoring type") + cmd.Flags().String("pmm.endpoint", "http://127.0.0.1", "PMM endpoint URL") + cmd.Flags().String("pmm.username", "admin", "PMM username") + cmd.Flags().String("pmm.password", "", "PMM password") +} + +func initMonitoringViperFlags(cmd *cobra.Command) { + viper.BindEnv("kubeconfig") //nolint:errcheck,gosec + viper.BindPFlag("kubeconfig", cmd.Flags().Lookup("kubeconfig")) //nolint:errcheck,gosec + viper.BindPFlag("namespace", cmd.Flags().Lookup("namespace")) //nolint:errcheck,gosec + viper.BindPFlag("instance-name", cmd.Flags().Lookup("monitoring.instance-name")) //nolint:errcheck,gosec + viper.BindPFlag("new-instance-name", cmd.Flags().Lookup("monitoring.new-instance-name")) //nolint:errcheck,gosec + viper.BindPFlag("type", cmd.Flags().Lookup("monitoring.type")) //nolint:errcheck,gosec + viper.BindPFlag("pmm.endpoint", cmd.Flags().Lookup("monitoring.pmm.endpoint")) //nolint:errcheck,gosec + viper.BindPFlag("pmm.username", cmd.Flags().Lookup("monitoring.pmm.username")) //nolint:errcheck,gosec + viper.BindPFlag("pmm.password", cmd.Flags().Lookup("monitoring.pmm.password")) //nolint:errcheck,gosec +} + +func parseResetConfig() (*monitoring.Config, error) { + c := &monitoring.Config{} + err := viper.Unmarshal(c) + return c, err +} diff --git a/commands/root.go b/commands/root.go index b8a56e5a..30a5e745 100644 --- a/commands/root.go +++ b/commands/root.go @@ -40,6 +40,7 @@ func NewRootCmd(l *zap.SugaredLogger) *cobra.Command { // rootCmd.AddCommand(newProvisionCmd(l)) // rootCmd.AddCommand(newListCmd(l)) rootCmd.AddCommand(newDeleteCmd(l)) + rootCmd.AddCommand(newMonitoringCmd(l)) rootCmd.AddCommand(newPasswordCmd(l)) rootCmd.AddCommand(newVersionCmd(l)) rootCmd.AddCommand(newUpgradeCmd(l)) diff --git a/pkg/install/install.go b/pkg/install/install.go index 57797baa..dacc2d77 100644 --- a/pkg/install/install.go +++ b/pkg/install/install.go @@ -22,18 +22,13 @@ import ( "errors" "fmt" "net/url" - "time" "github.com/AlecAivazis/survey/v2" "github.com/operator-framework/api/pkg/operators/v1alpha1" - "github.com/percona/percona-everest-backend/client" "go.uber.org/zap" "golang.org/x/sync/errgroup" k8serrors "k8s.io/apimachinery/pkg/api/errors" - "k8s.io/apimachinery/pkg/util/wait" - "github.com/percona/percona-everest-cli/commands/common" - everestClient "github.com/percona/percona-everest-cli/pkg/everest/client" "github.com/percona/percona-everest-cli/pkg/kubernetes" "github.com/percona/percona-everest-cli/pkg/password" ) @@ -42,12 +37,8 @@ import ( type Install struct { l *zap.SugaredLogger - config Config - everestClient everestClientConnector - kubeClient *kubernetes.Kubernetes - - // monitoringInstanceName stores the resolved monitoring instance name. - monitoringInstanceName string + config Config + kubeClient *kubernetes.Kubernetes } const ( @@ -64,9 +55,6 @@ const ( ) type ( - // MonitoringType identifies type of monitoring to be used. - MonitoringType string - // Config stores configuration for the operators. Config struct { // Name of the Kubernetes Cluster @@ -78,25 +66,8 @@ type ( // KubeconfigPath is a path to a kubeconfig KubeconfigPath string `mapstructure:"kubeconfig"` - Channel ChannelConfig - Monitoring MonitoringConfig - Operator OperatorConfig - } - - // MonitoringConfig stores configuration for monitoring. - MonitoringConfig struct { - // Enable is true if monitoring shall be enabled. - Enable bool - // InstanceName stores monitoring instance name from Everest. - // If provided, the other monitoring configuration is ignored. - InstanceName string `mapstructure:"instance-name"` - // NewInstanceName defines name for a new monitoring instance - // if it's created. - NewInstanceName string `mapstructure:"new-instance-name"` - // Type stores the type of monitoring to be used. - Type MonitoringType - // PMM stores configuration for PMM monitoring type. - PMM *PMMConfig + Channel ChannelConfig + Operator OperatorConfig } // OperatorConfig identifies which operators shall be installed. @@ -108,17 +79,6 @@ type ( // PXC stores if XtraDB Cluster shall be installed. PXC bool `mapstructure:"xtradb-cluster"` } - - // PMMConfig stores configuration for PMM monitoring type. - PMMConfig struct { - // Endpoint stores URL to PMM. - Endpoint string - // Username stores username for authentication against PMM. - Username string - // Password stores password for authentication against PMM. - Password string - } - // ChannelConfig stores configuration for operator channels. ChannelConfig struct { // Everest stores channel for Everest. @@ -162,19 +122,21 @@ func (o *Install) Run(ctx context.Context) error { if err := o.provisionNamespace(); err != nil { return err } - pwd, err := o.generatePassword(ctx) - if err != nil { + if err := o.performProvisioning(ctx); err != nil { return err } - if err := o.configureEverestConnector(pwd.Password); err != nil { - return err + _, err := o.kubeClient.GetSecret(ctx, password.SecretName, o.config.Namespace) + if err != nil && !k8serrors.IsNotFound(err) { + return errors.Join(err, errors.New("could not get the everest token secret")) } - if err := o.performProvisioning(ctx); err != nil { - return err + if err != nil && k8serrors.IsNotFound(err) { + pwd, err := o.generatePassword(ctx) + if err != nil { + return err + } + o.l.Info(pwd) } - o.l.Info(pwd) - return nil } @@ -192,12 +154,6 @@ func (o *Install) populateConfig() error { return nil } -func (o *Install) checkEverestConnection(ctx context.Context) error { - o.l.Info("Checking connection to Everest") - _, err := o.everestClient.ListMonitoringInstances(ctx) - return err -} - func (o *Install) performProvisioning(ctx context.Context) error { if err := o.provisionAllOperators(ctx); err != nil { return err @@ -218,124 +174,6 @@ func (o *Install) performProvisioning(ctx context.Context) error { return err } } - o.l.Info("Everest has been installed. Configuring connection") - if o.config.Monitoring.Enable { - if err := o.provisionMonitoring(ctx, everestExists); err != nil { - return err - } - } - return nil -} - -func (o *Install) provisionMonitoring(ctx context.Context, everestExists bool) error { - l := o.l.With("action", "monitoring") - l.Info("Preparing k8s cluster for monitoring") - if err := o.kubeClient.ProvisionMonitoring(o.config.Namespace); err != nil { - return errors.Join(err, errors.New("could not provision monitoring configuration")) - } - - l.Info("K8s cluster monitoring has been provisioned successfully") - if err := o.resolveMonitoringInstanceName(ctx); err != nil { - return err - } - o.l.Info("Deploying VMAgent to k8s cluster") - if everestExists { - if err := o.kubeClient.RestartEverest(ctx, everestBackendServiceName, o.config.Namespace); err != nil { - return err - } - } - if err := o.checkEverestConnection(ctx); err != nil { - var u *url.Error - if errors.As(err, &u) { - o.l.Debug(err) - - l := o.l.WithOptions(zap.AddStacktrace(zap.DPanicLevel)) - l.Error("Could not connect to Everest. " + - "Make sure Everest is running and is accessible from this machine.", - ) - return common.ErrExitWithError - } - - return errors.Join(err, errors.New("could not check connection to Everest")) - } - - // We retry for a bit since the MonitoringConfig may not be properly - // deployed yet and we get a HTTP 500 in this case. - err := wait.PollUntilContextTimeout(ctx, 3*time.Second, 2*time.Minute, true, func(ctx context.Context) (bool, error) { - o.l.Debug("Trying to enable Kubernetes cluster monitoring") - err := o.everestClient.SetKubernetesClusterMonitoring(ctx, client.KubernetesClusterMonitoring{ - Enable: true, - MonitoringInstanceName: o.monitoringInstanceName, - }) - if err != nil { - o.l.Debug(errors.Join(err, errors.New("could not enable Kubernetes cluster monitoring"))) - return false, nil - } - - return true, nil - }) - if err != nil { - return errors.Join(err, errors.New("could not enable Kubernetes cluster monitoring")) - } - - o.l.Info("VMAgent deployed successfully") - return nil -} - -func (o *Install) resolveMonitoringInstanceName(ctx context.Context) error { - if !o.config.Monitoring.Enable || o.monitoringInstanceName != "" { - return nil - } - - if o.config.Monitoring.InstanceName != "" { - i, err := o.everestClient.GetMonitoringInstance(ctx, o.config.Monitoring.InstanceName) - if err != nil { - return errors.Join(err, fmt.Errorf("could not get monitoring instance with name %s from Everest", o.config.Monitoring.InstanceName)) - } - o.monitoringInstanceName = i.Name - return nil - } - - if o.config.Monitoring.NewInstanceName == "" { - return errors.New("monitoring.new-instance-name is required when creating a new monitoring instance") - } - - err := o.createPMMMonitoringInstance( - ctx, o.config.Monitoring.NewInstanceName, o.config.Monitoring.PMM.Endpoint, - o.config.Monitoring.PMM.Username, o.config.Monitoring.PMM.Password, - ) - if err != nil { - return errors.Join(err, errors.New("could not create a new PMM monitoring instance in Everest")) - } - - o.monitoringInstanceName = o.config.Monitoring.NewInstanceName - - return nil -} - -func (o *Install) createPMMMonitoringInstance(ctx context.Context, name, url, username, password string) error { - _, err := o.everestClient.CreateMonitoringInstance(ctx, client.MonitoringInstanceCreateParams{ - Type: client.MonitoringInstanceCreateParamsTypePmm, - Name: name, - Url: url, - Pmm: &client.PMMMonitoringInstanceSpec{ - User: username, - Password: password, - }, - }) - if err != nil { - return errors.Join(err, errors.New("could not create a new monitoring instance")) - } - - return nil -} - -func (o *Install) configureEverestConnector(everestPwd string) error { - e, err := everestClient.NewProxiedEverest(o.kubeClient.Config(), o.config.Namespace, everestPwd) - if err != nil { - return err - } - o.everestClient = e return nil } @@ -345,10 +183,6 @@ func (o *Install) runWizard() error { return err } - if err := o.runMonitoringWizard(); err != nil { - return err - } - return o.runInstallWizard() } @@ -360,88 +194,6 @@ func (o *Install) runEverestWizard() error { return survey.AskOne(pNamespace, &o.config.Namespace) } -func (o *Install) runMonitoringWizard() error { - pMonitor := &survey.Confirm{ - Message: "Do you want to enable monitoring?", - Default: o.config.Monitoring.Enable, - } - err := survey.AskOne(pMonitor, &o.config.Monitoring.Enable) - if err != nil { - return err - } - - if o.config.Monitoring.Enable { - if err := o.runMonitoringConfigWizard(); err != nil { - return err - } - } - - return nil -} - -func (o *Install) runMonitoringConfigWizard() error { - if o.config.Monitoring.PMM == nil { - o.config.Monitoring.PMM = &PMMConfig{} - } - - if o.config.Monitoring.InstanceName == "" { - if err := o.runMonitoringNewURLWizard(); err != nil { - return err - } - } - - return nil -} - -func (o *Install) runMonitoringNewURLWizard() error { - pURL := &survey.Input{ - Message: "PMM URL Endpoint", - Default: o.config.Monitoring.PMM.Endpoint, - } - if err := survey.AskOne( - pURL, - &o.config.Monitoring.PMM.Endpoint, - survey.WithValidator(survey.Required), - ); err != nil { - return err - } - - pUser := &survey.Input{ - Message: "Username", - Default: o.config.Monitoring.PMM.Username, - } - if err := survey.AskOne( - pUser, - &o.config.Monitoring.PMM.Username, - survey.WithValidator(survey.Required), - ); err != nil { - return err - } - - pPass := &survey.Password{Message: "Password"} - if err := survey.AskOne( - pPass, - &o.config.Monitoring.PMM.Password, - survey.WithValidator(survey.Required), - ); err != nil { - return err - } - - pName := &survey.Input{ - Message: "Name for the new monitoring instance", - Default: o.config.Monitoring.NewInstanceName, - } - if err := survey.AskOne( - pName, - &o.config.Monitoring.NewInstanceName, - survey.WithValidator(survey.Required), - ); err != nil { - return err - } - - return nil -} - func (o *Install) runInstallWizard() error { operatorOpts := []struct { label string @@ -550,10 +302,6 @@ func (o *Install) provisionInstall(ctx context.Context) error { // The limit can be removed after it's refactored. g.SetLimit(operatorInstallThreads) - if o.config.Monitoring.Enable { - g.Go(o.installOperator(gCtx, o.config.Channel.VictoriaMetrics, vmOperatorName)) - } - if o.config.Operator.PXC { g.Go(o.installOperator(gCtx, o.config.Channel.PXC, pxcOperatorName)) } diff --git a/pkg/install/install_test.go b/pkg/install/install_test.go deleted file mode 100644 index 0b141861..00000000 --- a/pkg/install/install_test.go +++ /dev/null @@ -1,192 +0,0 @@ -// percona-everest-cli -// Copyright (C) 2023 Percona LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. -package install - -import ( - "context" - "errors" - "strings" - "testing" - - "github.com/percona/percona-everest-backend/client" - mock "github.com/stretchr/testify/mock" - "github.com/stretchr/testify/require" - "go.uber.org/zap" -) - -const ( - iName = "monitoring-instance" - iDefault = "default" -) - -func TestInstall_resolveMonitoringInstanceName(t *testing.T) { - t.Parallel() - - l, err := zap.NewDevelopment() - require.NoError(t, err) - - t.Run("shall work with monitoring disabled", func(t *testing.T) { - t.Parallel() - - m := &mockEverestClientConnector{} - defer m.AssertExpectations(t) - - o := &Install{ - l: l.Sugar(), - config: Config{ - Monitoring: MonitoringConfig{ - Enable: false, - }, - }, - everestClient: m, - monitoringInstanceName: iDefault, - } - - err := o.resolveMonitoringInstanceName(context.Background()) - require.NoError(t, err) - require.Equal(t, iDefault, o.monitoringInstanceName) - }) - - t.Run("shall work with monitoring instance name", func(t *testing.T) { - t.Parallel() - - m := &mockEverestClientConnector{} - m.Mock.On("GetMonitoringInstance", mock.Anything, "123").Return(&client.MonitoringInstance{Name: iName}, nil) - defer m.AssertExpectations(t) - - o := &Install{ - l: l.Sugar(), - config: Config{ - Monitoring: MonitoringConfig{ - Enable: true, - InstanceName: "123", - }, - }, - everestClient: m, - } - - err := o.resolveMonitoringInstanceName(context.Background()) - require.NoError(t, err) - require.Equal(t, iName, o.monitoringInstanceName) - }) - - t.Run("shall fail with monitoring instance name not found", func(t *testing.T) { - t.Parallel() - - m := &mockEverestClientConnector{} - m.Mock.On("GetMonitoringInstance", mock.Anything, "123").Return(nil, errors.New("not-found")) - defer m.AssertExpectations(t) - - o := &Install{ - l: l.Sugar(), - config: Config{ - Monitoring: MonitoringConfig{ - Enable: true, - InstanceName: "123", - }, - }, - everestClient: m, - } - - err := o.resolveMonitoringInstanceName(context.Background()) - require.Error(t, err) - require.True(t, strings.Contains(err.Error(), "not-found")) - }) - - t.Run("shall prefer monitoring instance name", func(t *testing.T) { - t.Parallel() - - m := &mockEverestClientConnector{} - m.Mock.On("GetMonitoringInstance", mock.Anything, "123").Return(&client.MonitoringInstance{Name: iName}, nil) - defer m.AssertExpectations(t) - - o := &Install{ - l: l.Sugar(), - config: Config{ - Monitoring: MonitoringConfig{ - Enable: true, - InstanceName: "123", - PMM: &PMMConfig{ - Endpoint: "http://localhost", - Username: "admin", - Password: "admin", - }, - }, - }, - everestClient: m, - } - - err := o.resolveMonitoringInstanceName(context.Background()) - require.NoError(t, err) - require.Equal(t, iName, o.monitoringInstanceName) - }) - - t.Run("shall fail without new instance name defined when creating a new instance", func(t *testing.T) { - t.Parallel() - - m := &mockEverestClientConnector{} - defer m.AssertExpectations(t) - - o := &Install{ - l: l.Sugar(), - config: Config{ - Monitoring: MonitoringConfig{ - Enable: true, - }, - }, - everestClient: m, - } - - err := o.resolveMonitoringInstanceName(context.Background()) - require.Error(t, err) - require.True(t, strings.Contains(err.Error(), "monitoring.new-instance-name is required")) - }) - - t.Run("shall create a new PMM instance", func(t *testing.T) { - t.Parallel() - - m := &mockEverestClientConnector{} - m.Mock.On("CreateMonitoringInstance", mock.Anything, client.MonitoringInstanceCreateParams{ - Type: client.MonitoringInstanceCreateParamsTypePmm, - Name: "new-instance", - Url: "http://monitoring-url", - Pmm: &client.PMMMonitoringInstanceSpec{ - User: "user", - Password: "pass", - }, - }).Return(&client.MonitoringInstance{}, nil) - defer m.AssertExpectations(t) - - o := &Install{ - l: l.Sugar(), - config: Config{ - Monitoring: MonitoringConfig{ - Enable: true, - NewInstanceName: "new-instance", - PMM: &PMMConfig{ - Endpoint: "http://monitoring-url", - Username: "user", - Password: "pass", - }, - }, - }, - everestClient: m, - } - - err := o.resolveMonitoringInstanceName(context.Background()) - require.NoError(t, err) - require.Equal(t, "new-instance", o.monitoringInstanceName) - }) -} diff --git a/pkg/install/mock_everest_client_connector_test.go b/pkg/install/mock_everest_client_connector_test.go deleted file mode 100644 index 9b944877..00000000 --- a/pkg/install/mock_everest_client_connector_test.go +++ /dev/null @@ -1,122 +0,0 @@ -// Code generated by mockery v2.36.1. DO NOT EDIT. - -package install - -import ( - context "context" - - client "github.com/percona/percona-everest-backend/client" - mock "github.com/stretchr/testify/mock" -) - -// mockEverestClientConnector is an autogenerated mock type for the everestClientConnector type -type mockEverestClientConnector struct { - mock.Mock -} - -// CreateMonitoringInstance provides a mock function with given fields: ctx, body -func (_m *mockEverestClientConnector) CreateMonitoringInstance(ctx context.Context, body client.MonitoringInstanceCreateParams) (*client.MonitoringInstanceBaseWithName, error) { - ret := _m.Called(ctx, body) - - var r0 *client.MonitoringInstanceBaseWithName - var r1 error - if rf, ok := ret.Get(0).(func(context.Context, client.MonitoringInstanceCreateParams) (*client.MonitoringInstanceBaseWithName, error)); ok { - return rf(ctx, body) - } - if rf, ok := ret.Get(0).(func(context.Context, client.MonitoringInstanceCreateParams) *client.MonitoringInstanceBaseWithName); ok { - r0 = rf(ctx, body) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(*client.MonitoringInstanceBaseWithName) - } - } - - if rf, ok := ret.Get(1).(func(context.Context, client.MonitoringInstanceCreateParams) error); ok { - r1 = rf(ctx, body) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - -// GetMonitoringInstance provides a mock function with given fields: ctx, pmmInstanceID -func (_m *mockEverestClientConnector) GetMonitoringInstance(ctx context.Context, pmmInstanceID string) (*client.MonitoringInstanceBaseWithName, error) { - ret := _m.Called(ctx, pmmInstanceID) - - var r0 *client.MonitoringInstanceBaseWithName - var r1 error - if rf, ok := ret.Get(0).(func(context.Context, string) (*client.MonitoringInstanceBaseWithName, error)); ok { - return rf(ctx, pmmInstanceID) - } - if rf, ok := ret.Get(0).(func(context.Context, string) *client.MonitoringInstanceBaseWithName); ok { - r0 = rf(ctx, pmmInstanceID) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(*client.MonitoringInstanceBaseWithName) - } - } - - if rf, ok := ret.Get(1).(func(context.Context, string) error); ok { - r1 = rf(ctx, pmmInstanceID) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - -// ListMonitoringInstances provides a mock function with given fields: ctx -func (_m *mockEverestClientConnector) ListMonitoringInstances(ctx context.Context) ([]client.MonitoringInstanceBaseWithName, error) { - ret := _m.Called(ctx) - - var r0 []client.MonitoringInstanceBaseWithName - var r1 error - if rf, ok := ret.Get(0).(func(context.Context) ([]client.MonitoringInstanceBaseWithName, error)); ok { - return rf(ctx) - } - if rf, ok := ret.Get(0).(func(context.Context) []client.MonitoringInstanceBaseWithName); ok { - r0 = rf(ctx) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).([]client.MonitoringInstanceBaseWithName) - } - } - - if rf, ok := ret.Get(1).(func(context.Context) error); ok { - r1 = rf(ctx) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - -// SetKubernetesClusterMonitoring provides a mock function with given fields: ctx, body -func (_m *mockEverestClientConnector) SetKubernetesClusterMonitoring(ctx context.Context, body client.KubernetesClusterMonitoring) error { - ret := _m.Called(ctx, body) - - var r0 error - if rf, ok := ret.Get(0).(func(context.Context, client.KubernetesClusterMonitoring) error); ok { - r0 = rf(ctx, body) - } else { - r0 = ret.Error(0) - } - - return r0 -} - -// newMockEverestClientConnector creates a new instance of mockEverestClientConnector. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. -// The first argument is typically a *testing.T value. -func newMockEverestClientConnector(t interface { - mock.TestingT - Cleanup(func()) -}, -) *mockEverestClientConnector { - mock := &mockEverestClientConnector{} - mock.Mock.Test(t) - - t.Cleanup(func() { mock.AssertExpectations(t) }) - - return mock -} diff --git a/pkg/install/deps.go b/pkg/monitoring/deps.go similarity index 96% rename from pkg/install/deps.go rename to pkg/monitoring/deps.go index 9d1558d9..22c72be6 100644 --- a/pkg/install/deps.go +++ b/pkg/monitoring/deps.go @@ -13,8 +13,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -// Package install ... -package install +// Package monitoring ... +package monitoring import ( "context" diff --git a/pkg/monitoring/enable.go b/pkg/monitoring/enable.go new file mode 100644 index 00000000..1194b04d --- /dev/null +++ b/pkg/monitoring/enable.go @@ -0,0 +1,344 @@ +// percona-everest-cli +// Copyright (C) 2023 Percona LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. + +// Package monitoring holds the main logic for provision monitoring +package monitoring + +import ( + "context" + "errors" + "fmt" + "net/url" + "time" + + "github.com/AlecAivazis/survey/v2" + "github.com/operator-framework/api/pkg/operators/v1alpha1" + "github.com/percona/percona-everest-backend/client" + "go.uber.org/zap" + k8serrors "k8s.io/apimachinery/pkg/api/errors" + "k8s.io/apimachinery/pkg/util/wait" + + "github.com/percona/percona-everest-cli/commands/common" + everestClient "github.com/percona/percona-everest-cli/pkg/everest/client" + "github.com/percona/percona-everest-cli/pkg/kubernetes" +) + +const ( + catalogSourceNamespace = "olm" + everestBackendServiceName = "percona-everest-backend" + operatorGroup = "percona-operators-group" + catalogSource = "percona-everest-catalog" + vmOperatorName = "victoriametrics-operator" +) + +// Monitoring implements the logic for provisioning monitoring. +type Monitoring struct { + l *zap.SugaredLogger + + config Config + everestClient everestClientConnector + kubeClient *kubernetes.Kubernetes + + // monitoringInstanceName stores the resolved monitoring instance name. + monitoringInstanceName string +} + +type ( + // monitoringType identifies type of monitoring to be used. + monitoringType string + + // Config stores configuration for the operators. + Config struct { + // Namespace defines the namespace operators shall be installed to. + Namespace string + // SkipWizard skips wizard during installation. + SkipWizard bool `mapstructure:"skip-wizard"` + // KubeconfigPath is a path to a kubeconfig + KubeconfigPath string `mapstructure:"kubeconfig"` + + // EverestToken defines a token to connect to Everest + EverestToken string + + // InstanceName stores monitoring instance name from Everest. + // If provided, the other monitoring configuration is ignored. + InstanceName string `mapstructure:"instance-name"` + // NewInstanceName defines name for a new monitoring instance + // if it's created. + NewInstanceName string `mapstructure:"new-instance-name"` + // Type stores the type of monitoring to be used. + Type monitoringType + // PMM stores configuration for PMM monitoring type. + PMM *PMMConfig + } + + // PMMConfig stores configuration for PMM monitoring type. + PMMConfig struct { + // Endpoint stores URL to PMM. + Endpoint string + // Username stores username for authentication against PMM. + Username string + // Password stores password for authentication against PMM. + Password string + } +) + +// NewMonitoring returns a new Monitoring struct. +func NewMonitoring(c Config, l *zap.SugaredLogger) (*Monitoring, error) { + cli := &Monitoring{ + config: c, + l: l.With("component", "monitoring/enable"), + } + + k, err := kubernetes.New(c.KubeconfigPath, cli.l) + if err != nil { + var u *url.Error + if errors.As(err, &u) { + cli.l.Error("Could not connect to Kubernetes. " + + "Make sure Kubernetes is running and is accessible from this computer/server.") + } + return nil, err + } + cli.kubeClient = k + return cli, nil +} + +// Run runs the operators installation process. +func (m *Monitoring) Run(ctx context.Context) error { + if err := m.populateConfig(); err != nil { + return err + } + if err := m.provisionNamespace(ctx); err != nil { + return err + } + if err := m.configureEverestConnector(m.config.EverestToken); err != nil { + return err + } + if err := m.provisionMonitoring(ctx); err != nil { + return err + } + + return nil +} + +func (m *Monitoring) populateConfig() error { + if !m.config.SkipWizard { + if err := m.runMonitoringWizard(); err != nil { + return err + } + } + + return nil +} + +// provisionNamespace provisions a namespace for Everest. +func (m *Monitoring) provisionNamespace(ctx context.Context) error { + _, err := m.kubeClient.GetNamespace(ctx, m.config.Namespace) + if err != nil && k8serrors.IsNotFound(err) { + return fmt.Errorf("namespace %s is not found", m.config.Namespace) + } + return err +} + +func (m *Monitoring) provisionMonitoring(ctx context.Context) error { //nolint:funlen + m.l.Infof("Installing %s operator", vmOperatorName) + + params := kubernetes.InstallOperatorRequest{ + Namespace: m.config.Namespace, + Name: vmOperatorName, + OperatorGroup: operatorGroup, + CatalogSource: catalogSource, + CatalogSourceNamespace: catalogSourceNamespace, + Channel: "stable-v0", + InstallPlanApproval: v1alpha1.ApprovalManual, + } + + if err := m.kubeClient.InstallOperator(ctx, params); err != nil { + m.l.Errorf("failed installing %s operator", vmOperatorName) + return err + } + m.l.Infof("%s operator has been installed", vmOperatorName) + l := m.l.With("action", "monitoring") + l.Info("Preparing k8s cluster for monitoring") + if err := m.kubeClient.ProvisionMonitoring(m.config.Namespace); err != nil { + return errors.Join(err, errors.New("could not provision monitoring configuration")) + } + + l.Info("K8s cluster monitoring has been provisioned successfully") + if err := m.resolveMonitoringInstanceName(ctx); err != nil { + return err + } + m.l.Info("Deploying VMAgent to k8s cluster") + if err := m.kubeClient.RestartEverest(ctx, everestBackendServiceName, m.config.Namespace); err != nil { + return err + } + if err := m.checkEverestConnection(ctx); err != nil { + var u *url.Error + if errors.As(err, &u) { + m.l.Debug(err) + + l := m.l.WithOptions(zap.AddStacktrace(zap.DPanicLevel)) + l.Error("Could not connect to Everest. " + + "Make sure Everest is running and is accessible from this machine.", + ) + return common.ErrExitWithError + } + + return errors.Join(err, errors.New("could not check connection to Everest")) + } + + // We retry for a bit since the MonitoringConfig may not be properly + // deployed yet and we get a HTTP 500 in this case. + err := wait.PollUntilContextTimeout(ctx, 3*time.Second, 2*time.Minute, true, func(ctx context.Context) (bool, error) { + m.l.Debug("Trying to enable Kubernetes cluster monitoring") + err := m.everestClient.SetKubernetesClusterMonitoring(ctx, client.KubernetesClusterMonitoring{ + Enable: true, + MonitoringInstanceName: m.monitoringInstanceName, + }) + if err != nil { + m.l.Debug(errors.Join(err, errors.New("could not enable Kubernetes cluster monitoring"))) + return false, nil + } + + return true, nil + }) + if err != nil { + return errors.Join(err, errors.New("could not enable Kubernetes cluster monitoring")) + } + + m.l.Info("VMAgent deployed successfully") + return nil +} + +func (m *Monitoring) resolveMonitoringInstanceName(ctx context.Context) error { + if m.config.InstanceName != "" { + i, err := m.everestClient.GetMonitoringInstance(ctx, m.config.InstanceName) + if err != nil { + return errors.Join(err, fmt.Errorf("could not get monitoring instance with name %s from Everest", m.config.InstanceName)) + } + m.monitoringInstanceName = i.Name + return nil + } + + if m.config.NewInstanceName == "" { + return errors.New("monitoring.new-instance-name is required when creating a new monitoring instance") + } + + err := m.createPMMMonitoringInstance( + ctx, m.config.NewInstanceName, m.config.PMM.Endpoint, + m.config.PMM.Username, m.config.PMM.Password, + ) + if err != nil { + return errors.Join(err, errors.New("could not create a new PMM monitoring instance in Everest")) + } + + m.monitoringInstanceName = m.config.NewInstanceName + + return nil +} + +func (m *Monitoring) createPMMMonitoringInstance(ctx context.Context, name, url, username, password string) error { + _, err := m.everestClient.CreateMonitoringInstance(ctx, client.MonitoringInstanceCreateParams{ + Type: client.MonitoringInstanceCreateParamsTypePmm, + Name: name, + Url: url, + Pmm: &client.PMMMonitoringInstanceSpec{ + User: username, + Password: password, + }, + }) + if err != nil { + return errors.Join(err, errors.New("could not create a new monitoring instance")) + } + + return nil +} + +func (m *Monitoring) configureEverestConnector(everestPwd string) error { + e, err := everestClient.NewProxiedEverest(m.kubeClient.Config(), m.config.Namespace, everestPwd) + if err != nil { + return err + } + m.everestClient = e + return nil +} + +func (m *Monitoring) runMonitoringWizard() error { + if m.config.PMM == nil { + m.config.PMM = &PMMConfig{} + } + + if m.config.InstanceName == "" { + if err := m.runMonitoringNewURLWizard(); err != nil { + return err + } + } + + return nil +} + +func (m *Monitoring) runMonitoringNewURLWizard() error { + pURL := &survey.Input{ + Message: "PMM URL Endpoint", + Default: m.config.PMM.Endpoint, + } + if err := survey.AskOne( + pURL, + &m.config.PMM.Endpoint, + survey.WithValidator(survey.Required), + ); err != nil { + return err + } + + pUser := &survey.Input{ + Message: "Username", + Default: m.config.PMM.Username, + } + if err := survey.AskOne( + pUser, + &m.config.PMM.Username, + survey.WithValidator(survey.Required), + ); err != nil { + return err + } + + pPass := &survey.Password{Message: "Password"} + if err := survey.AskOne( + pPass, + &m.config.PMM.Password, + survey.WithValidator(survey.Required), + ); err != nil { + return err + } + + pName := &survey.Input{ + Message: "Name for the new monitoring instance", + Default: m.config.NewInstanceName, + } + if err := survey.AskOne( + pName, + &m.config.NewInstanceName, + survey.WithValidator(survey.Required), + ); err != nil { + return err + } + + return nil +} + +func (m *Monitoring) checkEverestConnection(ctx context.Context) error { + m.l.Info("Checking connection to Everest") + _, err := m.everestClient.ListMonitoringInstances(ctx) + return err +} diff --git a/pkg/password/reset.go b/pkg/password/reset.go index 9efeb3b5..75846693 100644 --- a/pkg/password/reset.go +++ b/pkg/password/reset.go @@ -56,7 +56,8 @@ type ( } ) -const passwordSecretName = "everest-password" +// SecretName stores the name of the secret to store Everest token. +const SecretName = "everest-password" func (r ResetResponse) String() string { return fmt.Sprintf("Your new password is:\n%s", r.Password) @@ -100,7 +101,7 @@ func (r *Reset) Run(ctx context.Context) (*ResetResponse, error) { Kind: "Secret", }, ObjectMeta: metav1.ObjectMeta{ - Name: passwordSecretName, + Name: SecretName, Namespace: r.config.Namespace, }, Type: corev1.SecretTypeOpaque, From 5f3356229aed397b95b6c13f620c5e5691c724e2 Mon Sep 17 00:00:00 2001 From: Andrew Minkin Date: Fri, 15 Dec 2023 11:22:47 +0100 Subject: [PATCH 14/42] EVEREST-663 Check if everest installed before uninstalling (#238) --- cli-tests/tests/flow/all-operators.spec.ts | 20 +++++++++++++++++++- pkg/uninstall/uninstall.go | 19 +++++++++++++++++++ 2 files changed, 38 insertions(+), 1 deletion(-) diff --git a/cli-tests/tests/flow/all-operators.spec.ts b/cli-tests/tests/flow/all-operators.spec.ts index 6267dbc0..a29d8009 100644 --- a/cli-tests/tests/flow/all-operators.spec.ts +++ b/cli-tests/tests/flow/all-operators.spec.ts @@ -94,7 +94,7 @@ test.describe('Everest CLI install', async () => { await install.assertSuccess(); - const out = await cli.exec('kubectl get clusterrolebinding everest-admin-cluster-role-binding -o yaml'); + let out = await cli.exec('kubectl get clusterrolebinding everest-admin-cluster-role-binding -o yaml'); await out.assertSuccess(); await out.outContainsNormalizedMany([ @@ -102,6 +102,12 @@ test.describe('Everest CLI install', async () => { 'namespace: different-everest', ]); await cli.everestExec('uninstall --namespace=different-everest --assume-yes'); + // Check that uninstall will fail because there's no everest deployment + out = await cli.everestExec('uninstall --namespace=different-everest --assume-yes'); + await out.outErrContainsNormalizedMany([ + 'no Everest deployment in different-everest namespace', + ]); + }); await test.step('uninstall Everest', async () => { @@ -118,5 +124,17 @@ test.describe('Everest CLI install', async () => { ]); }); + + await test.step('uninstall Everest non existent namespace', async () => { + let out = await cli.everestExec( + `uninstall --namespace=not-exist --assume-yes`, + ); + + await out.outErrContainsNormalizedMany([ + 'namespace not-exist is not found', + ]); + + }); + }); }); diff --git a/pkg/uninstall/uninstall.go b/pkg/uninstall/uninstall.go index 41f3b238..8e4fc53a 100644 --- a/pkg/uninstall/uninstall.go +++ b/pkg/uninstall/uninstall.go @@ -23,6 +23,7 @@ import ( "github.com/AlecAivazis/survey/v2" "go.uber.org/zap" + k8serrors "k8s.io/apimachinery/pkg/api/errors" "github.com/percona/percona-everest-cli/pkg/kubernetes" ) @@ -104,6 +105,9 @@ This will uninstall Everest and all monitoring resources deployed by it. All oth return nil } } + if err := u.checkResourcesExist(ctx); err != nil { + return err + } if err := u.uninstallK8sResources(ctx); err != nil { return err @@ -115,6 +119,21 @@ This will uninstall Everest and all monitoring resources deployed by it. All oth return nil } +func (u *Uninstall) checkResourcesExist(ctx context.Context) error { + _, err := u.kubeClient.GetNamespace(ctx, u.config.Namespace) + if err != nil && k8serrors.IsNotFound(err) { + return fmt.Errorf("namespace %s is not found", u.config.Namespace) + } + if err != nil && !k8serrors.IsNotFound(err) { + return err + } + _, err = u.kubeClient.GetDeployment(ctx, kubernetes.PerconaEverestDeploymentName, u.config.Namespace) + if err != nil && k8serrors.IsNotFound(err) { + return fmt.Errorf("no Everest deployment in %s namespace", u.config.Namespace) + } + return err +} + func (u *Uninstall) uninstallK8sResources(ctx context.Context) error { u.l.Info("Deleting all Kubernetes monitoring resources in Kubernetes cluster") if err := u.kubeClient.DeleteAllMonitoringResources(ctx, u.config.Namespace); err != nil { From 8e1e8c1eb40e058e48c3e7b85a8e0c9732800b9c Mon Sep 17 00:00:00 2001 From: Diogo Recharte Date: Fri, 15 Dec 2023 13:02:57 +0000 Subject: [PATCH 15/42] EVEREST-692 rename password command to token (#242) --- cli-tests/tests/flow/all-operators.spec.ts | 1 - commands/root.go | 2 +- commands/{password.go => token.go} | 8 +++---- commands/{password => token}/reset.go | 12 +++++----- pkg/install/install.go | 22 +++++++++--------- pkg/{password => token}/reset.go | 26 +++++++++++----------- 6 files changed, 34 insertions(+), 37 deletions(-) rename commands/{password.go => token.go} (80%) rename commands/{password => token}/reset.go (87%) rename pkg/{password => token}/reset.go (75%) diff --git a/cli-tests/tests/flow/all-operators.spec.ts b/cli-tests/tests/flow/all-operators.spec.ts index a29d8009..b3be40ad 100644 --- a/cli-tests/tests/flow/all-operators.spec.ts +++ b/cli-tests/tests/flow/all-operators.spec.ts @@ -50,7 +50,6 @@ test.describe('Everest CLI install', async () => { 'percona-server-mongodb-operator operator has been installed', 'percona-postgresql-operator operator has been installed', 'everest-operator operator has been installed', - 'Your new password is', ]); }); diff --git a/commands/root.go b/commands/root.go index 30a5e745..df363d01 100644 --- a/commands/root.go +++ b/commands/root.go @@ -41,7 +41,7 @@ func NewRootCmd(l *zap.SugaredLogger) *cobra.Command { // rootCmd.AddCommand(newListCmd(l)) rootCmd.AddCommand(newDeleteCmd(l)) rootCmd.AddCommand(newMonitoringCmd(l)) - rootCmd.AddCommand(newPasswordCmd(l)) + rootCmd.AddCommand(newTokenCmd(l)) rootCmd.AddCommand(newVersionCmd(l)) rootCmd.AddCommand(newUpgradeCmd(l)) rootCmd.AddCommand(newUninstallCmd(l)) diff --git a/commands/password.go b/commands/token.go similarity index 80% rename from commands/password.go rename to commands/token.go index b68731ee..7a019dd3 100644 --- a/commands/password.go +++ b/commands/token.go @@ -20,15 +20,15 @@ import ( "github.com/spf13/cobra" "go.uber.org/zap" - "github.com/percona/percona-everest-cli/commands/password" + "github.com/percona/percona-everest-cli/commands/token" ) -func newPasswordCmd(l *zap.SugaredLogger) *cobra.Command { +func newTokenCmd(l *zap.SugaredLogger) *cobra.Command { cmd := &cobra.Command{ - Use: "password", + Use: "token", } - cmd.AddCommand(password.NewResetCmd(l)) + cmd.AddCommand(token.NewResetCmd(l)) return cmd } diff --git a/commands/password/reset.go b/commands/token/reset.go similarity index 87% rename from commands/password/reset.go rename to commands/token/reset.go index 4701fe85..39dcc715 100644 --- a/commands/password/reset.go +++ b/commands/token/reset.go @@ -13,8 +13,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -// Package password holds commands for password command. -package password +// Package token holds commands for token command. +package token import ( "os" @@ -24,7 +24,7 @@ import ( "go.uber.org/zap" "github.com/percona/percona-everest-cli/pkg/output" - "github.com/percona/percona-everest-cli/pkg/password" + "github.com/percona/percona-everest-cli/pkg/token" ) // NewResetCmd returns a new versions command. @@ -39,7 +39,7 @@ func NewResetCmd(l *zap.SugaredLogger) *cobra.Command { os.Exit(1) } - command, err := password.NewReset(*c, l) + command, err := token.NewReset(*c, l) if err != nil { output.PrintError(err, l) os.Exit(1) @@ -71,8 +71,8 @@ func initResetViperFlags(cmd *cobra.Command) { viper.BindPFlag("namespace", cmd.Flags().Lookup("namespace")) //nolint:errcheck,gosec } -func parseResetConfig() (*password.ResetConfig, error) { - c := &password.ResetConfig{} +func parseResetConfig() (*token.ResetConfig, error) { + c := &token.ResetConfig{} err := viper.Unmarshal(c) return c, err } diff --git a/pkg/install/install.go b/pkg/install/install.go index dacc2d77..ff6a82d0 100644 --- a/pkg/install/install.go +++ b/pkg/install/install.go @@ -30,7 +30,7 @@ import ( k8serrors "k8s.io/apimachinery/pkg/api/errors" "github.com/percona/percona-everest-cli/pkg/kubernetes" - "github.com/percona/percona-everest-cli/pkg/password" + "github.com/percona/percona-everest-cli/pkg/token" ) // Install implements the main logic for commands. @@ -125,16 +125,16 @@ func (o *Install) Run(ctx context.Context) error { if err := o.performProvisioning(ctx); err != nil { return err } - _, err := o.kubeClient.GetSecret(ctx, password.SecretName, o.config.Namespace) + _, err := o.kubeClient.GetSecret(ctx, token.SecretName, o.config.Namespace) if err != nil && !k8serrors.IsNotFound(err) { return errors.Join(err, errors.New("could not get the everest token secret")) } if err != nil && k8serrors.IsNotFound(err) { - pwd, err := o.generatePassword(ctx) + pwd, err := o.generateToken(ctx) if err != nil { return err } - o.l.Info(pwd) + o.l.Info("\n" + pwd.String() + "\n\n") } return nil @@ -358,27 +358,25 @@ func (o *Install) installOperator(ctx context.Context, channel, operatorName str } } -func (o *Install) generatePassword(ctx context.Context) (*password.ResetResponse, error) { - o.l.Info("Creating password for Everest") +func (o *Install) generateToken(ctx context.Context) (*token.ResetResponse, error) { + o.l.Info("Creating token for Everest") - r, err := password.NewReset( - password.ResetConfig{ + r, err := token.NewReset( + token.ResetConfig{ KubeconfigPath: o.config.KubeconfigPath, Namespace: o.config.Namespace, }, o.l, ) if err != nil { - return nil, errors.Join(err, errors.New("could not initialize reset password")) + return nil, errors.Join(err, errors.New("could not initialize reset token")) } res, err := r.Run(ctx) if err != nil { - return nil, errors.Join(err, errors.New("could not create password")) + return nil, errors.Join(err, errors.New("could not create token")) } - o.l.Debug(res) - return res, nil } diff --git a/pkg/password/reset.go b/pkg/token/reset.go similarity index 75% rename from pkg/password/reset.go rename to pkg/token/reset.go index 75846693..9775ea1c 100644 --- a/pkg/password/reset.go +++ b/pkg/token/reset.go @@ -13,8 +13,8 @@ // See the License for the specific language governing permissions and // limitations under the License. -// Package password holds the main logic for password commands. -package password +// Package token holds the main logic for token commands. +package token import ( "context" @@ -45,29 +45,29 @@ type ( ResetConfig struct { // KubeconfigPath is a path to a kubeconfig KubeconfigPath string `mapstructure:"kubeconfig"` - // Namespace defines the namespace password shall be reset in. + // Namespace defines the namespace token shall be reset in. Namespace string } // ResetResponse is a response from the reset command. ResetResponse struct { - // Passwod is plain-text password generated by the command. - Password string `json:"password,omitempty"` + // Token is plain-text token generated by the command. + Token string `json:"token,omitempty"` } ) // SecretName stores the name of the secret to store Everest token. -const SecretName = "everest-password" +const SecretName = "everest-token" func (r ResetResponse) String() string { - return fmt.Sprintf("Your new password is:\n%s", r.Password) + return fmt.Sprintf("Here's your authorization token for accessing the Everest UI and API:\n\n\033[1m%s\033[0m\n\nStore this token securely as you will not be able to retrieve it later. If you ever need to reset it, use the following command:\neverestctl token reset", r.Token) } // NewReset returns a new Reset struct. func NewReset(c ResetConfig, l *zap.SugaredLogger) (*Reset, error) { cli := &Reset{ config: c, - l: l.With("component", "password/reset"), + l: l.With("component", "token/reset"), } k, err := kubernetes.New(c.KubeconfigPath, cli.l) @@ -91,9 +91,9 @@ func (r *Reset) Run(ctx context.Context) (*ResetResponse, error) { return nil, errors.Join(err, errors.New("could not get namespace from Kubernetes")) } - newPassword := uniuri.NewLen(128) + newToken := uniuri.NewLen(128) salt := []byte(ns.UID) - hash := pbkdf2.Key([]byte(newPassword), salt, 4096, 32, sha256.New) + hash := pbkdf2.Key([]byte(newToken), salt, 4096, 32, sha256.New) err = r.kubeClient.SetSecret(&corev1.Secret{ TypeMeta: metav1.TypeMeta{ @@ -106,12 +106,12 @@ func (r *Reset) Run(ctx context.Context) (*ResetResponse, error) { }, Type: corev1.SecretTypeOpaque, Data: map[string][]byte{ - "password": hash, + "token": hash, }, }) if err != nil { - return nil, errors.Join(err, errors.New("could not update password in Kubernetes")) + return nil, errors.Join(err, errors.New("could not update token in Kubernetes")) } - return &ResetResponse{Password: newPassword}, nil + return &ResetResponse{Token: newToken}, nil } From 40d943997d99266c46f1663788d8895277012117 Mon Sep 17 00:00:00 2001 From: Andrew Minkin Date: Sat, 16 Dec 2023 10:56:57 +0100 Subject: [PATCH 16/42] EVEREST-704 Moved monitoring to a separate command (#241) --- commands/monitoring/enable.go | 24 +-- pkg/everest/client/client.go | 43 +---- pkg/install/install.go | 18 +-- pkg/kubernetes/kubernetes.go | 5 + pkg/monitoring/enable.go | 126 ++++++++++++--- .../mock_everest_client_connector_test.go | 122 ++++++++++++++ pkg/monitoring/monitoring_test.go | 153 ++++++++++++++++++ 7 files changed, 404 insertions(+), 87 deletions(-) create mode 100644 pkg/monitoring/mock_everest_client_connector_test.go create mode 100644 pkg/monitoring/monitoring_test.go diff --git a/commands/monitoring/enable.go b/commands/monitoring/enable.go index 9e30d445..e2641836 100644 --- a/commands/monitoring/enable.go +++ b/commands/monitoring/enable.go @@ -61,6 +61,9 @@ func NewMonitoringCmd(l *zap.SugaredLogger) *cobra.Command { func initMonitoringFlags(cmd *cobra.Command) { cmd.Flags().StringP("kubeconfig", "k", "~/.kube/config", "Path to a kubeconfig") cmd.Flags().String("namespace", "percona-everest", "Namespace where Percona Everest is deployed") + cmd.Flags().Bool("skip-wizard", false, "Skip configuration wizard") + cmd.Flags().String("everest-url", "", "A URL to connect to Everest") + cmd.Flags().String("everest-token", "", "A Token to authenticate in Everest") cmd.Flags().String("instance-name", "", "Monitoring instance name from Everest. If defined, other monitoring configuration is ignored", ) @@ -74,15 +77,18 @@ func initMonitoringFlags(cmd *cobra.Command) { } func initMonitoringViperFlags(cmd *cobra.Command) { - viper.BindEnv("kubeconfig") //nolint:errcheck,gosec - viper.BindPFlag("kubeconfig", cmd.Flags().Lookup("kubeconfig")) //nolint:errcheck,gosec - viper.BindPFlag("namespace", cmd.Flags().Lookup("namespace")) //nolint:errcheck,gosec - viper.BindPFlag("instance-name", cmd.Flags().Lookup("monitoring.instance-name")) //nolint:errcheck,gosec - viper.BindPFlag("new-instance-name", cmd.Flags().Lookup("monitoring.new-instance-name")) //nolint:errcheck,gosec - viper.BindPFlag("type", cmd.Flags().Lookup("monitoring.type")) //nolint:errcheck,gosec - viper.BindPFlag("pmm.endpoint", cmd.Flags().Lookup("monitoring.pmm.endpoint")) //nolint:errcheck,gosec - viper.BindPFlag("pmm.username", cmd.Flags().Lookup("monitoring.pmm.username")) //nolint:errcheck,gosec - viper.BindPFlag("pmm.password", cmd.Flags().Lookup("monitoring.pmm.password")) //nolint:errcheck,gosec + viper.BindEnv("kubeconfig") //nolint:errcheck,gosec + viper.BindPFlag("skip-wizard", cmd.Flags().Lookup("skip-wizard")) //nolint:errcheck,gosec + viper.BindPFlag("kubeconfig", cmd.Flags().Lookup("kubeconfig")) //nolint:errcheck,gosec + viper.BindPFlag("namespace", cmd.Flags().Lookup("namespace")) //nolint:errcheck,gosec + viper.BindPFlag("everest-url", cmd.Flags().Lookup("everest-url")) //nolint:errcheck,gosec + viper.BindPFlag("everest-token", cmd.Flags().Lookup("everest-token")) //nolint:errcheck,gosec + viper.BindPFlag("instance-name", cmd.Flags().Lookup("instance-name")) //nolint:errcheck,gosec + viper.BindPFlag("new-instance-name", cmd.Flags().Lookup("new-instance-name")) //nolint:errcheck,gosec + viper.BindPFlag("type", cmd.Flags().Lookup("type")) //nolint:errcheck,gosec + viper.BindPFlag("pmm.endpoint", cmd.Flags().Lookup("pmm.endpoint")) //nolint:errcheck,gosec + viper.BindPFlag("pmm.username", cmd.Flags().Lookup("pmm.username")) //nolint:errcheck,gosec + viper.BindPFlag("pmm.password", cmd.Flags().Lookup("pmm.password")) //nolint:errcheck,gosec } func parseResetConfig() (*monitoring.Config, error) { diff --git a/pkg/everest/client/client.go b/pkg/everest/client/client.go index 7f06b019..fdca4bd9 100644 --- a/pkg/everest/client/client.go +++ b/pkg/everest/client/client.go @@ -23,10 +23,8 @@ import ( "fmt" "io" "net/http" - "net/url" "github.com/percona/percona-everest-backend/client" - "k8s.io/client-go/rest" ) // Everest is a connector to the Everest API. @@ -49,7 +47,7 @@ func NewEverestFromURL(url, everestPwd string) (*Everest, error) { everestCl, err := client.NewClient( fmt.Sprintf("%s/v1", url), client.WithRequestEditorFn(func(ctx context.Context, req *http.Request) error { - req.Header.Add("Authentication", fmt.Sprintf("Bearer %s", everestPwd)) + req.Header.Set("Cookie", fmt.Sprintf("everest_token=%s", everestPwd)) return nil }), ) @@ -59,45 +57,6 @@ func NewEverestFromURL(url, everestPwd string) (*Everest, error) { return NewEverest(everestCl), nil } -// NewProxiedEverest creates everest client by proxying requests into the k8s service using k8s api. -// Learn more https://kubernetes.io/docs/tasks/access-application-cluster/access-cluster-services/#manually-constructing-apiserver-proxy-urls -// -// This client must be used only for provisioning only. -func NewProxiedEverest(config *rest.Config, namespace, everestPwd string) (*Everest, error) { - host, err := url.Parse(config.Host) - if err != nil { - return nil, err - } - cl, err := client.NewClient( - fmt.Sprintf( - "%s/api/v1/namespaces/%s/services/everest/proxy/v1", - host, - url.PathEscape(namespace), - ), - client.WithRequestEditorFn(func(ctx context.Context, req *http.Request) error { - // We can't use the Authorization header because it's automatically - // removed by the k8s proxy. - // See https://github.com/kubernetes/kubernetes/issues/38775 for details. - req.AddCookie(&http.Cookie{ - Name: "everest_token", - Value: everestPwd, - }) - return nil - }), - ) - if err != nil { - return nil, err - } - transport, err := rest.TransportFor(config) - if err != nil { - return nil, err - } - httpClient := &http.Client{Transport: transport} - e := NewEverest(cl) - e.cl.Client = httpClient - return e, nil -} - // makeRequest calls arbitrary *client.Client method for API call and applies common logic for response handling. // See methods in Everest struct for examples how to call. func makeRequest[B interface{}, R interface{}]( diff --git a/pkg/install/install.go b/pkg/install/install.go index ff6a82d0..a64819fa 100644 --- a/pkg/install/install.go +++ b/pkg/install/install.go @@ -42,16 +42,14 @@ type Install struct { } const ( - catalogSourceNamespace = "olm" - everestBackendServiceName = "percona-everest-backend" - operatorGroup = "percona-operators-group" - catalogSource = "percona-everest-catalog" - everestOperatorName = "everest-operator" - pxcOperatorName = "percona-xtradb-cluster-operator" - psmdbOperatorName = "percona-server-mongodb-operator" - pgOperatorName = "percona-postgresql-operator" - vmOperatorName = "victoriametrics-operator" - operatorInstallThreads = 1 + catalogSourceNamespace = "olm" + operatorGroup = "percona-operators-group" + catalogSource = "percona-everest-catalog" + everestOperatorName = "everest-operator" + pxcOperatorName = "percona-xtradb-cluster-operator" + psmdbOperatorName = "percona-server-mongodb-operator" + pgOperatorName = "percona-postgresql-operator" + operatorInstallThreads = 1 ) type ( diff --git a/pkg/kubernetes/kubernetes.go b/pkg/kubernetes/kubernetes.go index 8ed05028..509a1d74 100644 --- a/pkg/kubernetes/kubernetes.go +++ b/pkg/kubernetes/kubernetes.go @@ -951,3 +951,8 @@ func (k *Kubernetes) DeleteEverest(ctx context.Context, namespace string) error func (k *Kubernetes) GetDeployment(ctx context.Context, name, namespace string) (*appsv1.Deployment, error) { return k.client.GetDeployment(ctx, name, namespace) } + +// WaitForRollout waits for rollout of a provided deployment in the provided namespace. +func (k *Kubernetes) WaitForRollout(ctx context.Context, name, namespace string) error { + return k.client.DoRolloutWait(ctx, types.NamespacedName{Name: name, Namespace: namespace}) +} diff --git a/pkg/monitoring/enable.go b/pkg/monitoring/enable.go index 1194b04d..1848fa60 100644 --- a/pkg/monitoring/enable.go +++ b/pkg/monitoring/enable.go @@ -21,6 +21,7 @@ import ( "errors" "fmt" "net/url" + "strings" "time" "github.com/AlecAivazis/survey/v2" @@ -36,11 +37,12 @@ import ( ) const ( - catalogSourceNamespace = "olm" - everestBackendServiceName = "percona-everest-backend" - operatorGroup = "percona-operators-group" - catalogSource = "percona-everest-catalog" - vmOperatorName = "victoriametrics-operator" + catalogSourceNamespace = "olm" + everestBackendServiceName = "percona-everest-backend" + everestBackendDeploymentName = "percona-everest" + operatorGroup = "percona-operators-group" + catalogSource = "percona-everest-catalog" + vmOperatorName = "victoriametrics-operator" ) // Monitoring implements the logic for provisioning monitoring. @@ -69,7 +71,9 @@ type ( KubeconfigPath string `mapstructure:"kubeconfig"` // EverestToken defines a token to connect to Everest - EverestToken string + EverestToken string `mapstructure:"everest-token"` + // EverestURL defines an URL to connect to Everest + EverestURL string `mapstructure:"everest-url"` // InstanceName stores monitoring instance name from Everest. // If provided, the other monitoring configuration is ignored. @@ -116,13 +120,13 @@ func NewMonitoring(c Config, l *zap.SugaredLogger) (*Monitoring, error) { // Run runs the operators installation process. func (m *Monitoring) Run(ctx context.Context) error { - if err := m.populateConfig(); err != nil { + if err := m.populateConfig(ctx); err != nil { return err } if err := m.provisionNamespace(ctx); err != nil { return err } - if err := m.configureEverestConnector(m.config.EverestToken); err != nil { + if err := m.configureEverestConnector(); err != nil { return err } if err := m.provisionMonitoring(ctx); err != nil { @@ -132,8 +136,11 @@ func (m *Monitoring) Run(ctx context.Context) error { return nil } -func (m *Monitoring) populateConfig() error { +func (m *Monitoring) populateConfig(ctx context.Context) error { if !m.config.SkipWizard { + if err := m.runEverestWizard(ctx); err != nil { + return err + } if err := m.runMonitoringWizard(); err != nil { return err } @@ -151,7 +158,7 @@ func (m *Monitoring) provisionNamespace(ctx context.Context) error { return err } -func (m *Monitoring) provisionMonitoring(ctx context.Context) error { //nolint:funlen +func (m *Monitoring) installVMOperator(ctx context.Context) error { m.l.Infof("Installing %s operator", vmOperatorName) params := kubernetes.InstallOperatorRequest{ @@ -169,8 +176,15 @@ func (m *Monitoring) provisionMonitoring(ctx context.Context) error { //nolint:f return err } m.l.Infof("%s operator has been installed", vmOperatorName) + return nil +} + +func (m *Monitoring) provisionMonitoring(ctx context.Context) error { l := m.l.With("action", "monitoring") l.Info("Preparing k8s cluster for monitoring") + if err := m.installVMOperator(ctx); err != nil { + return err + } if err := m.kubeClient.ProvisionMonitoring(m.config.Namespace); err != nil { return errors.Join(err, errors.New("could not provision monitoring configuration")) } @@ -183,19 +197,12 @@ func (m *Monitoring) provisionMonitoring(ctx context.Context) error { //nolint:f if err := m.kubeClient.RestartEverest(ctx, everestBackendServiceName, m.config.Namespace); err != nil { return err } - if err := m.checkEverestConnection(ctx); err != nil { - var u *url.Error - if errors.As(err, &u) { - m.l.Debug(err) - - l := m.l.WithOptions(zap.AddStacktrace(zap.DPanicLevel)) - l.Error("Could not connect to Everest. " + - "Make sure Everest is running and is accessible from this machine.", - ) - return common.ErrExitWithError - } + if err := m.kubeClient.WaitForRollout(ctx, everestBackendDeploymentName, m.config.Namespace); err != nil { + return errors.Join(err, errors.New("failed waiting for Everest to be ready")) + } - return errors.Join(err, errors.New("could not check connection to Everest")) + if err := m.waitForEverestConnection(ctx); err != nil { + return err } // We retry for a bit since the MonitoringConfig may not be properly @@ -221,6 +228,32 @@ func (m *Monitoring) provisionMonitoring(ctx context.Context) error { //nolint:f return nil } +func (m *Monitoring) waitForEverestConnection(ctx context.Context) error { + sleep := time.Second + for i := 0; i < 3; i++ { + time.Sleep(sleep) + sleep *= 2 + if err := m.checkEverestConnection(ctx); err != nil { + if i != 2 { + continue + } + var u *url.Error + if errors.As(err, &u) { + m.l.Debug(err) + + l := m.l.WithOptions(zap.AddStacktrace(zap.DPanicLevel)) + l.Error("Could not connect to Everest. " + + "Make sure Everest is running and is accessible from this machine.", + ) + return common.ErrExitWithError + } + + return errors.Join(err, errors.New("could not check connection to Everest")) + } + } + return nil +} + func (m *Monitoring) resolveMonitoringInstanceName(ctx context.Context) error { if m.config.InstanceName != "" { i, err := m.everestClient.GetMonitoringInstance(ctx, m.config.InstanceName) @@ -231,7 +264,7 @@ func (m *Monitoring) resolveMonitoringInstanceName(ctx context.Context) error { return nil } - if m.config.NewInstanceName == "" { + if m.config.NewInstanceName == "" && m.monitoringInstanceName == "" { return errors.New("monitoring.new-instance-name is required when creating a new monitoring instance") } @@ -265,8 +298,8 @@ func (m *Monitoring) createPMMMonitoringInstance(ctx context.Context, name, url, return nil } -func (m *Monitoring) configureEverestConnector(everestPwd string) error { - e, err := everestClient.NewProxiedEverest(m.kubeClient.Config(), m.config.Namespace, everestPwd) +func (m *Monitoring) configureEverestConnector() error { + e, err := everestClient.NewEverestFromURL(m.config.EverestURL, m.config.EverestToken) if err != nil { return err } @@ -274,10 +307,51 @@ func (m *Monitoring) configureEverestConnector(everestPwd string) error { return nil } +func (m *Monitoring) runEverestWizard(ctx context.Context) error { + pURL := &survey.Input{ + Message: "Everest URL endpoint", + Default: m.config.EverestURL, + } + if err := survey.AskOne( + pURL, + &m.config.EverestURL, + survey.WithValidator(survey.Required), + ); err != nil { + return err + } + pToken := &survey.Password{Message: "Everest Token"} + if err := survey.AskOne( + pToken, + &m.config.EverestToken, + survey.WithValidator(survey.Required), + ); err != nil { + return err + } + m.config.EverestURL = strings.TrimSpace(m.config.EverestURL) + m.config.EverestToken = strings.TrimSpace(m.config.EverestToken) + + if err := m.configureEverestConnector(); err != nil { + return err + } + if err := m.checkEverestConnection(ctx); err != nil { + return err + } + return nil +} + func (m *Monitoring) runMonitoringWizard() error { if m.config.PMM == nil { m.config.PMM = &PMMConfig{} } + pName := &survey.Input{ + Message: "Registered instance name", + } + if err := survey.AskOne( + pName, + &m.config.InstanceName, + ); err != nil { + return err + } if m.config.InstanceName == "" { if err := m.runMonitoringNewURLWizard(); err != nil { @@ -300,6 +374,7 @@ func (m *Monitoring) runMonitoringNewURLWizard() error { ); err != nil { return err } + m.config.PMM.Endpoint = strings.TrimSpace(m.config.PMM.Endpoint) pUser := &survey.Input{ Message: "Username", @@ -338,7 +413,6 @@ func (m *Monitoring) runMonitoringNewURLWizard() error { } func (m *Monitoring) checkEverestConnection(ctx context.Context) error { - m.l.Info("Checking connection to Everest") _, err := m.everestClient.ListMonitoringInstances(ctx) return err } diff --git a/pkg/monitoring/mock_everest_client_connector_test.go b/pkg/monitoring/mock_everest_client_connector_test.go new file mode 100644 index 00000000..5a9255ac --- /dev/null +++ b/pkg/monitoring/mock_everest_client_connector_test.go @@ -0,0 +1,122 @@ +// Code generated by mockery v2.36.1. DO NOT EDIT. + +package monitoring + +import ( + context "context" + + client "github.com/percona/percona-everest-backend/client" + mock "github.com/stretchr/testify/mock" +) + +// mockEverestClientConnector is an autogenerated mock type for the everestClientConnector type +type mockEverestClientConnector struct { + mock.Mock +} + +// CreateMonitoringInstance provides a mock function with given fields: ctx, body +func (_m *mockEverestClientConnector) CreateMonitoringInstance(ctx context.Context, body client.MonitoringInstanceCreateParams) (*client.MonitoringInstanceBaseWithName, error) { + ret := _m.Called(ctx, body) + + var r0 *client.MonitoringInstanceBaseWithName + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, client.MonitoringInstanceCreateParams) (*client.MonitoringInstanceBaseWithName, error)); ok { + return rf(ctx, body) + } + if rf, ok := ret.Get(0).(func(context.Context, client.MonitoringInstanceCreateParams) *client.MonitoringInstanceBaseWithName); ok { + r0 = rf(ctx, body) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*client.MonitoringInstanceBaseWithName) + } + } + + if rf, ok := ret.Get(1).(func(context.Context, client.MonitoringInstanceCreateParams) error); ok { + r1 = rf(ctx, body) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// GetMonitoringInstance provides a mock function with given fields: ctx, pmmInstanceID +func (_m *mockEverestClientConnector) GetMonitoringInstance(ctx context.Context, pmmInstanceID string) (*client.MonitoringInstanceBaseWithName, error) { + ret := _m.Called(ctx, pmmInstanceID) + + var r0 *client.MonitoringInstanceBaseWithName + var r1 error + if rf, ok := ret.Get(0).(func(context.Context, string) (*client.MonitoringInstanceBaseWithName, error)); ok { + return rf(ctx, pmmInstanceID) + } + if rf, ok := ret.Get(0).(func(context.Context, string) *client.MonitoringInstanceBaseWithName); ok { + r0 = rf(ctx, pmmInstanceID) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).(*client.MonitoringInstanceBaseWithName) + } + } + + if rf, ok := ret.Get(1).(func(context.Context, string) error); ok { + r1 = rf(ctx, pmmInstanceID) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// ListMonitoringInstances provides a mock function with given fields: ctx +func (_m *mockEverestClientConnector) ListMonitoringInstances(ctx context.Context) ([]client.MonitoringInstanceBaseWithName, error) { + ret := _m.Called(ctx) + + var r0 []client.MonitoringInstanceBaseWithName + var r1 error + if rf, ok := ret.Get(0).(func(context.Context) ([]client.MonitoringInstanceBaseWithName, error)); ok { + return rf(ctx) + } + if rf, ok := ret.Get(0).(func(context.Context) []client.MonitoringInstanceBaseWithName); ok { + r0 = rf(ctx) + } else { + if ret.Get(0) != nil { + r0 = ret.Get(0).([]client.MonitoringInstanceBaseWithName) + } + } + + if rf, ok := ret.Get(1).(func(context.Context) error); ok { + r1 = rf(ctx) + } else { + r1 = ret.Error(1) + } + + return r0, r1 +} + +// SetKubernetesClusterMonitoring provides a mock function with given fields: ctx, body +func (_m *mockEverestClientConnector) SetKubernetesClusterMonitoring(ctx context.Context, body client.KubernetesClusterMonitoring) error { + ret := _m.Called(ctx, body) + + var r0 error + if rf, ok := ret.Get(0).(func(context.Context, client.KubernetesClusterMonitoring) error); ok { + r0 = rf(ctx, body) + } else { + r0 = ret.Error(0) + } + + return r0 +} + +// newMockEverestClientConnector creates a new instance of mockEverestClientConnector. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. +// The first argument is typically a *testing.T value. +func newMockEverestClientConnector(t interface { + mock.TestingT + Cleanup(func()) +}, +) *mockEverestClientConnector { + mock := &mockEverestClientConnector{} + mock.Mock.Test(t) + + t.Cleanup(func() { mock.AssertExpectations(t) }) + + return mock +} diff --git a/pkg/monitoring/monitoring_test.go b/pkg/monitoring/monitoring_test.go new file mode 100644 index 00000000..ed9fd871 --- /dev/null +++ b/pkg/monitoring/monitoring_test.go @@ -0,0 +1,153 @@ +// percona-everest-cli +// Copyright (C) 2023 Percona LLC +// +// Licensed under the Apache License, Version 2.0 (the "License"); +// you may not use this file except in compliance with the License. +// You may obtain a copy of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +// See the License for the specific language governing permissions and +// limitations under the License. +package monitoring + +import ( + "context" + "errors" + "strings" + "testing" + + "github.com/percona/percona-everest-backend/client" + mock "github.com/stretchr/testify/mock" + "github.com/stretchr/testify/require" + "go.uber.org/zap" +) + +const ( + iName = "monitoring-instance" +) + +func TestInstall_resolveMonitoringInstanceName(t *testing.T) { + t.Parallel() + + l, err := zap.NewDevelopment() + require.NoError(t, err) + + t.Run("shall work with monitoring instance name", func(t *testing.T) { + t.Parallel() + + m := &mockEverestClientConnector{} + m.Mock.On("GetMonitoringInstance", mock.Anything, "123").Return(&client.MonitoringInstance{Name: iName}, nil) + defer m.AssertExpectations(t) + + o := &Monitoring{ + l: l.Sugar(), + config: Config{ + InstanceName: "123", + }, + everestClient: m, + } + + err := o.resolveMonitoringInstanceName(context.Background()) + require.NoError(t, err) + require.Equal(t, iName, o.monitoringInstanceName) + }) + + t.Run("shall fail with monitoring instance name not found", func(t *testing.T) { + t.Parallel() + + m := &mockEverestClientConnector{} + m.Mock.On("GetMonitoringInstance", mock.Anything, "123").Return(nil, errors.New("not-found")) + defer m.AssertExpectations(t) + + o := &Monitoring{ + l: l.Sugar(), + config: Config{ + InstanceName: "123", + }, + everestClient: m, + } + + err := o.resolveMonitoringInstanceName(context.Background()) + require.Error(t, err) + require.True(t, strings.Contains(err.Error(), "not-found")) + }) + + t.Run("shall prefer monitoring instance name", func(t *testing.T) { + t.Parallel() + + m := &mockEverestClientConnector{} + m.Mock.On("GetMonitoringInstance", mock.Anything, "123").Return(&client.MonitoringInstance{Name: iName}, nil) + defer m.AssertExpectations(t) + + o := &Monitoring{ + l: l.Sugar(), + config: Config{ + InstanceName: "123", + PMM: &PMMConfig{ + Endpoint: "http://localhost", + Username: "admin", + Password: "admin", + }, + }, + everestClient: m, + } + + err := o.resolveMonitoringInstanceName(context.Background()) + require.NoError(t, err) + require.Equal(t, iName, o.monitoringInstanceName) + }) + + t.Run("shall fail without new instance name defined when creating a new instance", func(t *testing.T) { + t.Parallel() + + m := &mockEverestClientConnector{} + defer m.AssertExpectations(t) + + o := &Monitoring{ + l: l.Sugar(), + config: Config{}, + everestClient: m, + } + + err := o.resolveMonitoringInstanceName(context.Background()) + require.Error(t, err) + require.True(t, strings.Contains(err.Error(), "monitoring.new-instance-name is required")) + }) + + t.Run("shall create a new PMM instance", func(t *testing.T) { + t.Parallel() + + m := &mockEverestClientConnector{} + m.Mock.On("CreateMonitoringInstance", mock.Anything, client.MonitoringInstanceCreateParams{ + Type: client.MonitoringInstanceCreateParamsTypePmm, + Name: "new-instance", + Url: "http://monitoring-url", + Pmm: &client.PMMMonitoringInstanceSpec{ + User: "user", + Password: "pass", + }, + }).Return(&client.MonitoringInstance{}, nil) + defer m.AssertExpectations(t) + + o := &Monitoring{ + l: l.Sugar(), + config: Config{ + NewInstanceName: "new-instance", + PMM: &PMMConfig{ + Endpoint: "http://monitoring-url", + Username: "user", + Password: "pass", + }, + }, + everestClient: m, + } + + err := o.resolveMonitoringInstanceName(context.Background()) + require.NoError(t, err) + require.Equal(t, "new-instance", o.monitoringInstanceName) + }) +} From 96a7c883eb8e903812aa2c3ff0628441c9f9877d Mon Sep 17 00:00:00 2001 From: Andrew Minkin Date: Mon, 18 Dec 2023 13:10:55 +0100 Subject: [PATCH 17/42] EVEREST-704 Removed duplication of consts (#243) --- pkg/install/install.go | 9 +++------ pkg/kubernetes/kubernetes.go | 6 ++++++ pkg/monitoring/enable.go | 31 ++++++++++++------------------- pkg/monitoring/monitoring_test.go | 2 +- 4 files changed, 22 insertions(+), 26 deletions(-) diff --git a/pkg/install/install.go b/pkg/install/install.go index a64819fa..dd42c6ff 100644 --- a/pkg/install/install.go +++ b/pkg/install/install.go @@ -42,9 +42,6 @@ type Install struct { } const ( - catalogSourceNamespace = "olm" - operatorGroup = "percona-operators-group" - catalogSource = "percona-everest-catalog" everestOperatorName = "everest-operator" pxcOperatorName = "percona-xtradb-cluster-operator" psmdbOperatorName = "percona-server-mongodb-operator" @@ -339,9 +336,9 @@ func (o *Install) installOperator(ctx context.Context, channel, operatorName str params := kubernetes.InstallOperatorRequest{ Namespace: o.config.Namespace, Name: operatorName, - OperatorGroup: operatorGroup, - CatalogSource: catalogSource, - CatalogSourceNamespace: catalogSourceNamespace, + OperatorGroup: kubernetes.OperatorGroup, + CatalogSource: kubernetes.CatalogSource, + CatalogSourceNamespace: kubernetes.CatalogSourceNamespace, Channel: channel, InstallPlanApproval: v1alpha1.ApprovalManual, } diff --git a/pkg/kubernetes/kubernetes.go b/pkg/kubernetes/kubernetes.go index 509a1d74..8f752873 100644 --- a/pkg/kubernetes/kubernetes.go +++ b/pkg/kubernetes/kubernetes.go @@ -67,6 +67,12 @@ const ( // PerconaEverestDeploymentName stores the name of everest backend deployment. PerconaEverestDeploymentName = "percona-everest" + // CatalogSourceNamespace defines a namespace to use to find a catalog source. + CatalogSourceNamespace = "olm" + // CatalogSource is the name of OLM catalog source. + CatalogSource = "percona-everest-catalog" + // OperatorGroup defines the name of the configuration for subscriptions. + OperatorGroup = "percona-operators-group" pxcDeploymentName = "percona-xtradb-cluster-operator" psmdbDeploymentName = "percona-server-mongodb-operator" diff --git a/pkg/monitoring/enable.go b/pkg/monitoring/enable.go index 1848fa60..2b517039 100644 --- a/pkg/monitoring/enable.go +++ b/pkg/monitoring/enable.go @@ -37,11 +37,8 @@ import ( ) const ( - catalogSourceNamespace = "olm" everestBackendServiceName = "percona-everest-backend" everestBackendDeploymentName = "percona-everest" - operatorGroup = "percona-operators-group" - catalogSource = "percona-everest-catalog" vmOperatorName = "victoriametrics-operator" ) @@ -126,9 +123,6 @@ func (m *Monitoring) Run(ctx context.Context) error { if err := m.provisionNamespace(ctx); err != nil { return err } - if err := m.configureEverestConnector(); err != nil { - return err - } if err := m.provisionMonitoring(ctx); err != nil { return err } @@ -145,6 +139,14 @@ func (m *Monitoring) populateConfig(ctx context.Context) error { return err } } + m.config.EverestURL = strings.TrimSpace(m.config.EverestURL) + + if err := m.configureEverestConnector(); err != nil { + return err + } + if err := m.checkEverestConnection(ctx); err != nil { + return err + } return nil } @@ -164,9 +166,9 @@ func (m *Monitoring) installVMOperator(ctx context.Context) error { params := kubernetes.InstallOperatorRequest{ Namespace: m.config.Namespace, Name: vmOperatorName, - OperatorGroup: operatorGroup, - CatalogSource: catalogSource, - CatalogSourceNamespace: catalogSourceNamespace, + OperatorGroup: kubernetes.OperatorGroup, + CatalogSource: kubernetes.CatalogSource, + CatalogSourceNamespace: kubernetes.CatalogSourceNamespace, Channel: "stable-v0", InstallPlanApproval: v1alpha1.ApprovalManual, } @@ -265,7 +267,7 @@ func (m *Monitoring) resolveMonitoringInstanceName(ctx context.Context) error { } if m.config.NewInstanceName == "" && m.monitoringInstanceName == "" { - return errors.New("monitoring.new-instance-name is required when creating a new monitoring instance") + return errors.New("new-instance-name is required when creating a new monitoring instance") } err := m.createPMMMonitoringInstance( @@ -327,15 +329,6 @@ func (m *Monitoring) runEverestWizard(ctx context.Context) error { ); err != nil { return err } - m.config.EverestURL = strings.TrimSpace(m.config.EverestURL) - m.config.EverestToken = strings.TrimSpace(m.config.EverestToken) - - if err := m.configureEverestConnector(); err != nil { - return err - } - if err := m.checkEverestConnection(ctx); err != nil { - return err - } return nil } diff --git a/pkg/monitoring/monitoring_test.go b/pkg/monitoring/monitoring_test.go index ed9fd871..a97418f3 100644 --- a/pkg/monitoring/monitoring_test.go +++ b/pkg/monitoring/monitoring_test.go @@ -115,7 +115,7 @@ func TestInstall_resolveMonitoringInstanceName(t *testing.T) { err := o.resolveMonitoringInstanceName(context.Background()) require.Error(t, err) - require.True(t, strings.Contains(err.Error(), "monitoring.new-instance-name is required")) + require.True(t, strings.Contains(err.Error(), "new-instance-name is required")) }) t.Run("shall create a new PMM instance", func(t *testing.T) { From f94772469452b2ecf750c8918935cdd80f9dd21e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 19 Dec 2023 12:08:52 +0100 Subject: [PATCH 18/42] Bump golang.org/x/tools from 0.16.0 to 0.16.1 in /tools (#251) Bumps [golang.org/x/tools](https://github.com/golang/tools) from 0.16.0 to 0.16.1. - [Release notes](https://github.com/golang/tools/releases) - [Commits](https://github.com/golang/tools/compare/v0.16.0...v0.16.1) --- updated-dependencies: - dependency-name: golang.org/x/tools dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- tools/go.mod | 2 +- tools/go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/go.mod b/tools/go.mod index 265c92c7..6fe17063 100644 --- a/tools/go.mod +++ b/tools/go.mod @@ -10,7 +10,7 @@ require ( github.com/reviewdog/reviewdog v0.15.0 github.com/vburenin/ifacemaker v1.2.1 github.com/vektra/mockery/v2 v2.36.1 - golang.org/x/tools v0.16.0 + golang.org/x/tools v0.16.1 mvdan.cc/gofumpt v0.5.0 ) diff --git a/tools/go.sum b/tools/go.sum index f139357e..ab916c1e 100644 --- a/tools/go.sum +++ b/tools/go.sum @@ -1044,8 +1044,8 @@ golang.org/x/tools v0.2.0/go.mod h1:y4OqIKeOV/fWJetJ8bXPU1sEVniLMIyDAZWeHdV+NTA= golang.org/x/tools v0.3.0/go.mod h1:/rWhSS2+zyEVwoJf8YAX6L2f0ntZ7Kn/mGgAWcipA5k= golang.org/x/tools v0.5.0/go.mod h1:N+Kgy78s5I24c24dU8OfWNEotWjutIs8SnJvn5IDq+k= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.16.0 h1:GO788SKMRunPIBCXiQyo2AaexLstOrVhuAL5YwsckQM= -golang.org/x/tools v0.16.0/go.mod h1:kYVVN6I1mBNoB1OX+noeBjbRk4IUEPa7JJ+TJMEooJ0= +golang.org/x/tools v0.16.1 h1:TLyB3WofjdOEepBHAU20JdNC1Zbg87elYofWYAY5oZA= +golang.org/x/tools v0.16.1/go.mod h1:kYVVN6I1mBNoB1OX+noeBjbRk4IUEPa7JJ+TJMEooJ0= 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= From bfe3ca1ac7e4588ff2a75bc7db055d8e80ef5d97 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 19 Dec 2023 12:09:33 +0100 Subject: [PATCH 19/42] Bump github.com/daixiang0/gci from 0.11.2 to 0.12.0 in /tools (#250) Bumps [github.com/daixiang0/gci](https://github.com/daixiang0/gci) from 0.11.2 to 0.12.0. - [Release notes](https://github.com/daixiang0/gci/releases) - [Commits](https://github.com/daixiang0/gci/compare/v0.11.2...v0.12.0) --- updated-dependencies: - dependency-name: github.com/daixiang0/gci dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- tools/go.mod | 2 +- tools/go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/go.mod b/tools/go.mod index 6fe17063..62fa3aae 100644 --- a/tools/go.mod +++ b/tools/go.mod @@ -3,7 +3,7 @@ module github.com/percona/percona-everest-cli/tools go 1.21 require ( - github.com/daixiang0/gci v0.11.2 + github.com/daixiang0/gci v0.12.0 github.com/deepmap/oapi-codegen v1.16.2 github.com/golangci/golangci-lint v1.55.2 github.com/quasilyte/go-consistent v0.6.0 diff --git a/tools/go.sum b/tools/go.sum index ab916c1e..ac155457 100644 --- a/tools/go.sum +++ b/tools/go.sum @@ -153,8 +153,8 @@ github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSV github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/curioswitch/go-reassign v0.2.0 h1:G9UZyOcpk/d7Gd6mqYgd8XYWFMw/znxwGDUstnC9DIo= github.com/curioswitch/go-reassign v0.2.0/go.mod h1:x6OpXuWvgfQaMGks2BZybTngWjT84hqJfKoO8Tt/Roc= -github.com/daixiang0/gci v0.11.2 h1:Oji+oPsp3bQ6bNNgX30NBAVT18P4uBH4sRZnlOlTj7Y= -github.com/daixiang0/gci v0.11.2/go.mod h1:xtHP9N7AHdNvtRNfcx9gwTDfw7FRJx4bZUsiEfiNNAI= +github.com/daixiang0/gci v0.12.0 h1:EQTG7FfKPlO4Ste+oN0kvz+gP4XswKx29D4fLrmwbiU= +github.com/daixiang0/gci v0.12.0/go.mod h1:xtHP9N7AHdNvtRNfcx9gwTDfw7FRJx4bZUsiEfiNNAI= 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= From a28e3b086d155a61d33aa07e8d0c705286481304 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 19 Dec 2023 12:11:56 +0100 Subject: [PATCH 20/42] Bump k8s.io/cli-runtime from 0.28.4 to 0.29.0 (#248) Bumps [k8s.io/cli-runtime](https://github.com/kubernetes/cli-runtime) from 0.28.4 to 0.29.0. - [Commits](https://github.com/kubernetes/cli-runtime/compare/v0.28.4...v0.29.0) --- updated-dependencies: - dependency-name: k8s.io/cli-runtime dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 18 +++++++++--------- go.sum | 36 ++++++++++++++++++------------------ 2 files changed, 27 insertions(+), 27 deletions(-) diff --git a/go.mod b/go.mod index 6b300e5e..0e5d33c7 100644 --- a/go.mod +++ b/go.mod @@ -19,11 +19,11 @@ require ( golang.org/x/sync v0.5.0 gopkg.in/yaml.v3 v3.0.1 gotest.tools v2.2.0+incompatible - k8s.io/api v0.28.4 + k8s.io/api v0.29.0 k8s.io/apiextensions-apiserver v0.28.4 - k8s.io/apimachinery v0.28.4 - k8s.io/cli-runtime v0.28.4 - k8s.io/client-go v0.28.4 + k8s.io/apimachinery v0.29.0 + k8s.io/cli-runtime v0.29.0 + k8s.io/client-go v0.29.0 k8s.io/kubectl v0.28.4 sigs.k8s.io/controller-runtime v0.16.3 ) @@ -50,7 +50,7 @@ require ( github.com/golang/protobuf v1.5.3 // indirect github.com/google/cel-go v0.16.1 // indirect github.com/google/gnostic-models v0.6.8 // indirect - github.com/google/go-cmp v0.5.9 // indirect + github.com/google/go-cmp v0.6.0 // indirect github.com/google/gofuzz v1.2.0 // indirect github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect github.com/google/uuid v1.4.0 // indirect @@ -76,7 +76,7 @@ require ( github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/oapi-codegen/runtime v1.0.0 // indirect - github.com/onsi/gomega v1.28.0 // indirect + github.com/onsi/gomega v1.29.0 // indirect github.com/operator-framework/operator-registry v1.30.1 // indirect github.com/pelletier/go-toml/v2 v2.1.0 // indirect github.com/perimeterx/marshmallow v1.1.5 // indirect @@ -112,12 +112,12 @@ require ( gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect - k8s.io/klog/v2 v2.100.1 // indirect - k8s.io/kube-openapi v0.0.0-20230816210353-14e408962443 // indirect + k8s.io/klog/v2 v2.110.1 // indirect + k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 // indirect k8s.io/utils v0.0.0-20230726121419-3b25d923346b // indirect sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect sigs.k8s.io/kustomize/api v0.13.5-0.20230601165947-6ce0bf390ce3 // indirect sigs.k8s.io/kustomize/kyaml v0.14.3-0.20230601165947-6ce0bf390ce3 // indirect - sigs.k8s.io/structured-merge-diff/v4 v4.3.0 // indirect + sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect sigs.k8s.io/yaml v1.3.0 // indirect ) diff --git a/go.sum b/go.sum index 826cab96..4a14e929 100644 --- a/go.sum +++ b/go.sum @@ -105,7 +105,6 @@ github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/go-errors/errors v1.5.0 h1:/EuijeGOu7ckFxzhkj4CXJ8JaenxK7bKUxpPYqeLHqQ= github.com/go-errors/errors v1.5.0/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= -github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY= github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= @@ -157,8 +156,9 @@ github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.9 h1:O2Tfq5qg4qc4AmwVlvv0oLiVAGB7enBSJ2x2DqQFi38= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= +github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= @@ -257,8 +257,8 @@ github.com/oapi-codegen/runtime v1.0.0 h1:P4rqFX5fMFWqRzY9M/3YF9+aPSPPB06IzP2P7o github.com/oapi-codegen/runtime v1.0.0/go.mod h1:LmCUMQuPB4M/nLXilQXhHw+BLZdDb18B34OO356yJ/A= github.com/onsi/ginkgo/v2 v2.13.0 h1:0jY9lJquiL8fcf3M4LAXN5aMlS/b2BV86HFFPCPMgE4= github.com/onsi/ginkgo/v2 v2.13.0/go.mod h1:TE309ZR8s5FsKKpuB1YAQYBzCaAfUgatB/xlT/ETL/o= -github.com/onsi/gomega v1.28.0 h1:i2rg/p9n/UqIDAMFUJ6qIUUMcsqOuUHgbpbu235Vr1c= -github.com/onsi/gomega v1.28.0/go.mod h1:A1H2JE76sI14WIP57LMKj7FVfCHx3g3BcZVjJG8bjX8= +github.com/onsi/gomega v1.29.0 h1:KIA/t2t5UBzoirT4H9tsML45GEbo3ouUnBHsCfD2tVg= +github.com/onsi/gomega v1.29.0/go.mod h1:9sxs+SwGrKI0+PWe4Fxa9tFQQBG5xSsSbMXOI8PPpoQ= 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.1.0-rc2.0.20221005185240-3a7f492d3f1b h1:YWuSjZCQAPM8UUBLkYUk1e+rZcvWHJmFb6i6rM44Xs8= @@ -514,24 +514,24 @@ gotest.tools v2.2.0+incompatible h1:VsBPFP1AI068pPrMxtb/S8Zkgf9xEmTLJjfM+P5UIEo= gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -k8s.io/api v0.28.4 h1:8ZBrLjwosLl/NYgv1P7EQLqoO8MGQApnbgH8tu3BMzY= -k8s.io/api v0.28.4/go.mod h1:axWTGrY88s/5YE+JSt4uUi6NMM+gur1en2REMR7IRj0= +k8s.io/api v0.29.0 h1:NiCdQMY1QOp1H8lfRyeEf8eOwV6+0xA6XEE44ohDX2A= +k8s.io/api v0.29.0/go.mod h1:sdVmXoz2Bo/cb77Pxi71IPTSErEW32xa4aXwKH7gfBA= k8s.io/apiextensions-apiserver v0.28.4 h1:AZpKY/7wQ8n+ZYDtNHbAJBb+N4AXXJvyZx6ww6yAJvU= k8s.io/apiextensions-apiserver v0.28.4/go.mod h1:pgQIZ1U8eJSMQcENew/0ShUTlePcSGFq6dxSxf2mwPM= -k8s.io/apimachinery v0.28.4 h1:zOSJe1mc+GxuMnFzD4Z/U1wst50X28ZNsn5bhgIIao8= -k8s.io/apimachinery v0.28.4/go.mod h1:wI37ncBvfAoswfq626yPTe6Bz1c22L7uaJ8dho83mgg= +k8s.io/apimachinery v0.29.0 h1:+ACVktwyicPz0oc6MTMLwa2Pw3ouLAfAon1wPLtG48o= +k8s.io/apimachinery v0.29.0/go.mod h1:eVBxQ/cwiJxH58eK/jd/vAk4mrxmVlnpBH5J2GbMeis= k8s.io/apiserver v0.28.4 h1:BJXlaQbAU/RXYX2lRz+E1oPe3G3TKlozMMCZWu5GMgg= k8s.io/apiserver v0.28.4/go.mod h1:Idq71oXugKZoVGUUL2wgBCTHbUR+FYTWa4rq9j4n23w= -k8s.io/cli-runtime v0.28.4 h1:IW3aqSNFXiGDllJF4KVYM90YX4cXPGxuCxCVqCD8X+Q= -k8s.io/cli-runtime v0.28.4/go.mod h1:MLGRB7LWTIYyYR3d/DOgtUC8ihsAPA3P8K8FDNIqJ0k= -k8s.io/client-go v0.28.4 h1:Np5ocjlZcTrkyRJ3+T3PkXDpe4UpatQxj85+xjaD2wY= -k8s.io/client-go v0.28.4/go.mod h1:0VDZFpgoZfelyP5Wqu0/r/TRYcLYuJ2U1KEeoaPa1N4= +k8s.io/cli-runtime v0.29.0 h1:q2kC3cex4rOBLfPOnMSzV2BIrrQlx97gxHJs21KxKS4= +k8s.io/cli-runtime v0.29.0/go.mod h1:VKudXp3X7wR45L+nER85YUzOQIru28HQpXr0mTdeCrk= +k8s.io/client-go v0.29.0 h1:KmlDtFcrdUzOYrBhXHgKw5ycWzc3ryPX5mQe0SkG3y8= +k8s.io/client-go v0.29.0/go.mod h1:yLkXH4HKMAywcrD82KMSmfYg2DlE8mepPR4JGSo5n38= k8s.io/component-base v0.28.4 h1:c/iQLWPdUgI90O+T9TeECg8o7N3YJTiuz2sKxILYcYo= k8s.io/component-base v0.28.4/go.mod h1:m9hR0uvqXDybiGL2nf/3Lf0MerAfQXzkfWhUY58JUbU= -k8s.io/klog/v2 v2.100.1 h1:7WCHKK6K8fNhTqfBhISHQ97KrnJNFZMcQvKp7gP/tmg= -k8s.io/klog/v2 v2.100.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= -k8s.io/kube-openapi v0.0.0-20230816210353-14e408962443 h1:CAIciCnJnSOQxPd0xvpV6JU3D4AJvnYbImPpFpO9Hnw= -k8s.io/kube-openapi v0.0.0-20230816210353-14e408962443/go.mod h1:wZK2AVp1uHCp4VamDVgBP2COHZjqD1T68Rf0CM3YjSM= +k8s.io/klog/v2 v2.110.1 h1:U/Af64HJf7FcwMcXyKm2RPM22WZzyR7OSpYj5tg3cL0= +k8s.io/klog/v2 v2.110.1/go.mod h1:YGtd1984u+GgbuZ7e08/yBuAfKLSO0+uR1Fhi6ExXjo= +k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 h1:aVUu9fTY98ivBPKR9Y5w/AuzbMm96cd3YHRTU83I780= +k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00/go.mod h1:AsvuZPBlUDVuCdzJ87iajxtXuR9oktsTctW/R9wwouA= k8s.io/kubectl v0.28.4 h1:gWpUXW/T7aFne+rchYeHkyB8eVDl5UZce8G4X//kjUQ= k8s.io/kubectl v0.28.4/go.mod h1:CKOccVx3l+3MmDbkXtIUtibq93nN2hkDR99XDCn7c/c= k8s.io/utils v0.0.0-20230726121419-3b25d923346b h1:sgn3ZU783SCgtaSJjpcVVlRqd6GSnlTLKgpAAttJvpI= @@ -548,7 +548,7 @@ sigs.k8s.io/kustomize/api v0.13.5-0.20230601165947-6ce0bf390ce3 h1:XX3Ajgzov2RKU sigs.k8s.io/kustomize/api v0.13.5-0.20230601165947-6ce0bf390ce3/go.mod h1:9n16EZKMhXBNSiUC5kSdFQJkdH3zbxS/JoO619G1VAY= sigs.k8s.io/kustomize/kyaml v0.14.3-0.20230601165947-6ce0bf390ce3 h1:W6cLQc5pnqM7vh3b7HvGNfXrJ/xL6BDMS0v1V/HHg5U= sigs.k8s.io/kustomize/kyaml v0.14.3-0.20230601165947-6ce0bf390ce3/go.mod h1:JWP1Fj0VWGHyw3YUPjXSQnRnrwezrZSrApfX5S0nIag= -sigs.k8s.io/structured-merge-diff/v4 v4.3.0 h1:UZbZAZfX0wV2zr7YZorDz6GXROfDFj6LvqCRm4VUVKk= -sigs.k8s.io/structured-merge-diff/v4 v4.3.0/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08= +sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4= +sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08= sigs.k8s.io/yaml v1.3.0 h1:a2VclLzOGrwOHDiV8EfBGhvjHvP46CtW5j6POvhYGGo= sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= From 50b0015dd07ffd188589b24f231a2c8d00073144 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 19 Dec 2023 12:27:00 +0100 Subject: [PATCH 21/42] Bump k8s.io/kubectl from 0.28.4 to 0.29.0 (#246) Bumps [k8s.io/kubectl](https://github.com/kubernetes/kubectl) from 0.28.4 to 0.29.0. - [Commits](https://github.com/kubernetes/kubectl/compare/v0.28.4...v0.29.0) --- updated-dependencies: - dependency-name: k8s.io/kubectl dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 2 +- go.sum | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 0e5d33c7..e18b4668 100644 --- a/go.mod +++ b/go.mod @@ -24,7 +24,7 @@ require ( k8s.io/apimachinery v0.29.0 k8s.io/cli-runtime v0.29.0 k8s.io/client-go v0.29.0 - k8s.io/kubectl v0.28.4 + k8s.io/kubectl v0.29.0 sigs.k8s.io/controller-runtime v0.16.3 ) diff --git a/go.sum b/go.sum index 4a14e929..6326ae75 100644 --- a/go.sum +++ b/go.sum @@ -526,14 +526,14 @@ k8s.io/cli-runtime v0.29.0 h1:q2kC3cex4rOBLfPOnMSzV2BIrrQlx97gxHJs21KxKS4= k8s.io/cli-runtime v0.29.0/go.mod h1:VKudXp3X7wR45L+nER85YUzOQIru28HQpXr0mTdeCrk= k8s.io/client-go v0.29.0 h1:KmlDtFcrdUzOYrBhXHgKw5ycWzc3ryPX5mQe0SkG3y8= k8s.io/client-go v0.29.0/go.mod h1:yLkXH4HKMAywcrD82KMSmfYg2DlE8mepPR4JGSo5n38= -k8s.io/component-base v0.28.4 h1:c/iQLWPdUgI90O+T9TeECg8o7N3YJTiuz2sKxILYcYo= -k8s.io/component-base v0.28.4/go.mod h1:m9hR0uvqXDybiGL2nf/3Lf0MerAfQXzkfWhUY58JUbU= +k8s.io/component-base v0.29.0 h1:T7rjd5wvLnPBV1vC4zWd/iWRbV8Mdxs+nGaoaFzGw3s= +k8s.io/component-base v0.29.0/go.mod h1:sADonFTQ9Zc9yFLghpDpmNXEdHyQmFIGbiuZbqAXQ1M= k8s.io/klog/v2 v2.110.1 h1:U/Af64HJf7FcwMcXyKm2RPM22WZzyR7OSpYj5tg3cL0= k8s.io/klog/v2 v2.110.1/go.mod h1:YGtd1984u+GgbuZ7e08/yBuAfKLSO0+uR1Fhi6ExXjo= k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 h1:aVUu9fTY98ivBPKR9Y5w/AuzbMm96cd3YHRTU83I780= k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00/go.mod h1:AsvuZPBlUDVuCdzJ87iajxtXuR9oktsTctW/R9wwouA= -k8s.io/kubectl v0.28.4 h1:gWpUXW/T7aFne+rchYeHkyB8eVDl5UZce8G4X//kjUQ= -k8s.io/kubectl v0.28.4/go.mod h1:CKOccVx3l+3MmDbkXtIUtibq93nN2hkDR99XDCn7c/c= +k8s.io/kubectl v0.29.0 h1:Oqi48gXjikDhrBF67AYuZRTcJV4lg2l42GmvsP7FmYI= +k8s.io/kubectl v0.29.0/go.mod h1:0jMjGWIcMIQzmUaMgAzhSELv5WtHo2a8pq67DtviAJs= k8s.io/utils v0.0.0-20230726121419-3b25d923346b h1:sgn3ZU783SCgtaSJjpcVVlRqd6GSnlTLKgpAAttJvpI= k8s.io/utils v0.0.0-20230726121419-3b25d923346b/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= rsc.io/letsencrypt v0.0.3 h1:H7xDfhkaFFSYEJlKeq38RwX2jYcnTeHuDQyT+mMNMwM= From 372c8a4e8c05bf8debf3568a879109aa1bdd9ca6 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 19 Dec 2023 12:28:58 +0100 Subject: [PATCH 22/42] Bump github.com/vektra/mockery/v2 from 2.36.1 to 2.38.0 in /tools (#222) * Bump github.com/vektra/mockery/v2 from 2.36.1 to 2.38.0 in /tools Bumps [github.com/vektra/mockery/v2](https://github.com/vektra/mockery) from 2.36.1 to 2.38.0. - [Release notes](https://github.com/vektra/mockery/releases) - [Changelog](https://github.com/vektra/mockery/blob/master/docs/changelog.md) - [Commits](https://github.com/vektra/mockery/compare/v2.36.1...v2.38.0) --- updated-dependencies: - dependency-name: github.com/vektra/mockery/v2 dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] * u --------- Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Andrew Minkin --- .../client/mock_kube_client_connector.go | 182 +++++++++++++++++- .../mock_everest_client_connector_test.go | 18 +- tools/go.mod | 2 +- tools/go.sum | 4 +- 4 files changed, 201 insertions(+), 5 deletions(-) diff --git a/pkg/kubernetes/client/mock_kube_client_connector.go b/pkg/kubernetes/client/mock_kube_client_connector.go index aa4c055f..2f3fef35 100644 --- a/pkg/kubernetes/client/mock_kube_client_connector.go +++ b/pkg/kubernetes/client/mock_kube_client_connector.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.36.1. DO NOT EDIT. +// Code generated by mockery v2.38.0. DO NOT EDIT. package client @@ -32,6 +32,10 @@ type MockKubeClientConnector struct { func (_m *MockKubeClientConnector) ApplyFile(fileBytes []byte) error { ret := _m.Called(fileBytes) + if len(ret) == 0 { + panic("no return value specified for ApplyFile") + } + var r0 error if rf, ok := ret.Get(0).(func([]byte) error); ok { r0 = rf(fileBytes) @@ -46,6 +50,10 @@ func (_m *MockKubeClientConnector) ApplyFile(fileBytes []byte) error { func (_m *MockKubeClientConnector) ApplyManifestFile(fileBytes []byte, namespace string) error { ret := _m.Called(fileBytes, namespace) + if len(ret) == 0 { + panic("no return value specified for ApplyManifestFile") + } + var r0 error if rf, ok := ret.Get(0).(func([]byte, string) error); ok { r0 = rf(fileBytes, namespace) @@ -60,6 +68,10 @@ func (_m *MockKubeClientConnector) ApplyManifestFile(fileBytes []byte, namespace func (_m *MockKubeClientConnector) ApplyObject(obj runtime.Object) error { ret := _m.Called(obj) + if len(ret) == 0 { + panic("no return value specified for ApplyObject") + } + var r0 error if rf, ok := ret.Get(0).(func(runtime.Object) error); ok { r0 = rf(obj) @@ -74,6 +86,10 @@ func (_m *MockKubeClientConnector) ApplyObject(obj runtime.Object) error { func (_m *MockKubeClientConnector) ClusterName() string { ret := _m.Called() + if len(ret) == 0 { + panic("no return value specified for ClusterName") + } + var r0 string if rf, ok := ret.Get(0).(func() string); ok { r0 = rf() @@ -88,6 +104,10 @@ func (_m *MockKubeClientConnector) ClusterName() string { func (_m *MockKubeClientConnector) Config() *rest.Config { ret := _m.Called() + if len(ret) == 0 { + panic("no return value specified for Config") + } + var r0 *rest.Config if rf, ok := ret.Get(0).(func() *rest.Config); ok { r0 = rf() @@ -104,6 +124,10 @@ func (_m *MockKubeClientConnector) Config() *rest.Config { func (_m *MockKubeClientConnector) CreateNamespace(name string) error { ret := _m.Called(name) + if len(ret) == 0 { + panic("no return value specified for CreateNamespace") + } + var r0 error if rf, ok := ret.Get(0).(func(string) error); ok { r0 = rf(name) @@ -118,6 +142,10 @@ func (_m *MockKubeClientConnector) CreateNamespace(name string) error { func (_m *MockKubeClientConnector) CreateOperatorGroup(ctx context.Context, namespace string, name string) (*v1.OperatorGroup, error) { ret := _m.Called(ctx, namespace, name) + if len(ret) == 0 { + panic("no return value specified for CreateOperatorGroup") + } + var r0 *v1.OperatorGroup var r1 error if rf, ok := ret.Get(0).(func(context.Context, string, string) (*v1.OperatorGroup, error)); ok { @@ -144,6 +172,10 @@ func (_m *MockKubeClientConnector) CreateOperatorGroup(ctx context.Context, name func (_m *MockKubeClientConnector) CreateSubscriptionForCatalog(ctx context.Context, namespace string, name string, catalogNamespace string, catalog string, packageName string, channel string, startingCSV string, approval v1alpha1.Approval) (*v1alpha1.Subscription, error) { ret := _m.Called(ctx, namespace, name, catalogNamespace, catalog, packageName, channel, startingCSV, approval) + if len(ret) == 0 { + panic("no return value specified for CreateSubscriptionForCatalog") + } + var r0 *v1alpha1.Subscription var r1 error if rf, ok := ret.Get(0).(func(context.Context, string, string, string, string, string, string, string, v1alpha1.Approval) (*v1alpha1.Subscription, error)); ok { @@ -170,6 +202,10 @@ func (_m *MockKubeClientConnector) CreateSubscriptionForCatalog(ctx context.Cont func (_m *MockKubeClientConnector) DeleteAllMonitoringResources(ctx context.Context, namespace string) error { ret := _m.Called(ctx, namespace) + if len(ret) == 0 { + panic("no return value specified for DeleteAllMonitoringResources") + } + var r0 error if rf, ok := ret.Get(0).(func(context.Context, string) error); ok { r0 = rf(ctx, namespace) @@ -184,6 +220,10 @@ func (_m *MockKubeClientConnector) DeleteAllMonitoringResources(ctx context.Cont func (_m *MockKubeClientConnector) DeleteFile(fileBytes []byte) error { ret := _m.Called(fileBytes) + if len(ret) == 0 { + panic("no return value specified for DeleteFile") + } + var r0 error if rf, ok := ret.Get(0).(func([]byte) error); ok { r0 = rf(fileBytes) @@ -198,6 +238,10 @@ func (_m *MockKubeClientConnector) DeleteFile(fileBytes []byte) error { func (_m *MockKubeClientConnector) DeleteManifestFile(fileBytes []byte, namespace string) error { ret := _m.Called(fileBytes, namespace) + if len(ret) == 0 { + panic("no return value specified for DeleteManifestFile") + } + var r0 error if rf, ok := ret.Get(0).(func([]byte, string) error); ok { r0 = rf(fileBytes, namespace) @@ -212,6 +256,10 @@ func (_m *MockKubeClientConnector) DeleteManifestFile(fileBytes []byte, namespac func (_m *MockKubeClientConnector) DeleteObject(obj runtime.Object) error { ret := _m.Called(obj) + if len(ret) == 0 { + panic("no return value specified for DeleteObject") + } + var r0 error if rf, ok := ret.Get(0).(func(runtime.Object) error); ok { r0 = rf(obj) @@ -226,6 +274,10 @@ func (_m *MockKubeClientConnector) DeleteObject(obj runtime.Object) error { func (_m *MockKubeClientConnector) DeletePod(ctx context.Context, namespace string, name string) error { ret := _m.Called(ctx, namespace, name) + if len(ret) == 0 { + panic("no return value specified for DeletePod") + } + var r0 error if rf, ok := ret.Get(0).(func(context.Context, string, string) error); ok { r0 = rf(ctx, namespace, name) @@ -240,6 +292,10 @@ func (_m *MockKubeClientConnector) DeletePod(ctx context.Context, namespace stri func (_m *MockKubeClientConnector) DoCSVWait(ctx context.Context, key types.NamespacedName) error { ret := _m.Called(ctx, key) + if len(ret) == 0 { + panic("no return value specified for DoCSVWait") + } + var r0 error if rf, ok := ret.Get(0).(func(context.Context, types.NamespacedName) error); ok { r0 = rf(ctx, key) @@ -254,6 +310,10 @@ func (_m *MockKubeClientConnector) DoCSVWait(ctx context.Context, key types.Name func (_m *MockKubeClientConnector) DoPackageWait(ctx context.Context, name string) error { ret := _m.Called(ctx, name) + if len(ret) == 0 { + panic("no return value specified for DoPackageWait") + } + var r0 error if rf, ok := ret.Get(0).(func(context.Context, string) error); ok { r0 = rf(ctx, name) @@ -268,6 +328,10 @@ func (_m *MockKubeClientConnector) DoPackageWait(ctx context.Context, name strin func (_m *MockKubeClientConnector) DoRolloutWait(ctx context.Context, key types.NamespacedName) error { ret := _m.Called(ctx, key) + if len(ret) == 0 { + panic("no return value specified for DoRolloutWait") + } + var r0 error if rf, ok := ret.Get(0).(func(context.Context, types.NamespacedName) error); ok { r0 = rf(ctx, key) @@ -282,6 +346,10 @@ func (_m *MockKubeClientConnector) DoRolloutWait(ctx context.Context, key types. func (_m *MockKubeClientConnector) GenerateKubeConfigWithToken(user string, secret *corev1.Secret) ([]byte, error) { ret := _m.Called(user, secret) + if len(ret) == 0 { + panic("no return value specified for GenerateKubeConfigWithToken") + } + var r0 []byte var r1 error if rf, ok := ret.Get(0).(func(string, *corev1.Secret) ([]byte, error)); ok { @@ -308,6 +376,10 @@ func (_m *MockKubeClientConnector) GenerateKubeConfigWithToken(user string, secr func (_m *MockKubeClientConnector) GetClusterServiceVersion(ctx context.Context, key types.NamespacedName) (*v1alpha1.ClusterServiceVersion, error) { ret := _m.Called(ctx, key) + if len(ret) == 0 { + panic("no return value specified for GetClusterServiceVersion") + } + var r0 *v1alpha1.ClusterServiceVersion var r1 error if rf, ok := ret.Get(0).(func(context.Context, types.NamespacedName) (*v1alpha1.ClusterServiceVersion, error)); ok { @@ -334,6 +406,10 @@ func (_m *MockKubeClientConnector) GetClusterServiceVersion(ctx context.Context, func (_m *MockKubeClientConnector) GetDatabaseCluster(ctx context.Context, name string) (*apiv1alpha1.DatabaseCluster, error) { ret := _m.Called(ctx, name) + if len(ret) == 0 { + panic("no return value specified for GetDatabaseCluster") + } + var r0 *apiv1alpha1.DatabaseCluster var r1 error if rf, ok := ret.Get(0).(func(context.Context, string) (*apiv1alpha1.DatabaseCluster, error)); ok { @@ -360,6 +436,10 @@ func (_m *MockKubeClientConnector) GetDatabaseCluster(ctx context.Context, name func (_m *MockKubeClientConnector) GetDeployment(ctx context.Context, name string, namespace string) (*appsv1.Deployment, error) { ret := _m.Called(ctx, name, namespace) + if len(ret) == 0 { + panic("no return value specified for GetDeployment") + } + var r0 *appsv1.Deployment var r1 error if rf, ok := ret.Get(0).(func(context.Context, string, string) (*appsv1.Deployment, error)); ok { @@ -386,6 +466,10 @@ func (_m *MockKubeClientConnector) GetDeployment(ctx context.Context, name strin func (_m *MockKubeClientConnector) GetEvents(ctx context.Context, name string) (string, error) { ret := _m.Called(ctx, name) + if len(ret) == 0 { + panic("no return value specified for GetEvents") + } + var r0 string var r1 error if rf, ok := ret.Get(0).(func(context.Context, string) (string, error)); ok { @@ -410,6 +494,10 @@ func (_m *MockKubeClientConnector) GetEvents(ctx context.Context, name string) ( func (_m *MockKubeClientConnector) GetInstallPlan(ctx context.Context, namespace string, name string) (*v1alpha1.InstallPlan, error) { ret := _m.Called(ctx, namespace, name) + if len(ret) == 0 { + panic("no return value specified for GetInstallPlan") + } + var r0 *v1alpha1.InstallPlan var r1 error if rf, ok := ret.Get(0).(func(context.Context, string, string) (*v1alpha1.InstallPlan, error)); ok { @@ -436,6 +524,10 @@ func (_m *MockKubeClientConnector) GetInstallPlan(ctx context.Context, namespace func (_m *MockKubeClientConnector) GetLogs(ctx context.Context, pod string, container string) (string, error) { ret := _m.Called(ctx, pod, container) + if len(ret) == 0 { + panic("no return value specified for GetLogs") + } + var r0 string var r1 error if rf, ok := ret.Get(0).(func(context.Context, string, string) (string, error)); ok { @@ -460,6 +552,10 @@ func (_m *MockKubeClientConnector) GetLogs(ctx context.Context, pod string, cont func (_m *MockKubeClientConnector) GetNamespace(ctx context.Context, name string) (*corev1.Namespace, error) { ret := _m.Called(ctx, name) + if len(ret) == 0 { + panic("no return value specified for GetNamespace") + } + var r0 *corev1.Namespace var r1 error if rf, ok := ret.Get(0).(func(context.Context, string) (*corev1.Namespace, error)); ok { @@ -486,6 +582,10 @@ func (_m *MockKubeClientConnector) GetNamespace(ctx context.Context, name string func (_m *MockKubeClientConnector) GetNodes(ctx context.Context) (*corev1.NodeList, error) { ret := _m.Called(ctx) + if len(ret) == 0 { + panic("no return value specified for GetNodes") + } + var r0 *corev1.NodeList var r1 error if rf, ok := ret.Get(0).(func(context.Context) (*corev1.NodeList, error)); ok { @@ -512,6 +612,10 @@ func (_m *MockKubeClientConnector) GetNodes(ctx context.Context) (*corev1.NodeLi func (_m *MockKubeClientConnector) GetOperatorGroup(ctx context.Context, namespace string, name string) (*v1.OperatorGroup, error) { ret := _m.Called(ctx, namespace, name) + if len(ret) == 0 { + panic("no return value specified for GetOperatorGroup") + } + var r0 *v1.OperatorGroup var r1 error if rf, ok := ret.Get(0).(func(context.Context, string, string) (*v1.OperatorGroup, error)); ok { @@ -538,6 +642,10 @@ func (_m *MockKubeClientConnector) GetOperatorGroup(ctx context.Context, namespa func (_m *MockKubeClientConnector) GetPackageManifest(ctx context.Context, name string) (*operatorsv1.PackageManifest, error) { ret := _m.Called(ctx, name) + if len(ret) == 0 { + panic("no return value specified for GetPackageManifest") + } + var r0 *operatorsv1.PackageManifest var r1 error if rf, ok := ret.Get(0).(func(context.Context, string) (*operatorsv1.PackageManifest, error)); ok { @@ -564,6 +672,10 @@ func (_m *MockKubeClientConnector) GetPackageManifest(ctx context.Context, name func (_m *MockKubeClientConnector) GetPersistentVolumes(ctx context.Context) (*corev1.PersistentVolumeList, error) { ret := _m.Called(ctx) + if len(ret) == 0 { + panic("no return value specified for GetPersistentVolumes") + } + var r0 *corev1.PersistentVolumeList var r1 error if rf, ok := ret.Get(0).(func(context.Context) (*corev1.PersistentVolumeList, error)); ok { @@ -590,6 +702,10 @@ func (_m *MockKubeClientConnector) GetPersistentVolumes(ctx context.Context) (*c func (_m *MockKubeClientConnector) GetPods(ctx context.Context, namespace string, labelSelector *metav1.LabelSelector) (*corev1.PodList, error) { ret := _m.Called(ctx, namespace, labelSelector) + if len(ret) == 0 { + panic("no return value specified for GetPods") + } + var r0 *corev1.PodList var r1 error if rf, ok := ret.Get(0).(func(context.Context, string, *metav1.LabelSelector) (*corev1.PodList, error)); ok { @@ -616,6 +732,10 @@ func (_m *MockKubeClientConnector) GetPods(ctx context.Context, namespace string func (_m *MockKubeClientConnector) GetSecret(ctx context.Context, name string, namespace string) (*corev1.Secret, error) { ret := _m.Called(ctx, name, namespace) + if len(ret) == 0 { + panic("no return value specified for GetSecret") + } + var r0 *corev1.Secret var r1 error if rf, ok := ret.Get(0).(func(context.Context, string, string) (*corev1.Secret, error)); ok { @@ -642,6 +762,10 @@ func (_m *MockKubeClientConnector) GetSecret(ctx context.Context, name string, n func (_m *MockKubeClientConnector) GetSecretsForServiceAccount(ctx context.Context, accountName string) (*corev1.Secret, error) { ret := _m.Called(ctx, accountName) + if len(ret) == 0 { + panic("no return value specified for GetSecretsForServiceAccount") + } + var r0 *corev1.Secret var r1 error if rf, ok := ret.Get(0).(func(context.Context, string) (*corev1.Secret, error)); ok { @@ -668,6 +792,10 @@ func (_m *MockKubeClientConnector) GetSecretsForServiceAccount(ctx context.Conte func (_m *MockKubeClientConnector) GetServerVersion() (*version.Info, error) { ret := _m.Called() + if len(ret) == 0 { + panic("no return value specified for GetServerVersion") + } + var r0 *version.Info var r1 error if rf, ok := ret.Get(0).(func() (*version.Info, error)); ok { @@ -694,6 +822,10 @@ func (_m *MockKubeClientConnector) GetServerVersion() (*version.Info, error) { func (_m *MockKubeClientConnector) GetService(ctx context.Context, namespace string, name string) (*corev1.Service, error) { ret := _m.Called(ctx, namespace, name) + if len(ret) == 0 { + panic("no return value specified for GetService") + } + var r0 *corev1.Service var r1 error if rf, ok := ret.Get(0).(func(context.Context, string, string) (*corev1.Service, error)); ok { @@ -720,6 +852,10 @@ func (_m *MockKubeClientConnector) GetService(ctx context.Context, namespace str func (_m *MockKubeClientConnector) GetStorageClasses(ctx context.Context) (*storagev1.StorageClassList, error) { ret := _m.Called(ctx) + if len(ret) == 0 { + panic("no return value specified for GetStorageClasses") + } + var r0 *storagev1.StorageClassList var r1 error if rf, ok := ret.Get(0).(func(context.Context) (*storagev1.StorageClassList, error)); ok { @@ -746,6 +882,10 @@ func (_m *MockKubeClientConnector) GetStorageClasses(ctx context.Context) (*stor func (_m *MockKubeClientConnector) GetSubscription(ctx context.Context, namespace string, name string) (*v1alpha1.Subscription, error) { ret := _m.Called(ctx, namespace, name) + if len(ret) == 0 { + panic("no return value specified for GetSubscription") + } + var r0 *v1alpha1.Subscription var r1 error if rf, ok := ret.Get(0).(func(context.Context, string, string) (*v1alpha1.Subscription, error)); ok { @@ -772,6 +912,10 @@ func (_m *MockKubeClientConnector) GetSubscription(ctx context.Context, namespac func (_m *MockKubeClientConnector) GetSubscriptionCSV(ctx context.Context, subKey types.NamespacedName) (types.NamespacedName, error) { ret := _m.Called(ctx, subKey) + if len(ret) == 0 { + panic("no return value specified for GetSubscriptionCSV") + } + var r0 types.NamespacedName var r1 error if rf, ok := ret.Get(0).(func(context.Context, types.NamespacedName) (types.NamespacedName, error)); ok { @@ -796,6 +940,10 @@ func (_m *MockKubeClientConnector) GetSubscriptionCSV(ctx context.Context, subKe func (_m *MockKubeClientConnector) ListCRDs(ctx context.Context, labelSelector *metav1.LabelSelector) (*apiextensionsv1.CustomResourceDefinitionList, error) { ret := _m.Called(ctx, labelSelector) + if len(ret) == 0 { + panic("no return value specified for ListCRDs") + } + var r0 *apiextensionsv1.CustomResourceDefinitionList var r1 error if rf, ok := ret.Get(0).(func(context.Context, *metav1.LabelSelector) (*apiextensionsv1.CustomResourceDefinitionList, error)); ok { @@ -822,6 +970,10 @@ func (_m *MockKubeClientConnector) ListCRDs(ctx context.Context, labelSelector * func (_m *MockKubeClientConnector) ListCRs(ctx context.Context, namespace string, gvr schema.GroupVersionResource, labelSelector *metav1.LabelSelector) (*unstructured.UnstructuredList, error) { ret := _m.Called(ctx, namespace, gvr, labelSelector) + if len(ret) == 0 { + panic("no return value specified for ListCRs") + } + var r0 *unstructured.UnstructuredList var r1 error if rf, ok := ret.Get(0).(func(context.Context, string, schema.GroupVersionResource, *metav1.LabelSelector) (*unstructured.UnstructuredList, error)); ok { @@ -848,6 +1000,10 @@ func (_m *MockKubeClientConnector) ListCRs(ctx context.Context, namespace string func (_m *MockKubeClientConnector) ListClusterServiceVersion(ctx context.Context, namespace string) (*v1alpha1.ClusterServiceVersionList, error) { ret := _m.Called(ctx, namespace) + if len(ret) == 0 { + panic("no return value specified for ListClusterServiceVersion") + } + var r0 *v1alpha1.ClusterServiceVersionList var r1 error if rf, ok := ret.Get(0).(func(context.Context, string) (*v1alpha1.ClusterServiceVersionList, error)); ok { @@ -874,6 +1030,10 @@ func (_m *MockKubeClientConnector) ListClusterServiceVersion(ctx context.Context func (_m *MockKubeClientConnector) ListDatabaseClusters(ctx context.Context) (*apiv1alpha1.DatabaseClusterList, error) { ret := _m.Called(ctx) + if len(ret) == 0 { + panic("no return value specified for ListDatabaseClusters") + } + var r0 *apiv1alpha1.DatabaseClusterList var r1 error if rf, ok := ret.Get(0).(func(context.Context) (*apiv1alpha1.DatabaseClusterList, error)); ok { @@ -900,6 +1060,10 @@ func (_m *MockKubeClientConnector) ListDatabaseClusters(ctx context.Context) (*a func (_m *MockKubeClientConnector) ListDeployments(ctx context.Context, namespace string) (*appsv1.DeploymentList, error) { ret := _m.Called(ctx, namespace) + if len(ret) == 0 { + panic("no return value specified for ListDeployments") + } + var r0 *appsv1.DeploymentList var r1 error if rf, ok := ret.Get(0).(func(context.Context, string) (*appsv1.DeploymentList, error)); ok { @@ -926,6 +1090,10 @@ func (_m *MockKubeClientConnector) ListDeployments(ctx context.Context, namespac func (_m *MockKubeClientConnector) ListPods(ctx context.Context, namespace string, options metav1.ListOptions) (*corev1.PodList, error) { ret := _m.Called(ctx, namespace, options) + if len(ret) == 0 { + panic("no return value specified for ListPods") + } + var r0 *corev1.PodList var r1 error if rf, ok := ret.Get(0).(func(context.Context, string, metav1.ListOptions) (*corev1.PodList, error)); ok { @@ -952,6 +1120,10 @@ func (_m *MockKubeClientConnector) ListPods(ctx context.Context, namespace strin func (_m *MockKubeClientConnector) ListSecrets(ctx context.Context) (*corev1.SecretList, error) { ret := _m.Called(ctx) + if len(ret) == 0 { + panic("no return value specified for ListSecrets") + } + var r0 *corev1.SecretList var r1 error if rf, ok := ret.Get(0).(func(context.Context) (*corev1.SecretList, error)); ok { @@ -978,6 +1150,10 @@ func (_m *MockKubeClientConnector) ListSecrets(ctx context.Context) (*corev1.Sec func (_m *MockKubeClientConnector) ListSubscriptions(ctx context.Context, namespace string) (*v1alpha1.SubscriptionList, error) { ret := _m.Called(ctx, namespace) + if len(ret) == 0 { + panic("no return value specified for ListSubscriptions") + } + var r0 *v1alpha1.SubscriptionList var r1 error if rf, ok := ret.Get(0).(func(context.Context, string) (*v1alpha1.SubscriptionList, error)); ok { @@ -1004,6 +1180,10 @@ func (_m *MockKubeClientConnector) ListSubscriptions(ctx context.Context, namesp func (_m *MockKubeClientConnector) UpdateInstallPlan(ctx context.Context, namespace string, installPlan *v1alpha1.InstallPlan) (*v1alpha1.InstallPlan, error) { ret := _m.Called(ctx, namespace, installPlan) + if len(ret) == 0 { + panic("no return value specified for UpdateInstallPlan") + } + var r0 *v1alpha1.InstallPlan var r1 error if rf, ok := ret.Get(0).(func(context.Context, string, *v1alpha1.InstallPlan) (*v1alpha1.InstallPlan, error)); ok { diff --git a/pkg/monitoring/mock_everest_client_connector_test.go b/pkg/monitoring/mock_everest_client_connector_test.go index 5a9255ac..d74c4b3f 100644 --- a/pkg/monitoring/mock_everest_client_connector_test.go +++ b/pkg/monitoring/mock_everest_client_connector_test.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.36.1. DO NOT EDIT. +// Code generated by mockery v2.38.0. DO NOT EDIT. package monitoring @@ -18,6 +18,10 @@ type mockEverestClientConnector struct { func (_m *mockEverestClientConnector) CreateMonitoringInstance(ctx context.Context, body client.MonitoringInstanceCreateParams) (*client.MonitoringInstanceBaseWithName, error) { ret := _m.Called(ctx, body) + if len(ret) == 0 { + panic("no return value specified for CreateMonitoringInstance") + } + var r0 *client.MonitoringInstanceBaseWithName var r1 error if rf, ok := ret.Get(0).(func(context.Context, client.MonitoringInstanceCreateParams) (*client.MonitoringInstanceBaseWithName, error)); ok { @@ -44,6 +48,10 @@ func (_m *mockEverestClientConnector) CreateMonitoringInstance(ctx context.Conte func (_m *mockEverestClientConnector) GetMonitoringInstance(ctx context.Context, pmmInstanceID string) (*client.MonitoringInstanceBaseWithName, error) { ret := _m.Called(ctx, pmmInstanceID) + if len(ret) == 0 { + panic("no return value specified for GetMonitoringInstance") + } + var r0 *client.MonitoringInstanceBaseWithName var r1 error if rf, ok := ret.Get(0).(func(context.Context, string) (*client.MonitoringInstanceBaseWithName, error)); ok { @@ -70,6 +78,10 @@ func (_m *mockEverestClientConnector) GetMonitoringInstance(ctx context.Context, func (_m *mockEverestClientConnector) ListMonitoringInstances(ctx context.Context) ([]client.MonitoringInstanceBaseWithName, error) { ret := _m.Called(ctx) + if len(ret) == 0 { + panic("no return value specified for ListMonitoringInstances") + } + var r0 []client.MonitoringInstanceBaseWithName var r1 error if rf, ok := ret.Get(0).(func(context.Context) ([]client.MonitoringInstanceBaseWithName, error)); ok { @@ -96,6 +108,10 @@ func (_m *mockEverestClientConnector) ListMonitoringInstances(ctx context.Contex func (_m *mockEverestClientConnector) SetKubernetesClusterMonitoring(ctx context.Context, body client.KubernetesClusterMonitoring) error { ret := _m.Called(ctx, body) + if len(ret) == 0 { + panic("no return value specified for SetKubernetesClusterMonitoring") + } + var r0 error if rf, ok := ret.Get(0).(func(context.Context, client.KubernetesClusterMonitoring) error); ok { r0 = rf(ctx, body) diff --git a/tools/go.mod b/tools/go.mod index 62fa3aae..131cb0fa 100644 --- a/tools/go.mod +++ b/tools/go.mod @@ -9,7 +9,7 @@ require ( github.com/quasilyte/go-consistent v0.6.0 github.com/reviewdog/reviewdog v0.15.0 github.com/vburenin/ifacemaker v1.2.1 - github.com/vektra/mockery/v2 v2.36.1 + github.com/vektra/mockery/v2 v2.38.0 golang.org/x/tools v0.16.1 mvdan.cc/gofumpt v0.5.0 ) diff --git a/tools/go.sum b/tools/go.sum index ac155457..783037a4 100644 --- a/tools/go.sum +++ b/tools/go.sum @@ -690,8 +690,8 @@ github.com/uudashr/gocognit v1.1.2 h1:l6BAEKJqQH2UpKAPKdMfZf5kE4W/2xk8pfU1OVLvni github.com/uudashr/gocognit v1.1.2/go.mod h1:aAVdLURqcanke8h3vg35BC++eseDm66Z7KmchI5et4k= github.com/vburenin/ifacemaker v1.2.1 h1:3Vq8B/bfBgjWTkv+jDg4dVL1KHt3k1K4lO7XRxYA2sk= github.com/vburenin/ifacemaker v1.2.1/go.mod h1:5WqrzX2aD7/hi+okBjcaEQJMg4lDGrpuEX3B8L4Wgrs= -github.com/vektra/mockery/v2 v2.36.1 h1:F/2tEFFRWdHe36smr+e6YIiKzXTZVd0cCAUqG0GTw1s= -github.com/vektra/mockery/v2 v2.36.1/go.mod h1:diB13hxXG6QrTR0ol2Rk8s2dRMftzvExSvPDKr+IYKk= +github.com/vektra/mockery/v2 v2.38.0 h1:I0LBuUzZHqAU4d1DknW0DTFBPO6n8TaD38WL2KJf3yI= +github.com/vektra/mockery/v2 v2.38.0/go.mod h1:diB13hxXG6QrTR0ol2Rk8s2dRMftzvExSvPDKr+IYKk= github.com/vvakame/sdlog v1.2.0 h1:gwZRXZ0EmhJQJN/Do/+PTQigcmFiSqZ07aDjxqGOLT8= github.com/vvakame/sdlog v1.2.0/go.mod h1:gFYv2g/iR3pJSxkJz0YnkNmhNbXT5R3PzWsfZKGQADY= github.com/xanzy/go-gitlab v0.91.1 h1:gnV57IPGYywWer32oXKBcdmc8dVxeKl3AauV8Bu17rw= From a68dc5e52bc35a3b45e1893cb38c2e84215749ce Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 19 Dec 2023 12:31:07 +0100 Subject: [PATCH 23/42] Bump k8s.io/apiextensions-apiserver from 0.28.4 to 0.29.0 (#245) Bumps [k8s.io/apiextensions-apiserver](https://github.com/kubernetes/apiextensions-apiserver) from 0.28.4 to 0.29.0. - [Release notes](https://github.com/kubernetes/apiextensions-apiserver/releases) - [Commits](https://github.com/kubernetes/apiextensions-apiserver/compare/v0.28.4...v0.29.0) --- updated-dependencies: - dependency-name: k8s.io/apiextensions-apiserver dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- go.mod | 4 ++-- go.sum | 58 ++++++++++++++++++++++++++++------------------------------ 2 files changed, 30 insertions(+), 32 deletions(-) diff --git a/go.mod b/go.mod index e18b4668..43ab3265 100644 --- a/go.mod +++ b/go.mod @@ -20,7 +20,7 @@ require ( gopkg.in/yaml.v3 v3.0.1 gotest.tools v2.2.0+incompatible k8s.io/api v0.29.0 - k8s.io/apiextensions-apiserver v0.28.4 + k8s.io/apiextensions-apiserver v0.29.0 k8s.io/apimachinery v0.29.0 k8s.io/cli-runtime v0.29.0 k8s.io/client-go v0.29.0 @@ -48,7 +48,7 @@ require ( github.com/gogo/protobuf v1.3.2 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.3 // indirect - github.com/google/cel-go v0.16.1 // indirect + github.com/google/cel-go v0.17.7 // indirect github.com/google/gnostic-models v0.6.8 // indirect github.com/google/go-cmp v0.6.0 // indirect github.com/google/gofuzz v1.2.0 // indirect diff --git a/go.sum b/go.sum index 6326ae75..26c16f68 100644 --- a/go.sum +++ b/go.sum @@ -145,8 +145,8 @@ github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaS github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/google/cel-go v0.16.1 h1:3hZfSNiAU3KOiNtxuFXVp5WFy4hf/Ly3Sa4/7F8SXNo= -github.com/google/cel-go v0.16.1/go.mod h1:HXZKzB0LXqer5lHHgfWAnlYwJaQBDKMjxjulNQzhwhY= +github.com/google/cel-go v0.17.7 h1:6ebJFzu1xO2n7TLtN+UBqShGBhlD85bhvglh5DpcfqQ= +github.com/google/cel-go v0.17.7/go.mod h1:HXZKzB0LXqer5lHHgfWAnlYwJaQBDKMjxjulNQzhwhY= github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I= github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= @@ -173,8 +173,8 @@ github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0 h1:BZHcxBETFHIdVyhyEfOvn/RdU/QGdLI4y34qQGjGWO0= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0/go.mod h1:hgWBS7lorOAVIJEQMi4ZsPv9hVvWI6+ch50m39Pf2Ks= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.16.0 h1:YBftPWNWd4WwGqtY2yeZL2ef8rHAxPBD8KFhJpmcqms= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.16.0/go.mod h1:YN5jB8ie0yfIUg6VvR9Kz84aCaG7AsGZnLjhHbUqwPg= github.com/h2non/filetype v1.1.1 h1:xvOwnXKAckvtLWsN398qS9QhlxlnVXBjXBydK2/UFB4= github.com/h2non/filetype v1.1.1/go.mod h1:319b3zT68BvV+WRj7cwy856M2ehB3HqNOt6sy1HndBY= github.com/h2non/go-is-svg v0.0.0-20160927212452-35e8c4b0612c h1:fEE5/5VNnYUoBOj2I9TP8Jc+a7lge3QWn9DKE7NCwfc= @@ -350,28 +350,26 @@ github.com/yvasiyarov/gorelic v0.0.7 h1:4DTF1WOM2ZZS/xMOkTFBOcb6XiHu/PKn3rVo6dbe github.com/yvasiyarov/gorelic v0.0.7/go.mod h1:NUSPSUX/bi6SeDMUh6brw0nXpxHnc96TguQh0+r/ssA= github.com/yvasiyarov/newrelic_platform_go v0.0.0-20160601141957-9c099fbc30e9 h1:AsFN8kXcCVkUFHyuzp1FtYbzp1nCO/H6+1uPSGEyPzM= github.com/yvasiyarov/newrelic_platform_go v0.0.0-20160601141957-9c099fbc30e9/go.mod h1:GlGEuHIJweS1mbCqG+7vt2nvWLzLLnRHbXz5JKd/Qbg= -go.etcd.io/bbolt v1.3.7 h1:j+zJOnnEjF/kyHlDDgGnVL/AIqIJPq8UoB2GSNfkUfQ= -go.etcd.io/bbolt v1.3.7/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw= +go.etcd.io/bbolt v1.3.8 h1:xs88BrvEv273UsB79e0hcVrlUWmS0a8upikMFhSyAtA= +go.etcd.io/bbolt v1.3.8/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw= go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.40.0 h1:lE9EJyw3/JhrjWH/hEy9FptnalDQgj7vpbgC2KCCCxE= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.40.0/go.mod h1:pcQ3MM3SWvrA71U4GDqv9UFDJ3HQsW7y5ZO3tDTlUdI= -go.opentelemetry.io/otel v1.14.0 h1:/79Huy8wbf5DnIPhemGB+zEPVwnN6fuQybr/SRXa6hM= -go.opentelemetry.io/otel v1.14.0/go.mod h1:o4buv+dJzx8rohcUeRmWUZhqupFvzWis188WlggnNeU= -go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.14.0 h1:/fXHZHGvro6MVqV34fJzDhi7sHGpX3Ej/Qjmfn003ho= -go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.14.0/go.mod h1:UFG7EBMRdXyFstOwH028U0sVf+AvukSGhF0g8+dmNG8= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.14.0 h1:TKf2uAs2ueguzLaxOCBXNpHxfO/aC7PAdDsSH0IbeRQ= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.14.0/go.mod h1:HrbCVv40OOLTABmOn1ZWty6CHXkU8DK/Urc43tHug70= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.14.0 h1:ap+y8RXX3Mu9apKVtOkM6WSFESLM8K3wNQyOU8sWHcc= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.14.0/go.mod h1:5w41DY6S9gZrbjuq6Y+753e96WfPha5IcsOSZTtullM= -go.opentelemetry.io/otel/metric v0.37.0 h1:pHDQuLQOZwYD+Km0eb657A25NaRzy0a+eLyKfDXedEs= -go.opentelemetry.io/otel/metric v0.37.0/go.mod h1:DmdaHfGt54iV6UKxsV9slj2bBRJcKC1B1uvDLIioc1s= -go.opentelemetry.io/otel/sdk v1.14.0 h1:PDCppFRDq8A1jL9v6KMI6dYesaq+DFcDZvjsoGvxGzY= -go.opentelemetry.io/otel/sdk v1.14.0/go.mod h1:bwIC5TjrNG6QDCHNWvW4HLHtUQ4I+VQDsnjhvyZCALM= -go.opentelemetry.io/otel/trace v1.14.0 h1:wp2Mmvj41tDsyAJXiWDWpfNsOiIyd38fy85pyKcFq/M= -go.opentelemetry.io/otel/trace v1.14.0/go.mod h1:8avnQLK+CG77yNLUae4ea2JDQ6iT+gozhnZjy/rw9G8= -go.opentelemetry.io/proto/otlp v0.19.0 h1:IVN6GR+mhC4s5yfcTbmzHYODqvWAp3ZedA2SJPI1Nnw= -go.opentelemetry.io/proto/otlp v0.19.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.44.0 h1:KfYpVmrjI7JuToy5k8XV3nkapjWx48k4E4JOtVstzQI= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.44.0/go.mod h1:SeQhzAEccGVZVEy7aH87Nh0km+utSpo1pTv6eMMop48= +go.opentelemetry.io/otel v1.19.0 h1:MuS/TNf4/j4IXsZuJegVzI1cwut7Qc00344rgH7p8bs= +go.opentelemetry.io/otel v1.19.0/go.mod h1:i0QyjOq3UPoTzff0PJB2N66fb4S0+rSbSB15/oyH9fY= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.19.0 h1:Mne5On7VWdx7omSrSSZvM4Kw7cS7NQkOOmLcgscI51U= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.19.0/go.mod h1:IPtUMKL4O3tH5y+iXVyAXqpAwMuzC1IrxVS81rummfE= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.19.0 h1:3d+S281UTjM+AbF31XSOYn1qXn3BgIdWl8HNEpx08Jk= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.19.0/go.mod h1:0+KuTDyKL4gjKCF75pHOX4wuzYDUZYfAQdSu43o+Z2I= +go.opentelemetry.io/otel/metric v1.19.0 h1:aTzpGtV0ar9wlV4Sna9sdJyII5jTVJEvKETPiOKwvpE= +go.opentelemetry.io/otel/metric v1.19.0/go.mod h1:L5rUsV9kM1IxCj1MmSdS+JQAcVm319EUrDVLrt7jqt8= +go.opentelemetry.io/otel/sdk v1.19.0 h1:6USY6zH+L8uMH8L3t1enZPR3WFEmSTADlqldyHtJi3o= +go.opentelemetry.io/otel/sdk v1.19.0/go.mod h1:NedEbbS4w3C6zElbLdPJKOpJQOrGUJ+GfzpjUvI0v1A= +go.opentelemetry.io/otel/trace v1.19.0 h1:DFVQmlVbfVeOuBRrwdtaehRrWiL1JoVs9CPIQ1Dzxpg= +go.opentelemetry.io/otel/trace v1.19.0/go.mod h1:mfaSyvGyEJEI0nyV2I4qhNQnbBOUUmYZpYojqMnX2vo= +go.opentelemetry.io/proto/otlp v1.0.0 h1:T0TX0tmXU8a3CbNXzEKGeU5mIVOdf0oykP+u2lIVU/I= +go.opentelemetry.io/proto/otlp v1.0.0/go.mod h1:Sy6pihPLfYHkr3NkUbEhGHFhINUSI/v80hjKIs5JXpM= go.starlark.net v0.0.0-20230525235612-a134d8f9ddca h1:VdD38733bfYv5tUZwEIskMM93VanwNIi5bIKnDrJdEY= go.starlark.net v0.0.0-20230525235612-a134d8f9ddca/go.mod h1:jxU+3+j+71eXOW14274+SmmuW82qJzl6iZSeqEtTGds= go.uber.org/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A= @@ -516,12 +514,12 @@ honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWh honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= k8s.io/api v0.29.0 h1:NiCdQMY1QOp1H8lfRyeEf8eOwV6+0xA6XEE44ohDX2A= k8s.io/api v0.29.0/go.mod h1:sdVmXoz2Bo/cb77Pxi71IPTSErEW32xa4aXwKH7gfBA= -k8s.io/apiextensions-apiserver v0.28.4 h1:AZpKY/7wQ8n+ZYDtNHbAJBb+N4AXXJvyZx6ww6yAJvU= -k8s.io/apiextensions-apiserver v0.28.4/go.mod h1:pgQIZ1U8eJSMQcENew/0ShUTlePcSGFq6dxSxf2mwPM= +k8s.io/apiextensions-apiserver v0.29.0 h1:0VuspFG7Hj+SxyF/Z/2T0uFbI5gb5LRgEyUVE3Q4lV0= +k8s.io/apiextensions-apiserver v0.29.0/go.mod h1:TKmpy3bTS0mr9pylH0nOt/QzQRrW7/h7yLdRForMZwc= k8s.io/apimachinery v0.29.0 h1:+ACVktwyicPz0oc6MTMLwa2Pw3ouLAfAon1wPLtG48o= k8s.io/apimachinery v0.29.0/go.mod h1:eVBxQ/cwiJxH58eK/jd/vAk4mrxmVlnpBH5J2GbMeis= -k8s.io/apiserver v0.28.4 h1:BJXlaQbAU/RXYX2lRz+E1oPe3G3TKlozMMCZWu5GMgg= -k8s.io/apiserver v0.28.4/go.mod h1:Idq71oXugKZoVGUUL2wgBCTHbUR+FYTWa4rq9j4n23w= +k8s.io/apiserver v0.29.0 h1:Y1xEMjJkP+BIi0GSEv1BBrf1jLU9UPfAnnGGbbDdp7o= +k8s.io/apiserver v0.29.0/go.mod h1:31n78PsRKPmfpee7/l9NYEv67u6hOL6AfcE761HapDM= k8s.io/cli-runtime v0.29.0 h1:q2kC3cex4rOBLfPOnMSzV2BIrrQlx97gxHJs21KxKS4= k8s.io/cli-runtime v0.29.0/go.mod h1:VKudXp3X7wR45L+nER85YUzOQIru28HQpXr0mTdeCrk= k8s.io/client-go v0.29.0 h1:KmlDtFcrdUzOYrBhXHgKw5ycWzc3ryPX5mQe0SkG3y8= @@ -538,8 +536,8 @@ k8s.io/utils v0.0.0-20230726121419-3b25d923346b h1:sgn3ZU783SCgtaSJjpcVVlRqd6GSn k8s.io/utils v0.0.0-20230726121419-3b25d923346b/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= rsc.io/letsencrypt v0.0.3 h1:H7xDfhkaFFSYEJlKeq38RwX2jYcnTeHuDQyT+mMNMwM= rsc.io/letsencrypt v0.0.3/go.mod h1:buyQKZ6IXrRnB7TdkHP0RyEybLx18HHyOSoTyoOLqNY= -sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.1.2 h1:trsWhjU5jZrx6UvFu4WzQDrN7Pga4a7Qg+zcfcj64PA= -sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.1.2/go.mod h1:+qG7ISXqCDVVcyO8hLn12AKVYYUjM7ftlqsqmrhMZE0= +sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.28.0 h1:TgtAeesdhpm2SGwkQasmbeqDo8th5wOBA5h/AjTKA4I= +sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.28.0/go.mod h1:VHVDI/KrK4fjnV61bE2g3sA7tiETLn8sooImelsCx3Y= sigs.k8s.io/controller-runtime v0.16.3 h1:2TuvuokmfXvDUamSx1SuAOO3eTyye+47mJCigwG62c4= sigs.k8s.io/controller-runtime v0.16.3/go.mod h1:j7bialYoSn142nv9sCOJmQgDXQXxnroFU4VnX/brVJ0= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo= From 8801ba2d2f9ee91f46897e540d16b75c4969b52d Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 19 Dec 2023 12:32:26 +0100 Subject: [PATCH 24/42] Bump actions/upload-artifact from 3 to 4 (#249) Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 3 to 4. - [Release notes](https://github.com/actions/upload-artifact/releases) - [Commits](https://github.com/actions/upload-artifact/compare/v3...v4) --- updated-dependencies: - dependency-name: actions/upload-artifact dependency-type: direct:production update-type: version-update:semver-major ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/ci.yml | 2 +- .github/workflows/cli-tests.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 66143c6a..89a0c1bd 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -258,7 +258,7 @@ jobs: - name: Attach the report if: ${{ always() && steps.cli-tests.outcome != 'skipped' }} - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: cli-tests-report path: cli-tests/test-report diff --git a/.github/workflows/cli-tests.yml b/.github/workflows/cli-tests.yml index 7b2046c4..197bc727 100644 --- a/.github/workflows/cli-tests.yml +++ b/.github/workflows/cli-tests.yml @@ -98,7 +98,7 @@ jobs: - name: Attach the report if: ${{ always() && steps.cli-tests.outcome != 'skipped' }} - uses: actions/upload-artifact@v3 + uses: actions/upload-artifact@v4 with: name: test-delete-cluster-tests-report path: cli-tests/test-report From 92079cca9e4a844e77797b0f889e414697ab67a5 Mon Sep 17 00:00:00 2001 From: Andrew Minkin Date: Wed, 20 Dec 2023 13:29:25 +0100 Subject: [PATCH 25/42] EVEREST-694 Updated kube-state-metrics (#252) --- .../cluster-role-binding.yaml | 2 +- .../kube-state-metrics/cluster-role.yaml | 22 +++++++++++++++++-- .../kube-state-metrics/deployment.yaml | 6 ++--- .../kube-state-metrics/service-account.yaml | 2 +- .../kube-state-metrics/service.yaml | 4 ++-- 5 files changed, 27 insertions(+), 9 deletions(-) diff --git a/data/crds/victoriametrics/kube-state-metrics/cluster-role-binding.yaml b/data/crds/victoriametrics/kube-state-metrics/cluster-role-binding.yaml index 2f1769d5..f188460f 100644 --- a/data/crds/victoriametrics/kube-state-metrics/cluster-role-binding.yaml +++ b/data/crds/victoriametrics/kube-state-metrics/cluster-role-binding.yaml @@ -4,9 +4,9 @@ metadata: labels: app.kubernetes.io/component: exporter app.kubernetes.io/name: kube-state-metrics - app.kubernetes.io/version: 2.5.0 app.kubernetes.io/managed-by: everest everest.percona.com/type: monitoring + app.kubernetes.io/version: 2.10.1 name: kube-state-metrics namespace: default roleRef: diff --git a/data/crds/victoriametrics/kube-state-metrics/cluster-role.yaml b/data/crds/victoriametrics/kube-state-metrics/cluster-role.yaml index 3333a9de..f6ee3ede 100644 --- a/data/crds/victoriametrics/kube-state-metrics/cluster-role.yaml +++ b/data/crds/victoriametrics/kube-state-metrics/cluster-role.yaml @@ -6,6 +6,7 @@ metadata: app.kubernetes.io/name: kube-state-metrics app.kubernetes.io/managed-by: everest everest.percona.com/type: monitoring + app.kubernetes.io/version: 2.10.1 name: kube-state-metrics namespace: default rules: @@ -78,6 +79,13 @@ rules: verbs: - list - watch +- apiGroups: + - discovery.k8s.io + resources: + - endpointslices + verbs: + - list + - watch - apiGroups: - storage.k8s.io resources: @@ -109,13 +117,23 @@ rules: verbs: - list - watch +- apiGroups: + - rbac.authorization.k8s.io + resources: + - clusterrolebindings + - clusterroles + - rolebindings + - roles + verbs: + - list + - watch - apiGroups: - apiextensions.k8s.io resources: - customresourcedefinitions verbs: - list - - watch + - watch - apiGroups: - pxc.percona.com resources: @@ -164,6 +182,6 @@ rules: resources: - perconaservermongodbs verbs: - - get + - get - list - watch diff --git a/data/crds/victoriametrics/kube-state-metrics/deployment.yaml b/data/crds/victoriametrics/kube-state-metrics/deployment.yaml index aadf5441..44e16234 100644 --- a/data/crds/victoriametrics/kube-state-metrics/deployment.yaml +++ b/data/crds/victoriametrics/kube-state-metrics/deployment.yaml @@ -4,9 +4,9 @@ metadata: labels: app.kubernetes.io/component: exporter app.kubernetes.io/name: kube-state-metrics - app.kubernetes.io/version: 2.9.2 app.kubernetes.io/managed-by: everest everest.percona.com/type: monitoring + app.kubernetes.io/version: 2.10.1 name: kube-state-metrics namespace: default spec: @@ -19,11 +19,11 @@ spec: labels: app.kubernetes.io/component: exporter app.kubernetes.io/name: kube-state-metrics - app.kubernetes.io/version: 2.9.2 + app.kubernetes.io/version: 2.10.1 spec: automountServiceAccountToken: true containers: - - image: registry.k8s.io/kube-state-metrics/kube-state-metrics:v2.9.2 + - image: registry.k8s.io/kube-state-metrics/kube-state-metrics:v2.10.1 args: - --metric-labels-allowlist=pods=[app.kubernetes.io/component,app.kubernetes.io/instance,app.kubernetes.io/managed-by,app.kubernetes.io/name,app.kubernetes.io/part-of],persistentvolumeclaims=[app.kubernetes.io/component,app.kubernetes.io/instance,app.kubernetes.io/managed-by,app.kubernetes.io/name,app.kubernetes.io/part-of],jobs=[app.kubernetes.io/component,app.kubernetes.io/instance,app.kubernetes.io/managed-by,app.kubernetes.io/name,app.kubernetes.io/part-of] livenessProbe: diff --git a/data/crds/victoriametrics/kube-state-metrics/service-account.yaml b/data/crds/victoriametrics/kube-state-metrics/service-account.yaml index f44f0a7e..6a8c160f 100644 --- a/data/crds/victoriametrics/kube-state-metrics/service-account.yaml +++ b/data/crds/victoriametrics/kube-state-metrics/service-account.yaml @@ -5,8 +5,8 @@ metadata: labels: app.kubernetes.io/component: exporter app.kubernetes.io/name: kube-state-metrics - app.kubernetes.io/version: 2.5.0 app.kubernetes.io/managed-by: everest everest.percona.com/type: monitoring + app.kubernetes.io/version: 2.10.1 name: kube-state-metrics namespace: default diff --git a/data/crds/victoriametrics/kube-state-metrics/service.yaml b/data/crds/victoriametrics/kube-state-metrics/service.yaml index 3731bea4..4c631796 100644 --- a/data/crds/victoriametrics/kube-state-metrics/service.yaml +++ b/data/crds/victoriametrics/kube-state-metrics/service.yaml @@ -4,13 +4,13 @@ metadata: labels: app.kubernetes.io/component: exporter app.kubernetes.io/name: kube-state-metrics - app.kubernetes.io/version: 2.5.0 app.kubernetes.io/managed-by: everest everest.percona.com/type: monitoring + app.kubernetes.io/version: 2.10.1 name: kube-state-metrics namespace: default spec: - clusterIP: None + type: ClusterIP ports: - name: http-metrics port: 8080 From 0a185e0fafaa4ce412053cda8de14f37576c2954 Mon Sep 17 00:00:00 2001 From: Diogo Recharte Date: Thu, 21 Dec 2023 15:28:19 +0000 Subject: [PATCH 26/42] Remove monitoring.enabled flag --- install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/install.sh b/install.sh index 213fb3b4..5801e5f5 100755 --- a/install.sh +++ b/install.sh @@ -35,7 +35,7 @@ fi echo "Provisioning Everest with monitoring disabled" echo "If you want to enable monitoring please refer to the everest installation documentation." echo "" -./everestctl install --monitoring.enable=false --operator.mongodb=true --operator.postgresql=true --operator.xtradb-cluster=true --skip-wizard +./everestctl install --operator.mongodb=true --operator.postgresql=true --operator.xtradb-cluster=true --skip-wizard echo "Your provisioned Everest instance will be available at http://127.0.0.1:8080" echo "Exposing Everest using kubectl port-forwarding. You can expose it manually" From c422ac1ff8f288bdab088a14c38f2c83d59bbdb8 Mon Sep 17 00:00:00 2001 From: Oksana Grishchenko <91597950+oksana-grishchenko@users.noreply.github.com> Date: Thu, 28 Dec 2023 18:31:35 +0200 Subject: [PATCH 27/42] EVEREST-725 dev CI (#258) * Checks & go.mod * go mod * verion.go and additional checks * fix version test * fix version test * fix version test * downgrade upload-artifact * update operator & BE versions --- .github/workflows/ci.yml | 41 ++- .github/workflows/cli-tests.yml | 2 +- Makefile | 2 +- cli-tests/tests/version.spec.ts | 9 +- go.mod | 43 ++- go.sum | 529 ++++++++++++++++++++++++++++++-- install.sh | 4 +- pkg/version/version.go | 2 +- 8 files changed, 593 insertions(+), 39 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 89a0c1bd..10b16b0e 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -87,6 +87,45 @@ jobs: - name: Install tools run: make init + - name: Check the latest operator version is used + run: | + go get github.com/percona/everest-operator@main + echo "Checking there is no source code changes" + go mod tidy + git diff --exit-code + + - name: Check the latest BE version is used + run: | + go get github.com/percona/percona-everest-backend@main + echo "Checking there is no source code changes" + go mod tidy + git diff --exit-code + + - name: Check the Makefile references dev version + run: | + if ! grep -q "RELEASE_VERSION ?= v0.0.0" Makefile; then + echo "default RELEASE_VERSION in Makefile should be 0.0.0" + exit 1 + fi + + - name: Check the pkg/version/version.go references the dev manifest and catalog + run: | + if ! grep -q 'devCatalogImage = "docker.io/perconalab/everest-catalog:latest"' pkg/version/version.go; then + echo "default CLI release in install.sh should be latest" + exit 1 + fi + if ! grep -q 'devManifestURL = "https://raw.githubusercontent.com/percona/percona-everest-backend/main' pkg/version/version.go; then + echo "default BE manifest in install.sh should be taken from main" + exit 1 + fi + + - name: Check the install.sh references the latest cli release + run: | + if ! grep -q "curl -sL https://github.com/percona/percona-everest-cli/releases/download/latest" install.sh; then + echo "default CLI release in install.sh should be latest" + exit 1 + fi + - name: Run linters uses: reviewdog/action-golangci-lint@v2 with: @@ -258,7 +297,7 @@ jobs: - name: Attach the report if: ${{ always() && steps.cli-tests.outcome != 'skipped' }} - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v3 with: name: cli-tests-report path: cli-tests/test-report diff --git a/.github/workflows/cli-tests.yml b/.github/workflows/cli-tests.yml index 197bc727..7b2046c4 100644 --- a/.github/workflows/cli-tests.yml +++ b/.github/workflows/cli-tests.yml @@ -98,7 +98,7 @@ jobs: - name: Attach the report if: ${{ always() && steps.cli-tests.outcome != 'skipped' }} - uses: actions/upload-artifact@v4 + uses: actions/upload-artifact@v3 with: name: test-delete-cluster-tests-report path: cli-tests/test-report diff --git a/Makefile b/Makefile index ef814de4..fce60cf4 100644 --- a/Makefile +++ b/Makefile @@ -1,6 +1,6 @@ FILES = $(shell find . -type f -name '*.go') -RELEASE_VERSION ?= $(shell git describe --always --dirty | cut -b2-) +RELEASE_VERSION ?= v0.0.0-$(shell git rev-parse --short HEAD) RELEASE_FULLCOMMIT ?= $(shell git rev-parse HEAD) LD_FLAGS = -ldflags " \ diff --git a/cli-tests/tests/version.spec.ts b/cli-tests/tests/version.spec.ts index a616c2cb..941ff3aa 100644 --- a/cli-tests/tests/version.spec.ts +++ b/cli-tests/tests/version.spec.ts @@ -17,14 +17,15 @@ import { test } from '@fixtures'; test.describe('Everest CLI "version" validation', async () => { test('version validation', async ({ cli }) => { const out = await cli.everestExecSilent('version'); - const version = await cli.exec('git describe --always --dirty|cut -b2-'); - await version.assertSuccess(); + const hash = await cli.exec('git rev-parse --short HEAD'); + + await hash.assertSuccess(); + const version = `v0.0.0-${hash.getStdOutLines()[0]}`; await out.assertSuccess(); await out.outContainsNormalizedMany([ 'ProjectName: everestctl', - 'Version: ' + version.getStdOutLines()[0], + `Version: ${version}`, ]); }); - }); diff --git a/go.mod b/go.mod index 43ab3265..f779ced3 100644 --- a/go.mod +++ b/go.mod @@ -9,8 +9,8 @@ require ( github.com/hashicorp/go-version v1.6.0 github.com/operator-framework/api v0.20.0 github.com/operator-framework/operator-lifecycle-manager v0.26.0 - github.com/percona/everest-operator v0.4.1-0.20231106102613-c61926d6c066 - github.com/percona/percona-everest-backend v0.5.0 + github.com/percona/everest-operator v0.6.0-dev1.0.20231228161448-9554994bae64 + github.com/percona/percona-everest-backend v0.5.1-0.20231228162533-f91a4af5205c github.com/spf13/cobra v1.8.0 github.com/spf13/viper v1.18.1 github.com/stretchr/testify v1.8.4 @@ -29,25 +29,34 @@ require ( ) require ( + github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.1 // indirect + github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.1 // indirect + github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.2.1 // indirect github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230305170008-8188dc5388df // indirect github.com/apapsch/go-jsonmerge/v2 v2.0.0 // indirect + github.com/aws/aws-sdk-go v1.49.5 // indirect github.com/blang/semver/v4 v4.0.0 // indirect github.com/bshuster-repo/logrus-logstash-hook v1.0.0 // indirect + github.com/cert-manager/cert-manager v1.12.4 // indirect github.com/creack/pty v1.1.18 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/emicklei/go-restful/v3 v3.11.0 // indirect github.com/evanphx/json-patch v5.6.0+incompatible // indirect github.com/evanphx/json-patch/v5 v5.6.0 // indirect + github.com/flosch/pongo2/v6 v6.0.0 // indirect github.com/fsnotify/fsnotify v1.7.0 // indirect - github.com/getkin/kin-openapi v0.120.0 // indirect + github.com/getkin/kin-openapi v0.122.0 // indirect github.com/go-errors/errors v1.5.0 // indirect + github.com/go-ini/ini v1.67.0 // indirect github.com/go-logr/logr v1.3.0 // indirect github.com/go-openapi/jsonpointer v0.20.0 // indirect github.com/go-openapi/jsonreference v0.20.2 // indirect github.com/go-openapi/swag v0.22.4 // indirect + github.com/go-sql-driver/mysql v1.7.1 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.3 // indirect + github.com/golang/snappy v0.0.4 // indirect github.com/google/cel-go v0.17.7 // indirect github.com/google/gnostic-models v0.6.8 // indirect github.com/google/go-cmp v0.6.0 // indirect @@ -55,32 +64,48 @@ require ( github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect github.com/google/uuid v1.4.0 // indirect github.com/gorilla/handlers v1.5.1 // indirect + github.com/gorilla/websocket v1.5.0 // indirect github.com/h2non/filetype v1.1.1 // indirect github.com/h2non/go-is-svg v0.0.0-20160927212452-35e8c4b0612c // indirect github.com/hashicorp/hcl v1.0.1-vault-5 // indirect github.com/imdario/mergo v0.3.16 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect github.com/invopop/yaml v0.2.0 // indirect + github.com/jessevdk/go-flags v1.5.0 // indirect + github.com/jmespath/go-jmespath v0.4.0 // indirect github.com/josharian/intern v1.0.0 // indirect github.com/json-iterator/go v1.1.12 // indirect github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 // indirect + github.com/klauspost/compress v1.17.0 // indirect + github.com/klauspost/pgzip v1.2.6 // indirect github.com/magiconair/properties v1.8.7 // indirect github.com/mailru/easyjson v0.7.7 // indirect github.com/mattn/go-colorable v0.1.13 // indirect github.com/mattn/go-isatty v0.0.19 // indirect github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d // indirect + github.com/minio/minio-go v6.0.14+incompatible // indirect + github.com/mitchellh/go-homedir v1.1.0 // indirect github.com/mitchellh/mapstructure v1.5.0 // indirect + github.com/moby/spdystream v0.2.0 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect github.com/modern-go/reflect2 v1.0.2 // indirect github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 // indirect + github.com/mongodb/mongo-tools v0.0.0-20230720205640-fb74684da15f // indirect github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 // indirect + github.com/montanaflynn/stats v0.6.6 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect - github.com/oapi-codegen/runtime v1.0.0 // indirect - github.com/onsi/gomega v1.29.0 // indirect + github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f // indirect + github.com/oapi-codegen/runtime v1.1.0 // indirect + github.com/onsi/gomega v1.30.0 // indirect github.com/operator-framework/operator-registry v1.30.1 // indirect github.com/pelletier/go-toml/v2 v2.1.0 // indirect + github.com/percona/percona-backup-mongodb v1.8.1-0.20230920143330-3b1c2e263901 // indirect + github.com/percona/percona-postgresql-operator v0.0.0-20230629061704-21f8d7d89b98 // indirect + github.com/percona/percona-server-mongodb-operator v1.15.0 // indirect + github.com/percona/percona-xtradb-cluster-operator v1.13.0 // indirect github.com/perimeterx/marshmallow v1.1.5 // indirect github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 // indirect + github.com/pierrec/lz4 v2.6.1+incompatible // indirect github.com/pkg/errors v0.9.1 // indirect github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect github.com/prometheus/procfs v0.11.1 // indirect @@ -94,10 +119,17 @@ require ( github.com/stoewer/go-strcase v1.2.0 // indirect github.com/stretchr/objx v0.5.0 // indirect github.com/subosito/gotenv v1.6.0 // indirect + github.com/ugorji/go/codec v1.2.12 // indirect + github.com/xdg-go/pbkdf2 v1.0.0 // indirect + github.com/xdg-go/scram v1.1.2 // indirect + github.com/xdg-go/stringprep v1.0.4 // indirect github.com/xlab/treeprint v1.2.0 // indirect + github.com/youmark/pkcs8 v0.0.0-20201027041543-1326539a0a0a // indirect + go.mongodb.org/mongo-driver v1.12.1 // indirect go.starlark.net v0.0.0-20230525235612-a134d8f9ddca // indirect go.uber.org/multierr v1.11.0 // indirect golang.org/x/exp v0.0.0-20230905200255-921286631fa9 // indirect + golang.org/x/mod v0.13.0 // indirect golang.org/x/net v0.19.0 // indirect golang.org/x/oauth2 v0.15.0 // indirect golang.org/x/sys v0.15.0 // indirect @@ -118,6 +150,7 @@ require ( sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd // indirect sigs.k8s.io/kustomize/api v0.13.5-0.20230601165947-6ce0bf390ce3 // indirect sigs.k8s.io/kustomize/kyaml v0.14.3-0.20230601165947-6ce0bf390ce3 // indirect + sigs.k8s.io/mcs-api v0.1.0 // indirect sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect sigs.k8s.io/yaml v1.3.0 // indirect ) diff --git a/go.sum b/go.sum index 26c16f68..65f3f6b6 100644 --- a/go.sum +++ b/go.sum @@ -1,30 +1,76 @@ 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= github.com/AdaLogics/go-fuzz-headers v0.0.0-20230106234847-43070de90fa1 h1:EKPd1INOIyr5hWOWhvpmQpY6tKjeG0hT1s3AMC/9fic= github.com/AdaLogics/go-fuzz-headers v0.0.0-20230106234847-43070de90fa1/go.mod h1:VzwV+t+dZ9j/H867F1M2ziD+yLHtB46oM35FxxMJ4d0= github.com/AlecAivazis/survey/v2 v2.3.7 h1:6I/u8FvytdGsgonrYsVn2t8t4QiRnh6QSTqkkhIiSjQ= github.com/AlecAivazis/survey/v2 v2.3.7/go.mod h1:xUTIdE4KCOIjsBAE1JYsUPoCqYdZ1reCfTwbto0Fduo= +github.com/Azure/azure-sdk-for-go v67.3.0+incompatible h1:QEvenaO+Y9ShPeCWsSAtolzVUcb0T0tPeek5TDsovuM= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.1 h1:lGlwhPtrX6EVml1hO0ivjkUxsSyl4dsiw9qcA1k/3IQ= +github.com/Azure/azure-sdk-for-go/sdk/azcore v1.9.1/go.mod h1:RKUqNu35KJYcVG/fqTRqmuXJZYNhYkBrnC/hX7yGbTA= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.4.0 h1:BMAjVKJM0U/CYF27gA0ZMmXGkOcvfFtD0oHVZ1TIPRI= +github.com/Azure/azure-sdk-for-go/sdk/azidentity v1.4.0/go.mod h1:1fXstnBMas5kzG+S3q8UoJcmyU6nUeunJcMDHcRYHhs= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.1 h1:6oNBlSdi1QqM1PNW7FPA6xOGA5UNsXnkaYZz9vdPGhA= +github.com/Azure/azure-sdk-for-go/sdk/internal v1.5.1/go.mod h1:s4kgfzA0covAXNicZHDMN58jExvcng2mC/DepXiF1EI= +github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage v1.5.0 h1:AifHbc4mg0x9zW52WOpKbsHaDKuRhlI7TVl47thgQ70= +github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage v1.5.0/go.mod h1:T5RfihdXtBDxt1Ch2wobif3TvzTdumDy29kahv6AV9A= +github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.2.1 h1:AMf7YbZOZIW5b66cXNHMWWT/zkjhz5+a+k/3x40EO7E= +github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.2.1/go.mod h1:uwfk06ZBcvL/g4VHNjurPfVln9NMbsk2XIZxJ+hu81k= +github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25UVaW/CKtUDjefjrs0SPonmDGUVOYP0= github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= +github.com/Azure/go-autorest/autorest v0.9.0/go.mod h1:xyHB1BMZT0cuDHU7I0+g046+BFDTQ8rEZB0s4Yfa6bI= +github.com/Azure/go-autorest/autorest/adal v0.5.0/go.mod h1:8Z9fGy2MpX0PvDjB1pEgQTmVqjGhiHBW7RJJEciWzS0= +github.com/Azure/go-autorest/autorest/date v0.1.0/go.mod h1:plvfp3oPSKwf2DNjlBjWF/7vwR+cUD/ELuzDCXwHUVA= +github.com/Azure/go-autorest/autorest/mocks v0.1.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= +github.com/Azure/go-autorest/autorest/mocks v0.2.0/go.mod h1:OTyCOPRA2IgIlWxVYxBee2F5Gr4kF2zd2J5cFRaIDN0= +github.com/Azure/go-autorest/logger v0.1.0/go.mod h1:oExouG+K6PryycPJfVSxi/koC6LSNgds39diKLz7Vrc= +github.com/Azure/go-autorest/tracing v0.5.0/go.mod h1:r/s2XiOKccPW3HrqB+W0TQzfbtp2fGCgRFtBroKn4Dk= +github.com/AzureAD/microsoft-authentication-library-for-go v1.1.1 h1:WpB/QDNLpMw72xHJc34BNNykqSOeEJDAWkhf0u12/Jk= +github.com/AzureAD/microsoft-authentication-library-for-go v1.1.1/go.mod h1:wP83P5OoQ5p6ip3ScPr0BAq0BvuPAvacpEuSzyouqAI= github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/Microsoft/go-winio v0.6.1 h1:9/kr64B9VUZrLm5YYwbGtUJnMgqWVOdUAXu6Migciow= github.com/Microsoft/go-winio v0.6.1/go.mod h1:LRdKpFKfdobln8UmuiYcKPot9D2v6svN5+sAH+4kjUM= github.com/Microsoft/hcsshim v0.10.0-rc.7 h1:HBytQPxcv8Oy4244zbQbe6hnOnx544eL5QPUqhJldz8= github.com/Microsoft/hcsshim v0.10.0-rc.7/go.mod h1:ILuwjA+kNW+MrN/w5un7n3mTqkwsFu4Bp05/okFUZlE= +github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= github.com/Netflix/go-expect v0.0.0-20220104043353-73e0943537d2 h1:+vx7roKuyA63nhn5WAunQHLTznkw5W8b1Xc0dNjp83s= github.com/Netflix/go-expect v0.0.0-20220104043353-73e0943537d2/go.mod h1:HBCaDeC1lPdgDeDbhX8XFpy1jqjK0IBG8W5K+xYqA0w= +github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= +github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= +github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= +github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= +github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= +github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/RaveNoX/go-jsoncommentstrip v1.0.0/go.mod h1:78ihd09MekBnJnxpICcwzCMzGrKSKYe4AqU6PDYYpjk= 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/adrg/xdg v0.4.0 h1:RzRqFcjH4nE5C6oTAxhBtoE2IRyjBSa62SCbyPidvls= github.com/adrg/xdg v0.4.0/go.mod h1:N6ag73EX4wyxeaoeHctc1mas01KZgsj5tYiAIwqJE/E= +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/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= +github.com/alessio/shellescape v1.2.2/go.mod h1:PZAiSCk0LJaZkiCSkPv8qIobYglO3FPpyFjDCtHLS30= +github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230305170008-8188dc5388df h1:7RFfzj4SSt6nnvCPbCqijJi1nWCd+TqAT3bYCStRC18= github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230305170008-8188dc5388df/go.mod h1:pSwJ0fSY5KhvocuWSx4fz3BA8OrA1bQn+K1Eli3BRwM= github.com/apapsch/go-jsonmerge/v2 v2.0.0 h1:axGnT1gRIfimI7gJifB699GoE/oq+F2MU7Dml6nw9rQ= github.com/apapsch/go-jsonmerge/v2 v2.0.0/go.mod h1:lvDnEdqiQrp0O42VQGgmlKpxL1AP2+08jFMw88y4klk= -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/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= +github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= +github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= +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-20230301143203-a9d515a09cc2 h1:DklsrG3dyBCFEj5IhUbnKptjxatkF07cF2ak3yi77so= +github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= +github.com/aws/aws-sdk-go v1.49.5 h1:y2yfBlwjPDi3/sBVKeznYEdDy6wIhjA2L5NCBMLUIYA= +github.com/aws/aws-sdk-go v1.49.5/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk= +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/blang/semver v3.5.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM= github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ= github.com/bmatcuk/doublestar v1.1.1/go.mod h1:UD6OnuiIn0yFxxA2le/rnRU1G4RaI4UvFv1sNto9p6w= @@ -37,12 +83,17 @@ github.com/bugsnag/panicwrap v1.2.0/go.mod h1:D/8v3kj0zr8ZAKg1AQ6crr+5VwKN5eIywR github.com/cenkalti/backoff/v4 v4.2.1 h1:y4OZtCnogmCPw98Zjyt5a6+QwPLGkiQsYW5oUqylYbM= github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= +github.com/cert-manager/cert-manager v1.12.4 h1:HI38vtBYTG8b2JHDF65+Dbbd09kZps6bglIAlijoj1g= +github.com/cert-manager/cert-manager v1.12.4/go.mod h1:/RYHUvK9cxuU5dbRyhb7g6am9jCcZc8huF3AnADE+nA= +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.2.0 h1:DC2CZ1Ep5Y4k3ZQ899DldepgrayRUGE6BBZ/cd9Cj44= github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= 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/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/containerd/cgroups v1.1.0 h1:v8rEWFl6EoqHB+swVNjVoCJE8o3jX7e8nqBGPLaDFBM= github.com/containerd/cgroups v1.1.0/go.mod h1:6ppBcbh/NOOUU+dMKrykgaBnK9lCIBxHqJDGwsa1mIw= github.com/containerd/containerd v1.7.0 h1:G/ZQr3gMZs6ZT0qPUZ15znx5QSdQdASW11nXTLTM2Pg= @@ -53,7 +104,21 @@ github.com/containerd/ttrpc v1.2.1 h1:VWv/Rzx023TBLv4WQ+9WPXlBG/s3rsRjY3i9AJ2BJd github.com/containerd/ttrpc v1.2.1/go.mod h1:sIT6l32Ph/H9cvnJsfXM5drIVzTr5A2flTf1G5tYZak= github.com/containerd/typeurl/v2 v2.1.0 h1:yNAhJvbNEANt7ck48IlEGOxP7YAp6LLpGn5jZACDNIE= github.com/containerd/typeurl/v2 v2.1.0/go.mod h1:IDp2JFvbwZ31H8dQbEIY7sDl2L3o3HZj1hsSQlywkQ0= +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/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/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/coreos/pkg v0.0.0-20180108230652-97fdf19511ea/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= +github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= +github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.3/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +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.17/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY= @@ -66,74 +131,164 @@ github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/dchest/uniuri v1.2.0 h1:koIcOUdrTIivZgSLhHQvKgqdWZq5d7KdMEWF1Ud6+5g= github.com/dchest/uniuri v1.2.0/go.mod h1:fSzm4SLHzNZvWLvWJew423PhAzkpNQYq+uNLq4kxhkY= +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.2.0 h1:zHCHvJYTMh1N7xnV7zf1m1GPBF9Ad0Jk/whtQ1663qI= +github.com/dnaeon/go-vcr v1.2.0/go.mod h1:R4UdLID7HZT3taECzJs4YgbbH6PIGXB6W/sc5OLb6RQ= github.com/docker/cli v23.0.1+incompatible h1:LRyWITpGzl2C9e9uGxzisptnxAn1zfZKXy13Ul2Q5oM= github.com/docker/cli v23.0.1+incompatible/go.mod h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8= github.com/docker/distribution v2.8.2+incompatible h1:T3de5rq0dB1j30rp0sA2rER+m322EBzniBPB6ZIzuh8= github.com/docker/distribution v2.8.2+incompatible/go.mod h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w= -github.com/docker/docker v23.0.3+incompatible h1:9GhVsShNWz1hO//9BNg/dpMnZW25KydO4wtVxWAIbho= -github.com/docker/docker v23.0.3+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v0.7.3-0.20190327010347-be7ac8be2ae0/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= +github.com/docker/docker v24.0.5+incompatible h1:WmgcE4fxyI6EEXxBRxsHnZXrO1pQ3smi0k/jho4HLeY= +github.com/docker/docker v24.0.5+incompatible/go.mod h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk= github.com/docker/docker-credential-helpers v0.7.0 h1:xtCHsjxogADNZcdv1pKUHXryefjlVRqWqIhk/uXJp0A= github.com/docker/docker-credential-helpers v0.7.0/go.mod h1:rETQfLdHNT3foU5kuNkFR1R1V12OJRRO5lzt2D1b5X0= 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.1 h1:AgB/0SvBxihN0X8OR4SjsblXkbMvalQ8cjmtKQ2rQV8= github.com/docker/go-metrics v0.0.1/go.mod h1:cG1hvH2utMXtqgqqYE9plW6lDxS3/5ayHzueweSI3Vw= +github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= +github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/docker/go-units v0.5.0 h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4= github.com/docker/go-units v0.5.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/docker/libtrust v0.0.0-20160708172513-aabc10ec26b7 h1:UhxFibDNY/bfvqU5CAUmr9zpesgbU6SWc8/B4mflAE4= github.com/docker/libtrust v0.0.0-20160708172513-aabc10ec26b7/go.mod h1:cyGadeNEkKy96OOhEzfZl+yxihPEzKnqJwvfuSUqbZE= +github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= +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/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/emicklei/go-restful/v3 v3.11.0 h1:rAQeMHw1c7zTmncogyy8VvRZwtkmkZ4FxERmMY4rD+g= github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= 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.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/evanphx/json-patch v4.5.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch v5.6.0+incompatible h1:jBYDEEiFBPxA0v50tFdvOzQQTCvpL6mnFh5mB2/l16U= github.com/evanphx/json-patch v5.6.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= +github.com/evanphx/json-patch/v5 v5.0.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4= github.com/evanphx/json-patch/v5 v5.6.0 h1:b91NhWfaz02IuVxO9faSllyAtNXHMPkC5J8sJCLunww= github.com/evanphx/json-patch/v5 v5.6.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4= +github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/felixge/httpsnoop v1.0.3 h1:s/nj+GCswXYzN5v2DpNMuMQYe+0DDwt5WVCU6CWBdXk= github.com/felixge/httpsnoop v1.0.3/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= +github.com/flosch/pongo2/v6 v6.0.0 h1:lsGru8IAzHgIAw6H2m4PCyleO58I40ow6apih0WprMU= +github.com/flosch/pongo2/v6 v6.0.0/go.mod h1:CuDpFm47R0uGGE7z13/tTlt1Y6zdxvr2RLT5LJhsHEU= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= +github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= +github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= github.com/garyburd/redigo v1.6.0 h1:0VruCpn7yAIIu7pWVClQC8wxCJEcG3nyzpMSHKi1PQc= github.com/garyburd/redigo v1.6.0/go.mod h1:NR3MbYisc3/PwhQ00EMzDiPmrwpPxAn5GI05/YaO1SY= -github.com/getkin/kin-openapi v0.120.0 h1:MqJcNJFrMDFNc07iwE8iFC5eT2k/NPUFDIpNeiZv8Jg= -github.com/getkin/kin-openapi v0.120.0/go.mod h1:PCWw/lfBrJY4HcdqE3jj+QFkaFK8ABoqo7PvqVhXXqw= +github.com/getkin/kin-openapi v0.122.0 h1:WB9Jbl0Hp/T79/JF9xlSW5Kl9uYdk/AWD0yAd9HOM10= +github.com/getkin/kin-openapi v0.122.0/go.mod h1:PCWw/lfBrJY4HcdqE3jj+QFkaFK8ABoqo7PvqVhXXqw= +github.com/ghodss/yaml v0.0.0-20150909031657-73d445a93680/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= 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.5.0 h1:/EuijeGOu7ckFxzhkj4CXJ8JaenxK7bKUxpPYqeLHqQ= github.com/go-errors/errors v1.5.0/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= +github.com/go-ini/ini v1.67.0 h1:z6ZrTEZqSWOTyH2FlglNbNgARyHG8oLW9gMELqKr06A= +github.com/go-ini/ini v1.67.0/go.mod h1:ByCAeIL28uOIIG0E3PJtZPDL8WnHpFKFOtgjp+3Ies8= +github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= +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-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= github.com/go-logr/logr v1.3.0 h1:2y3SDp0ZXuc6/cjLSZ+Q3ir+QB9T/iG5yYRXqsagWSY= github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= +github.com/go-logr/zapr v0.1.0/go.mod h1:tabnROwaDl0UNxkVeFRbY8bwB37GwRv0P8lg6aAiEnk= github.com/go-logr/zapr v1.3.0 h1:XGdV8XW8zdwFiwOA2Dryh1gj2KRQyOOoNmBy4EplIcQ= github.com/go-logr/zapr v1.3.0/go.mod h1:YKepepNBd1u/oyhd/yQmtjVXmm9uML4IXUgMOwR8/Gg= +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.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= +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/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs= github.com/go-openapi/jsonpointer v0.20.0 h1:ESKJdU9ASRfaPNOPRx12IUyA1vn3R9GiE3KYD14BXdQ= github.com/go-openapi/jsonpointer v0.20.0/go.mod h1:6PGzBjjIIumbLYysB73Klnms1mwnU4G3YHOECG3CedA= +github.com/go-openapi/jsonreference v0.0.0-20160704190145-13c6e3589ad9/go.mod h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg= +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/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8= github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE= github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k= +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.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc= +github.com/go-openapi/spec v0.17.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= +github.com/go-openapi/spec v0.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/strfmt v0.17.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU= +github.com/go-openapi/strfmt v0.18.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU= +github.com/go-openapi/strfmt v0.19.0/go.mod h1:+uW+93UVvGGq2qGaZxdDeJqSAqBqBdl+ZPMF/cC8nDY= +github.com/go-openapi/strfmt v0.19.3/go.mod h1:0yX7dbo8mKIvc3XSKp7MNfxw4JytCfCD6+bY1AVL9LU= +github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I= +github.com/go-openapi/swag v0.17.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= +github.com/go-openapi/swag v0.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/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= github.com/go-openapi/swag v0.22.4 h1:QLMzNJnMGPRNDCbySlcj1x01tzU8/9LTTL9hZZZogBU= github.com/go-openapi/swag v0.22.4/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= +github.com/go-openapi/validate v0.18.0/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+MYsct2VUrAJ4= +github.com/go-openapi/validate v0.19.2/go.mod h1:1tRCw7m3jtI8eNWEEliiAqUIcBztB2KDnRCRMUi7GTA= +github.com/go-openapi/validate v0.19.5/go.mod h1:8DJv2CVJQ6kGNpFW6eV9N3JviE1C85nY1c2z52x1Gk4= +github.com/go-sql-driver/mysql v1.7.1 h1:lUIinVbN1DY0xBg0eMOzmmtGoHwWBbvnWubQUrtU8EI= +github.com/go-sql-driver/mysql v1.7.1/go.mod h1:OXbVy3sEdcQ2Doequ6Z5BW6fXNQTmx+9S1MCJN5yJMI= +github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls= github.com/go-test/deep v1.1.0 h1:WOcxcdHcvdgThNXjw0t76K42FXTU7HpNQWHpA2HHNlg= github.com/go-test/deep v1.1.0/go.mod h1:5C2ZWiW0ErCdrYzpqxLbTX7MG14M9iiw8DgHncVwcsE= +github.com/gobuffalo/flect v0.2.0/go.mod h1:W3K3X9ksuZfir8f/LrfVtWmCDQFfayuylOJ7sz/Fj80= github.com/gofrs/uuid v3.3.0+incompatible h1:8K4tyRfvU1CYPgJsveYFQMhpFd/wXNM7iK6rR7UHz84= github.com/gofrs/uuid v3.3.0+incompatible/go.mod h1:b2aQJv3Z4Fp6yNu3cdSllBxTCLRxnplIgP/c0N/04lM= +github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= +github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= +github.com/gogo/protobuf v1.3.1/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= +github.com/golang-jwt/jwt v3.2.2+incompatible h1:IfV12K8xAKAnZqdXVzCZ+TOjboZ2keLg81eXfW3O+oY= +github.com/golang-jwt/jwt/v5 v5.0.0 h1:1n1XNM9hk7O9mnQoNBGolZvzebBQ7p93ULHRc28XJUE= +github.com/golang-jwt/jwt/v5 v5.0.0/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= github.com/golang-migrate/migrate/v4 v4.16.1 h1:O+0C55RbMN66pWm5MjO6mw0px6usGpY0+bkSGW9zCo0= github.com/golang-migrate/migrate/v4 v4.16.1/go.mod h1:qXiwa/3Zeqaltm1MxOCZDYysW/F6folYiBgBG03l9hc= 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-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/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/protobuf v0.0.0-20161109072736-4bd1920723d7/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= 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.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= @@ -141,10 +296,16 @@ github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrU 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.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/protobuf v1.5.3 h1:KhyjKVUg7Usr/dYsdSqoFveMYd5ko72D+zANwlG1mmg= github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= +github.com/golang/snappy v0.0.1/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/golang/snappy v0.0.4 h1:yAGX7huGHXlcLOEtBnF4w7FQwA26wojNCwOYAEhLjQM= +github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= +github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= +github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= github.com/google/cel-go v0.17.7 h1:6ebJFzu1xO2n7TLtN+UBqShGBhlD85bhvglh5DpcfqQ= github.com/google/cel-go v0.17.7/go.mod h1:HXZKzB0LXqer5lHHgfWAnlYwJaQBDKMjxjulNQzhwhY= github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I= @@ -155,85 +316,162 @@ github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMyw 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.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= +github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.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-20210720184732-4bb14d4b1be1 h1:K6RDEckDVWvDI9JAJYCmNdQXq6neHJOYx3V6jnqNEec= github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= 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.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4= github.com/google/uuid v1.4.0/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/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= +github.com/googleapis/gnostic v0.1.0/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= +github.com/googleapis/gnostic v0.3.1/go.mod h1:on+2t9HRStVgn95RSsFWFz+6Q0Snyqv1awfrALZdbtU= +github.com/gophercloud/gophercloud v0.1.0/go.mod h1:vxM41WHh5uqHVBMZHzuwNOHh8XEoIEcSTewFxm1c5g8= +github.com/gopherjs/gopherjs v0.0.0-20190430165422-3e4dfb77656c h1:7lF+Vz0LqiRidnzC1Oq86fpX1q/iEv2KJdrCtttYjT4= +github.com/gopherjs/gopherjs v0.0.0-20190430165422-3e4dfb77656c/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/handlers v1.5.1 h1:9lRY6j8DEeeBT10CvO9hGW0gmky0BprnvDI5vfhUHH4= github.com/gorilla/handlers v1.5.1/go.mod h1:t8XrUpc4KVXb7HGyJ4/cEnwQiaxrX/hz1Zv/4g96P1Q= github.com/gorilla/mux v1.8.0 h1:i40aqfkR1h2SlN9hojwV5ZA91wcXFOvkdNIeFDP5koI= github.com/gorilla/mux v1.8.0/go.mod h1:DVbg23sWSpFRCP0SfiEN6jmj59UnW/n46BH5rLB71So= +github.com/gorilla/websocket 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/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= +github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= +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/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.16.0 h1:YBftPWNWd4WwGqtY2yeZL2ef8rHAxPBD8KFhJpmcqms= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.16.0/go.mod h1:YN5jB8ie0yfIUg6VvR9Kz84aCaG7AsGZnLjhHbUqwPg= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.0 h1:RtRsiaGvWxcwd8y3BiRZxsylPT8hLWZ5SPcfI+3IDNk= +github.com/grpc-ecosystem/grpc-gateway/v2 v2.18.0/go.mod h1:TzP6duP4Py2pHLVPPQp42aoYI92+PCrVotyR5e8Vqlk= github.com/h2non/filetype v1.1.1 h1:xvOwnXKAckvtLWsN398qS9QhlxlnVXBjXBydK2/UFB4= github.com/h2non/filetype v1.1.1/go.mod h1:319b3zT68BvV+WRj7cwy856M2ehB3HqNOt6sy1HndBY= github.com/h2non/go-is-svg v0.0.0-20160927212452-35e8c4b0612c h1:fEE5/5VNnYUoBOj2I9TP8Jc+a7lge3QWn9DKE7NCwfc= github.com/h2non/go-is-svg v0.0.0-20160927212452-35e8c4b0612c/go.mod h1:ObS/W+h8RYb1Y7fYivughjxojTmIu5iAIjSrSLCLeqE= github.com/hashicorp/go-version v1.6.0 h1:feTTfFNnjP967rlCxM/I9g701jU+RN74YKx2mOkIeek= github.com/hashicorp/go-version v1.6.0/go.mod h1:fltr4n8CU8Ke44wwGCBoEymUuxUHl09ZGVZPK5anwXA= +github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= +github.com/hashicorp/golang-lru v0.5.4/go.mod h1:iADmTwqILo4mZ8BN3D2Q6+9jd8WM5uGBxy+E8yxSoD4= +github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= github.com/hashicorp/hcl v1.0.1-vault-5 h1:kI3hhbbyzr4dldA8UdTb7ZlVVlI2DACdCfz31RPDgJM= github.com/hashicorp/hcl v1.0.1-vault-5/go.mod h1:XYhtn6ijBSAj6n4YqAaf7RBPS4I06AItNorpy+MoQNM= github.com/hinshun/vt10x v0.0.0-20220119200601-820417d04eec h1:qv2VnGeEQHchGaZ/u7lxST/RaJw+cv273q79D81Xbog= github.com/hinshun/vt10x v0.0.0-20220119200601-820417d04eec/go.mod h1:Q48J4R4DvxnHolD5P8pOtXigYlRuPLGl6moFx3ulM68= +github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= +github.com/imdario/mergo v0.3.5/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= +github.com/imdario/mergo v0.3.9/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/imdario/mergo v0.3.16 h1:wwQJbIsHYGMUyLSPrEq1CT16AhnhNJQ51+4fdHUnCl4= github.com/imdario/mergo v0.3.16/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY= +github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/invopop/yaml v0.2.0 h1:7zky/qH+O0DwAyoobXUqvVBwgBFRxKoQ/3FjcVpjTMY= github.com/invopop/yaml v0.2.0/go.mod h1:2XuRLgs/ouIrW3XNzuNj7J3Nvu/Dig5MXvbCEdiBN3Q= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= +github.com/jessevdk/go-flags v1.5.0 h1:1jKYvbxEjfUl0fmqTCOfonvskHHXMjBySTLW4y9LFvc= +github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4= +github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= +github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= +github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= +github.com/jmespath/go-jmespath/internal/testify v1.5.1/go.mod h1:L3OGu8Wl2/fWfCI6z80xFu9LTZmf1ZRjMHUOPmWr69U= +github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= +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/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= +github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= +github.com/jtolds/gls v4.20.0+incompatible h1:xdiiI2gbIgH/gLH7ADydsJ1uDOEzR8yvV7C0MuV77Wo= +github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/juju/gnuflag v0.0.0-20171113085948-2ce1bb71843d/go.mod h1:2PavIy+JPciBPrBUjwbNvtwB6RQlve+hkpll6QSNmOE= +github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0 h1:iQTw/8FWTuc7uiaSepXwyf3o52HaUYcV+Tu66S3F5GA= github.com/kardianos/osext v0.0.0-20190222173326-2bc1f35cddc0/go.mod h1:1NbS8ALrpOvjt0rHPNLyCIeMtbizbir8U//inJ+zuB8= github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNUXsshfwJMBgNA0RU6/i7WVaAegv3PtuIHPMs= github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8= +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/klauspost/compress v1.13.6/go.mod h1:/3/Vjq9QcHkK5uEr5lBEmyoZ1iFhe47etQ6QUkpK6sk= github.com/klauspost/compress v1.17.0 h1:Rnbp4K9EjcDuVuHtd0dgA4qNuv9yKDYKK1ulpJwgrqM= github.com/klauspost/compress v1.17.0/go.mod h1:ntbaceVETuRiXiv4DpjP66DpAtAGkEQskQzEyD//IeE= +github.com/klauspost/pgzip v1.2.6 h1:8RXeL5crjEUFnR2/Sn6GJNWtSQ3Dk8pq4CL3jvdDyjU= +github.com/klauspost/pgzip v1.2.6/go.mod h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs= +github.com/konsorten/go-windows-terminal-sequences v1.0.1/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.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= 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/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= +github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= +github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= +github.com/mailru/easyjson v0.0.0-20160728113105-d5b7844b561a/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= +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/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs= github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= +github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= +github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= +github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-sqlite3 v1.14.16 h1:yOQRA0RpS5PFz/oikGwBEqvAWhWg5ufRz4ETLjwpU1Y= github.com/mattn/go-sqlite3 v1.14.16/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg= +github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= github.com/matttproud/golang_protobuf_extensions v1.0.4 h1:mmDVorXM7PCGKw94cs5zkfA9PSy5pEvNWRP0ET0TIVo= github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d h1:5PJl274Y63IEHC+7izoQE9x6ikvDFZS2mDVS3drnohI= github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= +github.com/minio/minio-go v6.0.14+incompatible h1:fnV+GD28LeqdN6vT2XdGKW8Qe/IfjJDswNVuni6km9o= +github.com/minio/minio-go v6.0.14+incompatible/go.mod h1:7guKYtitv8dktvNUGrhzmNlA5wrAABTQXCoesZdFQO8= +github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= +github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= +github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/moby/locker v1.0.1 h1:fOXqR41zeveg4fFODix+1Ch4mj/gT0NE1XJbp/epuBg= github.com/moby/locker v1.0.1/go.mod h1:S7SDdo5zpBK84bzzVlKr2V0hz+7x9hWbYC/kq7oQppc= +github.com/moby/spdystream v0.2.0 h1:cjW1zVyyoiM0T7b6UoySUFqzXMoqRckQtXwGPiBhOM8= +github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c= github.com/moby/sys/mountinfo v0.6.2 h1:BzJjoreD5BMFNmD9Rus6gdd1pLuecOFPt8wC+Vygl78= github.com/moby/sys/mountinfo v0.6.2/go.mod h1:IJb6JQeOklcdMU9F5xQ8ZALD+CUr5VlGpwtX+VE0rpI= github.com/moby/sys/sequential v0.5.0 h1:OPvI35Lzn9K04PBbCLW0g4LcFAJgHsvXsRyewg5lXtc= @@ -243,22 +481,47 @@ github.com/moby/term v0.5.0/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3 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/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 h1:RWengNIwukTxcDr9M+97sNutRR1RKhG96O6jWumTTnw= github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826/go.mod h1:TaXosZuwdSHYgviHp1DAtfrULt5eUgsSMsZf+YrPgl8= +github.com/mongodb/mongo-tools v0.0.0-20230720205640-fb74684da15f h1:vrP8tGvlgFyelOah/ndZgZfia5fXbNVIb37ldYYg+OM= +github.com/mongodb/mongo-tools v0.0.0-20230720205640-fb74684da15f/go.mod h1:FjrtGjfqHbUZEkbw0lZ+GB/3rqQsZM9KCFYnO8xx2cU= 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/montanaflynn/stats v0.0.0-20171201202039-1bf9dbcd8cbe/go.mod h1:wL8QJuTMNUDYhXwkmfOly8iTdp5TEcJFWZD2D7SIkUc= +github.com/montanaflynn/stats v0.6.6 h1:Duep6KMIDpY4Yo11iFsvyqJDyfzLF9+sndUKT+v64GQ= +github.com/montanaflynn/stats v0.6.6/go.mod h1:etXPPgVO6n31NxCd9KQUMvCM+ve0ruNzt6R8Bnaayow= 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 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= -github.com/oapi-codegen/runtime v1.0.0 h1:P4rqFX5fMFWqRzY9M/3YF9+aPSPPB06IzP2P7oOxrWo= -github.com/oapi-codegen/runtime v1.0.0/go.mod h1:LmCUMQuPB4M/nLXilQXhHw+BLZdDb18B34OO356yJ/A= -github.com/onsi/ginkgo/v2 v2.13.0 h1:0jY9lJquiL8fcf3M4LAXN5aMlS/b2BV86HFFPCPMgE4= -github.com/onsi/ginkgo/v2 v2.13.0/go.mod h1:TE309ZR8s5FsKKpuB1YAQYBzCaAfUgatB/xlT/ETL/o= -github.com/onsi/gomega v1.29.0 h1:KIA/t2t5UBzoirT4H9tsML45GEbo3ouUnBHsCfD2tVg= -github.com/onsi/gomega v1.29.0/go.mod h1:9sxs+SwGrKI0+PWe4Fxa9tFQQBG5xSsSbMXOI8PPpoQ= +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 h1:y5//uYreIhSUg3J1GEMiLbxo1LJaP8RfCpH6pymGZus= +github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= +github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= +github.com/oapi-codegen/runtime v1.1.0 h1:rJpoNUawn5XTvekgfkvSZr0RqEnoYpFkyvrzfWeFKWM= +github.com/oapi-codegen/runtime v1.1.0/go.mod h1:BeSfBkWWWnAnGdyS+S/GnlbmHKzf8/hwkvelJZDeKA8= +github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= +github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= +github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= +github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= +github.com/onsi/ginkgo v1.14.0 h1:2mOpI4JVVPBN+WQRa0WKH2eXR+Ey+uK4n7Zj0aYpIQA= +github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= +github.com/onsi/ginkgo/v2 v2.13.2 h1:Bi2gGVkfn6gQcjNjZJVO8Gf0FHzMPf2phUei9tejVMs= +github.com/onsi/ginkgo/v2 v2.13.2/go.mod h1:XStQ8QcGwLyF4HdfcZB8SFOS/MWCgDuXMSBe6zrvLgM= +github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= +github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= +github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= +github.com/onsi/gomega v1.8.1/go.mod h1:Ho0h+IUsWyvy1OpqCwxlQ/21gkhVunqlU8fDGcoTdcA= +github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= +github.com/onsi/gomega v1.30.0 h1:hvMK7xYz4D3HapigLTeGdId/NcfQx1VHMJc60ew99+8= +github.com/onsi/gomega v1.30.0/go.mod h1:9sxs+SwGrKI0+PWe4Fxa9tFQQBG5xSsSbMXOI8PPpoQ= 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.1.0-rc2.0.20221005185240-3a7f492d3f1b h1:YWuSjZCQAPM8UUBLkYUk1e+rZcvWHJmFb6i6rM44Xs8= @@ -271,62 +534,123 @@ github.com/operator-framework/operator-registry v1.30.1 h1:7XvISZrwi+j9z4MIiApRR github.com/operator-framework/operator-registry v1.30.1/go.mod h1:iKVnZsuGjPm6h/jPn4WyQ7JFguRCZMUN+YmsEMu6byA= github.com/otiai10/copy v1.12.0 h1:cLMgSQnXBs1eehF0Wy/FAGsgDTDmAqFR7rQylBb1nDY= github.com/otiai10/copy v1.12.0/go.mod h1:rSaLseMUsZFFbsFGc7wCJnnkTAvdc5L6VWxPE4308Ww= +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/pelletier/go-toml v1.7.0/go.mod h1:vwGMzjaWMwyfHwgIBhI2YUM4fB6nL6lVAvS1LBMMhTE= github.com/pelletier/go-toml/v2 v2.1.0 h1:FnwAJ4oYMvbT/34k9zzHuZNrhlz48GB3/s6at6/MHO4= github.com/pelletier/go-toml/v2 v2.1.0/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdUvyaeZurnPPDc= -github.com/percona/everest-operator v0.4.1-0.20231106102613-c61926d6c066 h1:/a8DCJZBh5oG/1aAqCOHHTxQqoqs5uHu1xOM6hdNz4o= -github.com/percona/everest-operator v0.4.1-0.20231106102613-c61926d6c066/go.mod h1:35PbvNvDsfgNgATppkqXz+NnRMHDHuNtA5mI3t7oRCY= -github.com/percona/percona-everest-backend v0.5.0 h1:NqRJxepDP6Lm0ZEP26WYh9DpRlBhNkw8A5jJw4581lg= -github.com/percona/percona-everest-backend v0.5.0/go.mod h1:lB1x6b5sIMddEw6kt1QlWqA6x6tL+R7rr7dmPwTT3bE= +github.com/percona/everest-operator v0.6.0-dev1.0.20231228161448-9554994bae64 h1:b7out0+6TFYcVwRCwdbVOhuljt6UMiyAx83dwaXQ/eY= +github.com/percona/everest-operator v0.6.0-dev1.0.20231228161448-9554994bae64/go.mod h1:ZO6jpaEcsJLoCRXAu53sZB/HQKaHEOe7o2jEKKg6YWc= +github.com/percona/percona-backup-mongodb v1.8.1-0.20230920143330-3b1c2e263901 h1:BDgsZRCjEuxl2/z4yWBqB0s8d20shuIDks7/RVdZiLs= +github.com/percona/percona-backup-mongodb v1.8.1-0.20230920143330-3b1c2e263901/go.mod h1:fZRCMpUqkWlLVdRKqqaj001LoVP2eo6F0ZhoMPeXDng= +github.com/percona/percona-everest-backend v0.5.1-0.20231228162533-f91a4af5205c h1:qC8E+kt/WzeTpMmWJE43BRLCtwA90Cl3/GiaZt9uzUA= +github.com/percona/percona-everest-backend v0.5.1-0.20231228162533-f91a4af5205c/go.mod h1:jA7zVzHpOuLJvef/qMeIzQRRMu7IEnorJi3IYMd2iPc= +github.com/percona/percona-postgresql-operator v0.0.0-20230629061704-21f8d7d89b98 h1:TBc6YKTrJm8rg1Z43vXLMniyi7hwMZqBaGdKN/fbXLI= +github.com/percona/percona-postgresql-operator v0.0.0-20230629061704-21f8d7d89b98/go.mod h1:Wbw7DyZtHKWJpy2kELRuRTlG9dW0CVAn8faT7POBjC4= +github.com/percona/percona-server-mongodb-operator v1.15.0 h1:pcP9GMi9f05VFi8e/TQifBrR+cvOkYMiv1xAftkESBs= +github.com/percona/percona-server-mongodb-operator v1.15.0/go.mod h1:D4HOWd6TXRg3kfJ3sgm1LkbMe0QheueGtGCyiUflwlE= +github.com/percona/percona-xtradb-cluster-operator v1.13.0 h1:KhXkjK3hRCLdEtbcuc9ynKiY7fJ1IxRqZTLgd6R6xz0= +github.com/percona/percona-xtradb-cluster-operator v1.13.0/go.mod h1:EuEh2c3STNlMTvuEMGeAkM6eDhKiIT5wtfcxBZLSjiA= github.com/perimeterx/marshmallow v1.1.5 h1:a2LALqQ1BlHM8PZblsDdidgv1mWi1DgC2UmX50IvK2s= github.com/perimeterx/marshmallow v1.1.5/go.mod h1:dsXbUu8CRzfYP5a87xpp0xq9S3u0Vchtcl8we9tYaXw= +github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 h1:Ii+DKncOVM8Cu1Hc+ETb5K+23HdAMvESYE3ZJ5b5cMI= github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE= +github.com/pierrec/lz4 v2.6.1+incompatible h1:9UY3+iC23yxF0UfGaYrGplQ+79Rg+h/q9FV9ix19jjM= +github.com/pierrec/lz4 v2.6.1+incompatible/go.mod h1:pdkljMzZIN41W+lC3N2tnIh5sFi+IEE17M5jbnwPHcY= +github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8 h1:KoWmjvw+nsYOo29YJK9vDA65RGE3NrOnUtO7a+RF9HU= +github.com/pkg/browser v0.0.0-20210911075715-681adbf594b8/go.mod h1:HKlIX3XHQyzLZPlr7++PzdhaXEj94dEiJgZDTsxEqUI= +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/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA= +github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= +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.16.0 h1:yk/hx9hDbrGHovbci4BY+pRMfSuuat626eFsHb7tmT8= github.com/prometheus/client_golang v1.16.0/go.mod h1:Zsulrv/L9oM40tJ7T815tM89lFEugiJ9HzIqaAx4LKc= +github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/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.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.4.0 h1:5lQXD3cAg1OXBf4Wq03gTrXHeaV0TQvGfUooCfx1yqY= github.com/prometheus/client_model v0.4.0/go.mod h1:oMQmHW1/JoDwqLtg57MGgP/Fb1CJEYF2imWWhWtMkYU= +github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= +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.44.0 h1:+5BrQJwiBB9xsMygAB3TNvpQKOwlkc25LbISbrdOOfY= github.com/prometheus/common v0.44.0/go.mod h1:ofAIvZbQ1e/nugmZGz4/qCb9Ap1VoSTIO7x0VV9VvuY= +github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= +github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= +github.com/prometheus/procfs v0.0.11/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= github.com/prometheus/procfs v0.11.1 h1:xRC8Iq1yyca5ypa9n1EZnWZkt7dwcoRPQwX/5gwaUuI= github.com/prometheus/procfs v0.11.1/go.mod h1:eesXgaPo1q7lBpVMoMy0ZOFTth9hBn4W/y0/p/ScXhY= +github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= +github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= +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/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/sagikazarmark/locafero v0.4.0 h1:HApY1R9zGo4DBgr7dqsTH/JJxLTTsOt7u6keLGt6kNQ= github.com/sagikazarmark/locafero v0.4.0/go.mod h1:Pe1W6UlPYUk/+wc/6KFhbORCfqzgYEpgQ3O5fPuL3H4= github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE= github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ= +github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8= github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NFbPK1I= +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.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= +github.com/smartystreets/assertions v1.2.0 h1:42S6lae5dvLc7BrLu/0ugRtcFVjoJNMC/N3yZFZkDFs= +github.com/smartystreets/assertions v1.2.0/go.mod h1:tcbTF8ujkAEcZ8TElKY+i30BzYlVhC/LOxJk7iOWnoo= +github.com/smartystreets/goconvey v1.6.4 h1:fv0U8FUIMPNf1L9lnHLvLhgicrIVChEkdzIKYqbNC9s= +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/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo= github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0= +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/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8= github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY= +github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cast v1.6.0 h1:GEiTHELF+vaR5dhz3VqZfFSzZjYbgeKDpBxQVS4GYJ0= github.com/spf13/cast v1.6.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= +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.8.0 h1:7aJaZx1B85qltLMc546zn58BxxfZdR/W22ej9CFoEf0= github.com/spf13/cobra v1.8.0/go.mod h1:WXLWApfZ71AjXPya3WOlMsY9yMs7YeiHhFVlvLyhcho= +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/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.18.1 h1:rmuU42rScKWlhhJDyXZRKJQHXFX02chSVW1IvkPGiVM= github.com/spf13/viper v1.18.1/go.mod h1:EKmWIqdnk5lOcmR72yw6hS+8OPYcwD0jteitLMVB+yk= github.com/spkg/bom v0.0.0-20160624110644-59b7046e48ad/go.mod h1:qLr4V1qq6nMqFKkMo8ZTx3f+BZEkzsRUY10Xsm2mwU0= github.com/stoewer/go-strcase v1.2.0 h1:Z2iHWqGXH00XYgqDmNgQbIBxf3wrNq0F3feEy0ainaU= github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= 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/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0 h1:1zr/of2m5FGMsad5YfcqgdqdWrIhu+EBEJRhR1U7z/c= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= +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/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= @@ -337,10 +661,28 @@ github.com/stretchr/testify v1.8.4 h1:CcVxjf3Q8PM0mHUKJCdn+eZZtm5yQwehR5yeSVQQcU github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= -github.com/ugorji/go/codec v1.2.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4dU= -github.com/ugorji/go/codec v1.2.11/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= +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/ugorji/go/codec v1.2.12 h1:9LC83zGrHhuUA9l16C9AHXAqEV/2wBQ4nkvumAE65EE= +github.com/ugorji/go/codec v1.2.12/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= +github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= +github.com/vektah/gqlparser v1.1.2/go.mod h1:1ycwN7Ij5njmMkPPAOaRFY4rET2Enx7IkVv3vaXspKw= +github.com/xdg-go/pbkdf2 v1.0.0 h1:Su7DPu48wXMwC3bs7MCNG+z4FhcyEuz5dlvchbq0B0c= +github.com/xdg-go/pbkdf2 v1.0.0/go.mod h1:jrpuAogTd400dnrH08LKmI/xc1MbPOebTwRqcT5RDeI= +github.com/xdg-go/scram v1.1.2 h1:FHX5I5B4i4hKRVRBCFRxq1iQRej7WO3hhBuJf+UUySY= +github.com/xdg-go/scram v1.1.2/go.mod h1:RT/sEzTbU5y00aCK8UOx6R7YryM0iF1N2MOmC3kKLN4= +github.com/xdg-go/stringprep v1.0.4 h1:XLI/Ng3O1Atzq0oBs3TWm+5ZVgkq2aqdlvP9JtoZ6c8= +github.com/xdg-go/stringprep v1.0.4/go.mod h1:mPGuuIYwz7CmR2bT9j4GbQqutWS1zV24gijq1dTyGkM= +github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xlab/treeprint v1.2.0 h1:HzHnuAF1plUN2zGlAFHbSQP2qJ0ZAD3XF5XD7OesXRQ= github.com/xlab/treeprint v1.2.0/go.mod h1:gj5Gd3gPdKtR1ikdDK6fnFLdmIS0X30kTTuNd/WEJu0= +github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= +github.com/youmark/pkcs8 v0.0.0-20181117223130-1be2e3e5546d/go.mod h1:rHwXgn7JulP+udvsHwJoVG1YGAP6VLg4y9I5dyZdqmA= +github.com/youmark/pkcs8 v0.0.0-20201027041543-1326539a0a0a h1:fZHgsYlfvtyqToslyjUt3VOPF4J7aK/3MPcK7xp3PDk= +github.com/youmark/pkcs8 v0.0.0-20201027041543-1326539a0a0a/go.mod h1:ul22v+Nro/R083muKhosV54bj5niojjWZvU8xrevuH4= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= @@ -350,8 +692,17 @@ github.com/yvasiyarov/gorelic v0.0.7 h1:4DTF1WOM2ZZS/xMOkTFBOcb6XiHu/PKn3rVo6dbe github.com/yvasiyarov/gorelic v0.0.7/go.mod h1:NUSPSUX/bi6SeDMUh6brw0nXpxHnc96TguQh0+r/ssA= github.com/yvasiyarov/newrelic_platform_go v0.0.0-20160601141957-9c099fbc30e9 h1:AsFN8kXcCVkUFHyuzp1FtYbzp1nCO/H6+1uPSGEyPzM= github.com/yvasiyarov/newrelic_platform_go v0.0.0-20160601141957-9c099fbc30e9/go.mod h1:GlGEuHIJweS1mbCqG+7vt2nvWLzLLnRHbXz5JKd/Qbg= +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.8 h1:xs88BrvEv273UsB79e0hcVrlUWmS0a8upikMFhSyAtA= go.etcd.io/bbolt v1.3.8/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw= +go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= +go.mongodb.org/mongo-driver v1.0.3/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= +go.mongodb.org/mongo-driver v1.1.1/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= +go.mongodb.org/mongo-driver v1.1.2/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= +go.mongodb.org/mongo-driver v1.12.1 h1:nLkghSU8fQNaK7oUmDhQFsnrtcoNy7Z6LVFKsEecqgE= +go.mongodb.org/mongo-driver v1.12.1/go.mod h1:/rGBTebI3XYboVmgz+Wv3Bcbl3aD0QF9zl6kDDw18rQ= +go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.44.0 h1:KfYpVmrjI7JuToy5k8XV3nkapjWx48k4E4JOtVstzQI= @@ -372,16 +723,29 @@ go.opentelemetry.io/proto/otlp v1.0.0 h1:T0TX0tmXU8a3CbNXzEKGeU5mIVOdf0oykP+u2lI go.opentelemetry.io/proto/otlp v1.0.0/go.mod h1:Sy6pihPLfYHkr3NkUbEhGHFhINUSI/v80hjKIs5JXpM= go.starlark.net v0.0.0-20230525235612-a134d8f9ddca h1:VdD38733bfYv5tUZwEIskMM93VanwNIi5bIKnDrJdEY= go.starlark.net v0.0.0-20230525235612-a134d8f9ddca/go.mod h1:jxU+3+j+71eXOW14274+SmmuW82qJzl6iZSeqEtTGds= +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/goleak v1.2.1 h1:NBol2c7O1ZokfZ0LEU9K6Whx/KnwvepVetCUhtKja4A= go.uber.org/goleak v1.2.1/go.mod h1:qlT2yGI9QafXHhZZLxlSuNsMw3FFLxBr+tBRlmO1xH4= +go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= +go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= go.uber.org/zap v1.26.0 h1:sI7k6L95XOKS281NhVKOFCUNIvv9e0w4BF8N3u+tCRo= go.uber.org/zap v1.26.0/go.mod h1:dtElttAiwGvoJ/vj4IwHBS/gXsEu/pZ50mUIRWuG0so= +golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= +golang.org/x/crypto v0.0.0-20190211182817-74369b46fc67/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190320223903-b7391e95e576/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= +golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20190617133340-57b3e21c3d56/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= +golang.org/x/crypto v0.0.0-20200220183623-bac4c82f6975/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= +golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= +golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.16.0 h1:mMMrFzRSCF0GvB7Ne27XVtVAaXLrPmgPC7/v0tkwHaY= golang.org/x/crypto v0.16.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= @@ -389,41 +753,81 @@ golang.org/x/exp v0.0.0-20230905200255-921286631fa9 h1:GoHiUyI/Tp2nVkLI2mCxVkOjs golang.org/x/exp v0.0.0-20230905200255-921286631fa9/go.mod h1:S2oDrQGGwySpoQPVqRShND87VCbxmc6bL1Yd2oYrm6k= 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/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.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.12.0 h1:rmsUpXtvNzj340zd98LZ4KntptpfRHwpFOHG188oHXc= -golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.13.0 h1:I/DsJXRlw/8l/0c24sM9yb0T4z9liZTduXvdAWYiysY= +golang.org/x/mod v0.13.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= 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-20181114220301-adae6a3d119a/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-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-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= +golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +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-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= +golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/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-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= +golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.19.0 h1:zTwKpTd2XuCqf8huc7Fo2iSy+4RHPd10s4KzeTnVr1c= golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U= 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.15.0 h1:s8pnnxNVzjWyrvYdFUQq5llS1PX2zhPXmccZv99h7uQ= golang.org/x/oauth2 v0.15.0/go.mod h1:q48ptWNTY5XWf+JNten23lcvHpLJ0ZSxF5ttTHKVCAM= 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-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE= golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/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-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-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +golang.org/x/sys v0.0.0-20190209173611-3b5209105503/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= +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-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/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-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20200519105757-fe76b779f299/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-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= +golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -437,37 +841,58 @@ golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuX golang.org/x/term v0.0.0-20220526004731-065cf7ba2467/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.15.0 h1:y/Oo/a/q3IXu26lQgl04j/gjuBDOBlx7X6Om1j2CPW4= golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0= +golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/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.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= +golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= +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.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= +golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/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-20181011042414-1f849cf54d09/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-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= +golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190617190820-da514acc4774/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= +golang.org/x/tools v0.0.0-20190920225731-5eefd052ad72/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-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.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.13.0 h1:Iey4qkscZuv0VvIt8E0neZjtPVQFSc870HQ448QgEmQ= -golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= +golang.org/x/tools v0.14.0 h1:jvNa2pY0M4r62jkRQ6RwEZZyPcymeL9XZMLBbV7U2nc= +golang.org/x/tools v0.14.0/go.mod h1:uYBEerGOWcJyEORxN+Ek8+TT266gXkNlHdJBwexUsBg= 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/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= +gomodules.xyz/jsonpatch/v2 v2.0.1/go.mod h1:IhYNNY4jnS53ZnfE4PAmpKtDpTCj1JFXc+3mwe7XcUU= gomodules.xyz/jsonpatch/v2 v2.4.0 h1:Ci3iUJyx9UeRx7CeFN8ARgGbkESwJK+KB9lLcWxY/Zw= gomodules.xyz/jsonpatch/v2 v2.4.0/go.mod h1:AH3dM2RI6uoBZxn3LVrfvJ3E0/9dG4cSrbuBJT4moAY= +google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= 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.8 h1:IhEN5q69dyKagZPYMSdIjS2HqprW324FRQZJcGqPAsM= google.golang.org/appengine v1.6.8/go.mod h1:1jJ3jBArFh5pcgW8gCtRJnepW8FzD1V44FJffLiz/Ds= 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-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= google.golang.org/genproto v0.0.0-20231106174013-bbf56f31fb17 h1:wpZ8pe2x1Q3f2KyT5f8oP/fa9rHAKgFPr/HZdNuS+PQ= @@ -477,7 +902,10 @@ google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17/go. google.golang.org/genproto/googleapis/rpc v0.0.0-20231120223509-83a465c0220f h1:ultW7fxlIvee4HYrtnaRPon9HpEgFk5zYpmfMgtKB5I= google.golang.org/genproto/googleapis/rpc v0.0.0-20231120223509-83a465c0220f/go.mod h1:L9KNLi232K1/xB6f7AlSX692koaRnKaWSR0stBki0Yc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= +google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= 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.59.0 h1:Z5Iec2pjwb+LEOqzpB2MR12/eKFhDPhuqW91O+4bwUk= google.golang.org/grpc v1.59.0/go.mod h1:aUPDwccQo6OTjy7Hct4AfBPD1GptF4fyUjIkQ9YtF98= @@ -487,66 +915,119 @@ google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQ 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.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +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-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-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= +gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= +gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= 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.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= gopkg.in/ini.v1 v1.67.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/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= +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.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-20190905181640-827449938966/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.0-20200121175148-a6ecf24a6d71/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/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.5.0 h1:Ljk6PdHdOhAb5aDMWXjDLMMhph+BpztA4v1QdqEW2eY= +gotest.tools/v3 v3.5.0/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU= 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-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= +k8s.io/api v0.18.2/go.mod h1:SJCWI7OLzhZSvbY7U8zwNl9UA4o1fizoug34OV/2r78= +k8s.io/api v0.18.4/go.mod h1:lOIQAKYgai1+vz9J7YcDZwC26Z0zQewYOGWdyIPUUQ4= k8s.io/api v0.29.0 h1:NiCdQMY1QOp1H8lfRyeEf8eOwV6+0xA6XEE44ohDX2A= k8s.io/api v0.29.0/go.mod h1:sdVmXoz2Bo/cb77Pxi71IPTSErEW32xa4aXwKH7gfBA= +k8s.io/apiextensions-apiserver v0.18.2/go.mod h1:q3faSnRGmYimiocj6cHQ1I3WpLqmDgJFlKL37fC4ZvY= +k8s.io/apiextensions-apiserver v0.18.4/go.mod h1:NYeyeYq4SIpFlPxSAB6jHPIdvu3hL0pc36wuRChybio= k8s.io/apiextensions-apiserver v0.29.0 h1:0VuspFG7Hj+SxyF/Z/2T0uFbI5gb5LRgEyUVE3Q4lV0= k8s.io/apiextensions-apiserver v0.29.0/go.mod h1:TKmpy3bTS0mr9pylH0nOt/QzQRrW7/h7yLdRForMZwc= +k8s.io/apimachinery v0.18.2/go.mod h1:9SnR/e11v5IbyPCGbvJViimtJ0SwHG4nfZFjU77ftcA= +k8s.io/apimachinery v0.18.4/go.mod h1:OaXp26zu/5J7p0f92ASynJa1pZo06YlV9fG7BoWbCko= k8s.io/apimachinery v0.29.0 h1:+ACVktwyicPz0oc6MTMLwa2Pw3ouLAfAon1wPLtG48o= k8s.io/apimachinery v0.29.0/go.mod h1:eVBxQ/cwiJxH58eK/jd/vAk4mrxmVlnpBH5J2GbMeis= +k8s.io/apiserver v0.18.2/go.mod h1:Xbh066NqrZO8cbsoenCwyDJ1OSi8Ag8I2lezeHxzwzw= +k8s.io/apiserver v0.18.4/go.mod h1:q+zoFct5ABNnYkGIaGQ3bcbUNdmPyOCoEBcg51LChY8= k8s.io/apiserver v0.29.0 h1:Y1xEMjJkP+BIi0GSEv1BBrf1jLU9UPfAnnGGbbDdp7o= k8s.io/apiserver v0.29.0/go.mod h1:31n78PsRKPmfpee7/l9NYEv67u6hOL6AfcE761HapDM= k8s.io/cli-runtime v0.29.0 h1:q2kC3cex4rOBLfPOnMSzV2BIrrQlx97gxHJs21KxKS4= k8s.io/cli-runtime v0.29.0/go.mod h1:VKudXp3X7wR45L+nER85YUzOQIru28HQpXr0mTdeCrk= +k8s.io/client-go v0.18.2/go.mod h1:Xcm5wVGXX9HAA2JJ2sSBUn3tCJ+4SVlCbl2MNNv+CIU= +k8s.io/client-go v0.18.4/go.mod h1:f5sXwL4yAZRkAtzOxRWUhA/N8XzGCb+nPZI8PfobZ9g= k8s.io/client-go v0.29.0 h1:KmlDtFcrdUzOYrBhXHgKw5ycWzc3ryPX5mQe0SkG3y8= k8s.io/client-go v0.29.0/go.mod h1:yLkXH4HKMAywcrD82KMSmfYg2DlE8mepPR4JGSo5n38= +k8s.io/code-generator v0.18.2/go.mod h1:+UHX5rSbxmR8kzS+FAv7um6dtYrZokQvjHpDSYRVkTc= +k8s.io/code-generator v0.18.4/go.mod h1:TgNEVx9hCyPGpdtCWA34olQYLkh3ok9ar7XfSsr8b6c= +k8s.io/component-base v0.18.2/go.mod h1:kqLlMuhJNHQ9lz8Z7V5bxUUtjFZnrypArGl58gmDfUM= +k8s.io/component-base v0.18.4/go.mod h1:7jr/Ef5PGmKwQhyAz/pjByxJbC58mhKAhiaDu0vXfPk= k8s.io/component-base v0.29.0 h1:T7rjd5wvLnPBV1vC4zWd/iWRbV8Mdxs+nGaoaFzGw3s= k8s.io/component-base v0.29.0/go.mod h1:sADonFTQ9Zc9yFLghpDpmNXEdHyQmFIGbiuZbqAXQ1M= +k8s.io/gengo v0.0.0-20190128074634-0689ccc1d7d6/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= +k8s.io/gengo v0.0.0-20200114144118-36b2048a9120/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= +k8s.io/klog v0.0.0-20181102134211-b9b56d5dfc92/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= +k8s.io/klog v0.3.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= +k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= +k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= k8s.io/klog/v2 v2.110.1 h1:U/Af64HJf7FcwMcXyKm2RPM22WZzyR7OSpYj5tg3cL0= k8s.io/klog/v2 v2.110.1/go.mod h1:YGtd1984u+GgbuZ7e08/yBuAfKLSO0+uR1Fhi6ExXjo= +k8s.io/kube-openapi v0.0.0-20200121204235-bf4fb3bd569c/go.mod h1:GRQhZsXIAJ1xR0C9bd8UpWHZ5plfAS9fzPjJuQ6JL3E= +k8s.io/kube-openapi v0.0.0-20200410145947-61e04a5be9a6/go.mod h1:GRQhZsXIAJ1xR0C9bd8UpWHZ5plfAS9fzPjJuQ6JL3E= k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00 h1:aVUu9fTY98ivBPKR9Y5w/AuzbMm96cd3YHRTU83I780= k8s.io/kube-openapi v0.0.0-20231010175941-2dd684a91f00/go.mod h1:AsvuZPBlUDVuCdzJ87iajxtXuR9oktsTctW/R9wwouA= k8s.io/kubectl v0.29.0 h1:Oqi48gXjikDhrBF67AYuZRTcJV4lg2l42GmvsP7FmYI= k8s.io/kubectl v0.29.0/go.mod h1:0jMjGWIcMIQzmUaMgAzhSELv5WtHo2a8pq67DtviAJs= +k8s.io/utils v0.0.0-20200324210504-a9aa75ae1b89/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= +k8s.io/utils v0.0.0-20200603063816-c1c6865ac451/go.mod h1:jPW/WVKK9YHAvNhRxK0md/EJ228hCsBRufyofKtW8HA= k8s.io/utils v0.0.0-20230726121419-3b25d923346b h1:sgn3ZU783SCgtaSJjpcVVlRqd6GSnlTLKgpAAttJvpI= k8s.io/utils v0.0.0-20230726121419-3b25d923346b/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= rsc.io/letsencrypt v0.0.3 h1:H7xDfhkaFFSYEJlKeq38RwX2jYcnTeHuDQyT+mMNMwM= rsc.io/letsencrypt v0.0.3/go.mod h1:buyQKZ6IXrRnB7TdkHP0RyEybLx18HHyOSoTyoOLqNY= +sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.0.7/go.mod h1:PHgbrJT7lCHcxMU+mDHEm+nx46H4zuuHZkDP6icnhu0= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.28.0 h1:TgtAeesdhpm2SGwkQasmbeqDo8th5wOBA5h/AjTKA4I= sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.28.0/go.mod h1:VHVDI/KrK4fjnV61bE2g3sA7tiETLn8sooImelsCx3Y= +sigs.k8s.io/controller-runtime v0.6.1/go.mod h1:XRYBPdbf5XJu9kpS84VJiZ7h/u1hF3gEORz0efEja7A= sigs.k8s.io/controller-runtime v0.16.3 h1:2TuvuokmfXvDUamSx1SuAOO3eTyye+47mJCigwG62c4= sigs.k8s.io/controller-runtime v0.16.3/go.mod h1:j7bialYoSn142nv9sCOJmQgDXQXxnroFU4VnX/brVJ0= +sigs.k8s.io/controller-tools v0.3.0/go.mod h1:enhtKGfxZD1GFEoMgP8Fdbu+uKQ/cq1/WGJhdVChfvI= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd/go.mod h1:B8JuhiUyNFVKdsE8h686QcCxMaH6HrOAZj4vswFpcB0= +sigs.k8s.io/kind v0.8.1/go.mod h1:oNKTxUVPYkV9lWzY6CVMNluVq8cBsyq+UgPJdvA3uu4= sigs.k8s.io/kustomize/api v0.13.5-0.20230601165947-6ce0bf390ce3 h1:XX3Ajgzov2RKUdc5jW3t5jwY7Bo7dcRm+tFxT+NfgY0= sigs.k8s.io/kustomize/api v0.13.5-0.20230601165947-6ce0bf390ce3/go.mod h1:9n16EZKMhXBNSiUC5kSdFQJkdH3zbxS/JoO619G1VAY= sigs.k8s.io/kustomize/kyaml v0.14.3-0.20230601165947-6ce0bf390ce3 h1:W6cLQc5pnqM7vh3b7HvGNfXrJ/xL6BDMS0v1V/HHg5U= sigs.k8s.io/kustomize/kyaml v0.14.3-0.20230601165947-6ce0bf390ce3/go.mod h1:JWP1Fj0VWGHyw3YUPjXSQnRnrwezrZSrApfX5S0nIag= +sigs.k8s.io/mcs-api v0.1.0 h1:edDbg0oRGfXw8TmZjKYep06LcJLv/qcYLidejnUp0PM= +sigs.k8s.io/mcs-api v0.1.0/go.mod h1:gGiAryeFNB4GBsq2LBmVqSgKoobLxt+p7ii/WG5QYYw= +sigs.k8s.io/structured-merge-diff/v3 v3.0.0-20200116222232-67a7b8c61874/go.mod h1:PlARxl6Hbt/+BC80dRLi1qAmnMqwqDg62YvvVkZjemw= +sigs.k8s.io/structured-merge-diff/v3 v3.0.0/go.mod h1:PlARxl6Hbt/+BC80dRLi1qAmnMqwqDg62YvvVkZjemw= sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4= sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08= +sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= +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= diff --git a/install.sh b/install.sh index 5801e5f5..8d91ebd8 100755 --- a/install.sh +++ b/install.sh @@ -21,8 +21,8 @@ fi echo "Downloading the latest release of Percona Everest CLI" -echo "https://github.com/percona/percona-everest-cli/releases/download/v0.5.0/everestctl-$os-$arch" -curl -sL https://github.com/percona/percona-everest-cli/releases/download/v0.5.0/everestctl-$os-$arch -o everestctl +echo "https://github.com/percona/percona-everest-cli/releases/download/latest/everestctl-$os-$arch" +curl -sL https://github.com/percona/percona-everest-cli/releases/download/latest/everestctl-$os-$arch -o everestctl chmod +x everestctl # If KUBECONFIG is set let the user know we are using it diff --git a/pkg/version/version.go b/pkg/version/version.go index de1cc2dc..7713f668 100644 --- a/pkg/version/version.go +++ b/pkg/version/version.go @@ -26,7 +26,7 @@ import ( ) const ( - devCatalogImage = "docker.io/percona/everest-catalog:latest" + devCatalogImage = "docker.io/perconalab/everest-catalog:latest" releaseCatalogImage = "docker.io/percona/everest-catalog:%s" devManifestURL = "https://raw.githubusercontent.com/percona/percona-everest-backend/main/deploy/quickstart-k8s.yaml" releaseManifestURL = "https://raw.githubusercontent.com/percona/percona-everest-backend/v%s/deploy/quickstart-k8s.yaml" From f67f6820ae6130463687cbc530589090a166313a Mon Sep 17 00:00:00 2001 From: Andrew Minkin Date: Fri, 29 Dec 2023 11:45:53 +0100 Subject: [PATCH 28/42] =?UTF-8?q?EVEREST-713=20monitoring=20shall=20be=20p?= =?UTF-8?q?rovisioned=20in=20the=20install=20namespace=20=E2=80=A6=20(#257?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * EVEREST-713 monitoring shall be provisioned in the install namespace only * Update pkg/monitoring/enable.go Co-authored-by: Diogo Recharte --------- Co-authored-by: Diogo Recharte --- pkg/kubernetes/kubernetes.go | 7 ++++--- pkg/monitoring/enable.go | 25 ++++++++++++++++++++----- 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/pkg/kubernetes/kubernetes.go b/pkg/kubernetes/kubernetes.go index 8f752873..85fa0265 100644 --- a/pkg/kubernetes/kubernetes.go +++ b/pkg/kubernetes/kubernetes.go @@ -73,11 +73,12 @@ const ( CatalogSource = "percona-everest-catalog" // OperatorGroup defines the name of the configuration for subscriptions. OperatorGroup = "percona-operators-group" + // EverestOperatorDeploymentName is the name of the deployment for everest operator. + EverestOperatorDeploymentName = "everest-operator-controller-manager" pxcDeploymentName = "percona-xtradb-cluster-operator" psmdbDeploymentName = "percona-server-mongodb-operator" postgresDeploymentName = "percona-postgresql-operator" - everestDeploymentName = "everest-operator-controller-manager" psmdbOperatorContainerName = "percona-server-mongodb-operator" pxcOperatorContainerName = "percona-xtradb-cluster-operator" everestOperatorContainerName = "manager" @@ -288,7 +289,7 @@ func (k *Kubernetes) GetPXCOperatorVersion(ctx context.Context) (string, error) // GetDBaaSOperatorVersion parses DBaaS operator version from operator deployment. func (k *Kubernetes) GetDBaaSOperatorVersion(ctx context.Context) (string, error) { - return k.getOperatorVersion(ctx, everestDeploymentName, everestOperatorContainerName) + return k.getOperatorVersion(ctx, EverestOperatorDeploymentName, everestOperatorContainerName) } // GetSecret returns secret by name. @@ -655,7 +656,7 @@ func (k *Kubernetes) InstallOperator(ctx context.Context, req InstallOperatorReq } deploymentName := req.Name if req.Name == "everest-operator" { - deploymentName = everestDeploymentName + deploymentName = EverestOperatorDeploymentName } if req.Name == "victoriametrics-operator" { deploymentName = "vm-operator-vm-operator" diff --git a/pkg/monitoring/enable.go b/pkg/monitoring/enable.go index 2b517039..7134151c 100644 --- a/pkg/monitoring/enable.go +++ b/pkg/monitoring/enable.go @@ -120,7 +120,7 @@ func (m *Monitoring) Run(ctx context.Context) error { if err := m.populateConfig(ctx); err != nil { return err } - if err := m.provisionNamespace(ctx); err != nil { + if err := m.checkNamespace(ctx); err != nil { return err } if err := m.provisionMonitoring(ctx); err != nil { @@ -132,7 +132,7 @@ func (m *Monitoring) Run(ctx context.Context) error { func (m *Monitoring) populateConfig(ctx context.Context) error { if !m.config.SkipWizard { - if err := m.runEverestWizard(ctx); err != nil { + if err := m.runEverestWizard(); err != nil { return err } if err := m.runMonitoringWizard(); err != nil { @@ -151,12 +151,27 @@ func (m *Monitoring) populateConfig(ctx context.Context) error { return nil } -// provisionNamespace provisions a namespace for Everest. -func (m *Monitoring) provisionNamespace(ctx context.Context) error { +// checkNamespace provisions a namespace for Everest. +func (m *Monitoring) checkNamespace(ctx context.Context) error { _, err := m.kubeClient.GetNamespace(ctx, m.config.Namespace) if err != nil && k8serrors.IsNotFound(err) { return fmt.Errorf("namespace %s is not found", m.config.Namespace) } + if err != nil { + return err + } + + _, err = m.kubeClient.GetDeployment(ctx, kubernetes.PerconaEverestDeploymentName, m.config.Namespace) + if err != nil && k8serrors.IsNotFound(err) { + return fmt.Errorf("no Everest installation exist in the %s namespace. Monitoring can be provisioned into the namespace where everest components are deployed", m.config.Namespace) + } + if err != nil { + return err + } + _, err = m.kubeClient.GetDeployment(ctx, kubernetes.EverestOperatorDeploymentName, m.config.Namespace) + if err != nil && k8serrors.IsNotFound(err) { + return fmt.Errorf("no Everest installation exist in the %s namespace. Monitoring can be provisioned into the namespace where everest components are deployed", m.config.Namespace) + } return err } @@ -309,7 +324,7 @@ func (m *Monitoring) configureEverestConnector() error { return nil } -func (m *Monitoring) runEverestWizard(ctx context.Context) error { +func (m *Monitoring) runEverestWizard() error { pURL := &survey.Input{ Message: "Everest URL endpoint", Default: m.config.EverestURL, From bde67b284fa7a60f0ca4509adfa096cee2099fc2 Mon Sep 17 00:00:00 2001 From: Oksana Grishchenko <91597950+oksana-grishchenko@users.noreply.github.com> Date: Wed, 17 Jan 2024 10:27:20 +0200 Subject: [PATCH 29/42] update codeowners (#267) --- .github/CODEOWNERS | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index fc56c0da..6506fd62 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1 +1 @@ -* @gen1us2k @recharte @oksana-grishchenko @michal-kralik +* @recharte @oksana-grishchenko @michal-kralik From 01656ba43c9ba86ec72317ee5d358391c88d0618 Mon Sep 17 00:00:00 2001 From: Diogo Recharte Date: Tue, 23 Jan 2024 11:03:45 +0000 Subject: [PATCH 30/42] EVEREST-622 remove deprecated commands (#269) * EVEREST-622 remove install operators subcommand * EVEREST-622 remove delete cluster subcommand * EVEREST-622 update everest-operator go mod * EVEREST-622 update everest-backend go mod --- commands/delete.go | 3 +- commands/delete/cluster.go | 63 -------------------------------------- commands/install.go | 12 -------- commands/root.go | 2 +- go.mod | 14 +++++---- go.sum | 32 +++++++++---------- 6 files changed, 26 insertions(+), 100 deletions(-) delete mode 100644 commands/delete/cluster.go diff --git a/commands/delete.go b/commands/delete.go index 2783f1e0..2bb599e6 100644 --- a/commands/delete.go +++ b/commands/delete.go @@ -28,8 +28,7 @@ func newDeleteCmd(l *zap.SugaredLogger) *cobra.Command { Use: "delete", } - // cmd.AddCommand(delete.NewMySQLCmd(l)) - cmd.AddCommand(delete.NewClusterCmd(l)) + cmd.AddCommand(delete.NewMySQLCmd(l)) return cmd } diff --git a/commands/delete/cluster.go b/commands/delete/cluster.go deleted file mode 100644 index 7c6ae2a2..00000000 --- a/commands/delete/cluster.go +++ /dev/null @@ -1,63 +0,0 @@ -// percona-everest-cli -// Copyright (C) 2023 Percona LLC -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - -// Package delete holds logic for delete command. -package delete //nolint:predeclared - -import ( - "os" - - "github.com/spf13/cobra" - "github.com/spf13/viper" - "go.uber.org/zap" -) - -// NewClusterCmd returns a new cluster command. -func NewClusterCmd(l *zap.SugaredLogger) *cobra.Command { - cmd := &cobra.Command{ - Use: "cluster", - Short: "Deprecated. Please use everestctl uninstall instead", - Run: func(cmd *cobra.Command, args []string) { - initClusterViperFlags(cmd) - l.Info("delete cluster is deprecated. Please use everestctl uninstall") - os.Exit(1) - }, - } - - initClusterFlags(cmd) - - return cmd -} - -func initClusterFlags(cmd *cobra.Command) { - cmd.Flags().StringP("kubeconfig", "k", "~/.kube/config", "Path to a kubeconfig") - cmd.Flags().String("namespace", "percona-everest", "Namespace into which Percona Everest components are deployed to") - cmd.Flags().String("name", "", "Kubernetes cluster name in Everest") - cmd.Flags().BoolP("assume-yes", "y", false, "Assume yes to all questions") - cmd.Flags().BoolP("force", "f", false, "Force removal in case there are database clusters running") - cmd.Flags().Bool("ignore-kubernetes-unavailable", false, "Remove cluster even if Kubernetes is not available") -} - -func initClusterViperFlags(cmd *cobra.Command) { - viper.BindEnv("kubeconfig") //nolint:errcheck,gosec - viper.BindPFlag("kubeconfig", cmd.Flags().Lookup("kubeconfig")) //nolint:errcheck,gosec - viper.BindPFlag("namespace", cmd.Flags().Lookup("namespace")) //nolint:errcheck,gosec - viper.BindPFlag("name", cmd.Flags().Lookup("name")) //nolint:errcheck,gosec - viper.BindPFlag("assume-yes", cmd.Flags().Lookup("assume-yes")) //nolint:errcheck,gosec - viper.BindPFlag("force", cmd.Flags().Lookup("force")) //nolint:errcheck,gosec - viper.BindPFlag( //nolint:errcheck,gosec - "ignore-kubernetes-unavailable", cmd.Flags().Lookup("ignore-kubernetes-unavailable"), - ) -} diff --git a/commands/install.go b/commands/install.go index 65f1e12e..24a5c223 100644 --- a/commands/install.go +++ b/commands/install.go @@ -17,7 +17,6 @@ package commands import ( - "log" "os" "github.com/spf13/cobra" @@ -53,17 +52,6 @@ func newInstallCmd(l *zap.SugaredLogger) *cobra.Command { } initInstallFlags(cmd) - oCmd := &cobra.Command{ - Use: "operators", - Short: "Deprecated. Please use everestctl install instead", - Run: func(cmd *cobra.Command, args []string) { - initInstallViperFlags(cmd) - log.Fatal("Command is deprecated. Please use `everestctl install` instead") - }, - } - initInstallFlags(oCmd) - cmd.AddCommand(oCmd) - return cmd } diff --git a/commands/root.go b/commands/root.go index df363d01..cbb78f3b 100644 --- a/commands/root.go +++ b/commands/root.go @@ -39,7 +39,7 @@ func NewRootCmd(l *zap.SugaredLogger) *cobra.Command { rootCmd.AddCommand(newInstallCmd(l)) // rootCmd.AddCommand(newProvisionCmd(l)) // rootCmd.AddCommand(newListCmd(l)) - rootCmd.AddCommand(newDeleteCmd(l)) + // rootCmd.AddCommand(newDeleteCmd(l)) rootCmd.AddCommand(newMonitoringCmd(l)) rootCmd.AddCommand(newTokenCmd(l)) rootCmd.AddCommand(newVersionCmd(l)) diff --git a/go.mod b/go.mod index f779ced3..02e4e5cc 100644 --- a/go.mod +++ b/go.mod @@ -9,13 +9,13 @@ require ( github.com/hashicorp/go-version v1.6.0 github.com/operator-framework/api v0.20.0 github.com/operator-framework/operator-lifecycle-manager v0.26.0 - github.com/percona/everest-operator v0.6.0-dev1.0.20231228161448-9554994bae64 - github.com/percona/percona-everest-backend v0.5.1-0.20231228162533-f91a4af5205c + github.com/percona/everest-operator v0.6.0-dev1.0.20240119104008-aeb868d82769 + github.com/percona/percona-everest-backend v0.5.1-0.20240123094558-a63eea5787bb github.com/spf13/cobra v1.8.0 github.com/spf13/viper v1.18.1 github.com/stretchr/testify v1.8.4 go.uber.org/zap v1.26.0 - golang.org/x/crypto v0.16.0 + golang.org/x/crypto v0.17.0 golang.org/x/sync v0.5.0 gopkg.in/yaml.v3 v3.0.1 gotest.tools v2.2.0+incompatible @@ -42,7 +42,7 @@ require ( github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect github.com/emicklei/go-restful/v3 v3.11.0 // indirect github.com/evanphx/json-patch v5.6.0+incompatible // indirect - github.com/evanphx/json-patch/v5 v5.6.0 // indirect + github.com/evanphx/json-patch/v5 v5.7.0 // indirect github.com/flosch/pongo2/v6 v6.0.0 // indirect github.com/fsnotify/fsnotify v1.7.0 // indirect github.com/getkin/kin-openapi v0.122.0 // indirect @@ -100,7 +100,7 @@ require ( github.com/operator-framework/operator-registry v1.30.1 // indirect github.com/pelletier/go-toml/v2 v2.1.0 // indirect github.com/percona/percona-backup-mongodb v1.8.1-0.20230920143330-3b1c2e263901 // indirect - github.com/percona/percona-postgresql-operator v0.0.0-20230629061704-21f8d7d89b98 // indirect + github.com/percona/percona-postgresql-operator v0.0.0-20231220140959-ad5eef722609 // indirect github.com/percona/percona-server-mongodb-operator v1.15.0 // indirect github.com/percona/percona-xtradb-cluster-operator v1.13.0 // indirect github.com/perimeterx/marshmallow v1.1.5 // indirect @@ -126,6 +126,8 @@ require ( github.com/xlab/treeprint v1.2.0 // indirect github.com/youmark/pkcs8 v0.0.0-20201027041543-1326539a0a0a // indirect go.mongodb.org/mongo-driver v1.12.1 // indirect + go.opentelemetry.io/otel v1.19.0 // indirect + go.opentelemetry.io/otel/trace v1.19.0 // indirect go.starlark.net v0.0.0-20230525235612-a134d8f9ddca // indirect go.uber.org/multierr v1.11.0 // indirect golang.org/x/exp v0.0.0-20230905200255-921286631fa9 // indirect @@ -152,5 +154,5 @@ require ( sigs.k8s.io/kustomize/kyaml v0.14.3-0.20230601165947-6ce0bf390ce3 // indirect sigs.k8s.io/mcs-api v0.1.0 // indirect sigs.k8s.io/structured-merge-diff/v4 v4.4.1 // indirect - sigs.k8s.io/yaml v1.3.0 // indirect + sigs.k8s.io/yaml v1.4.0 // indirect ) diff --git a/go.sum b/go.sum index 65f3f6b6..ee70a5cc 100644 --- a/go.sum +++ b/go.sum @@ -170,8 +170,8 @@ github.com/evanphx/json-patch v4.5.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLi github.com/evanphx/json-patch v5.6.0+incompatible h1:jBYDEEiFBPxA0v50tFdvOzQQTCvpL6mnFh5mB2/l16U= github.com/evanphx/json-patch v5.6.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch/v5 v5.0.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4= -github.com/evanphx/json-patch/v5 v5.6.0 h1:b91NhWfaz02IuVxO9faSllyAtNXHMPkC5J8sJCLunww= -github.com/evanphx/json-patch/v5 v5.6.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4= +github.com/evanphx/json-patch/v5 v5.7.0 h1:nJqP7uwL84RJInrohHfW0Fx3awjbm8qZeFv0nW9SYGc= +github.com/evanphx/json-patch/v5 v5.7.0/go.mod h1:VNkHZ/282BpEyt/tObQO8s5CMPmYYq14uClGH4abBuQ= github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/felixge/httpsnoop v1.0.1/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/felixge/httpsnoop v1.0.3 h1:s/nj+GCswXYzN5v2DpNMuMQYe+0DDwt5WVCU6CWBdXk= @@ -539,14 +539,14 @@ github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/9 github.com/pelletier/go-toml v1.7.0/go.mod h1:vwGMzjaWMwyfHwgIBhI2YUM4fB6nL6lVAvS1LBMMhTE= github.com/pelletier/go-toml/v2 v2.1.0 h1:FnwAJ4oYMvbT/34k9zzHuZNrhlz48GB3/s6at6/MHO4= github.com/pelletier/go-toml/v2 v2.1.0/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdUvyaeZurnPPDc= -github.com/percona/everest-operator v0.6.0-dev1.0.20231228161448-9554994bae64 h1:b7out0+6TFYcVwRCwdbVOhuljt6UMiyAx83dwaXQ/eY= -github.com/percona/everest-operator v0.6.0-dev1.0.20231228161448-9554994bae64/go.mod h1:ZO6jpaEcsJLoCRXAu53sZB/HQKaHEOe7o2jEKKg6YWc= +github.com/percona/everest-operator v0.6.0-dev1.0.20240119104008-aeb868d82769 h1:IrF61ks3spy9i7r7C94pcHGwf1HL1R4+pLP9rnU0g3s= +github.com/percona/everest-operator v0.6.0-dev1.0.20240119104008-aeb868d82769/go.mod h1:o84NcJlAImYMpKK9+PIjS4V8SSREt1uZOqNhHt5qXMg= github.com/percona/percona-backup-mongodb v1.8.1-0.20230920143330-3b1c2e263901 h1:BDgsZRCjEuxl2/z4yWBqB0s8d20shuIDks7/RVdZiLs= github.com/percona/percona-backup-mongodb v1.8.1-0.20230920143330-3b1c2e263901/go.mod h1:fZRCMpUqkWlLVdRKqqaj001LoVP2eo6F0ZhoMPeXDng= -github.com/percona/percona-everest-backend v0.5.1-0.20231228162533-f91a4af5205c h1:qC8E+kt/WzeTpMmWJE43BRLCtwA90Cl3/GiaZt9uzUA= -github.com/percona/percona-everest-backend v0.5.1-0.20231228162533-f91a4af5205c/go.mod h1:jA7zVzHpOuLJvef/qMeIzQRRMu7IEnorJi3IYMd2iPc= -github.com/percona/percona-postgresql-operator v0.0.0-20230629061704-21f8d7d89b98 h1:TBc6YKTrJm8rg1Z43vXLMniyi7hwMZqBaGdKN/fbXLI= -github.com/percona/percona-postgresql-operator v0.0.0-20230629061704-21f8d7d89b98/go.mod h1:Wbw7DyZtHKWJpy2kELRuRTlG9dW0CVAn8faT7POBjC4= +github.com/percona/percona-everest-backend v0.5.1-0.20240123094558-a63eea5787bb h1:PMkyTQoiMN2Tg7DeyfTYTOAe5wrZwNeHLfwt4h2p8Og= +github.com/percona/percona-everest-backend v0.5.1-0.20240123094558-a63eea5787bb/go.mod h1:10coAH1cUBk0Z3tHbYNTtN362I0i5VsHQxkwacZBaQA= +github.com/percona/percona-postgresql-operator v0.0.0-20231220140959-ad5eef722609 h1:+UOK4gcHrRgqjo4smgfwT7/0apF6PhAJdQIdAV4ub/M= +github.com/percona/percona-postgresql-operator v0.0.0-20231220140959-ad5eef722609/go.mod h1:znzhtSTF6moUOGNPzVpgfFEMaqIe/ijTSHY8BNDkiEA= github.com/percona/percona-server-mongodb-operator v1.15.0 h1:pcP9GMi9f05VFi8e/TQifBrR+cvOkYMiv1xAftkESBs= github.com/percona/percona-server-mongodb-operator v1.15.0/go.mod h1:D4HOWd6TXRg3kfJ3sgm1LkbMe0QheueGtGCyiUflwlE= github.com/percona/percona-xtradb-cluster-operator v1.13.0 h1:KhXkjK3hRCLdEtbcuc9ynKiY7fJ1IxRqZTLgd6R6xz0= @@ -705,8 +705,8 @@ go.mongodb.org/mongo-driver v1.12.1/go.mod h1:/rGBTebI3XYboVmgz+Wv3Bcbl3aD0QF9zl go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.44.0 h1:KfYpVmrjI7JuToy5k8XV3nkapjWx48k4E4JOtVstzQI= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.44.0/go.mod h1:SeQhzAEccGVZVEy7aH87Nh0km+utSpo1pTv6eMMop48= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.45.0 h1:x8Z78aZx8cOF0+Kkazoc7lwUNMGy0LrzEMxTm4BbTxg= +go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.45.0/go.mod h1:62CPTSry9QZtOaSsE3tOzhx6LzDhHnXJ6xHeMNNiM6Q= go.opentelemetry.io/otel v1.19.0 h1:MuS/TNf4/j4IXsZuJegVzI1cwut7Qc00344rgH7p8bs= go.opentelemetry.io/otel v1.19.0/go.mod h1:i0QyjOq3UPoTzff0PJB2N66fb4S0+rSbSB15/oyH9fY= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.19.0 h1:Mne5On7VWdx7omSrSSZvM4Kw7cS7NQkOOmLcgscI51U= @@ -746,8 +746,8 @@ golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.16.0 h1:mMMrFzRSCF0GvB7Ne27XVtVAaXLrPmgPC7/v0tkwHaY= -golang.org/x/crypto v0.16.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= +golang.org/x/crypto v0.17.0 h1:r8bRNjWL3GshPW3gkd+RpvzWrZAwPS49OmTGZ/uhM4k= +golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20230905200255-921286631fa9 h1:GoHiUyI/Tp2nVkLI2mCxVkOjsbSXD66ic0XW0js0R9g= golang.org/x/exp v0.0.0-20230905200255-921286631fa9/go.mod h1:S2oDrQGGwySpoQPVqRShND87VCbxmc6bL1Yd2oYrm6k= @@ -954,8 +954,8 @@ gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/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.5.0 h1:Ljk6PdHdOhAb5aDMWXjDLMMhph+BpztA4v1QdqEW2eY= -gotest.tools/v3 v3.5.0/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU= +gotest.tools/v3 v3.5.1 h1:EENdUnS3pdur5nybKYIh2Vfgc8IUNBjxDPSjtiJcOzU= +gotest.tools/v3 v3.5.1/go.mod h1:isy3WKz7GK6uNw/sbHzfKBLvlvXwUyV06n6brMxxopU= 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-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= @@ -1029,5 +1029,5 @@ sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+s sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08= sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= 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= +sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E= +sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY= From e54d27c189418eb8c2d8c796ab40b672ed6388d9 Mon Sep 17 00:00:00 2001 From: Michal Kralik Date: Thu, 25 Jan 2024 15:57:20 +0100 Subject: [PATCH 31/42] EVEREST-778: fix everest URL construction (#270) --- go.mod | 2 +- go.sum | 4 ++-- pkg/everest/client/client.go | 9 +++++++-- 3 files changed, 10 insertions(+), 5 deletions(-) diff --git a/go.mod b/go.mod index 02e4e5cc..4645646b 100644 --- a/go.mod +++ b/go.mod @@ -10,7 +10,7 @@ require ( github.com/operator-framework/api v0.20.0 github.com/operator-framework/operator-lifecycle-manager v0.26.0 github.com/percona/everest-operator v0.6.0-dev1.0.20240119104008-aeb868d82769 - github.com/percona/percona-everest-backend v0.5.1-0.20240123094558-a63eea5787bb + github.com/percona/percona-everest-backend v0.5.1-0.20240123134200-9c8e5d2d31d2 github.com/spf13/cobra v1.8.0 github.com/spf13/viper v1.18.1 github.com/stretchr/testify v1.8.4 diff --git a/go.sum b/go.sum index ee70a5cc..2be4f08a 100644 --- a/go.sum +++ b/go.sum @@ -543,8 +543,8 @@ github.com/percona/everest-operator v0.6.0-dev1.0.20240119104008-aeb868d82769 h1 github.com/percona/everest-operator v0.6.0-dev1.0.20240119104008-aeb868d82769/go.mod h1:o84NcJlAImYMpKK9+PIjS4V8SSREt1uZOqNhHt5qXMg= github.com/percona/percona-backup-mongodb v1.8.1-0.20230920143330-3b1c2e263901 h1:BDgsZRCjEuxl2/z4yWBqB0s8d20shuIDks7/RVdZiLs= github.com/percona/percona-backup-mongodb v1.8.1-0.20230920143330-3b1c2e263901/go.mod h1:fZRCMpUqkWlLVdRKqqaj001LoVP2eo6F0ZhoMPeXDng= -github.com/percona/percona-everest-backend v0.5.1-0.20240123094558-a63eea5787bb h1:PMkyTQoiMN2Tg7DeyfTYTOAe5wrZwNeHLfwt4h2p8Og= -github.com/percona/percona-everest-backend v0.5.1-0.20240123094558-a63eea5787bb/go.mod h1:10coAH1cUBk0Z3tHbYNTtN362I0i5VsHQxkwacZBaQA= +github.com/percona/percona-everest-backend v0.5.1-0.20240123134200-9c8e5d2d31d2 h1:EVXrbcJ1g+Ye5qyph1unuXsWYSeSU9WujYMk/rmmkIc= +github.com/percona/percona-everest-backend v0.5.1-0.20240123134200-9c8e5d2d31d2/go.mod h1:10coAH1cUBk0Z3tHbYNTtN362I0i5VsHQxkwacZBaQA= github.com/percona/percona-postgresql-operator v0.0.0-20231220140959-ad5eef722609 h1:+UOK4gcHrRgqjo4smgfwT7/0apF6PhAJdQIdAV4ub/M= github.com/percona/percona-postgresql-operator v0.0.0-20231220140959-ad5eef722609/go.mod h1:znzhtSTF6moUOGNPzVpgfFEMaqIe/ijTSHY8BNDkiEA= github.com/percona/percona-server-mongodb-operator v1.15.0 h1:pcP9GMi9f05VFi8e/TQifBrR+cvOkYMiv1xAftkESBs= diff --git a/pkg/everest/client/client.go b/pkg/everest/client/client.go index fdca4bd9..d77a9bee 100644 --- a/pkg/everest/client/client.go +++ b/pkg/everest/client/client.go @@ -23,6 +23,7 @@ import ( "fmt" "io" "net/http" + "net/url" "github.com/percona/percona-everest-backend/client" ) @@ -43,9 +44,13 @@ func NewEverest(everestClient *client.Client) *Everest { } // NewEverestFromURL returns a new Everest from a provided URL. -func NewEverestFromURL(url, everestPwd string) (*Everest, error) { +func NewEverestFromURL(rawURL, everestPwd string) (*Everest, error) { + u, err := url.Parse(rawURL) + if err != nil { + return nil, errors.Join(err, errors.New("could not parse Everest URL")) + } everestCl, err := client.NewClient( - fmt.Sprintf("%s/v1", url), + u.JoinPath("v1").String(), client.WithRequestEditorFn(func(ctx context.Context, req *http.Request) error { req.Header.Set("Cookie", fmt.Sprintf("everest_token=%s", everestPwd)) return nil From dd45001ef717f8e4cd6aeefa64897c06fce35f62 Mon Sep 17 00:00:00 2001 From: Chetan Shivashankar <60964203+cshiv@users.noreply.github.com> Date: Mon, 29 Jan 2024 01:08:40 +0530 Subject: [PATCH 32/42] Adding metrics for custom resources (#116) * Adding metrics for custom resources * Separate manifests into individual files * Update everest-operator go mod * Update percona-everest-backend go mod --------- Co-authored-by: Michal Kralik Co-authored-by: Oksana Grishchenko <91597950+oksana-grishchenko@users.noreply.github.com> Co-authored-by: Diogo Recharte --- ...scrape.yaml => vmnodescrape-cadvisor.yaml} | 0 .../crs/vmnodescrape-kubelet.yaml | 34 + .../kube-state-metrics/cluster-role.yaml | 7 - .../kube-state-metrics/configmap.yaml | 585 ++++++++++++++++++ .../kube-state-metrics/deployment.yaml | 8 + go.mod | 4 +- go.sum | 8 +- pkg/kubernetes/kubernetes.go | 3 +- 8 files changed, 635 insertions(+), 14 deletions(-) rename data/crds/victoriametrics/crs/{vmnodescrape.yaml => vmnodescrape-cadvisor.yaml} (100%) create mode 100644 data/crds/victoriametrics/crs/vmnodescrape-kubelet.yaml create mode 100644 data/crds/victoriametrics/kube-state-metrics/configmap.yaml diff --git a/data/crds/victoriametrics/crs/vmnodescrape.yaml b/data/crds/victoriametrics/crs/vmnodescrape-cadvisor.yaml similarity index 100% rename from data/crds/victoriametrics/crs/vmnodescrape.yaml rename to data/crds/victoriametrics/crs/vmnodescrape-cadvisor.yaml diff --git a/data/crds/victoriametrics/crs/vmnodescrape-kubelet.yaml b/data/crds/victoriametrics/crs/vmnodescrape-kubelet.yaml new file mode 100644 index 00000000..24901228 --- /dev/null +++ b/data/crds/victoriametrics/crs/vmnodescrape-kubelet.yaml @@ -0,0 +1,34 @@ +apiVersion: operator.victoriametrics.com/v1beta1 +kind: VMNodeScrape +metadata: + labels: + app.kubernetes.io/managed-by: everest + everest.percona.com/type: monitoring + name: pmm-vm-kubelet-metrics + namespace: default +spec: + bearerTokenFile: /var/run/secrets/kubernetes.io/serviceaccount/token + honorLabels: true + interval: 30s + metricRelabelConfigs: + - action: labeldrop + regex: (uid) + - action: labeldrop + regex: (id|name) + - action: drop + regex: (rest_client_request_duration_seconds_bucket|rest_client_request_duration_seconds_sum|rest_client_request_duration_seconds_count) + source_labels: + - __name__ + relabelConfigs: + - action: labelmap + regex: __meta_kubernetes_node_label_(.+) + - sourceLabels: + - __metrics_path__ + targetLabel: metrics_path + - replacement: kubelet + targetLabel: job + scheme: https + scrapeTimeout: 5s + tlsConfig: + caFile: /var/run/secrets/kubernetes.io/serviceaccount/ca.crt + insecureSkipVerify: true diff --git a/data/crds/victoriametrics/kube-state-metrics/cluster-role.yaml b/data/crds/victoriametrics/kube-state-metrics/cluster-role.yaml index f6ee3ede..43838c14 100644 --- a/data/crds/victoriametrics/kube-state-metrics/cluster-role.yaml +++ b/data/crds/victoriametrics/kube-state-metrics/cluster-role.yaml @@ -144,7 +144,6 @@ rules: - perconaxtradbclusterrestores - perconaxtradbclusterrestores/status verbs: - - get - list - watch - apiGroups: @@ -157,7 +156,6 @@ rules: - perconaservermongodbrestores - perconaservermongodbrestores/status verbs: - - get - list - watch - apiGroups: @@ -169,12 +167,7 @@ rules: - perconapgclusters - perconapgrestores - perconapgbackups - - pgclusters - - pgpolicies - - pgreplicas - - pgtasks verbs: - - get - list - watch - apiGroups: diff --git a/data/crds/victoriametrics/kube-state-metrics/configmap.yaml b/data/crds/victoriametrics/kube-state-metrics/configmap.yaml new file mode 100644 index 00000000..8070e755 --- /dev/null +++ b/data/crds/victoriametrics/kube-state-metrics/configmap.yaml @@ -0,0 +1,585 @@ +apiVersion: v1 +kind: ConfigMap +metadata: + name: customresource-config-ksm + #namespace: default +data: + config: | + kind: CustomResourceStateMetrics + spec: + resources: + - groupVersionKind: + group: pxc.percona.com + version: v1 + kind: PerconaXtraDBCluster + labelsFromPath: + name: + - metadata + - name + namespace: + - metadata + - namespace + metricNamePrefix: kube_pxc + metrics: + - name: info + help: "Information of PXC cluster on k8s" + each: + type: Info + info: + labelsFromPath: + version: + - spec + - crVersion + - name: pitr_enabled + help: "PITR enabled" + each: + type: Gauge + gauge: + path: + - spec + - backup + - pitr + - enabled + - name: status_state + help: "PXC state" + each: + type: StateSet + stateSet: + labelName: state + path: + - status + - state + list: + - unknown + - ready + - initializing + - error + - paused + - name: status_pxc_replicas + help: "PXC Replica Status" + each: + type: Gauge + gauge: + nilIsZero: true + path: + - status + - pxc + - size + - name: status_pxc_replicas_ready + help: "Number of ready PXC replicas" + each: + type: Gauge + gauge: + nilIsZero: true + path: + - status + - pxc + - ready + - name: status_haproxy_replicas + help: "HAProxy Replica Status" + each: + type: Gauge + gauge: + nilIsZero: true + path: + - status + - haproxy + - size + - name: status_haproxy_replicas_ready + help: "Number of ready HAProxy replicas" + each: + type: Gauge + gauge: + nilIsZero: true + path: + - status + - haproxy + - ready + - name: status_proxysql_replicas + help: "ProxySQL Replica Status" + each: + type: Gauge + gauge: + nilIsZero: true + path: + - status + - proxysql + - size + - name: status_proxysql_replicas_ready + help: "Number of ready ProxySQL replicas" + each: + type: Gauge + gauge: + nilIsZero: true + path: + - status + - proxysql + - ready + + - groupVersionKind: + group: pxc.percona.com + version: v1 + kind: PerconaXtraDBClusterBackup + labelsFromPath: + name: + - metadata + - name + namespace: + - metadata + - namespace + metricNamePrefix: kube_pxc_backup + metrics: + - name: info + help: "Information of PXC cluster on k8s" + each: + type: Info + info: + labelsFromPath: + cluster: + - spec + - pxcCluster + storage: + - spec + - storageName + - name: status_state + help: "PXC Backup state" + each: + type: StateSet + stateSet: + labelName: state + path: + - status + - state + list: + - Starting + - Running + - Failed + - Succeeded + - name: status_completed + help: "Time when PXC Backup was completed" + each: + type: Gauge + gauge: + path: + - status + - completed + + - groupVersionKind: + group: pxc.percona.com + version: v1 + kind: PerconaXtraDBClusterRestore + labelsFromPath: + name: + - metadata + - name + namespace: + - metadata + - namespace + metricNamePrefix: kube_pxc_restore + metrics: + - name: info + help: "Information of PXC cluster on k8s" + each: + type: Info + info: + labelsFromPath: + cluster: + - spec + - pxcCluster + backup: + - spec + - backupName + - name: status_state + help: "PXC Restore state" + each: + type: StateSet + stateSet: + labelName: state + path: + - status + - state + list: + - Starting + - "Stopping Cluster" + - Restoring + - "Starting Cluster" + - "Point-in-time recovering" + - Failed + - Succeeded + - name: status_completed + help: "Time when PXC Restore was completed" + each: + type: Gauge + gauge: + path: + - status + - completed + - groupVersionKind: + group: psmdb.percona.com + version: v1 + kind: PerconaServerMongoDB + labelsFromPath: + name: + - metadata + - name + namespace: + - metadata + - namespace + metricNamePrefix: kube_psmdb + metrics: + - name: info + help: "Information of PSMDB cluster" + each: + type: Info + info: + labelsFromPath: + version: + - spec + - crVersion + - name: pitr_enabled + help: "PITR enabled" + each: + type: Gauge + gauge: + path: + - spec + - backup + - pitr + - enabled + - name: sharding_enabled + help: "Sharding enabled" + each: + type: Gauge + gauge: + path: + - spec + - sharding + - enabled + - name: status_state + help: "PSMDB state" + each: + type: StateSet + stateSet: + labelName: state + path: + - status + - state + list: + - stopping + - ready + - initializing + - error + - paused + - name: status_mongos + help: "Mongos state" + each: + type: StateSet + stateSet: + labelName: state + path: + - status + - mongos + - status + list: + - stopping + - ready + - initializing + - error + - paused + - name: status_mongos_replicas + help: "Mongos Replica Status" + each: + type: Gauge + gauge: + nilIsZero: true + path: + - status + - mongos + - size + - name: status_mongos_replicas_ready + help: "Mongos Replica Ready" + each: + type: Gauge + gauge: + nilIsZero: true + path: + - status + - mongos + - ready + - groupVersionKind: + group: psmdb.percona.com + version: v1 + kind: PerconaServerMongoDBBackup + labelsFromPath: + name: + - metadata + - name + namespace: + - metadata + - namespace + metricNamePrefix: kube_psmdb_backup + metrics: + - name: info + help: "Information of PSMDB Backup" + each: + type: Info + info: + labelsFromPath: + cluster: + - spec + - clusterName + storage: + - spec + - storageName + - name: status_state + help: "PSMDB Backup state" + each: + type: StateSet + stateSet: + labelName: state + path: + - status + - state + list: + - waiting + - requested + - rejected + - running + - error + - ready + - name: type + help: "PSMDB Backup Type Physical/Logical/Incremental" + each: + type: StateSet + stateSet: + labelName: type + path: + - status + - type + list: + - physical + - incremental + - logical + - name: status_start + help: "PSMDB Backup Start Time" + each: + type: Gauge + gauge: + path: + - status + - start + - name: status_completed + help: "PSMDB Backup Completed Time" + each: + type: Gauge + gauge: + path: + - status + - completed + - groupVersionKind: + group: psmdb.percona.com + version: v1 + kind: PerconaServerMongoDBRestore + labelsFromPath: + name: + - metadata + - name + namespace: + - metadata + - namespace + metricNamePrefix: kube_psmdb_restore + metrics: + - name: info + help: "Information of PSMDB Restore" + each: + type: Info + info: + labelsFromPath: + cluster: + - spec + - clusterName + storage: + - spec + - backupName + - name: status_state + help: "PSMDB Restore state" + each: + type: StateSet + stateSet: + labelName: state + path: + - status + - state + list: + - waiting + - requested + - rejected + - running + - error + - ready + - name: status_completed + help: "PSMDB Restore Completed Time" + each: + type: Gauge + gauge: + path: + - status + - completed + - groupVersionKind: + group: pgv2.percona.com + version: v2 + kind: PerconaPGCluster + labelsFromPath: + name: + - metadata + - name + namespace: + - metadata + - namespace + metricNamePrefix: kube_pg + metrics: + - name: info + help: "Information of PG cluster" + each: + type: Info + info: + labelsFromPath: + version: + - spec + - crVersion + postgresVersion: + - spec + - postgresVersion + - name: status_state + help: "PG state" + each: + type: StateSet + stateSet: + labelName: state + path: + - status + - state + list: + - stopping + - ready + - initializing + - error + - paused + - name: status_pgbouncer_replicas + help: "PG Bouncer Replica Status" + each: + type: Gauge + gauge: + nilIsZero: true + path: + - status + - pgbouncer + - size + - name: status_pgbouncer_replicas_ready + help: "PG Bouncer Replica in Ready State" + each: + type: Gauge + gauge: + nilIsZero: true + path: + - status + - pgbouncer + - ready + - name: status_postgres_replicas + help: "Postgres Replica Status" + each: + type: Gauge + gauge: + nilIsZero: true + path: + - status + - postgres + - size + - name: status_postgres_replicas_ready + help: "Postgres Replica in Ready State" + each: + type: Gauge + gauge: + nilIsZero: true + path: + - status + - postgres + - ready + - groupVersionKind: + group: pgv2.percona.com + version: v2 + kind: PerconaPGBackup + labelsFromPath: + name: + - metadata + - name + namespace: + - metadata + - namespace + metricNamePrefix: kube_pg_backup + metrics: + - name: info + help: "Information of PG backup " + each: + type: Info + info: + labelsFromPath: + cluster: + - spec + - pgCluster + repo: + - spec + - repoName + - name: status_state + help: "PG Backup state" + each: + type: StateSet + stateSet: + labelName: state + path: + - status + - state + list: + - Starting + - Running + - Failed + - Succeeded + - groupVersionKind: + group: pgv2.percona.com + version: v2 + kind: PerconaPGRestore + labelsFromPath: + name: + - metadata + - name + namespace: + - metadata + - namespace + metricNamePrefix: kube_pg_restore + metrics: + - name: info + help: "Information of PG restore" + each: + type: Info + info: + labelsFromPath: + cluster: + - spec + - pgCluster + repo: + - spec + - repoName + - name: status_state + help: "PG Restore state" + each: + type: StateSet + stateSet: + labelName: state + path: + - status + - state + list: + - Starting + - Running + - Failed + - Succeeded diff --git a/data/crds/victoriametrics/kube-state-metrics/deployment.yaml b/data/crds/victoriametrics/kube-state-metrics/deployment.yaml index 44e16234..bbb9e7d0 100644 --- a/data/crds/victoriametrics/kube-state-metrics/deployment.yaml +++ b/data/crds/victoriametrics/kube-state-metrics/deployment.yaml @@ -21,11 +21,19 @@ spec: app.kubernetes.io/name: kube-state-metrics app.kubernetes.io/version: 2.10.1 spec: + volumes: + - configMap: + name: customresource-config-ksm + name: cr-config automountServiceAccountToken: true containers: - image: registry.k8s.io/kube-state-metrics/kube-state-metrics:v2.10.1 + volumeMounts: + - mountPath: /go/src/k8s.io/kube-state-metrics/ + name: cr-config args: - --metric-labels-allowlist=pods=[app.kubernetes.io/component,app.kubernetes.io/instance,app.kubernetes.io/managed-by,app.kubernetes.io/name,app.kubernetes.io/part-of],persistentvolumeclaims=[app.kubernetes.io/component,app.kubernetes.io/instance,app.kubernetes.io/managed-by,app.kubernetes.io/name,app.kubernetes.io/part-of],jobs=[app.kubernetes.io/component,app.kubernetes.io/instance,app.kubernetes.io/managed-by,app.kubernetes.io/name,app.kubernetes.io/part-of] + - --custom-resource-state-config-file=/go/src/k8s.io/kube-state-metrics/config livenessProbe: httpGet: path: /healthz diff --git a/go.mod b/go.mod index 4645646b..ff61ea3d 100644 --- a/go.mod +++ b/go.mod @@ -9,8 +9,8 @@ require ( github.com/hashicorp/go-version v1.6.0 github.com/operator-framework/api v0.20.0 github.com/operator-framework/operator-lifecycle-manager v0.26.0 - github.com/percona/everest-operator v0.6.0-dev1.0.20240119104008-aeb868d82769 - github.com/percona/percona-everest-backend v0.5.1-0.20240123134200-9c8e5d2d31d2 + github.com/percona/everest-operator v0.6.0-dev1.0.20240125162053-e43000fbf0b8 + github.com/percona/percona-everest-backend v0.5.1-0.20240125151620-f38d8bb174fa github.com/spf13/cobra v1.8.0 github.com/spf13/viper v1.18.1 github.com/stretchr/testify v1.8.4 diff --git a/go.sum b/go.sum index 2be4f08a..599970eb 100644 --- a/go.sum +++ b/go.sum @@ -539,12 +539,12 @@ github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/9 github.com/pelletier/go-toml v1.7.0/go.mod h1:vwGMzjaWMwyfHwgIBhI2YUM4fB6nL6lVAvS1LBMMhTE= github.com/pelletier/go-toml/v2 v2.1.0 h1:FnwAJ4oYMvbT/34k9zzHuZNrhlz48GB3/s6at6/MHO4= github.com/pelletier/go-toml/v2 v2.1.0/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdUvyaeZurnPPDc= -github.com/percona/everest-operator v0.6.0-dev1.0.20240119104008-aeb868d82769 h1:IrF61ks3spy9i7r7C94pcHGwf1HL1R4+pLP9rnU0g3s= -github.com/percona/everest-operator v0.6.0-dev1.0.20240119104008-aeb868d82769/go.mod h1:o84NcJlAImYMpKK9+PIjS4V8SSREt1uZOqNhHt5qXMg= +github.com/percona/everest-operator v0.6.0-dev1.0.20240125162053-e43000fbf0b8 h1:nXu+L8fCl+vb9i24zqBCA5AjOMeeEGBn6M/KqWlmrCM= +github.com/percona/everest-operator v0.6.0-dev1.0.20240125162053-e43000fbf0b8/go.mod h1:o84NcJlAImYMpKK9+PIjS4V8SSREt1uZOqNhHt5qXMg= github.com/percona/percona-backup-mongodb v1.8.1-0.20230920143330-3b1c2e263901 h1:BDgsZRCjEuxl2/z4yWBqB0s8d20shuIDks7/RVdZiLs= github.com/percona/percona-backup-mongodb v1.8.1-0.20230920143330-3b1c2e263901/go.mod h1:fZRCMpUqkWlLVdRKqqaj001LoVP2eo6F0ZhoMPeXDng= -github.com/percona/percona-everest-backend v0.5.1-0.20240123134200-9c8e5d2d31d2 h1:EVXrbcJ1g+Ye5qyph1unuXsWYSeSU9WujYMk/rmmkIc= -github.com/percona/percona-everest-backend v0.5.1-0.20240123134200-9c8e5d2d31d2/go.mod h1:10coAH1cUBk0Z3tHbYNTtN362I0i5VsHQxkwacZBaQA= +github.com/percona/percona-everest-backend v0.5.1-0.20240125151620-f38d8bb174fa h1:m1z+ecvHqTbEcazHm3exh4izP149TP/WwcCuWTMOih4= +github.com/percona/percona-everest-backend v0.5.1-0.20240125151620-f38d8bb174fa/go.mod h1:kwa+FWzO3Zvrz6I1ikyg7DVct+3GQUrCHqmAeYTBRtQ= github.com/percona/percona-postgresql-operator v0.0.0-20231220140959-ad5eef722609 h1:+UOK4gcHrRgqjo4smgfwT7/0apF6PhAJdQIdAV4ub/M= github.com/percona/percona-postgresql-operator v0.0.0-20231220140959-ad5eef722609/go.mod h1:znzhtSTF6moUOGNPzVpgfFEMaqIe/ijTSHY8BNDkiEA= github.com/percona/percona-server-mongodb-operator v1.15.0 h1:pcP9GMi9f05VFi8e/TQifBrR+cvOkYMiv1xAftkESBs= diff --git a/pkg/kubernetes/kubernetes.go b/pkg/kubernetes/kubernetes.go index 85fa0265..117a7962 100644 --- a/pkg/kubernetes/kubernetes.go +++ b/pkg/kubernetes/kubernetes.go @@ -818,7 +818,8 @@ func (k *Kubernetes) victoriaMetricsCRDFiles() []string { "crds/victoriametrics/crs/vmagent_rbac_account.yaml", "crds/victoriametrics/crs/vmagent_rbac_role.yaml", "crds/victoriametrics/crs/vmagent_rbac_role_binding.yaml", - "crds/victoriametrics/crs/vmnodescrape.yaml", + "crds/victoriametrics/crs/vmnodescrape-cadvisor.yaml", + "crds/victoriametrics/crs/vmnodescrape-kubelet.yaml", "crds/victoriametrics/crs/vmpodscrape.yaml", "crds/victoriametrics/kube-state-metrics/service-account.yaml", "crds/victoriametrics/kube-state-metrics/cluster-role.yaml", From a6239a08357f796ff24bbabf608ca25d58f140a4 Mon Sep 17 00:00:00 2001 From: Diogo Recharte Date: Sun, 28 Jan 2024 22:04:04 +0000 Subject: [PATCH 33/42] Fix kube-state-metrics missing configmap --- pkg/kubernetes/kubernetes.go | 1 + 1 file changed, 1 insertion(+) diff --git a/pkg/kubernetes/kubernetes.go b/pkg/kubernetes/kubernetes.go index 117a7962..1781e443 100644 --- a/pkg/kubernetes/kubernetes.go +++ b/pkg/kubernetes/kubernetes.go @@ -824,6 +824,7 @@ func (k *Kubernetes) victoriaMetricsCRDFiles() []string { "crds/victoriametrics/kube-state-metrics/service-account.yaml", "crds/victoriametrics/kube-state-metrics/cluster-role.yaml", "crds/victoriametrics/kube-state-metrics/cluster-role-binding.yaml", + "crds/victoriametrics/kube-state-metrics/configmap.yaml", "crds/victoriametrics/kube-state-metrics/deployment.yaml", "crds/victoriametrics/kube-state-metrics/service.yaml", "crds/victoriametrics/kube-state-metrics.yaml", From 7b16f8ac67bea738afcb14351b6271bf3af6e2e0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 2 Feb 2024 11:17:28 +0000 Subject: [PATCH 34/42] Bump github.com/reviewdog/reviewdog from 0.15.0 to 0.17.0 in /tools (#273) --- tools/go.mod | 37 +++++++++++----------- tools/go.sum | 89 +++++++++++++++++++++++----------------------------- 2 files changed, 59 insertions(+), 67 deletions(-) diff --git a/tools/go.mod b/tools/go.mod index 131cb0fa..0fafe0b5 100644 --- a/tools/go.mod +++ b/tools/go.mod @@ -7,7 +7,7 @@ require ( github.com/deepmap/oapi-codegen v1.16.2 github.com/golangci/golangci-lint v1.55.2 github.com/quasilyte/go-consistent v0.6.0 - github.com/reviewdog/reviewdog v0.15.0 + github.com/reviewdog/reviewdog v0.17.0 github.com/vburenin/ifacemaker v1.2.1 github.com/vektra/mockery/v2 v2.38.0 golang.org/x/tools v0.16.1 @@ -20,7 +20,8 @@ require ( cloud.google.com/go v0.110.7 // indirect cloud.google.com/go/compute v1.23.0 // indirect cloud.google.com/go/compute/metadata v0.2.3 // indirect - cloud.google.com/go/datastore v1.14.0 // indirect + cloud.google.com/go/datastore v1.15.0 // indirect + code.gitea.io/sdk/gitea v0.17.1 // indirect github.com/4meepo/tagalign v1.3.3 // indirect github.com/Abirdcfly/dupword v0.0.13 // indirect github.com/Antonboom/errname v0.1.12 // indirect @@ -31,7 +32,6 @@ require ( github.com/GaijinEntertainment/go-exhaustruct/v3 v3.1.0 // indirect github.com/Masterminds/semver v1.5.0 // indirect github.com/OpenPeeDeeP/depguard/v2 v2.1.0 // indirect - github.com/ProtonMail/go-crypto v0.0.0-20230528122434-6f98819771a1 // indirect github.com/alecthomas/go-check-sumtype v0.1.3 // indirect github.com/alexkohler/nakedret/v2 v2.0.2 // indirect github.com/alexkohler/prealloc v1.0.0 // indirect @@ -42,7 +42,7 @@ require ( github.com/bkielbasa/cyclop v1.2.1 // indirect github.com/blizzy78/varnamelen v0.8.0 // indirect github.com/bombsimon/wsl/v3 v3.4.0 // indirect - github.com/bradleyfalzon/ghinstallation/v2 v2.6.0 // indirect + github.com/bradleyfalzon/ghinstallation/v2 v2.9.0 // indirect github.com/breml/bidichk v0.2.7 // indirect github.com/breml/errchkjson v0.3.6 // indirect github.com/butuzov/ireturn v0.2.2 // indirect @@ -53,9 +53,9 @@ require ( github.com/charithe/durationcheck v0.0.10 // indirect github.com/chavacava/garif v0.1.0 // indirect github.com/chigopher/pathlib v1.0.0 // indirect - github.com/cloudflare/circl v1.3.3 // indirect github.com/curioswitch/go-reassign v0.2.0 // indirect github.com/davecgh/go-spew v1.1.1 // indirect + github.com/davidmz/go-pageant v1.0.2 // indirect github.com/denis-tingaikin/go-header v0.4.3 // indirect github.com/esimonov/ifshort v1.0.4 // indirect github.com/ettle/strcase v0.1.1 // indirect @@ -67,6 +67,7 @@ require ( github.com/getkin/kin-openapi v0.118.0 // indirect github.com/ghostiam/protogetter v0.2.3 // indirect github.com/go-critic/go-critic v0.9.0 // indirect + github.com/go-fed/httpsig v1.1.0 // indirect github.com/go-openapi/jsonpointer v0.20.0 // indirect github.com/go-openapi/swag v0.22.4 // indirect github.com/go-toolsmith/astcast v1.1.0 // indirect @@ -94,8 +95,8 @@ require ( github.com/golangci/revgrep v0.5.2 // indirect github.com/golangci/unconvert v0.0.0-20180507085042-28b1c447d1f4 // indirect github.com/google/go-cmp v0.6.0 // indirect - github.com/google/go-github/v53 v53.2.0 // indirect - github.com/google/go-github/v55 v55.0.0 // indirect + github.com/google/go-github/v57 v57.0.0 // indirect + github.com/google/go-github/v58 v58.0.0 // indirect github.com/google/go-querystring v1.1.0 // indirect github.com/google/s2a-go v0.1.4 // indirect github.com/googleapis/enterprise-certificate-proxy v0.2.5 // indirect @@ -169,7 +170,7 @@ require ( github.com/quasilyte/regex/syntax v0.0.0-20210819130434-b3f0c404a727 // indirect github.com/quasilyte/stdinfo v0.0.0-20220114132959-f7386bf02567 // indirect github.com/reva2/bitbucket-insights-api v1.0.0 // indirect - github.com/reviewdog/errorformat v0.0.0-20230810075619-82e5d4ad20d2 // indirect + github.com/reviewdog/errorformat v0.0.0-20231214114315-6dd01ea41b1f // indirect github.com/reviewdog/go-bitbucket v0.0.0-20201024094602-708c3f6a7de0 // indirect github.com/rivo/uniseg v0.4.4 // indirect github.com/rs/zerolog v1.30.0 // indirect @@ -208,7 +209,7 @@ require ( github.com/ultraware/whitespace v0.0.5 // indirect github.com/uudashr/gocognit v1.1.2 // indirect github.com/vvakame/sdlog v1.2.0 // indirect - github.com/xanzy/go-gitlab v0.91.1 // indirect + github.com/xanzy/go-gitlab v0.96.0 // indirect github.com/xen0n/gosmopolitan v1.2.2 // indirect github.com/yagipy/maintidx v1.0.0 // indirect github.com/yeya24/promlinter v0.2.0 // indirect @@ -220,16 +221,16 @@ require ( go.uber.org/atomic v1.11.0 // indirect go.uber.org/multierr v1.11.0 // indirect go.uber.org/zap v1.24.0 // indirect - golang.org/x/build v0.0.0-20230905185615-7f65e2bc812a // indirect - golang.org/x/crypto v0.16.0 // indirect + golang.org/x/build v0.0.0-20230906094020-6ed658a430ec // indirect + golang.org/x/crypto v0.18.0 // indirect golang.org/x/exp v0.0.0-20230809094429-853ea248256d // indirect golang.org/x/exp/typeparams v0.0.0-20230522175609-2e198f4a06a1 // indirect golang.org/x/mod v0.14.0 // indirect - golang.org/x/net v0.19.0 // indirect - golang.org/x/oauth2 v0.12.0 // indirect - golang.org/x/sync v0.5.0 // indirect - golang.org/x/sys v0.15.0 // indirect - golang.org/x/term v0.15.0 // indirect + golang.org/x/net v0.20.0 // indirect + golang.org/x/oauth2 v0.16.0 // indirect + golang.org/x/sync v0.6.0 // indirect + golang.org/x/sys v0.16.0 // indirect + golang.org/x/term v0.16.0 // indirect golang.org/x/text v0.14.0 // indirect golang.org/x/time v0.3.0 // indirect golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 // indirect @@ -238,8 +239,8 @@ require ( google.golang.org/genproto v0.0.0-20230821184602-ccc8af3d0e93 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20230803162519-f966b187b2e5 // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20230803162519-f966b187b2e5 // indirect - google.golang.org/grpc v1.57.0 // indirect - google.golang.org/protobuf v1.31.0 // indirect + google.golang.org/grpc v1.57.1 // indirect + google.golang.org/protobuf v1.32.0 // indirect gopkg.in/ini.v1 v1.67.0 // indirect gopkg.in/yaml.v2 v2.4.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff --git a/tools/go.sum b/tools/go.sum index 783037a4..925d36c5 100644 --- a/tools/go.sum +++ b/tools/go.sum @@ -31,13 +31,12 @@ cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4g cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= cloud.google.com/go/compute v1.23.0 h1:tP41Zoavr8ptEqaW6j+LQOnyBBhO7OkOMAGrgLopTwY= cloud.google.com/go/compute v1.23.0/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM= -cloud.google.com/go/compute/metadata v0.2.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k= cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= 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/datastore v1.14.0 h1:Mq0ApTRdLW3/dyiw+DkjTk0+iGIUvkbzaC8sfPwWTH4= -cloud.google.com/go/datastore v1.14.0/go.mod h1:GAeStMBIt9bPS7jMJA85kgkpsMkvseWWXiaHya9Jes8= +cloud.google.com/go/datastore v1.15.0 h1:0P9WcsQeTWjuD1H14JIY7XQscIPQ4Laje8ti96IC5vg= +cloud.google.com/go/datastore v1.15.0/go.mod h1:GAeStMBIt9bPS7jMJA85kgkpsMkvseWWXiaHya9Jes8= 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= @@ -48,6 +47,8 @@ cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohl cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= +code.gitea.io/sdk/gitea v0.17.1 h1:3jCPOG2ojbl8AcfaUCRYLT5MUcBMFwS0OSK2mA5Zok8= +code.gitea.io/sdk/gitea v0.17.1/go.mod h1:aCnBqhHpoEWA180gMbaCtdX9Pl6BWBAuuP2miadoTNM= dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= github.com/4meepo/tagalign v1.3.3 h1:ZsOxcwGD/jP4U/aw7qeWu58i7dwYemfy5Y+IF1ACoNw= github.com/4meepo/tagalign v1.3.3/go.mod h1:Q9c1rYMZJc9dPRkbQPpcBNCLEmY2njbAsXhQOZFE2dE= @@ -71,9 +72,6 @@ github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3Q github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= github.com/OpenPeeDeeP/depguard/v2 v2.1.0 h1:aQl70G173h/GZYhWf36aE5H0KaujXfVMnn/f1kSDVYY= github.com/OpenPeeDeeP/depguard/v2 v2.1.0/go.mod h1:PUBgk35fX4i7JDmwzlJwJ+GMe6NfO1723wmJMgPThNQ= -github.com/ProtonMail/go-crypto v0.0.0-20230217124315-7d5c6f04bbb8/go.mod h1:I0gYDMZ6Z5GRU7l58bNFSkPTFN6Yl12dsUlAZ8xy98g= -github.com/ProtonMail/go-crypto v0.0.0-20230528122434-6f98819771a1 h1:JMDGhoQvXNTqH6Y3MC0IUw6tcZvaUdujNqzK2HYWZc8= -github.com/ProtonMail/go-crypto v0.0.0-20230528122434-6f98819771a1/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0= github.com/alecthomas/assert/v2 v2.2.2 h1:Z/iVC0xZfWTaFNE6bA3z07T86hd45Xe2eLt6WVy2bbk= github.com/alecthomas/assert/v2 v2.2.2/go.mod h1:pXcQ2Asjp247dahGEmsZ6ru0UVwnkhktn7S0bBDLxvQ= github.com/alecthomas/go-check-sumtype v0.1.3 h1:M+tqMxB68hcgccRXBMVCPI4UJ+QUfdSx0xdbypKCqA8= @@ -108,8 +106,8 @@ github.com/blizzy78/varnamelen v0.8.0 h1:oqSblyuQvFsW1hbBHh1zfwrKe3kcSj0rnXkKzsQ github.com/blizzy78/varnamelen v0.8.0/go.mod h1:V9TzQZ4fLJ1DSrjVDfl89H7aMnTvKkApdHeyESmyR7k= github.com/bombsimon/wsl/v3 v3.4.0 h1:RkSxjT3tmlptwfgEgTgU+KYKLI35p/tviNXNXiL2aNU= github.com/bombsimon/wsl/v3 v3.4.0/go.mod h1:KkIB+TXkqy6MvK9BDZVbZxKNYsE1/oLRJbIFtf14qqo= -github.com/bradleyfalzon/ghinstallation/v2 v2.6.0 h1:IRY7Xy588KylkoycsUhFpW7cdGpy5Y5BPsz4IfuJtGk= -github.com/bradleyfalzon/ghinstallation/v2 v2.6.0/go.mod h1:oQ3etOwN3TRH4EwgW5/7MxSVMGlMlzG/O8TU7eYdoSk= +github.com/bradleyfalzon/ghinstallation/v2 v2.9.0 h1:HmxIYqnxubRYcYGRc5v3wUekmo5Wv2uX3gukmWJ0AFk= +github.com/bradleyfalzon/ghinstallation/v2 v2.9.0/go.mod h1:wmkTDJf8CmVypxE8ijIStFnKoTa6solK5QfdmJrP9KI= github.com/breml/bidichk v0.2.7 h1:dAkKQPLl/Qrk7hnP6P+E0xOodrq8Us7+U0o4UBOAlQY= github.com/breml/bidichk v0.2.7/go.mod h1:YodjipAGI9fGcYM7II6wFvGhdMYsC5pHDlGzqvEW3tQ= github.com/breml/errchkjson v0.3.6 h1:VLhVkqSBH96AvXEyclMR37rZslRrY2kcyq+31HCsVrA= @@ -118,8 +116,6 @@ github.com/butuzov/ireturn v0.2.2 h1:jWI36dxXwVrI+RnXDwux2IZOewpmfv930OuIRfaBUJ0 github.com/butuzov/ireturn v0.2.2/go.mod h1:RfGHUvvAuFFxoHKf4Z8Yxuh6OjlCw1KvR2zM1NFHeBk= github.com/butuzov/mirror v1.1.0 h1:ZqX54gBVMXu78QLoiqdwpl2mgmoOJTk7s4p4o+0avZI= github.com/butuzov/mirror v1.1.0/go.mod h1:8Q0BdQU6rC6WILDiBM60DBfvV78OLJmMmixe7GF45AE= -github.com/bwesterb/go-ristretto v1.2.0/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= -github.com/bwesterb/go-ristretto v1.2.3/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= github.com/catenacyber/perfsprint v0.2.0 h1:azOocHLscPjqXVJ7Mf14Zjlkn4uNua0+Hcg1wTR6vUo= github.com/catenacyber/perfsprint v0.2.0/go.mod h1:/wclWYompEyjUD2FuIIDVKNkqz7IgBIWXIH3V0Zol50= github.com/ccojocar/zxcvbn-go v1.0.1 h1:+sxrANSCj6CdadkcMnvde/GWU1vZiiXRbqYSCalV4/4= @@ -139,9 +135,6 @@ github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWR 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/client9/misspell v0.3.4/go.mod h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw= -github.com/cloudflare/circl v1.1.0/go.mod h1:prBCrKB9DV4poKZY1l9zBXg2QJY7mvgRvtMxxK7fi4I= -github.com/cloudflare/circl v1.3.3 h1:fE/Qz0QdIGqeWfnwq0RE0R7MI51s0M2E4Ga9kq5AEMs= -github.com/cloudflare/circl v1.3.3/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUKZrLbUZFA= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= @@ -158,6 +151,8 @@ github.com/daixiang0/gci v0.12.0/go.mod h1:xtHP9N7AHdNvtRNfcx9gwTDfw7FRJx4bZUsiE 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/davidmz/go-pageant v1.0.2 h1:bPblRCh5jGU+Uptpz6LgMZGD5hJoOt7otgT454WvHn0= +github.com/davidmz/go-pageant v1.0.2/go.mod h1:P2EDDnMqIwG5Rrp05dTRITj9z2zpGcD9efWSkTNKLIE= github.com/deepmap/oapi-codegen v1.16.2 h1:xGHx0dNqYfy9gE8a7AVgVM8Sd5oF9SEgePzP+UPAUXI= github.com/deepmap/oapi-codegen v1.16.2/go.mod h1:rdYoEA2GE+riuZ91DvpmBX9hJbQpuY9wchXpfQ3n+ho= github.com/denis-tingaikin/go-header v0.4.3 h1:tEaZKAlqql6SKCY++utLmkPLd6K8IBM20Ha7UVm+mtU= @@ -192,6 +187,8 @@ github.com/ghostiam/protogetter v0.2.3 h1:qdv2pzo3BpLqezwqfGDLZ+nHEYmc5bUpIdsMbB github.com/ghostiam/protogetter v0.2.3/go.mod h1:KmNLOsy1v04hKbvZs8EfGI1fk39AgTdRDxWNYPfXVc4= github.com/go-critic/go-critic v0.9.0 h1:Pmys9qvU3pSML/3GEQ2Xd9RZ/ip+aXHKILuxczKGV/U= github.com/go-critic/go-critic v0.9.0/go.mod h1:5P8tdXL7m/6qnyG6oRAlYLORvoXH0WDypYgAEmagT40= +github.com/go-fed/httpsig v1.1.0 h1:9M+hb0jkEICD8/cAiNqEB66R87tTINszBRTjwjQzWcI= +github.com/go-fed/httpsig v1.1.0/go.mod h1:RCMrTZvN1bJYtofsG4rd5NaO5obxQ5xBkdiS7xsT7bM= 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= @@ -310,13 +307,12 @@ github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/ github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-github/v53 v53.2.0 h1:wvz3FyF53v4BK+AsnvCmeNhf8AkTaeh2SoYu/XUvTtI= -github.com/google/go-github/v53 v53.2.0/go.mod h1:XhFRObz+m/l+UCm9b7KSIC3lT3NWSXGt7mOsAWEloao= -github.com/google/go-github/v55 v55.0.0 h1:4pp/1tNMB9X/LuAhs5i0KQAE40NmiR/y6prLNb9x9cg= -github.com/google/go-github/v55 v55.0.0/go.mod h1:JLahOTA1DnXzhxEymmFF5PP2tSS9JVNj68mSZNDwskA= +github.com/google/go-github/v57 v57.0.0 h1:L+Y3UPTY8ALM8x+TV0lg+IEBI+upibemtBD8Q9u7zHs= +github.com/google/go-github/v57 v57.0.0/go.mod h1:s0omdnye0hvK/ecLvpsGfJMiRt85PimQh4oygmLIxHw= +github.com/google/go-github/v58 v58.0.0 h1:Una7GGERlF/37XfkPwpzYJe0Vp4dt2k1kCjlxwjIvzw= +github.com/google/go-github/v58 v58.0.0/go.mod h1:k4hxDKEfoWpSqFlc8LTpGd9fu2KrV1YAa6Hi6FmDNY4= github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= @@ -578,12 +574,12 @@ github.com/quasilyte/stdinfo v0.0.0-20220114132959-f7386bf02567 h1:M8mH9eK4OUR4l github.com/quasilyte/stdinfo v0.0.0-20220114132959-f7386bf02567/go.mod h1:DWNGW8A4Y+GyBgPuaQJuWiy0XYftx4Xm/y5Jqk9I6VQ= github.com/reva2/bitbucket-insights-api v1.0.0 h1:lpQ/Q7OmnG04w/EM77piOwZBxP41PeTlbytXxVrnplA= github.com/reva2/bitbucket-insights-api v1.0.0/go.mod h1:pLs+ki3MKUntrPryxaGIvpRLiEtBhwfJ/uvxQIMfqHU= -github.com/reviewdog/errorformat v0.0.0-20230810075619-82e5d4ad20d2 h1:oP5DZdUlH2M1Luf2NdNhJ6TM/NiPn6wZy1QI5ybYsro= -github.com/reviewdog/errorformat v0.0.0-20230810075619-82e5d4ad20d2/go.mod h1:AqhrP0G7F9YRROF10JQwdd4cNO8bdm6bY6KzcOc3Cp8= +github.com/reviewdog/errorformat v0.0.0-20231214114315-6dd01ea41b1f h1:y9BDlVuHOxSJK4PQNGhxtcZyAtK9TLcPy5kKbcIezDA= +github.com/reviewdog/errorformat v0.0.0-20231214114315-6dd01ea41b1f/go.mod h1:AqhrP0G7F9YRROF10JQwdd4cNO8bdm6bY6KzcOc3Cp8= github.com/reviewdog/go-bitbucket v0.0.0-20201024094602-708c3f6a7de0 h1:XZ60Bp2UqwaJ6fDQExoFVrgs4nIzwBCy9ct6GCj9hH8= github.com/reviewdog/go-bitbucket v0.0.0-20201024094602-708c3f6a7de0/go.mod h1:5JbWAMFyq9hbISZawRyIe7QTcLaptvCIvmZnYo+1VvA= -github.com/reviewdog/reviewdog v0.15.0 h1:uj61ifLBGGshd7HfezG8Vllpc4b7Y47zHLZFxfxZOi0= -github.com/reviewdog/reviewdog v0.15.0/go.mod h1:ea/9hMRfJKPzfaSBs46KNFdN+2MExaKBohJZwweS8AQ= +github.com/reviewdog/reviewdog v0.17.0 h1:Va1qerz6fSCnFJenszFXxpgS7bP9QWcUHK22Jj5WvK4= +github.com/reviewdog/reviewdog v0.17.0/go.mod h1:0N85Brf1mOuNsXIccV85I8aprQ3sAtwc69DMhFNejj4= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis= github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= @@ -694,8 +690,8 @@ github.com/vektra/mockery/v2 v2.38.0 h1:I0LBuUzZHqAU4d1DknW0DTFBPO6n8TaD38WL2KJf github.com/vektra/mockery/v2 v2.38.0/go.mod h1:diB13hxXG6QrTR0ol2Rk8s2dRMftzvExSvPDKr+IYKk= github.com/vvakame/sdlog v1.2.0 h1:gwZRXZ0EmhJQJN/Do/+PTQigcmFiSqZ07aDjxqGOLT8= github.com/vvakame/sdlog v1.2.0/go.mod h1:gFYv2g/iR3pJSxkJz0YnkNmhNbXT5R3PzWsfZKGQADY= -github.com/xanzy/go-gitlab v0.91.1 h1:gnV57IPGYywWer32oXKBcdmc8dVxeKl3AauV8Bu17rw= -github.com/xanzy/go-gitlab v0.91.1/go.mod h1:5ryv+MnpZStBH8I/77HuQBsMbBGANtVpLWC15qOjWAw= +github.com/xanzy/go-gitlab v0.96.0 h1:LGkZ+wSNMRtHIBaYE4Hq3dZVjprwHv3Y1+rhKU3WETs= +github.com/xanzy/go-gitlab v0.96.0/go.mod h1:ETg8tcj4OhrB84UEgeE8dSuV/0h4BBL1uOV/qK0vlyI= github.com/xen0n/gosmopolitan v1.2.2 h1:/p2KTnMzwRexIW8GlKawsTWOxn7UHA+jCMF/V8HHtvU= github.com/xen0n/gosmopolitan v1.2.2/go.mod h1:7XX7Mj61uLYrj0qmeN0zi7XDon9JRAEhYQqAPLVNTeg= github.com/yagipy/maintidx v1.0.0 h1:h5NvIsCz+nRDapQ0exNv4aJ0yXSI0420omVANTv3GJM= @@ -736,8 +732,8 @@ go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= go.uber.org/zap v1.24.0 h1:FiJd5l1UOLj0wCgbSE0rwwXHzEdAZS6hiiSnxJN/D60= go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg= -golang.org/x/build v0.0.0-20230905185615-7f65e2bc812a h1:0XvhCUgBoH8lCN4oOJ/fshXfKKlqPYIXUC2KAJgWZI0= -golang.org/x/build v0.0.0-20230905185615-7f65e2bc812a/go.mod h1:LblaorLo4w94wk4xZvKeLSaFLku6WbfOih5CoMhhvVc= +golang.org/x/build v0.0.0-20230906094020-6ed658a430ec h1:yMJe4SyVd1CYtjYLH/THl39sCe5bRbwvjEDLBIjqBpk= +golang.org/x/build v0.0.0-20230906094020-6ed658a430ec/go.mod h1:MxpeLdBPNhS3SrunE4G6YOdcYL2RH/Vbw+TNE7PYNSk= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/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-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= @@ -745,14 +741,14 @@ golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8U golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= +golang.org/x/crypto v0.0.0-20210513164829-c07d793c2f9a/go.mod h1:P+XmwS30IXTQdn5tA2iutPOUgjI07+tq3H3K9MVA1s8= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220314234659-1baeb1ce4c0b/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220722155217-630584e8d5aa/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= -golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= -golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= -golang.org/x/crypto v0.16.0 h1:mMMrFzRSCF0GvB7Ne27XVtVAaXLrPmgPC7/v0tkwHaY= -golang.org/x/crypto v0.16.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= +golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= +golang.org/x/crypto v0.18.0 h1:PGVlW0xEltQnzFZ55hkuX5+KLyrMYhHld1YHO4AKcdc= +golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg= 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= @@ -846,10 +842,9 @@ golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= -golang.org/x/net v0.19.0 h1:zTwKpTd2XuCqf8huc7Fo2iSy+4RHPd10s4KzeTnVr1c= -golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U= +golang.org/x/net v0.20.0 h1:aCL9BSgETF1k+blQaYUBx9hJ9LOGP3gAVemcZlf1Kpo= +golang.org/x/net v0.20.0/go.mod h1:z8BVo6PvndSri0LbOE3hAn0apkU+1YvI6E70E9jsnvY= 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= @@ -860,9 +855,8 @@ golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.8.0/go.mod h1:yr7u4HXZRm1R1kBWqr/xKNqewf0plRYoB7sla+BCIXE= -golang.org/x/oauth2 v0.12.0 h1:smVPGxink+n1ZI5pkQa8y6fZT0RW0MgCO5bFpepy4B4= -golang.org/x/oauth2 v0.12.0/go.mod h1:A74bZ3aGXgCY0qaIC9Ahg6Lglin4AMAco8cIv9baba4= +golang.org/x/oauth2 v0.16.0 h1:aDkGMBSYxElaoP81NpoUoz2oo2R2wHdZpGToUxfyQrQ= +golang.org/x/oauth2 v0.16.0/go.mod h1:hqZ+0LWXsiVoZpeld6jVt06P3adbS2Uu911W1SsJv2o= 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= @@ -876,8 +870,8 @@ golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE= -golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ= +golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= 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-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -926,7 +920,6 @@ golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20211105183446-c75c47738b0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= @@ -938,23 +931,23 @@ golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc= golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.16.0 h1:xWw16ngr6ZMtmxDyKyIgsE93KNKz5HKmMa3b8ALHidU= +golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= -golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= -golang.org/x/term v0.15.0 h1:y/Oo/a/q3IXu26lQgl04j/gjuBDOBlx7X6Om1j2CPW4= golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0= +golang.org/x/term v0.16.0 h1:m+B6fahuftsE9qjo0VWp2FW0mB3MTJvR0BaMQrq0pmE= +golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY= 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= @@ -967,7 +960,6 @@ golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.14.0 h1:ScX5w1eTa3QqT8oi6+ziP7dTV1S2+ALU0bI+0zXKWiQ= golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= @@ -1144,8 +1136,8 @@ google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA5 google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= -google.golang.org/grpc v1.57.0 h1:kfzNeI/klCGD2YPMUlaGNT3pxvYfga7smW3Vth8Zsiw= -google.golang.org/grpc v1.57.0/go.mod h1:Sd+9RMTACXwmub0zcNY2c4arhtrbBYD1AUHI/dt16Mo= +google.golang.org/grpc v1.57.1 h1:upNTNqv0ES+2ZOOqACwVtS3Il8M12/+Hz41RCPzAjQg= +google.golang.org/grpc v1.57.1/go.mod h1:Sd+9RMTACXwmub0zcNY2c4arhtrbBYD1AUHI/dt16Mo= 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= @@ -1158,9 +1150,8 @@ google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGj google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.31.0 h1:g0LDEJHgrBl9N9r17Ru3sqWhkIx2NB67okBHPwC7hs8= -google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= +google.golang.org/protobuf v1.32.0 h1:pPC6BG5ex8PDFnkbrGU3EixyhKcQ2aDuBS36lqK/C7I= +google.golang.org/protobuf v1.32.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= 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-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= From 27a7a6d3b9248d059629145fe689f6233bb88e73 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 2 Feb 2024 11:37:11 +0000 Subject: [PATCH 35/42] Bump mvdan.cc/gofumpt from 0.5.0 to 0.6.0 in /tools (#272) --- go.mod | 20 +++++++-------- go.sum | 48 ++++++++++++++++++------------------ pkg/kubernetes/kubernetes.go | 1 - tools/go.mod | 4 +-- tools/go.sum | 16 ++++++------ 5 files changed, 44 insertions(+), 45 deletions(-) diff --git a/go.mod b/go.mod index ff61ea3d..7f454a7e 100644 --- a/go.mod +++ b/go.mod @@ -9,13 +9,13 @@ require ( github.com/hashicorp/go-version v1.6.0 github.com/operator-framework/api v0.20.0 github.com/operator-framework/operator-lifecycle-manager v0.26.0 - github.com/percona/everest-operator v0.6.0-dev1.0.20240125162053-e43000fbf0b8 - github.com/percona/percona-everest-backend v0.5.1-0.20240125151620-f38d8bb174fa + github.com/percona/everest-operator v0.6.0-dev1.0.20240202093727-ceb0bb0fb02f + github.com/percona/percona-everest-backend v0.5.1-0.20240202100350-4bc9d2a75a1b github.com/spf13/cobra v1.8.0 github.com/spf13/viper v1.18.1 github.com/stretchr/testify v1.8.4 go.uber.org/zap v1.26.0 - golang.org/x/crypto v0.17.0 + golang.org/x/crypto v0.18.0 golang.org/x/sync v0.5.0 gopkg.in/yaml.v3 v3.0.1 gotest.tools v2.2.0+incompatible @@ -34,7 +34,7 @@ require ( github.com/Azure/azure-sdk-for-go/sdk/storage/azblob v1.2.1 // indirect github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230305170008-8188dc5388df // indirect github.com/apapsch/go-jsonmerge/v2 v2.0.0 // indirect - github.com/aws/aws-sdk-go v1.49.5 // indirect + github.com/aws/aws-sdk-go v1.50.9 // indirect github.com/blang/semver/v4 v4.0.0 // indirect github.com/bshuster-repo/logrus-logstash-hook v1.0.0 // indirect github.com/cert-manager/cert-manager v1.12.4 // indirect @@ -62,7 +62,7 @@ require ( github.com/google/go-cmp v0.6.0 // indirect github.com/google/gofuzz v1.2.0 // indirect github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect - github.com/google/uuid v1.4.0 // indirect + github.com/google/uuid v1.6.0 // indirect github.com/gorilla/handlers v1.5.1 // indirect github.com/gorilla/websocket v1.5.0 // indirect github.com/h2non/filetype v1.1.1 // indirect @@ -81,7 +81,7 @@ require ( github.com/magiconair/properties v1.8.7 // indirect github.com/mailru/easyjson v0.7.7 // indirect github.com/mattn/go-colorable v0.1.13 // indirect - github.com/mattn/go-isatty v0.0.19 // indirect + github.com/mattn/go-isatty v0.0.20 // indirect github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d // indirect github.com/minio/minio-go v6.0.14+incompatible // indirect github.com/mitchellh/go-homedir v1.1.0 // indirect @@ -95,7 +95,7 @@ require ( github.com/montanaflynn/stats v0.6.6 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f // indirect - github.com/oapi-codegen/runtime v1.1.0 // indirect + github.com/oapi-codegen/runtime v1.1.1 // indirect github.com/onsi/gomega v1.30.0 // indirect github.com/operator-framework/operator-registry v1.30.1 // indirect github.com/pelletier/go-toml/v2 v2.1.0 // indirect @@ -131,11 +131,11 @@ require ( go.starlark.net v0.0.0-20230525235612-a134d8f9ddca // indirect go.uber.org/multierr v1.11.0 // indirect golang.org/x/exp v0.0.0-20230905200255-921286631fa9 // indirect - golang.org/x/mod v0.13.0 // indirect + golang.org/x/mod v0.14.0 // indirect golang.org/x/net v0.19.0 // indirect golang.org/x/oauth2 v0.15.0 // indirect - golang.org/x/sys v0.15.0 // indirect - golang.org/x/term v0.15.0 // indirect + golang.org/x/sys v0.16.0 // indirect + golang.org/x/term v0.16.0 // indirect golang.org/x/text v0.14.0 // indirect golang.org/x/time v0.5.0 // indirect google.golang.org/appengine v1.6.8 // indirect diff --git a/go.sum b/go.sum index 599970eb..c0f5b6b9 100644 --- a/go.sum +++ b/go.sum @@ -63,8 +63,8 @@ github.com/asaskevich/govalidator v0.0.0-20180720115003-f9ffefc3facf/go.mod h1:l github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 h1:DklsrG3dyBCFEj5IhUbnKptjxatkF07cF2ak3yi77so= github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= -github.com/aws/aws-sdk-go v1.49.5 h1:y2yfBlwjPDi3/sBVKeznYEdDy6wIhjA2L5NCBMLUIYA= -github.com/aws/aws-sdk-go v1.49.5/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk= +github.com/aws/aws-sdk-go v1.50.9 h1:yX66aKnEtRc/uNV/1EH8CudRT5aLwVwcSwTBphuVPt8= +github.com/aws/aws-sdk-go v1.50.9/go.mod h1:LF8svs817+Nz+DmiMQKTO3ubZ/6IaTpq3TjupRn3Eqk= 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= @@ -333,8 +333,8 @@ github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaU 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.4.0 h1:MtMxsa51/r9yyhkyLsVeVt0B+BGQZzpQiTQ4eHZ8bc4= -github.com/google/uuid v1.4.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= +github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= +github.com/google/uuid v1.6.0/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/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= github.com/googleapis/gnostic v0.1.0/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= @@ -450,8 +450,8 @@ github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNx github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= -github.com/mattn/go-isatty v0.0.19 h1:JITubQf0MOLdlGRuRq+jtsDlekdYPia9ZFsB8h/APPA= -github.com/mattn/go-isatty v0.0.19/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= +github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= +github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-sqlite3 v1.14.16 h1:yOQRA0RpS5PFz/oikGwBEqvAWhWg5ufRz4ETLjwpU1Y= github.com/mattn/go-sqlite3 v1.14.16/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg= @@ -503,8 +503,8 @@ github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRW github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f h1:y5//uYreIhSUg3J1GEMiLbxo1LJaP8RfCpH6pymGZus= github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= -github.com/oapi-codegen/runtime v1.1.0 h1:rJpoNUawn5XTvekgfkvSZr0RqEnoYpFkyvrzfWeFKWM= -github.com/oapi-codegen/runtime v1.1.0/go.mod h1:BeSfBkWWWnAnGdyS+S/GnlbmHKzf8/hwkvelJZDeKA8= +github.com/oapi-codegen/runtime v1.1.1 h1:EXLHh0DXIJnWhdRPN2w4MXAzFyE4CskzhNLUmtpMYro= +github.com/oapi-codegen/runtime v1.1.1/go.mod h1:SK9X900oXmPWilYR5/WKPzt3Kqxn/uS/+lbpREv+eCg= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/onsi/ginkgo v0.0.0-20170829012221-11459a886d9c/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= @@ -513,8 +513,8 @@ github.com/onsi/ginkgo v1.11.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+ github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= github.com/onsi/ginkgo v1.14.0 h1:2mOpI4JVVPBN+WQRa0WKH2eXR+Ey+uK4n7Zj0aYpIQA= github.com/onsi/ginkgo v1.14.0/go.mod h1:iSB4RoI2tjJc9BBv4NKIKWKya62Rps+oPG/Lv9klQyY= -github.com/onsi/ginkgo/v2 v2.13.2 h1:Bi2gGVkfn6gQcjNjZJVO8Gf0FHzMPf2phUei9tejVMs= -github.com/onsi/ginkgo/v2 v2.13.2/go.mod h1:XStQ8QcGwLyF4HdfcZB8SFOS/MWCgDuXMSBe6zrvLgM= +github.com/onsi/ginkgo/v2 v2.15.0 h1:79HwNRBAZHOEwrczrgSOPy+eFTTlIGELKy5as+ClttY= +github.com/onsi/ginkgo/v2 v2.15.0/go.mod h1:HlxMHtYF57y6Dpf+mc5529KKmSq9h2FpCF+/ZkwUxKM= github.com/onsi/gomega v0.0.0-20170829124025-dcabb60a477c/go.mod h1:C1qb7wdrVGGVU+Z6iS04AVkA3Q65CEZX59MT0QO5uiA= github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= @@ -539,12 +539,12 @@ github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/9 github.com/pelletier/go-toml v1.7.0/go.mod h1:vwGMzjaWMwyfHwgIBhI2YUM4fB6nL6lVAvS1LBMMhTE= github.com/pelletier/go-toml/v2 v2.1.0 h1:FnwAJ4oYMvbT/34k9zzHuZNrhlz48GB3/s6at6/MHO4= github.com/pelletier/go-toml/v2 v2.1.0/go.mod h1:tJU2Z3ZkXwnxa4DPO899bsyIoywizdUvyaeZurnPPDc= -github.com/percona/everest-operator v0.6.0-dev1.0.20240125162053-e43000fbf0b8 h1:nXu+L8fCl+vb9i24zqBCA5AjOMeeEGBn6M/KqWlmrCM= -github.com/percona/everest-operator v0.6.0-dev1.0.20240125162053-e43000fbf0b8/go.mod h1:o84NcJlAImYMpKK9+PIjS4V8SSREt1uZOqNhHt5qXMg= +github.com/percona/everest-operator v0.6.0-dev1.0.20240202093727-ceb0bb0fb02f h1:ueUTTEw7Fc2yJyIq9pugBB8qai8LuO5uOBsuDMmJL70= +github.com/percona/everest-operator v0.6.0-dev1.0.20240202093727-ceb0bb0fb02f/go.mod h1:45pGpvWrPy495qiQqxNuOJor4wif+vTTTJP4Qee8qZk= github.com/percona/percona-backup-mongodb v1.8.1-0.20230920143330-3b1c2e263901 h1:BDgsZRCjEuxl2/z4yWBqB0s8d20shuIDks7/RVdZiLs= github.com/percona/percona-backup-mongodb v1.8.1-0.20230920143330-3b1c2e263901/go.mod h1:fZRCMpUqkWlLVdRKqqaj001LoVP2eo6F0ZhoMPeXDng= -github.com/percona/percona-everest-backend v0.5.1-0.20240125151620-f38d8bb174fa h1:m1z+ecvHqTbEcazHm3exh4izP149TP/WwcCuWTMOih4= -github.com/percona/percona-everest-backend v0.5.1-0.20240125151620-f38d8bb174fa/go.mod h1:kwa+FWzO3Zvrz6I1ikyg7DVct+3GQUrCHqmAeYTBRtQ= +github.com/percona/percona-everest-backend v0.5.1-0.20240202100350-4bc9d2a75a1b h1:xFQ/6kAPx25C91g7pEcn/86EWiFpBtrk9isi6xpEyO0= +github.com/percona/percona-everest-backend v0.5.1-0.20240202100350-4bc9d2a75a1b/go.mod h1:Z54PtwvAOvCalNYSRdIQiy+KRhNa7XyDDG+1FfwUf3Y= github.com/percona/percona-postgresql-operator v0.0.0-20231220140959-ad5eef722609 h1:+UOK4gcHrRgqjo4smgfwT7/0apF6PhAJdQIdAV4ub/M= github.com/percona/percona-postgresql-operator v0.0.0-20231220140959-ad5eef722609/go.mod h1:znzhtSTF6moUOGNPzVpgfFEMaqIe/ijTSHY8BNDkiEA= github.com/percona/percona-server-mongodb-operator v1.15.0 h1:pcP9GMi9f05VFi8e/TQifBrR+cvOkYMiv1xAftkESBs= @@ -746,8 +746,8 @@ golang.org/x/crypto v0.0.0-20200302210943-78000ba7a073/go.mod h1:LzIPMQfyMNhhGPh golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.17.0 h1:r8bRNjWL3GshPW3gkd+RpvzWrZAwPS49OmTGZ/uhM4k= -golang.org/x/crypto v0.17.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= +golang.org/x/crypto v0.18.0 h1:PGVlW0xEltQnzFZ55hkuX5+KLyrMYhHld1YHO4AKcdc= +golang.org/x/crypto v0.18.0/go.mod h1:R0j02AL6hcrfOiy9T4ZYp/rcWeMxM3L6QYxlOuEG1mg= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20230905200255-921286631fa9 h1:GoHiUyI/Tp2nVkLI2mCxVkOjsbSXD66ic0XW0js0R9g= golang.org/x/exp v0.0.0-20230905200255-921286631fa9/go.mod h1:S2oDrQGGwySpoQPVqRShND87VCbxmc6bL1Yd2oYrm6k= @@ -758,8 +758,8 @@ golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHl 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.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.13.0 h1:I/DsJXRlw/8l/0c24sM9yb0T4z9liZTduXvdAWYiysY= -golang.org/x/mod v0.13.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= +golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0= +golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20170114055629-f2499483f923/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= 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= @@ -834,13 +834,13 @@ golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBc golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.15.0 h1:h48lPFYpsTvQJZF4EKyI4aLHaev3CxivZmv7yZig9pc= -golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +golang.org/x/sys v0.16.0 h1:xWw16ngr6ZMtmxDyKyIgsE93KNKz5HKmMa3b8ALHidU= +golang.org/x/sys v0.16.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.0.0-20220526004731-065cf7ba2467/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.15.0 h1:y/Oo/a/q3IXu26lQgl04j/gjuBDOBlx7X6Om1j2CPW4= -golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0= +golang.org/x/term v0.16.0 h1:m+B6fahuftsE9qjo0VWp2FW0mB3MTJvR0BaMQrq0pmE= +golang.org/x/term v0.16.0/go.mod h1:yn7UURbUtPyrVJPGPq404EukNFxcm/foM+bV/bfcDsY= golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/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= @@ -875,8 +875,8 @@ golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtn 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.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.14.0 h1:jvNa2pY0M4r62jkRQ6RwEZZyPcymeL9XZMLBbV7U2nc= -golang.org/x/tools v0.14.0/go.mod h1:uYBEerGOWcJyEORxN+Ek8+TT266gXkNlHdJBwexUsBg= +golang.org/x/tools v0.16.1 h1:TLyB3WofjdOEepBHAU20JdNC1Zbg87elYofWYAY5oZA= +golang.org/x/tools v0.16.1/go.mod h1:kYVVN6I1mBNoB1OX+noeBjbRk4IUEPa7JJ+TJMEooJ0= 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= diff --git a/pkg/kubernetes/kubernetes.go b/pkg/kubernetes/kubernetes.go index 1781e443..c0f1892b 100644 --- a/pkg/kubernetes/kubernetes.go +++ b/pkg/kubernetes/kubernetes.go @@ -919,7 +919,6 @@ func (k *Kubernetes) InstallEverest(ctx context.Context, namespace string) error } err = k.client.ApplyManifestFile(data, namespace) - if err != nil { return errors.Join(err, errors.New("failed applying manifest file")) } diff --git a/tools/go.mod b/tools/go.mod index 0fafe0b5..c2fd7a9d 100644 --- a/tools/go.mod +++ b/tools/go.mod @@ -10,8 +10,8 @@ require ( github.com/reviewdog/reviewdog v0.17.0 github.com/vburenin/ifacemaker v1.2.1 github.com/vektra/mockery/v2 v2.38.0 - golang.org/x/tools v0.16.1 - mvdan.cc/gofumpt v0.5.0 + golang.org/x/tools v0.17.0 + mvdan.cc/gofumpt v0.6.0 ) require ( diff --git a/tools/go.sum b/tools/go.sum index 925d36c5..ee083758 100644 --- a/tools/go.sum +++ b/tools/go.sum @@ -174,8 +174,8 @@ github.com/fatih/structtag v1.2.0 h1:/OdNE99OxoI/PqaW/SuSK9uxxT3f/tcSZgon/ssNSx4 github.com/fatih/structtag v1.2.0/go.mod h1:mBJUNpUnHmRKrKlQQlmCrh5PuhftFbNv8Ys4/aAZl94= github.com/firefart/nonamedreturns v1.0.4 h1:abzI1p7mAEPYuR4A+VLKn4eNDOycjYo2phmY9sfv40Y= github.com/firefart/nonamedreturns v1.0.4/go.mod h1:TDhe/tjI1BXo48CmYbUduTV7BdIga8MAO/xbKdcVsGI= -github.com/frankban/quicktest v1.14.4 h1:g2rn0vABPOOXmZUj+vbmUp0lPoXEMuhTpIluN0XL9UY= -github.com/frankban/quicktest v1.14.4/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= +github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= +github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= github.com/fsnotify/fsnotify v1.6.0 h1:n+5WquG0fcWoWp6xPWfHdbskMCQaFnG6PfBrh1Ky4HY= github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= github.com/fzipp/gocyclo v0.6.0 h1:lsblElZG7d3ALtGMx9fmxeTKZaLLpU8mET09yN4BBLo= @@ -585,8 +585,8 @@ github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis= github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.10.0 h1:TMyTOH3F/DB16zRVcYyreMH6GnZZrwQVAoYjRBZyWFQ= -github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= +github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= +github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= github.com/rs/xid v1.5.0/go.mod h1:trrq9SKmegXys3aeAKXMUTdJsYXVwGY3RLcfgqegfbg= github.com/rs/zerolog v1.30.0 h1:SymVODrcRsaRaSInD9yQtKbtWqwsfoPcRff/oRXLj4c= github.com/rs/zerolog v1.30.0/go.mod h1:/tk+P47gFdPXq4QYjvCmT5/Gsug2nagsFWBWhAiSi1w= @@ -1036,8 +1036,8 @@ golang.org/x/tools v0.2.0/go.mod h1:y4OqIKeOV/fWJetJ8bXPU1sEVniLMIyDAZWeHdV+NTA= golang.org/x/tools v0.3.0/go.mod h1:/rWhSS2+zyEVwoJf8YAX6L2f0ntZ7Kn/mGgAWcipA5k= golang.org/x/tools v0.5.0/go.mod h1:N+Kgy78s5I24c24dU8OfWNEotWjutIs8SnJvn5IDq+k= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.16.1 h1:TLyB3WofjdOEepBHAU20JdNC1Zbg87elYofWYAY5oZA= -golang.org/x/tools v0.16.1/go.mod h1:kYVVN6I1mBNoB1OX+noeBjbRk4IUEPa7JJ+TJMEooJ0= +golang.org/x/tools v0.17.0 h1:FvmRgNOcs3kOa+T20R1uhfP9F6HgG2mfxDv1vrx1Htc= +golang.org/x/tools v0.17.0/go.mod h1:xsh6VxdV005rRVaS6SSAf9oiAqljS7UZUacMZ8Bnsps= 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= @@ -1182,8 +1182,8 @@ honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9 honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= honnef.co/go/tools v0.4.6 h1:oFEHCKeID7to/3autwsWfnuv69j3NsfcXbvJKuIcep8= honnef.co/go/tools v0.4.6/go.mod h1:+rnGS1THNh8zMwnd2oVOTL9QF6vmfyG6ZXBULae2uc0= -mvdan.cc/gofumpt v0.5.0 h1:0EQ+Z56k8tXjj/6TQD25BFNKQXpCvT0rnansIc7Ug5E= -mvdan.cc/gofumpt v0.5.0/go.mod h1:HBeVDtMKRZpXyxFciAirzdKklDlGu8aAy1wEbH5Y9js= +mvdan.cc/gofumpt v0.6.0 h1:G3QvahNDmpD+Aek/bNOLrFR2XC6ZAdo62dZu65gmwGo= +mvdan.cc/gofumpt v0.6.0/go.mod h1:4L0wf+kgIPZtcCWXynNS2e6bhmj73umwnuXSZarixzA= mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed h1:WX1yoOaKQfddO/mLzdV4wptyWgoH/6hwLs7QHTixo0I= mvdan.cc/interfacer v0.0.0-20180901003855-c20040233aed/go.mod h1:Xkxe497xwlCKkIaQYRfC7CSLworTXY9RMqwhhCm+8Nc= mvdan.cc/lint v0.0.0-20170908181259-adc824a0674b h1:DxJ5nJdkhDlLok9K6qO+5290kphDJbHOQO1DFFFTeBo= From d503718fecd34db4255ccc8a4baed8bd6b3cffec Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 2 Feb 2024 11:48:09 +0000 Subject: [PATCH 36/42] Bump actions/cache from 3 to 4 (#268) --- .github/workflows/ci.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 10b16b0e..b5202c32 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -65,7 +65,7 @@ jobs: ref: ${{ github.event.pull_request.head.sha }} - name: Enable Go modules cache - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: ~/go/pkg/mod key: ${{ matrix.os }}-go-${{ matrix.go-version }}-modules-${{ hashFiles('**/go.sum') }} @@ -73,7 +73,7 @@ jobs: ${{ matrix.os }}-go-${{ matrix.go-version }}-modules- - name: Enable Go build cache - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: ~/.cache/go-build key: ${{ matrix.os }}-go-${{ matrix.go-version }}-build-${{ github.ref }}-${{ hashFiles('**') }} @@ -191,7 +191,7 @@ jobs: echo "$GOBIN" >> $GITHUB_PATH - name: Enable Go modules cache - uses: actions/cache@v3 + uses: actions/cache@v4 with: path: ~/go/pkg/mod key: ${{ runner.os }}-go-${{ env.GO_VERSION }}-modules-${{ hashFiles('**/go.sum') }} From 83d717867f65601e15f6618c46b64b7518a13c3b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 2 Feb 2024 11:59:05 +0000 Subject: [PATCH 37/42] Bump github.com/operator-framework/api from 0.20.0 to 0.21.0 (#262) --- go.mod | 8 ++++---- go.sum | 36 ++++++++++++++++++------------------ 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/go.mod b/go.mod index 7f454a7e..38fea959 100644 --- a/go.mod +++ b/go.mod @@ -7,7 +7,7 @@ require ( github.com/dchest/uniuri v1.2.0 github.com/go-logr/zapr v1.3.0 github.com/hashicorp/go-version v1.6.0 - github.com/operator-framework/api v0.20.0 + github.com/operator-framework/api v0.21.0 github.com/operator-framework/operator-lifecycle-manager v0.26.0 github.com/percona/everest-operator v0.6.0-dev1.0.20240202093727-ceb0bb0fb02f github.com/percona/percona-everest-backend v0.5.1-0.20240202100350-4bc9d2a75a1b @@ -126,8 +126,8 @@ require ( github.com/xlab/treeprint v1.2.0 // indirect github.com/youmark/pkcs8 v0.0.0-20201027041543-1326539a0a0a // indirect go.mongodb.org/mongo-driver v1.12.1 // indirect - go.opentelemetry.io/otel v1.19.0 // indirect - go.opentelemetry.io/otel/trace v1.19.0 // indirect + go.opentelemetry.io/otel v1.20.0 // indirect + go.opentelemetry.io/otel/trace v1.20.0 // indirect go.starlark.net v0.0.0-20230525235612-a134d8f9ddca // indirect go.uber.org/multierr v1.11.0 // indirect golang.org/x/exp v0.0.0-20230905200255-921286631fa9 // indirect @@ -139,7 +139,7 @@ require ( golang.org/x/text v0.14.0 // indirect golang.org/x/time v0.5.0 // indirect google.golang.org/appengine v1.6.8 // indirect - google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17 // indirect + google.golang.org/genproto/googleapis/api v0.0.0-20231120223509-83a465c0220f // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20231120223509-83a465c0220f // indirect google.golang.org/grpc v1.59.0 // indirect google.golang.org/protobuf v1.31.0 // indirect diff --git a/go.sum b/go.sum index c0f5b6b9..e9497d30 100644 --- a/go.sum +++ b/go.sum @@ -526,8 +526,8 @@ github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8 github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.1.0-rc2.0.20221005185240-3a7f492d3f1b h1:YWuSjZCQAPM8UUBLkYUk1e+rZcvWHJmFb6i6rM44Xs8= github.com/opencontainers/image-spec v1.1.0-rc2.0.20221005185240-3a7f492d3f1b/go.mod h1:3OVijpioIKYWTqjiG0zfF6wvoJ4fAXGbjdZuI2NgsRQ= -github.com/operator-framework/api v0.20.0 h1:A2YCRhr+6s0k3pRJacnwjh1Ue8BqjIGuQ2jvPg9XCB4= -github.com/operator-framework/api v0.20.0/go.mod h1:rXPOhrQ6mMeXqCmpDgt1ALoar9ZlHL+Iy5qut9R99a4= +github.com/operator-framework/api v0.21.0 h1:89LhqGTLskxpPR4siEaorkF9PY3KLI51S5mFxP6q1G8= +github.com/operator-framework/api v0.21.0/go.mod h1:3tsDLxXChMY1KgxO5v1CZQogHNQCIMy14YXkXqA5lT4= github.com/operator-framework/operator-lifecycle-manager v0.26.0 h1:16vEJZ5gzMXlcvNlJBnLsEfa+8h5+mvp7/xHwj+u230= github.com/operator-framework/operator-lifecycle-manager v0.26.0/go.mod h1:uDY8iANE0neSPEYNsT/AE3fpuKS9OhgcKqKEBMhGO6A= github.com/operator-framework/operator-registry v1.30.1 h1:7XvISZrwi+j9z4MIiApRRU+K7v3qMXIcgBs88eQ724Q= @@ -707,18 +707,18 @@ go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.45.0 h1:x8Z78aZx8cOF0+Kkazoc7lwUNMGy0LrzEMxTm4BbTxg= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.45.0/go.mod h1:62CPTSry9QZtOaSsE3tOzhx6LzDhHnXJ6xHeMNNiM6Q= -go.opentelemetry.io/otel v1.19.0 h1:MuS/TNf4/j4IXsZuJegVzI1cwut7Qc00344rgH7p8bs= -go.opentelemetry.io/otel v1.19.0/go.mod h1:i0QyjOq3UPoTzff0PJB2N66fb4S0+rSbSB15/oyH9fY= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.19.0 h1:Mne5On7VWdx7omSrSSZvM4Kw7cS7NQkOOmLcgscI51U= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.19.0/go.mod h1:IPtUMKL4O3tH5y+iXVyAXqpAwMuzC1IrxVS81rummfE= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.19.0 h1:3d+S281UTjM+AbF31XSOYn1qXn3BgIdWl8HNEpx08Jk= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.19.0/go.mod h1:0+KuTDyKL4gjKCF75pHOX4wuzYDUZYfAQdSu43o+Z2I= -go.opentelemetry.io/otel/metric v1.19.0 h1:aTzpGtV0ar9wlV4Sna9sdJyII5jTVJEvKETPiOKwvpE= -go.opentelemetry.io/otel/metric v1.19.0/go.mod h1:L5rUsV9kM1IxCj1MmSdS+JQAcVm319EUrDVLrt7jqt8= -go.opentelemetry.io/otel/sdk v1.19.0 h1:6USY6zH+L8uMH8L3t1enZPR3WFEmSTADlqldyHtJi3o= -go.opentelemetry.io/otel/sdk v1.19.0/go.mod h1:NedEbbS4w3C6zElbLdPJKOpJQOrGUJ+GfzpjUvI0v1A= -go.opentelemetry.io/otel/trace v1.19.0 h1:DFVQmlVbfVeOuBRrwdtaehRrWiL1JoVs9CPIQ1Dzxpg= -go.opentelemetry.io/otel/trace v1.19.0/go.mod h1:mfaSyvGyEJEI0nyV2I4qhNQnbBOUUmYZpYojqMnX2vo= +go.opentelemetry.io/otel v1.20.0 h1:vsb/ggIY+hUjD/zCAQHpzTmndPqv/ml2ArbsbfBYTAc= +go.opentelemetry.io/otel v1.20.0/go.mod h1:oUIGj3D77RwJdM6PPZImDpSZGDvkD9fhesHny69JFrs= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.20.0 h1:DeFD0VgTZ+Cj6hxravYYZE2W4GlneVH81iAOPjZkzk8= +go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.20.0/go.mod h1:GijYcYmNpX1KazD5JmWGsi4P7dDTTTnfv1UbGn84MnU= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.20.0 h1:gvmNvqrPYovvyRmCSygkUDyL8lC5Tl845MLEwqpxhEU= +go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.20.0/go.mod h1:vNUq47TGFioo+ffTSnKNdob241vePmtNZnAODKapKd0= +go.opentelemetry.io/otel/metric v1.20.0 h1:ZlrO8Hu9+GAhnepmRGhSU7/VkpjrNowxRN9GyKR4wzA= +go.opentelemetry.io/otel/metric v1.20.0/go.mod h1:90DRw3nfK4D7Sm/75yQ00gTJxtkBxX+wu6YaNymbpVM= +go.opentelemetry.io/otel/sdk v1.20.0 h1:5Jf6imeFZlZtKv9Qbo6qt2ZkmWtdWx/wzcCbNUlAWGM= +go.opentelemetry.io/otel/sdk v1.20.0/go.mod h1:rmkSx1cZCm/tn16iWDn1GQbLtsW/LvsdEEFzCSRM6V0= +go.opentelemetry.io/otel/trace v1.20.0 h1:+yxVAPZPbQhbC3OfAkeIVTky6iTFpcr4SiY9om7mXSQ= +go.opentelemetry.io/otel/trace v1.20.0/go.mod h1:HJSK7F/hA5RlzpZ0zKDCHCDHm556LCDtKaAo6JmBFUU= go.opentelemetry.io/proto/otlp v1.0.0 h1:T0TX0tmXU8a3CbNXzEKGeU5mIVOdf0oykP+u2lIVU/I= go.opentelemetry.io/proto/otlp v1.0.0/go.mod h1:Sy6pihPLfYHkr3NkUbEhGHFhINUSI/v80hjKIs5JXpM= go.starlark.net v0.0.0-20230525235612-a134d8f9ddca h1:VdD38733bfYv5tUZwEIskMM93VanwNIi5bIKnDrJdEY= @@ -895,10 +895,10 @@ google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRn google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20231106174013-bbf56f31fb17 h1:wpZ8pe2x1Q3f2KyT5f8oP/fa9rHAKgFPr/HZdNuS+PQ= -google.golang.org/genproto v0.0.0-20231106174013-bbf56f31fb17/go.mod h1:J7XzRzVy1+IPwWHZUzoD0IccYZIrXILAQpc+Qy9CMhY= -google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17 h1:JpwMPBpFN3uKhdaekDpiNlImDdkUAyiJ6ez/uxGaUSo= -google.golang.org/genproto/googleapis/api v0.0.0-20231106174013-bbf56f31fb17/go.mod h1:0xJLfVdJqpAPl8tDg1ujOCGzx6LFLttXT5NhllGOXY4= +google.golang.org/genproto v0.0.0-20231127180814-3a041ad873d4 h1:W12Pwm4urIbRdGhMEg2NM9O3TWKjNcxQhs46V0ypf/k= +google.golang.org/genproto v0.0.0-20231127180814-3a041ad873d4/go.mod h1:5RBcpGRxr25RbDzY5w+dmaqpSEvl8Gwl1x2CICf60ic= +google.golang.org/genproto/googleapis/api v0.0.0-20231120223509-83a465c0220f h1:2yNACc1O40tTnrsbk9Cv6oxiW8pxI/pXj0wRtdlYmgY= +google.golang.org/genproto/googleapis/api v0.0.0-20231120223509-83a465c0220f/go.mod h1:Uy9bTZJqmfrw2rIBxgGLnamc78euZULUBrLZ9XTITKI= google.golang.org/genproto/googleapis/rpc v0.0.0-20231120223509-83a465c0220f h1:ultW7fxlIvee4HYrtnaRPon9HpEgFk5zYpmfMgtKB5I= google.golang.org/genproto/googleapis/rpc v0.0.0-20231120223509-83a465c0220f/go.mod h1:L9KNLi232K1/xB6f7AlSX692koaRnKaWSR0stBki0Yc= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= From fdb2c5a1bafd9c3d5db63a1b87581adb833201f7 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 2 Feb 2024 12:17:06 +0000 Subject: [PATCH 38/42] Bump golang.org/x/sync from 0.5.0 to 0.6.0 (#261) --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 38fea959..28b4bbb8 100644 --- a/go.mod +++ b/go.mod @@ -16,7 +16,7 @@ require ( github.com/stretchr/testify v1.8.4 go.uber.org/zap v1.26.0 golang.org/x/crypto v0.18.0 - golang.org/x/sync v0.5.0 + golang.org/x/sync v0.6.0 gopkg.in/yaml.v3 v3.0.1 gotest.tools v2.2.0+incompatible k8s.io/api v0.29.0 diff --git a/go.sum b/go.sum index e9497d30..d33d0dfd 100644 --- a/go.sum +++ b/go.sum @@ -799,8 +799,8 @@ golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJ 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-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.5.0 h1:60k92dhOjHxJkrqnwsfl8KuaHbn/5dl0lUPUklKo3qE= -golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ= +golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20170830134202-bb24a47a89ea/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= From 2a168b6a6e783e1271ea4ac57e91d2f86a932340 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 2 Feb 2024 12:56:13 +0000 Subject: [PATCH 39/42] Bump github.com/spf13/viper from 1.18.1 to 1.18.2 (#256) --- go.mod | 2 +- go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/go.mod b/go.mod index 28b4bbb8..b621b964 100644 --- a/go.mod +++ b/go.mod @@ -12,7 +12,7 @@ require ( github.com/percona/everest-operator v0.6.0-dev1.0.20240202093727-ceb0bb0fb02f github.com/percona/percona-everest-backend v0.5.1-0.20240202100350-4bc9d2a75a1b github.com/spf13/cobra v1.8.0 - github.com/spf13/viper v1.18.1 + github.com/spf13/viper v1.18.2 github.com/stretchr/testify v1.8.4 go.uber.org/zap v1.26.0 golang.org/x/crypto v0.18.0 diff --git a/go.sum b/go.sum index d33d0dfd..63ecb5f1 100644 --- a/go.sum +++ b/go.sum @@ -637,8 +637,8 @@ 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.18.1 h1:rmuU42rScKWlhhJDyXZRKJQHXFX02chSVW1IvkPGiVM= -github.com/spf13/viper v1.18.1/go.mod h1:EKmWIqdnk5lOcmR72yw6hS+8OPYcwD0jteitLMVB+yk= +github.com/spf13/viper v1.18.2 h1:LUXCnvUvSM6FXAsj6nnfc8Q2tp1dIgUfY9Kc8GsSOiQ= +github.com/spf13/viper v1.18.2/go.mod h1:EKmWIqdnk5lOcmR72yw6hS+8OPYcwD0jteitLMVB+yk= github.com/spkg/bom v0.0.0-20160624110644-59b7046e48ad/go.mod h1:qLr4V1qq6nMqFKkMo8ZTx3f+BZEkzsRUY10Xsm2mwU0= github.com/stoewer/go-strcase v1.2.0 h1:Z2iHWqGXH00XYgqDmNgQbIBxf3wrNq0F3feEy0ainaU= github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= From 66490ff873d941640cef235defdc0613896e8a7c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 2 Feb 2024 13:18:19 +0000 Subject: [PATCH 40/42] Bump github.com/daixiang0/gci from 0.12.0 to 0.12.1 in /tools (#259) --- tools/go.mod | 2 +- tools/go.sum | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/tools/go.mod b/tools/go.mod index c2fd7a9d..424e8db4 100644 --- a/tools/go.mod +++ b/tools/go.mod @@ -3,7 +3,7 @@ module github.com/percona/percona-everest-cli/tools go 1.21 require ( - github.com/daixiang0/gci v0.12.0 + github.com/daixiang0/gci v0.12.1 github.com/deepmap/oapi-codegen v1.16.2 github.com/golangci/golangci-lint v1.55.2 github.com/quasilyte/go-consistent v0.6.0 diff --git a/tools/go.sum b/tools/go.sum index ee083758..e572932a 100644 --- a/tools/go.sum +++ b/tools/go.sum @@ -146,8 +146,8 @@ github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSV github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/curioswitch/go-reassign v0.2.0 h1:G9UZyOcpk/d7Gd6mqYgd8XYWFMw/znxwGDUstnC9DIo= github.com/curioswitch/go-reassign v0.2.0/go.mod h1:x6OpXuWvgfQaMGks2BZybTngWjT84hqJfKoO8Tt/Roc= -github.com/daixiang0/gci v0.12.0 h1:EQTG7FfKPlO4Ste+oN0kvz+gP4XswKx29D4fLrmwbiU= -github.com/daixiang0/gci v0.12.0/go.mod h1:xtHP9N7AHdNvtRNfcx9gwTDfw7FRJx4bZUsiEfiNNAI= +github.com/daixiang0/gci v0.12.1 h1:ugsG+KRYny1VK4oqrX4Vtj70bo4akYKa0tgT1DXMYiY= +github.com/daixiang0/gci v0.12.1/go.mod h1:xtHP9N7AHdNvtRNfcx9gwTDfw7FRJx4bZUsiEfiNNAI= 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= From 07650d912f92f20e88cc20e4042c106afa03853b Mon Sep 17 00:00:00 2001 From: "IT @ Percona" Date: Fri, 2 Feb 2024 08:27:31 -0500 Subject: [PATCH 41/42] fix: upgrade @faker-js/faker from 8.0.2 to 8.2.0 (#226) Snyk has created this PR to upgrade @faker-js/faker from 8.0.2 to 8.2.0. See this package in npm: https://www.npmjs.com/package/@faker-js/faker See this project in Snyk: https://app.snyk.io/org/percona-public/project/d493c044-d263-43f0-a5f6-fdff02fd60ad?utm_source=github&utm_medium=referral&page=upgrade-pr Co-authored-by: snyk-bot Co-authored-by: Andrew Minkin Co-authored-by: Diogo Recharte --- cli-tests/package-lock.json | 14 +++++++------- cli-tests/package.json | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/cli-tests/package-lock.json b/cli-tests/package-lock.json index f97e10e1..0cf34d6b 100644 --- a/cli-tests/package-lock.json +++ b/cli-tests/package-lock.json @@ -9,7 +9,7 @@ "version": "1.0.0", "license": "ISC", "dependencies": { - "@faker-js/faker": "^8.0.2", + "@faker-js/faker": "^8.2.0", "@playwright/test": "^1.35.1", "playwright": "^1.35.1", "semver": "^7.5.4", @@ -108,9 +108,9 @@ } }, "node_modules/@faker-js/faker": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@faker-js/faker/-/faker-8.0.2.tgz", - "integrity": "sha512-Uo3pGspElQW91PCvKSIAXoEgAUlRnH29sX2/p89kg7sP1m2PzCufHINd0FhTXQf6DYGiUlVncdSPa2F9wxed2A==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@faker-js/faker/-/faker-8.2.0.tgz", + "integrity": "sha512-VacmzZqVxdWdf9y64lDOMZNDMM/FQdtM9IsaOPKOm2suYwEatb8VkdHqOzXcDnZbk7YDE2BmsJmy/2Hmkn563g==", "funding": [ { "type": "opencollective", @@ -3217,9 +3217,9 @@ "dev": true }, "@faker-js/faker": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/@faker-js/faker/-/faker-8.0.2.tgz", - "integrity": "sha512-Uo3pGspElQW91PCvKSIAXoEgAUlRnH29sX2/p89kg7sP1m2PzCufHINd0FhTXQf6DYGiUlVncdSPa2F9wxed2A==" + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/@faker-js/faker/-/faker-8.2.0.tgz", + "integrity": "sha512-VacmzZqVxdWdf9y64lDOMZNDMM/FQdtM9IsaOPKOm2suYwEatb8VkdHqOzXcDnZbk7YDE2BmsJmy/2Hmkn563g==" }, "@humanwhocodes/config-array": { "version": "0.11.10", diff --git a/cli-tests/package.json b/cli-tests/package.json index b2164d0e..0753f4f6 100644 --- a/cli-tests/package.json +++ b/cli-tests/package.json @@ -8,7 +8,7 @@ "author": "", "license": "ISC", "dependencies": { - "@faker-js/faker": "^8.0.2", + "@faker-js/faker": "^8.2.0", "@playwright/test": "^1.35.1", "playwright": "^1.35.1", "semver": "^7.5.4", From b86cb5af6be413588d6bd7e4cc305a99733de28a Mon Sep 17 00:00:00 2001 From: "IT @ Percona" Date: Fri, 2 Feb 2024 08:33:41 -0500 Subject: [PATCH 42/42] fix: upgrade playwright from 1.35.1 to 1.39.0 (#225) Snyk has created this PR to upgrade playwright from 1.35.1 to 1.39.0. See this package in npm: https://www.npmjs.com/package/playwright See this project in Snyk: https://app.snyk.io/org/percona-public/project/d493c044-d263-43f0-a5f6-fdff02fd60ad?utm_source=github&utm_medium=referral&page=upgrade-pr Co-authored-by: snyk-bot Co-authored-by: Diogo Recharte --- cli-tests/package-lock.json | 41 ++++++++++++++++++++++++++++--------- cli-tests/package.json | 2 +- 2 files changed, 32 insertions(+), 11 deletions(-) diff --git a/cli-tests/package-lock.json b/cli-tests/package-lock.json index 0cf34d6b..3335979b 100644 --- a/cli-tests/package-lock.json +++ b/cli-tests/package-lock.json @@ -11,7 +11,7 @@ "dependencies": { "@faker-js/faker": "^8.2.0", "@playwright/test": "^1.35.1", - "playwright": "^1.35.1", + "playwright": "^1.39.0", "semver": "^7.5.4", "shelljs": "^0.8.5" }, @@ -2561,18 +2561,20 @@ } }, "node_modules/playwright": { - "version": "1.35.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.35.1.tgz", - "integrity": "sha512-NbwBeGJLu5m7VGM0+xtlmLAH9VUfWwYOhUi/lSEDyGg46r1CA9RWlvoc5yywxR9AzQb0mOCm7bWtOXV7/w43ZA==", - "hasInstallScript": true, + "version": "1.39.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.39.0.tgz", + "integrity": "sha512-naE5QT11uC/Oiq0BwZ50gDmy8c8WLPRTEWuSSFVG2egBka/1qMoSqYQcROMT9zLwJ86oPofcTH2jBY/5wWOgIw==", "dependencies": { - "playwright-core": "1.35.1" + "playwright-core": "1.39.0" }, "bin": { "playwright": "cli.js" }, "engines": { "node": ">=16" + }, + "optionalDependencies": { + "fsevents": "2.3.2" } }, "node_modules/playwright-core": { @@ -2586,6 +2588,17 @@ "node": ">=16" } }, + "node_modules/playwright/node_modules/playwright-core": { + "version": "1.39.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.39.0.tgz", + "integrity": "sha512-+k4pdZgs1qiM+OUkSjx96YiKsXsmb59evFoqv8SKO067qBA+Z2s/dCzJij/ZhdQcs2zlTAgRKfeiiLm8PQ2qvw==", + "bin": { + "playwright-core": "cli.js" + }, + "engines": { + "node": ">=16" + } + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -4991,11 +5004,19 @@ "dev": true }, "playwright": { - "version": "1.35.1", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.35.1.tgz", - "integrity": "sha512-NbwBeGJLu5m7VGM0+xtlmLAH9VUfWwYOhUi/lSEDyGg46r1CA9RWlvoc5yywxR9AzQb0mOCm7bWtOXV7/w43ZA==", + "version": "1.39.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.39.0.tgz", + "integrity": "sha512-naE5QT11uC/Oiq0BwZ50gDmy8c8WLPRTEWuSSFVG2egBka/1qMoSqYQcROMT9zLwJ86oPofcTH2jBY/5wWOgIw==", "requires": { - "playwright-core": "1.35.1" + "fsevents": "2.3.2", + "playwright-core": "1.39.0" + }, + "dependencies": { + "playwright-core": { + "version": "1.39.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.39.0.tgz", + "integrity": "sha512-+k4pdZgs1qiM+OUkSjx96YiKsXsmb59evFoqv8SKO067qBA+Z2s/dCzJij/ZhdQcs2zlTAgRKfeiiLm8PQ2qvw==" + } } }, "playwright-core": { diff --git a/cli-tests/package.json b/cli-tests/package.json index 0753f4f6..501a8238 100644 --- a/cli-tests/package.json +++ b/cli-tests/package.json @@ -10,7 +10,7 @@ "dependencies": { "@faker-js/faker": "^8.2.0", "@playwright/test": "^1.35.1", - "playwright": "^1.35.1", + "playwright": "^1.39.0", "semver": "^7.5.4", "shelljs": "^0.8.5" },