Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package pluto for openSUSE:Factory checked in at 2022-03-25 21:54:43 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/pluto (Old) and /work/SRC/openSUSE:Factory/.pluto.new.1900 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "pluto" Fri Mar 25 21:54:43 2022 rev:8 rq:964801 version:5.7.0 Changes: -------- --- /work/SRC/openSUSE:Factory/pluto/pluto.changes 2022-03-18 16:42:49.309210772 +0100 +++ /work/SRC/openSUSE:Factory/.pluto.new.1900/pluto.changes 2022-03-25 21:54:55.974293025 +0100 @@ -1,0 +2,7 @@ +Fri Mar 25 09:06:04 UTC 2022 - ka...@b1-systems.de + +- Update to version 5.7.0: + * Add flag for --kube-context (#302) + * updated dependencies (#300) + +------------------------------------------------------------------- Old: ---- pluto-5.6.0.tar.gz New: ---- pluto-5.7.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ pluto.spec ++++++ --- /var/tmp/diff_new_pack.lBLSsY/_old 2022-03-25 21:54:56.706293721 +0100 +++ /var/tmp/diff_new_pack.lBLSsY/_new 2022-03-25 21:54:56.714293729 +0100 @@ -19,7 +19,7 @@ %define __arch_install_post export NO_BRP_STRIP_DEBUG=true Name: pluto -Version: 5.6.0 +Version: 5.7.0 Release: 0 Summary: A cli tool to help discover deprecated apiVersions in Kubernetes License: Apache-2.0 ++++++ _service ++++++ --- /var/tmp/diff_new_pack.lBLSsY/_old 2022-03-25 21:54:56.770293782 +0100 +++ /var/tmp/diff_new_pack.lBLSsY/_new 2022-03-25 21:54:56.774293786 +0100 @@ -3,7 +3,7 @@ <param name="url">https://github.com/FairwindsOps/pluto</param> <param name="scm">git</param> <param name="exclude">.git</param> - <param name="revision">v5.6.0</param> + <param name="revision">v5.7.0</param> <param name="versionformat">@PARENT_TAG@</param> <param name="changesgenerate">enable</param> <param name="versionrewrite-pattern">v(.*)</param> @@ -16,7 +16,7 @@ <param name="compression">gz</param> </service> <service name="go_modules" mode="disabled"> - <param name="archive">pluto-5.6.0.tar.gz</param> + <param name="archive">pluto-5.7.0.tar.gz</param> </service> </services> ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.lBLSsY/_old 2022-03-25 21:54:56.806293816 +0100 +++ /var/tmp/diff_new_pack.lBLSsY/_new 2022-03-25 21:54:56.806293816 +0100 @@ -1,6 +1,6 @@ <servicedata> <service name="tar_scm"> <param name="url">https://github.com/FairwindsOps/pluto</param> - <param name="changesrevision">330438ef6deb89725f178abed9e10c9457c39279</param></service></servicedata> + <param name="changesrevision">b63ce35f460e4d498c36c261936912b8e96a8ef2</param></service></servicedata> (No newline at EOF) ++++++ pluto-5.6.0.tar.gz -> pluto-5.7.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pluto-5.6.0/.circleci/config.yml new/pluto-5.7.0/.circleci/config.yml --- old/pluto-5.6.0/.circleci/config.yml 2022-03-17 22:10:53.000000000 +0100 +++ new/pluto-5.7.0/.circleci/config.yml 2022-03-23 14:36:08.000000000 +0100 @@ -7,7 +7,7 @@ executors: golang-exec: docker: - - image: circleci/golang:1.17-buster + - image: cimg/go:1.17 references: e2e_config: &e2e_config @@ -54,9 +54,9 @@ circleci version jobs: test: - working_directory: /go/src/github.com/fairwindsops/pluto + working_directory: /home/circleci/go/src/github.com/fairwindsops/pluto docker: - - image: circleci/golang:1.17 + - image: cimg/go:1.17 steps: - checkout - run: go mod download && go mod verify @@ -79,7 +79,7 @@ chmod +x insights-ci.sh ./insights-ci.sh release: - working_directory: /go/src/github.com/fairwindsops/pluto + working_directory: /home/circleci/go/src/github.com/fairwindsops/pluto resource_class: large shell: /bin/bash docker: @@ -103,7 +103,7 @@ - run: echo 'export GORELEASER_CURRENT_TAG="${CIRCLE_TAG}"' >> $BASH_ENV - run: goreleaser snapshot: - working_directory: /go/src/github.com/fairwindsops/pluto + working_directory: /home/circleci/go/src/github.com/fairwindsops/pluto resource_class: large docker: - image: goreleaser/goreleaser:v1.5.0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pluto-5.6.0/cmd/root.go new/pluto-5.7.0/cmd/root.go --- old/pluto-5.6.0/cmd/root.go 2022-03-17 22:10:53.000000000 +0100 +++ new/pluto-5.7.0/cmd/root.go 2022-03-23 14:36:08.000000000 +0100 @@ -47,6 +47,7 @@ customColumns []string componentsFromUser []string onlyShowRemoved bool + kubeContext string ) const ( @@ -78,6 +79,7 @@ rootCmd.AddCommand(detectHelmCmd) detectHelmCmd.PersistentFlags().StringVarP(&namespace, "namespace", "n", "", "Only detect releases in a specific namespace.") + detectHelmCmd.PersistentFlags().StringVar(&kubeContext, "kube-context", "", "The kube context to use. If blank, defaults to current context.") rootCmd.AddCommand(listVersionsCmd) rootCmd.AddCommand(detectCmd) @@ -100,12 +102,20 @@ cmd.Flags().VisitAll(func(f *pflag.Flag) { if strings.Contains(f.Name, "-") { envVarSuffix := strings.ToUpper(strings.ReplaceAll(f.Name, "-", "_")) - v.BindEnv(f.Name, fmt.Sprintf("%s_%s", envPrefix, envVarSuffix)) + err := v.BindEnv(f.Name, fmt.Sprintf("%s_%s", envPrefix, envVarSuffix)) + if err != nil { + klog.Errorf("error binding flag %s to env var %s_%s: %w", f.Name, envPrefix, envVarSuffix, err) + return + } } if !f.Changed && v.IsSet(f.Name) { val := v.Get(f.Name) - cmd.Flags().Set(f.Name, fmt.Sprintf("%v", val)) + err := cmd.Flags().Set(f.Name, fmt.Sprintf("%v", val)) + if err != nil { + klog.Errorf("error setting flag %s to %v: %w", f.Name, val, err) + return + } } }) } @@ -123,7 +133,10 @@ os.Exit(1) }, PersistentPreRunE: func(cmd *cobra.Command, args []string) error { - initializeConfig(cmd) + err := initializeConfig(cmd) + if err != nil { + return err + } //verify output option if !api.StringInSlice(outputFormat, outputOptions) { @@ -272,8 +285,12 @@ Short: "detect-helm", Long: `Detect Kubernetes apiVersions in a helm release (in cluster)`, Run: func(cmd *cobra.Command, args []string) { - h := helm.NewHelm(namespace, apiInstance) - err := h.FindVersions() + h, err := helm.NewHelm(namespace, kubeContext, apiInstance) + if err != nil { + fmt.Printf("error getting helm configuration: %s\n", err.Error()) + os.Exit(1) + } + err = h.FindVersions() if err != nil { fmt.Println("Error running helm-detect:", err) os.Exit(1) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pluto-5.6.0/docs/advanced.md new/pluto-5.7.0/docs/advanced.md --- old/pluto-5.6.0/docs/advanced.md 2022-03-17 22:10:53.000000000 +0100 +++ new/pluto-5.7.0/docs/advanced.md 2022-03-23 14:36:08.000000000 +0100 @@ -185,6 +185,10 @@ Please note that we do not allow overriding anything contained in the default `versions.yaml` that Pluto uses. +## Kube Context + +When doing helm detection, you may want to use the `--kube-context` to specify a particular context you wish to use in your kubeconfig. + ## Environment Variables For easier use, you can specify flags by using environment variables. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pluto-5.6.0/e2e/tests/01_helm-detect-3.yaml new/pluto-5.7.0/e2e/tests/01_helm-detect-3.yaml --- old/pluto-5.6.0/e2e/tests/01_helm-detect-3.yaml 2022-03-17 22:10:53.000000000 +0100 +++ new/pluto-5.7.0/e2e/tests/01_helm-detect-3.yaml 2022-03-23 14:36:08.000000000 +0100 @@ -59,6 +59,13 @@ - result.code ShouldEqual 3 - result.systemout ShouldEqual {"items":[{"name":"test/test-helm3chart-v1beta1","namespace":"default","api":{"version":"extensions/v1beta1","kind":"Deployment","deprecated-in":"v1.9.0","removed-in":"v1.16.0","replacement-api":"apps/v1","component":"k8s"},"deprecated":true,"removed":true},{"name":"test/test-helm3chart-v1beta1","namespace":"demo2","api":{"version":"extensions/v1beta1","kind":"Deployment","deprecated-in":"v1.9.0","removed-in":"v1.16.0","replacement-api":"apps/v1","component":"k8s"},"deprecated":true,"removed":true}],"target-versions":{"cert-manager":"v1.5.3","istio":"v1.11.0","k8s":"v1.16.0"}} +- name: helm detect --kube-context=doesnotexist + steps: + - script: pluto detect-helm --kube-context doesnotexist + assertions: + - result.code ShouldEqual 1 + - result.systemout ShouldContainSubstring 'context "doesnotexist" does not exist' + - name: cleanup steps: - script: | diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pluto-5.6.0/go.mod new/pluto-5.7.0/go.mod --- old/pluto-5.6.0/go.mod 2022-03-17 22:10:53.000000000 +0100 +++ new/pluto-5.7.0/go.mod 2022-03-23 14:36:08.000000000 +0100 @@ -10,16 +10,16 @@ github.com/spf13/cobra v1.4.0 github.com/spf13/pflag v1.0.5 github.com/spf13/viper v1.10.1 - github.com/stretchr/testify v1.7.0 + github.com/stretchr/testify v1.7.1 golang.org/x/mod v0.5.1 golang.org/x/sys v0.0.0-20220310020820-b874c991c1a5 // indirect golang.org/x/text v0.3.7 // indirect gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b helm.sh/helm/v3 v3.8.1 - k8s.io/api v0.23.4 - k8s.io/apimachinery v0.23.4 - k8s.io/client-go v0.23.4 - k8s.io/klog/v2 v2.40.1 + k8s.io/api v0.23.5 + k8s.io/apimachinery v0.23.5 + k8s.io/client-go v0.23.5 + k8s.io/klog/v2 v2.60.1 sigs.k8s.io/controller-runtime v0.11.1 ) @@ -38,7 +38,7 @@ github.com/evanphx/json-patch v4.12.0+incompatible // indirect github.com/fsnotify/fsnotify v1.5.1 // indirect github.com/go-gorp/gorp/v3 v3.0.2 // indirect - github.com/go-logr/logr v1.2.2 // indirect + github.com/go-logr/logr v1.2.3 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/golang-jwt/jwt/v4 v4.3.0 // indirect github.com/golang/protobuf v1.5.2 // indirect diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pluto-5.6.0/go.sum new/pluto-5.7.0/go.sum --- old/pluto-5.6.0/go.sum 2022-03-17 22:10:53.000000000 +0100 +++ new/pluto-5.7.0/go.sum 2022-03-23 14:36:08.000000000 +0100 @@ -409,8 +409,8 @@ github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.2.2 h1:ahHml/yUpnlb96Rp8HCvtYVPY8ZYpxq3g7UYchIYwbs= -github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= +github.com/go-logr/logr v1.2.3 h1:2DntVwHkVopvECVRSlL5PSo9eG+cAkDCuckLubN+rq0= +github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/zapr v1.2.0 h1:n4JnPI1T3Qq1SFEi/F8rwLrZERp2bso19PJZDB9dayk= github.com/go-logr/zapr v1.2.0/go.mod h1:Qa4Bsj2Vb+FAVeAKsLD8RLQ+YRJB8YDmOAKxaBQf7Ro= github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= @@ -990,8 +990,9 @@ github.com/stretchr/testify v1.4.0/go.mod h1:j7eGeouHqKxXV5pUuKE4zz7dFj8WfuZ+81PSLYec5m4= github.com/stretchr/testify v1.5.1/go.mod h1:5W2xD1RspED5o8YsWQXVCued0rvSQ+mT+I5cxcmMvtA= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.7.0 h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.7.1 h1:5TQK59W5E3v0r2duFAb7P95B6hEeOyEnHRa8MjYSMTY= +github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/subosito/gotenv v1.2.0 h1:Slr1R9HxAlEKefgq5jn9U+DnETlIUa6HfgEzj0g5d7s= github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= github.com/syndtr/gocapability v0.0.0-20170704070218-db04d3cc01c8/go.mod h1:hkRG7XYTFWNJGYcbNJQlaLq0fg1yr4J4t/NcTQtrfww= @@ -1692,8 +1693,9 @@ k8s.io/api v0.20.4/go.mod h1:++lNL1AJMkDymriNniQsWRkMDzRaX2Y/POTUi8yvqYQ= k8s.io/api v0.20.6/go.mod h1:X9e8Qag6JV/bL5G6bU8sdVRltWKmdHsFUGS3eVndqE8= k8s.io/api v0.23.0/go.mod h1:8wmDdLBHBNxtOIytwLstXt5E9PddnZb0GaMcqsvDBpg= -k8s.io/api v0.23.4 h1:85gnfXQOWbJa1SiWGpE9EEtHs0UVvDyIsSMpEtl2D4E= k8s.io/api v0.23.4/go.mod h1:i77F4JfyNNrhOjZF7OwwNJS5Y1S9dpwvb9iYRYRczfI= +k8s.io/api v0.23.5 h1:zno3LUiMubxD/V1Zw3ijyKO3wxrhbUF1Ck+VjBvfaoA= +k8s.io/api v0.23.5/go.mod h1:Na4XuKng8PXJ2JsploYYrivXrINeTaycCGcYgF91Xm8= k8s.io/apiextensions-apiserver v0.23.0/go.mod h1:xIFAEEDlAZgpVBl/1VSjGDmLoXAWRG40+GsWhKhAxY4= k8s.io/apiextensions-apiserver v0.23.4 h1:AFDUEu/yEf0YnuZhqhIFhPLPhhcQQVuR1u3WCh0rveU= k8s.io/apiextensions-apiserver v0.23.4/go.mod h1:TWYAKymJx7nLMxWCgWm2RYGXHrGlVZnxIlGnvtfYu+g= @@ -1701,8 +1703,9 @@ k8s.io/apimachinery v0.20.4/go.mod h1:WlLqWAHZGg07AeltaI0MV5uk1Omp8xaN0JGLY6gkRpU= k8s.io/apimachinery v0.20.6/go.mod h1:ejZXtW1Ra6V1O5H8xPBGz+T3+4gfkTCeExAHKU57MAc= k8s.io/apimachinery v0.23.0/go.mod h1:fFCTTBKvKcwTPFzjlcxp91uPFZr+JA0FubU4fLzzFYc= -k8s.io/apimachinery v0.23.4 h1:fhnuMd/xUL3Cjfl64j5ULKZ1/J9n8NuQEgNL+WXWfdM= k8s.io/apimachinery v0.23.4/go.mod h1:BEuFMMBaIbcOqVIJqNZJXGFTP4W6AycEpb5+m/97hrM= +k8s.io/apimachinery v0.23.5 h1:Va7dwhp8wgkUPWsEXk6XglXWU4IKYLKNlv8VkX7SDM0= +k8s.io/apimachinery v0.23.5/go.mod h1:BEuFMMBaIbcOqVIJqNZJXGFTP4W6AycEpb5+m/97hrM= k8s.io/apiserver v0.20.1/go.mod h1:ro5QHeQkgMS7ZGpvf4tSMx6bBOgPfE+f52KwvXfScaU= k8s.io/apiserver v0.20.4/go.mod h1:Mc80thBKOyy7tbvFtB4kJv1kbdD0eIH8k8vianJcbFM= k8s.io/apiserver v0.20.6/go.mod h1:QIJXNt6i6JB+0YQRNcS0hdRHJlMhflFmsBDeSgT1r8Q= @@ -1713,8 +1716,9 @@ k8s.io/client-go v0.20.4/go.mod h1:LiMv25ND1gLUdBeYxBIwKpkSC5IsozMMmOOeSJboP+k= k8s.io/client-go v0.20.6/go.mod h1:nNQMnOvEUEsOzRRFIIkdmYOjAZrC8bgq0ExboWSU1I0= k8s.io/client-go v0.23.0/go.mod h1:hrDnpnK1mSr65lHHcUuIZIXDgEbzc7/683c6hyG4jTA= -k8s.io/client-go v0.23.4 h1:YVWvPeerA2gpUudLelvsolzH7c2sFoXXR5wM/sWqNFU= k8s.io/client-go v0.23.4/go.mod h1:PKnIL4pqLuvYUK1WU7RLTMYKPiIh7MYShLshtRY9cj0= +k8s.io/client-go v0.23.5 h1:zUXHmEuqx0RY4+CsnkOn5l0GU+skkRXKGJrhmE2SLd8= +k8s.io/client-go v0.23.5/go.mod h1:flkeinTO1CirYgzMPRWxUCnV0G4Fbu2vLhYCObnt/r4= k8s.io/code-generator v0.19.7/go.mod h1:lwEq3YnLYb/7uVXLorOJfxg+cUu2oihFhHZ0n9NIla0= k8s.io/code-generator v0.23.0/go.mod h1:vQvOhDXhuzqiVfM/YHp+dmg10WDZCchJVObc9MvowsE= k8s.io/code-generator v0.23.4/go.mod h1:S0Q1JVA+kSzTI1oUvbKAxZY/DYbA/ZUb4Uknog12ETk= @@ -1736,8 +1740,8 @@ k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= k8s.io/klog/v2 v2.4.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= k8s.io/klog/v2 v2.30.0/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= -k8s.io/klog/v2 v2.40.1 h1:P4RRucWk/lFOlDdkAr3mc7iWFkgKrZY9qZMAgek06S4= -k8s.io/klog/v2 v2.40.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= +k8s.io/klog/v2 v2.60.1 h1:VW25q3bZx9uE3vvdL6M8ezOX79vA2Aq1nEWLqNQclHc= +k8s.io/klog/v2 v2.60.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= k8s.io/kube-openapi v0.0.0-20200805222855-6aeccd4b50c6/go.mod h1:UuqjUnNftUyPE5H64/qeyjQoUZhGpeFDVdxjTeEVN2o= k8s.io/kube-openapi v0.0.0-20201113171705-d219536bb9fd/go.mod h1:WOJ3KddDSol4tAGcJo0Tvi+dK12EcqSLqcWsryKMpfM= k8s.io/kube-openapi v0.0.0-20210421082810-95288971da7e/go.mod h1:vHXdDvt9+2spS2Rx9ql3I8tycm3H9FDfdUoIuKCefvw= diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pluto-5.6.0/pkg/helm/helm.go new/pluto-5.7.0/pkg/helm/helm.go --- old/pluto-5.6.0/pkg/helm/helm.go 2022-03-17 22:10:53.000000000 +0100 +++ new/pluto-5.7.0/pkg/helm/helm.go 2022-03-23 14:36:08.000000000 +0100 @@ -58,12 +58,17 @@ } // NewHelm returns a basic helm struct with the version of helm requested -func NewHelm(namespace string, instance *api.Instance) *Helm { +func NewHelm(namespace, kubeContext string, instance *api.Instance) (*Helm, error) { + config, err := getConfigInstance(kubeContext) + if err != nil { + return nil, err + } + return &Helm{ - Kube: getConfigInstance(), + Kube: config, Namespace: namespace, Instance: instance, - } + }, nil } // NewHelmWithKubeClient returns a helm struct with version of helm requested diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pluto-5.6.0/pkg/helm/kube.go new/pluto-5.7.0/pkg/helm/kube.go --- old/pluto-5.6.0/pkg/helm/kube.go 2022-03-17 22:10:53.000000000 +0100 +++ new/pluto-5.7.0/pkg/helm/kube.go 2022-03-23 14:36:08.000000000 +0100 @@ -15,11 +15,11 @@ package helm import ( - "fmt" - "os" "sync" "k8s.io/client-go/kubernetes" + "k8s.io/klog/v2" + // This is required to auth to cloud providers (i.e. GKE) _ "k8s.io/client-go/plugin/pkg/client/auth" "sigs.k8s.io/controller-runtime/pkg/client/config" @@ -33,27 +33,38 @@ var once sync.Once // GetConfigInstance returns a Kubernetes interface based on the current configuration -func getConfigInstance() *kube { +func getConfigInstance(kubeContext string) (*kube, error) { + var err error + var client kubernetes.Interface + once.Do(func() { if kubeClient == nil { + client, err = getKubeClient(kubeContext) + kubeClient = &kube{ - Client: getKubeClient(), + Client: client, } } }) - return kubeClient + if err != nil { + return nil, err + } + return kubeClient, nil } -func getKubeClient() kubernetes.Interface { - kubeConf, err := config.GetConfig() +func getKubeClient(kubeContext string) (kubernetes.Interface, error) { + if kubeContext != "" { + klog.V(3).Infof("using kube context: %s", kubeContext) + } + + kubeConfig, err := config.GetConfigWithContext(kubeContext) + if err != nil { - fmt.Println("Error getting kubeconfig:", err) - os.Exit(1) + return nil, err } - clientset, err := kubernetes.NewForConfig(kubeConf) + clientset, err := kubernetes.NewForConfig(kubeConfig) if err != nil { - fmt.Println("Error creating kubernetes client:", err) - os.Exit(1) + return nil, err } - return clientset + return clientset, nil } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pluto-5.6.0/pkg/helm/kube_test.go new/pluto-5.7.0/pkg/helm/kube_test.go --- old/pluto-5.6.0/pkg/helm/kube_test.go 2022-03-17 22:10:53.000000000 +0100 +++ new/pluto-5.7.0/pkg/helm/kube_test.go 2022-03-23 14:36:08.000000000 +0100 @@ -1,7 +1,12 @@ package helm import ( + "os" + "testing" + + "github.com/stretchr/testify/assert" testclient "k8s.io/client-go/kubernetes/fake" + _ "k8s.io/client-go/plugin/pkg/client/auth" ) func getMockConfigInstance() *kube { @@ -10,3 +15,42 @@ } return kubeClient } + +func Test_getKubeClient(t *testing.T) { + tests := []struct { + name string + kubeContext string + kubeConfig string + wantErr bool + }{ + { + name: "context does not exist", + kubeContext: "farglebargle", + kubeConfig: "testdata/kubeconfig", + wantErr: true, + }, + { + name: "context exists", + kubeContext: "kind-kind", + kubeConfig: "testdata/kubeconfig", + wantErr: false, + }, + { + name: "invalid kubeconfig", + kubeContext: "kind-kind", + kubeConfig: "testdata/kubeconfig_invalid", + wantErr: true, + }, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + os.Setenv("KUBECONFIG", tt.kubeConfig) + _, err := getKubeClient(tt.kubeContext) + if tt.wantErr { + assert.Error(t, err) + } else { + assert.NoError(t, err) + } + }) + } +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pluto-5.6.0/pkg/helm/testdata/kubeconfig new/pluto-5.7.0/pkg/helm/testdata/kubeconfig --- old/pluto-5.6.0/pkg/helm/testdata/kubeconfig 1970-01-01 01:00:00.000000000 +0100 +++ new/pluto-5.7.0/pkg/helm/testdata/kubeconfig 2022-03-23 14:36:08.000000000 +0100 @@ -0,0 +1,19 @@ +apiVersion: v1 +clusters: +- cluster: + certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUM1ekNDQWMrZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRJeU1ETXdNekU1TURNek5sb1hEVE15TURJeU9URTVNRE16Tmxvd0ZURVRNQkVHQTFVRQpBeE1LYTNWaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBS0haCjhyVXFhN1JadVNNUlU2eXNNcDJLc1U3cnJHQTdGWmpMVjZzRG1qUG5Xb2U3enZEdGlkQUhwQ2FpM0lxblBMOVgKMTBmV2RFQnU3MjN1YWFYV3VTNVRBQWNkZSt4NU45WmE5S3hTRXV2OG1zeE1wUjl0ZmJsR2ltSURiNSs3YW5PTgo4ZVV2UzBVR05pNENIWUl2aGM3c2wxbTNBaDRIUWVBMzBnL2xORHJOTytkVlYwaVczbkpNNE8yL1JBOW54UlVZCmQxbmxwQ1R1SkZmaThKeXlkZnpwd0x0QnROMW5zNVRLUThsdlJEWStZTER3OGY0aVhMSzB5YVVhUkZmVkhWSzkKRk43WWRCM2tnbXAxU25YYUNFVngrWkZRd0VkR2EzcEZ1ZHJiL01DMDZ6cFhnQzluTCtoRy82U1dCK3VXS2hiQwpmYXVFcnRNeVBVbmJJUUFzMTEwQ0F3RUFBYU5DTUVBd0RnWURWUjBQQVFIL0JBUURBZ0trTUE4R0ExVWRFd0VCCi93UUZNQU1CQWY4d0hRWURWUjBPQkJZRUZCUVI2WXpWRDJUOVVlK0tacVJyNU1ZSEY4bm1NQTBHQ1NxR1NJYjMKRFFFQkN3VUFBNElCQVFBZ3VkelhtYXpRb1gyWDB0QnY0WG9ieWN6ZmMyUTFSd 29PUVY2TW5aNUE5NnJrS0kzawpHNklRS3ptWTFWNDhRRDhPTlZxdGdaRnNrU1ZrK05tSGM1c1Q2eE1YSWtDa2xFcUJLbFh4NHk5WDNHdkRjbERqClFtc044V0lHTThhbmFNRmtkajRqcDhZZEZWWktxcEpuaXljOVpIL1ozRjlITnFyMWlaL2VwbkZXczRMcnl4bkcKOWZjNlBjVnEvQVROdUhxalpGNjRFTkxxeHUwVUJvTFlCMFFuU1ZlalM3RnpRMzV4RHI5dGRpVnFKUzhhcmJRcgo0RHpuaU1rendzNUlQcGlvelNVSUlTeVVSc0pra2R0bW5OU3pwcWc3Y09Xc3NlYktXUU8rbURMSHcyMVVxb0JrCkZZbUhDVnNTRHlOaXdGYWtadUhZRGN5dDdjbDMwY1cvYjhmcAotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== + server: https://127.0.0.1:54753 + name: kind-kind +contexts: +- context: + cluster: kind-kind + user: kind-kind + name: kind-kind +current-context: kind-kind +kind: Config +preferences: {} +users: +- name: kind-kind + user: + client-certificate-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSURJVENDQWdtZ0F3SUJBZ0lJU2pHek1STjQ4aTR3RFFZSktvWklodmNOQVFFTEJRQXdGVEVUTUJFR0ExVUUKQXhNS2EzVmlaWEp1WlhSbGN6QWVGdzB5TWpBek1ETXhPVEF6TXpaYUZ3MHlNekF6TURNeE9UQXpNemxhTURReApGekFWQmdOVkJBb1REbk41YzNSbGJUcHRZWE4wWlhKek1Sa3dGd1lEVlFRREV4QnJkV0psY201bGRHVnpMV0ZrCmJXbHVNSUlCSWpBTkJna3Foa2lHOXcwQkFRRUZBQU9DQVE4QU1JSUJDZ0tDQVFFQTBaVXlOUXdRYk1hbFppRkUKUCthZThxY091TFF3QXUzU3FVNGRkcjNWL0hHeVJRWk4vZXRCTDRBaGFnK0E1ZHl3L3g5bnFJK1pTZStjNXVQUwpHUHNqaE96SFdnYi9XNHdvcXZ4cXdLQXd2cEFrZW9CeTEwYWxWaEVOcHVTbWk5cDRxalVpNm84ZmdSUDJCK1BlCkI5QmFLSDBQcUtMZDc4Q1hJci9rcVhkY0dqWHNZMjZNU1FSYVF0VFExY0xaR0VOakRNbnBxNnppb256NHoxZXEKTXlZRnB6eHJDZ0dqVTZvVU45cTJBRFpQZ1pyREJUdzFudTB6ZEJTRHZhVkQrV2pqN3VPMUI1WCt0Qml3NjJnZApPUEZnOE9LcThZUitSNUZpSzQrNE5jSjgvVzVkVWg3ZlZQRHVZL2VSMDg2M1NMdUlQS0srcDZaMW9mSEx5YnZWCm1jMm50d0lEQVFBQm8xWXdWREFPQmdOVkhROEJBZjhFQkFNQ0JhQXdFd1lEVlIwbEJBd3dDZ1lJS3dZQkJRVUgKQXdJd0RBWURWUjBUQVFIL0JBSXdBREFmQmdOVkhTTUVHREFXZ0JRVUVlbU0xUTlr L1ZIdmltYWthK1RHQnhmSgo1akFOQmdrcWhraUc5dzBCQVFzRkFBT0NBUUVBRTdNL21iSDh5UzIrelRCYTMycCtxMXl2TUFGbC9tbHVVaVZGCjJjVks5SWRDbHpYTGZMWTJWdVphbGdWOEdJdmYxTi9IK1dpQW5DYUdKeUN0R0c0VTVQQWJoVlRaNHFkVGRDcG8KU1R6Y0JXczJJeXRMSU1OclMzU2cwQXVLZ2ovZzZRVGxSaXN6SHZvazkrQURzenQvem1LeFZlbEM0aGFnYXVRVwpOaktZenFFWEN1SmFnUkQxY1lhYksxQlgyQ2cxYytpY0F3ZTdBazFKSmcxQ2JFVTNZSUZ2Yks1THJvK0hDSjArCk1RdUZ1T1VpQm1ScFlwY1ZUMkpCbHVmdjYvNENvcmZtdUdCeXUyN3E1ZmNUVkFGSmlKaGgxYWRBTGY5cURpY1kKUFpoYXNNTysvcTlpSkhRUk1KWklvNVNLWnBUMzg3WEE4SUI3THMvUjg2QVVTL3BVUWc9PQotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== + client-key-data: LS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLQpNSUlFcGdJQkFBS0NBUUVBMFpVeU5Rd1FiTWFsWmlGRVArYWU4cWNPdUxRd0F1M1NxVTRkZHIzVi9IR3lSUVpOCi9ldEJMNEFoYWcrQTVkeXcveDlucUkrWlNlK2M1dVBTR1BzamhPekhXZ2IvVzR3b3F2eHF3S0F3dnBBa2VvQnkKMTBhbFZoRU5wdVNtaTlwNHFqVWk2bzhmZ1JQMkIrUGVCOUJhS0gwUHFLTGQ3OENYSXIva3FYZGNHalhzWTI2TQpTUVJhUXRUUTFjTFpHRU5qRE1ucHE2emlvbno0ejFlcU15WUZwenhyQ2dHalU2b1VOOXEyQURaUGdackRCVHcxCm51MHpkQlNEdmFWRCtXamo3dU8xQjVYK3RCaXc2MmdkT1BGZzhPS3E4WVIrUjVGaUs0KzROY0o4L1c1ZFVoN2YKVlBEdVkvZVIwODYzU0x1SVBLSytwNloxb2ZITHlidlZtYzJudHdJREFRQUJBb0lCQVFDeHR5Vi92ZDhmbmNJYQp2QkszYk1OVFZ6MHdlZnBNUVlYa2NveWhaNC9RSkVqYUp1SnpjYzB3amlISFlhWVhRL0FDSllzc2I3ZTM3aXJKCnpsMFZPYitBczViSFRDKzBYVUVPM0VOWlczeDUycGhVR0I5SlZHcFdkTmR5c1doWUpzVXk3eVBRYWRSNUM0Z1EKWUxTaFE1ZHZ4YnhGYnZWcW01Q01zdE1lc0V1MUhJT0VmMUNEVHMzVTJON2VrVVJFUXdXcXlyVmUyWFN2R3grZAp4SHpiUzFMRzZjcGdpT1BCVXBxUitpcDZBZFlkd0FoWW9kQ1ZXUWVtQWw5TDhNMW5TNUVRME0xcUNzR0VidUpCClZ1cGszaWlmeUViL2VqZ1kvUkMrY01aelZkNEFVTVlsenJGaFNvYk9RQk1NMHFRbFky VHQ2bGR1OHR4YzNMRDYKTG9oL2pWUmhBb0dCQU8ydW9tbmMvYk81bGRpSTBJZUt6bzQvcEUvYWlJUlRxUjRuTjVOUVdkLzkya3NSenNtNApRL0tiMjJhNVlwRU93TWphZVFpdjJ3UGdrUzRJYTBVaVJyZlA3VjdEMzRwVG5wTytBVGtqV1B3TkJNMjNzc01pClpNZnJlWUMzSjlnQUhDQ0hjZW5VSXRGSW9zeUtncXhxVExCbEFqTTYvNHVydHNlc3ovUFFBMGxkQW9HQkFPRzgKTEdQY2FhSDN5dlVycjU2dDFjaHBEVm5MeEZUVmhzZ2lTdmxzUWpjQ1dCT1RnRDE4dFRmd2phY1VENEFyTjdRUgp4QndUMHhhNUppNitXT1ArRUhaNFpXYmovR3dXc2YxQzlLRVJhUEJhQ0MxWWViV2FPNU5Ka2NmMVNibzA5T1ZLCll0bm1kdjRYWCtUd1laUWd5Z0hMSXlWUkppY0NvSEliTVFyNit5QWpBb0dCQUw4LzdCUCs3RzIzZ1dtUS9TcHoKZUsxaGJGZU00cGlIc09kQWF5bXdXQUV5aEhvdlJCTnduOHdSdVVNNUhLVFlHQ3dHRDZuN3h1R2h5M0FjK2lQUQo1dEoxRHUxWDh3R2RNMVp5WncyUThjTXV2cFRCb2FmK2Z0V1hGbGVLQ1JkM1R5cWxrZld5NnFrNEp6Y3FwT2NUClNjNE9HTzBjSmhBL0JYNDZBY0tQdUhWSkFvR0JBS2IzZzdIOWgxaVpLMUw3RkRSL2lpQnBxOGxla2dMWnlZN2cKNXFuazdIazV6Nkh6T1NqQnhGenpIaU9XRC8wU2VtcER0ZFc2eUNrSG0vbDVLOUMvekxlRVNDUzV2NnpIZ0xHKwp3NmtiY281TldiMElzMFdqSml2RWdBTHlLSzJGbkJxNVViS3c2QlQ3ZngrY3VlQlIvSGtsSXdMb0toc3lzekNUCmNrd1g1b1lYQW9HQkFMVHhmQ 2cwaGY4bGJwUmlNeVFQc2NBMlJUS003T3pmZCtFZ1NFOHNxWHU0akxiQ3FJR2kKSC95TlhIRHZ6Y2tkZ1BkRW1BOVRqWit4SXVnK2JDMnVidGNCeHpMS1VPSko1MVplNEZNNU81eFY0MWpiTDdIcgo5QUdYdFA2UlEwU0hTeEQvZjBtQkMwdGdQZHcrajN4SHd4R3FKTTZkSWp2U0EwUmJFNG9HU0FWNAotLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLQo= diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/pluto-5.6.0/pkg/helm/testdata/kubeconfig_invalid new/pluto-5.7.0/pkg/helm/testdata/kubeconfig_invalid --- old/pluto-5.6.0/pkg/helm/testdata/kubeconfig_invalid 1970-01-01 01:00:00.000000000 +0100 +++ new/pluto-5.7.0/pkg/helm/testdata/kubeconfig_invalid 2022-03-23 14:36:08.000000000 +0100 @@ -0,0 +1,19 @@ +apiVersion: v1 +clusters: +- cluster: + certificate-authority-data: LS0tLS1CRUdJTiBDRVJUSUZJQ0FURS0tLS0tCk1JSUM1ekNDQWMrZ0F3SUJBZ0lCQURBTkJna3Foa2lHOXcwQkFRc0ZBREFWTVJNd0VRWURWUVFERXdwcmRXSmwKY201bGRHVnpNQjRYRFRJeU1ETXdNekU1TURNek5sb1hEVE15TURJeU9URTVNRE16Tmxvd0ZURVRNQkVHQTFVRQpBeE1LYTNWaVpYSnVaWFJsY3pDQ0FTSXdEUVlKS29aSWh2Y05BUUVCQlFBRGdnRVBBRENDQVFvQ2dnRUJBS0haCjhyVXFhN1JadVNNUlU2eXNNcDJLc1U3cnJHQTdGWmpMVjZzRG1qUG5Xb2U3enZEdGlkQUhwQ2FpM0lxblBMOVgKMTBmV2RFQnU3MjN1YWFYV3VTNVRBQWNkZSt4NU45WmE5S3hTRXV2OG1zeE1wUjl0ZmJsR2ltSURiNSs3YW5PTgo4ZVV2UzBVR05pNENIWUl2aGM3c2wxbTNBaDRIUWVBMzBnL2xORHJOTytkVlYwaVczbkpNNE8yL1JBOW54UlVZCmQxbmxwQ1R1SkZmaThKeXlkZnpwd0x0QnROMW5zNVRLUThsdlJEWStZTER3OGY0aVhMSzB5YVVhUkZmVkhWSzkKRk43WWRCM2tnbXAxU25YYUNFVngrWkZRd0VkR2EzcEZ1ZHJiL01DMDZ6cFhnQzluTCtoRy82U1dCK3VXS2hiQwpmYXVFcnRNeVBVbmJJUUFzMTEwQ0F3RUFBYU5DTUVBd0RnWURWUjBQQVFIL0JBUURBZ0trTUE4R0ExVWRFd0VCCi93UUZNQU1CQWY4d0hRWURWUjBPQkJZRUZCUVI2WXpWRDJUOVVlK0tacVJyNU1ZSEY4bm1NQTBHQ1NxR1NJYjMKRFFFQkN3VUFBNElCQVFBZ3VkelhtYXpRb1gyWDB0QnY0WG9ieWN6ZmMyUTFSd 29PUVY2TW5aNUE5NnJrS0kzawpHNklRS3ptWTFWNDhRRDhPTlZxdGdaRnNrU1ZrK05tSGM1c1Q2eE1YSWtDa2xFcUJLbFh4NHk5WDNHdkRjbERqClFtc044V0lHTThhbmFNRmtkajRqcDhZZEZWWktxcEpuaXljOVpIL1ozRjlITnFyMWlaL2VwbkZXczRMcnl4bkcKOWZjNlBjVnEvQVROdUhxalpGNjRFTkxxeHUwVUJvTFlCMFFuU1ZlalM3RnpRMzV4RHI5dGRpVnFKUzhhcmJRcgo0RHpuaU1rendzNUlQcGlvelNVSUlTeVVSc0pra2R0bW5OU3pwcWc3Y09Xc3NlYktXUU8rbURMSHcyMVVxb0JrCkZZbUhDVnNTRHlOaXdGYWtadUhZRGN5dDdjbDMwY1cvYjhmcAotLS0tLUVORCBDRVJUSUZJQ0FURS0tLS0tCg== + server: https://127.0.0.1:54753 + name: kind-kind +contexts: +- context: + cluster: kind-kind + user: kind-kind + name: kind-kind +current-context: kind-kind +kind: Config +preferences: {} +users: +- name: kind-kind + user: + client-certificate-data: fargle + client-key-data: bargle ++++++ vendor.tar.gz ++++++ ++++ 3233 lines of diff (skipped)