Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package pluto for openSUSE:Factory checked 
in at 2023-02-07 18:49:01
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/pluto (Old)
 and      /work/SRC/openSUSE:Factory/.pluto.new.4462 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "pluto"

Tue Feb  7 18:49:01 2023 rev:22 rq:1063481 version:5.13.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/pluto/pluto.changes      2023-01-06 
17:06:10.512390117 +0100
+++ /work/SRC/openSUSE:Factory/.pluto.new.4462/pluto.changes    2023-02-07 
18:49:07.755145916 +0100
@@ -1,0 +2,12 @@
+Mon Feb 06 17:27:04 UTC 2023 - ka...@b1-systems.de
+
+- Update to version 5.13.0:
+  * fix: add removed-in to storage.k8s.io/v1beta1.CSIStorageCapacity (#448)
+  * feat: add namespace and context to API Resources method (#410)
+  * Fixed a linter error causing lack of compilation in Go 1.19 by removing 
deprecated io/ioutil functions and replacing them with their Go 1.16 
counterparts. (#439)
+  * Update alpine and other build dependencies (#433)
+  * Remove experimental features in build (#429)
+  * feat: allow hiding headers in output (#417)
+  * Bump helm.sh/helm/v3 from 3.10.1 to 3.10.3 (#426)
+
+-------------------------------------------------------------------

Old:
----
  pluto-5.12.0.tar.gz

New:
----
  pluto-5.13.0.tar.gz

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ pluto.spec ++++++
--- /var/tmp/diff_new_pack.30yQ0y/_old  2023-02-07 18:49:08.423149507 +0100
+++ /var/tmp/diff_new_pack.30yQ0y/_new  2023-02-07 18:49:08.427149528 +0100
@@ -19,7 +19,7 @@
 %define __arch_install_post export NO_BRP_STRIP_DEBUG=true
 
 Name:           pluto
-Version:        5.12.0
+Version:        5.13.0
 Release:        0
 Summary:        A cli tool to help discover deprecated apiVersions in 
Kubernetes
 License:        Apache-2.0

++++++ _service ++++++
--- /var/tmp/diff_new_pack.30yQ0y/_old  2023-02-07 18:49:08.471149764 +0100
+++ /var/tmp/diff_new_pack.30yQ0y/_new  2023-02-07 18:49:08.475149786 +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.12.0</param>
+    <param name="revision">v5.13.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.12.0.tar.gz</param>
+    <param name="archive">pluto-5.13.0.tar.gz</param>
   </service>
 </services>
 

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.30yQ0y/_old  2023-02-07 18:49:08.499149915 +0100
+++ /var/tmp/diff_new_pack.30yQ0y/_new  2023-02-07 18:49:08.499149915 +0100
@@ -1,6 +1,6 @@
 <servicedata>
 <service name="tar_scm">
                 <param name="url">https://github.com/FairwindsOps/pluto</param>
-              <param 
name="changesrevision">dc11ba13c840de0034510bff4712f651bf5ff45c</param></service></servicedata>
+              <param 
name="changesrevision">87c17f983a8d9dc22e53db6f1b21e3d575081aa2</param></service></servicedata>
 (No newline at EOF)
 

++++++ pluto-5.12.0.tar.gz -> pluto-5.13.0.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pluto-5.12.0/.circleci/config.yml 
new/pluto-5.13.0/.circleci/config.yml
--- old/pluto-5.12.0/.circleci/config.yml       2023-01-04 21:59:36.000000000 
+0100
+++ new/pluto-5.13.0/.circleci/config.yml       2023-02-04 14:57:00.000000000 
+0100
@@ -8,7 +8,7 @@
 executors:
   golang-exec:
     docker:
-      - image: cimg/go:1.18
+      - image: cimg/go:1.19
 
 references:
   e2e_config: &e2e_config
@@ -25,25 +25,15 @@
         only: /.*/
       tags:
         ignore: /.*/
-  enable_experimental_features: &enable_experimental_docker_features
-    run:
-      name: enable experimental features
-      command: |
-        set -ex
-        apk --update add openssh
-        ssh remote-docker \<<EOF
-          sudo bash -c 'echo "{\"experimental\": true}" > 
/etc/docker/daemon.json'
-          sudo systemctl restart docker
-        EOF
   install_vault_alpine: &install_vault_alpine
     run:
       name: install hashicorp vault
       command: |
         apk --update add curl yq
         cd /tmp
-        curl -LO 
https://releases.hashicorp.com/vault/1.9.7/vault_1.9.7_linux_amd64.zip
-        sha256sum vault_1.9.7_linux_amd64.zip | grep 
d312f6852cdec8d29e50b72af5d36c6890e1e8bfcbedfdb71785dfc11e907c3d
-        unzip vault_1.9.7_linux_amd64.zip
+        curl -LO 
https://releases.hashicorp.com/vault/1.12.2/vault_1.12.2_linux_amd64.zip
+        sha256sum vault_1.12.2_linux_amd64.zip | grep 
116c143de377a77a7ea455a367d5e9fe5290458e8a941a6e2dd85d92aaedba67
+        unzip vault_1.12.2_linux_amd64.zip
         mv vault /usr/bin/vault
   install_circleci: &install_circleci
     run:
@@ -58,7 +48,7 @@
   test:
     working_directory: /home/circleci/go/src/github.com/fairwindsops/pluto
     docker:
-      - image: cimg/go:1.18
+      - image: cimg/go:1.19
     steps:
       - checkout
       - run: go mod download && go mod verify
@@ -68,14 +58,12 @@
     resource_class: large
     shell: /bin/bash
     docker:
-      - image: goreleaser/goreleaser:v1.10.3
+      - image: goreleaser/goreleaser:v1.14.1
         environment:
           GO111MODULE: "on"
     steps:
       - checkout
-      - setup_remote_docker:
-          version: 20.10.6
-      - *enable_experimental_docker_features
+      - setup_remote_docker
       - *install_vault_alpine
       - rok8s/get_vault_env:
           vault_path: repo/global/env
@@ -91,12 +79,10 @@
     working_directory: /home/circleci/go/src/github.com/fairwindsops/pluto
     resource_class: large
     docker:
-      - image: goreleaser/goreleaser:v1.10.3
+      - image: goreleaser/goreleaser:v1.14.1
     steps:
       - checkout
-      - setup_remote_docker:
-          version: 20.10.6
-      - *enable_experimental_docker_features
+      - setup_remote_docker
       - run: goreleaser --snapshot --skip-sign
       - store_artifacts:
           path: dist
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pluto-5.12.0/Dockerfile new/pluto-5.13.0/Dockerfile
--- old/pluto-5.12.0/Dockerfile 2023-01-04 21:59:36.000000000 +0100
+++ new/pluto-5.13.0/Dockerfile 2023-02-04 14:57:00.000000000 +0100
@@ -1,4 +1,4 @@
-FROM alpine:3.16.3
+FROM alpine:3.17
 
 USER nobody
 COPY pluto /
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pluto-5.12.0/cmd/root.go new/pluto-5.13.0/cmd/root.go
--- old/pluto-5.12.0/cmd/root.go        2023-01-04 21:59:36.000000000 +0100
+++ new/pluto-5.13.0/cmd/root.go        2023-02-04 14:57:00.000000000 +0100
@@ -31,7 +31,7 @@
 import (
        "flag"
        "fmt"
-       "io/ioutil"
+       "io"
        "os"
        "strings"
 
@@ -63,6 +63,7 @@
        componentsFromUser     []string
        onlyShowRemoved        bool
        kubeContext            string
+       noHeaders              bool
        exitCode               int
 )
 
@@ -84,6 +85,7 @@
        rootCmd.PersistentFlags().BoolVar(&ignoreDeprecations, 
"ignore-deprecations", false, "Ignore the default behavior to exit 2 if 
deprecated apiVersions are found.")
        rootCmd.PersistentFlags().BoolVar(&ignoreRemovals, "ignore-removals", 
false, "Ignore the default behavior to exit 3 if removed apiVersions are 
found.")
        rootCmd.PersistentFlags().BoolVarP(&onlyShowRemoved, 
"only-show-removed", "r", false, "Only display the apiVersions that have been 
removed in the target version.")
+       rootCmd.PersistentFlags().BoolVarP(&noHeaders, "no-headers", "H", 
false, "When using the default or custom-column output format, don't print 
headers (default print headers).")
        rootCmd.PersistentFlags().StringVarP(&additionalVersionsFile, 
"additional-versions", "f", "", "Additional deprecated versions file to add to 
the list. Cannot contain any existing versions")
        rootCmd.PersistentFlags().StringToStringVarP(&targetVersions, 
"target-versions", "t", targetVersions, "A map of targetVersions to use. This 
flag supersedes all defaults in version files.")
        rootCmd.PersistentFlags().StringVarP(&outputFormat, "output", "o", 
"normal", "The output format to use. 
(normal|wide|custom|json|yaml|markdown|csv)")
@@ -97,11 +99,13 @@
        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(detectApiResourceCmd)
+       detectApiResourceCmd.PersistentFlags().StringVarP(&namespace, 
"namespace", "n", "", "Only detect resources in a specific namespace.")
+       detectApiResourceCmd.PersistentFlags().StringVar(&kubeContext, 
"kube-context", "", "The kube context to use. If blank, defaults to current 
context.")
+
        rootCmd.AddCommand(listVersionsCmd)
        rootCmd.AddCommand(detectCmd)
 
-       rootCmd.AddCommand(detectApiResourceCmd)
-
        klog.InitFlags(nil)
        pflag.CommandLine.AddGoFlag(flag.CommandLine.Lookup("v"))
 }
@@ -193,7 +197,7 @@
                var deprecatedVersionList []api.Version
                if additionalVersionsFile != "" {
                        klog.V(2).Infof("looking for versions file: %s", 
additionalVersionsFile)
-                       data, err := ioutil.ReadFile(additionalVersionsFile)
+                       data, err := os.ReadFile(additionalVersionsFile)
                        if err != nil {
                                return err
                        }
@@ -270,6 +274,7 @@
                        IgnoreDeprecations: ignoreDeprecations,
                        IgnoreRemovals:     ignoreRemovals,
                        OnlyShowRemoved:    onlyShowRemoved,
+                       NoHeaders:          noHeaders,
                        DeprecatedVersions: deprecatedVersionList,
                        Components:         componentList,
                }
@@ -283,14 +288,12 @@
        Short: "detect-files",
        Long:  `Detect Kubernetes apiVersions in a directory.`,
        Run: func(cmd *cobra.Command, args []string) {
-
                dir := finder.NewFinder(directory, apiInstance)
                err := dir.FindVersions()
                if err != nil {
                        fmt.Println("Error running finder:", err)
                        os.Exit(1)
                }
-
                err = apiInstance.DisplayOutput()
                if err != nil {
                        fmt.Println("Error Parsing Output:", err)
@@ -316,7 +319,32 @@
                        fmt.Println("Error running helm-detect:", err)
                        os.Exit(1)
                }
+               err = apiInstance.DisplayOutput()
+               if err != nil {
+                       fmt.Println("Error Parsing Output:", err)
+                       os.Exit(1)
+               }
+               retCode := apiInstance.GetReturnCode()
+               klog.V(5).Infof("retCode: %d", retCode)
+               os.Exit(retCode)
+       },
+}
 
+var detectApiResourceCmd = &cobra.Command{
+       Use:   "detect-api-resources",
+       Short: "detect-api-resources",
+       Long:  `Detect Kubernetes apiVersions from an active cluster (using 
last-applied-configuration annotation)`,
+       Run: func(cmd *cobra.Command, args []string) {
+               disCl, err := discoveryapi.NewDiscoveryClient(namespace, 
kubeContext, apiInstance)
+               if err != nil {
+                       fmt.Println("Error creating Discovery REST Client: ", 
err)
+                       os.Exit(1)
+               }
+               err = disCl.GetApiResources()
+               if err != nil {
+                       fmt.Println("Error getting API resources using 
discovery client:", err)
+                       os.Exit(1)
+               }
                err = apiInstance.DisplayOutput()
                if err != nil {
                        fmt.Println("Error Parsing Output:", err)
@@ -346,7 +374,7 @@
 
                if args[0] == "-" {
                        //stdin
-                       fileData, err := ioutil.ReadAll(os.Stdin)
+                       fileData, err := io.ReadAll(os.Stdin)
                        if err != nil {
                                fmt.Println("Error reading stdin:", err)
                                os.Exit(1)
@@ -400,33 +428,6 @@
        },
 }
 
-var detectApiResourceCmd = &cobra.Command{
-       Use:   "detect-api-resources",
-       Short: "detect-api-resources",
-       Long:  `Detect Kubernetes apiVersions from an active cluster.`,
-       Run: func(cmd *cobra.Command, args []string) {
-
-               disCl, err := discoveryapi.NewDiscoveryClient(apiInstance)
-               if err != nil {
-                       fmt.Println("Error creating Discovery REST Client: ", 
err)
-                       os.Exit(1)
-               }
-               err = disCl.GetApiResources()
-               if err != nil {
-                       fmt.Println("Error getting API resources using 
discovery client:", err)
-                       os.Exit(1)
-               }
-
-               err = apiInstance.DisplayOutput()
-               if err != nil {
-                       fmt.Println("Error Parsing Output:", err)
-                       os.Exit(1)
-               }
-               exitCode = apiInstance.GetReturnCode()
-               klog.V(5).Infof("retCode: %d", exitCode)
-       },
-}
-
 // Execute the stuff
 func Execute(VERSION string, COMMIT string, versionsFile []byte) {
        version = VERSION
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pluto-5.12.0/docs/advanced.md 
new/pluto-5.13.0/docs/advanced.md
--- old/pluto-5.12.0/docs/advanced.md   2023-01-04 21:59:36.000000000 +0100
+++ new/pluto-5.13.0/docs/advanced.md   2023-02-04 14:57:00.000000000 +0100
@@ -9,22 +9,23 @@
 
 ## Display Options
 
-In addition to the standard output, Pluto can output yaml, json, wide, custom 
columns or markdown.
+In addition to the standard output, Pluto can output in the following modes: 
Wide, YAML, JSON, CSV or Markdown.
+
+`--no-headers` option hides headers in the outputs for Text, CSV and Markdown 
output.
 
 ### Wide
 
 The wide output provides more information about when an apiVersion was removed 
or deprecated.
 
-```
+```shell
 $ pluto detect-helm -owide
-└─ pluto detect-helm -owide
 NAME                                         NAMESPACE               KIND      
                     VERSION                                REPLACEMENT         
              DEPRECATED   DEPRECATED IN   REMOVED   REMOVED IN
 cert-manager/cert-manager-webhook            cert-manager            
MutatingWebhookConfiguration   admissionregistration.k8s.io/v1beta1   
admissionregistration.k8s.io/v1   true         v1.16.0         false     v1.19.0
 ```
 
 ### JSON
 
-```
+```shell
 $ pluto detect-helm -ojson | jq .
 {
   "items": [
@@ -74,17 +75,17 @@
 ```
 
 ### Custom columns
-```
+
+```shell
 $ pluto detect-helm -ocustom --columns NAMESPACE,NAME
-└─ pluto detect-helm -ocustom --columns NAMESPACE,NAME
 NAME                                         NAMESPACE
 cert-manager/cert-manager-webhook            cert-manager
 ```
 
 ### Markdown
 
-```
-pluto detect-files -o markdown
+```shell
+$ pluto detect-files -o markdown
 |   NAME    |   NAMESPACE    |    KIND    |      VERSION       | REPLACEMENT | 
DEPRECATED | DEPRECATED IN | REMOVED | REMOVED IN |
 
|-----------|----------------|------------|--------------------|-------------|------------|---------------|---------|------------|
 | utilities | <UNKNOWN>      | Deployment | extensions/v1beta1 | apps/v1     | 
true       | v1.9.0        | true    | v1.16.0    |
@@ -92,8 +93,8 @@
 | utilities | yaml-namespace | Deployment | extensions/v1beta1 | apps/v1     | 
true       | v1.9.0        | true    | v1.16.0    |
 ```
 
-```
-pluto detect-files -o markdown --columns NAMESPACE,NAME,DEPRECATED 
IN,DEPRECATED,REPLACEMENT,VERSION,KIND,COMPONENT,FILEPATH
+```shell
+$ pluto detect-files -o markdown --columns NAMESPACE,NAME,DEPRECATED 
IN,DEPRECATED,REPLACEMENT,VERSION,KIND,COMPONENT,FILEPATH
 |     NAME      |    NAMESPACE    |    KIND    |      VERSION       | 
REPLACEMENT | DEPRECATED | DEPRECATED IN | COMPONENT |   FILEPATH   |
 
|---------------|-----------------|------------|--------------------|-------------|------------|---------------|-----------|--------------|
 | some name one | pluto-namespace | Deployment | extensions/v1beta1 | apps/v1  
   | true       | v1.9.0        | foo       | path-to-file |
@@ -102,17 +103,20 @@
 
 ### CSV
 
-```
-pluto detect-helm -o csv
+```shell
+$ pluto detect-helm -o csv
 NAME,NAMESPACE,KIND,VERSION,REPLACEMENT,DEPRECATED,DEPRECATED 
IN,REMOVED,REMOVED IN
-some name 
one,pluto-namespace,Deployment,extensions/v1beta1,apps/v1,true,v1.9.0,true,v1.16.0
-some name 
two,<UNKNOWN>,Deployment,extensions/v1beta1,apps/v1,true,v1.9.0,true,v1.16.0
+deploy1,pluto-namespace,Deployment,extensions/v1beta1,apps/v1,true,v1.9.0,true,v1.16.0
+deploy1,other-namespace,Deployment,extensions/v1beta1,apps/v1,true,v1.9.0,true,v1.16.0
+```
 
-pluto detect-helm -o csv --columns "NAMESPACE,NAME,DEPRECATED 
IN,DEPRECATED,REPLACEMENT,VERSION,KIND,COMPONENT,FILEPATH"
-NAME,NAMESPACE,KIND,VERSION,REPLACEMENT,DEPRECATED,DEPRECATED 
IN,COMPONENT,FILEPATH
-some name 
one,pluto-namespace,Deployment,extensions/v1beta1,apps/v1,true,v1.9.0,foo,path-to-file
-some name 
two,<UNKNOWN>,Deployment,extensions/v1beta1,apps/v1,true,v1.9.0,foo,<UNKNOWN>
+```shell
+$ pluto detect-helm -o csv --columns "KIND,NAMESPACE,NAME,VERSION,REPLACEMENT"
+KIND,NAMESPACE,NAME,VERSION,REPLACEMENT
+Deployment,pluto-namespace,deploy1,extensions/v1beta1,apps/v1
+Deployment,other-namespace,deploy1,extensions/v1beta1,apps/v1
 ```
+
 ## CI Pipelines
 
 Pluto has specific exit codes that is uses to indicate certain results:
@@ -123,7 +127,7 @@
 
 If you wish to bypass the generation of exit codes 2 and 3, you may do so with 
two different flags:
 
-```
+```shell
 --ignore-deprecations              Ignore the default behavior to exit 2 if 
deprecated apiVersions are found.
 --ignore-removals                  Ignore the default behavior to exit 3 if 
removed apiVersions are found.
 ```
@@ -138,7 +142,7 @@
 
 For example:
 
-```
+```shell
 $ pluto detect-helm --target-versions k8s=v1.15.0
 No output to display
 
@@ -162,7 +166,7 @@
 
 The file should look something like this:
 
-```
+```yaml
 target-versions:
   custom: v1.0.0
 deprecated-versions:
@@ -176,11 +180,12 @@
 
 You can test that it's working by using `list-versions`:
 
-```
+```shell
 $ pluto list-versions -f new.yaml
 KIND                           NAME                                   
DEPRECATED IN   REMOVED IN   REPLACEMENT   COMPONENT
 AnotherCRD                     someother/v1beta1                      v1.9.0   
       v1.16.0      apps/v1       custom
 ```
+
 _NOTE: This output is truncated to show only the additional version. Normally 
this will include the defaults as well_
 
 The `target-versions` field in this custom file will set the default target 
version for that component. You can still override this with `--target-versions 
custom=vX.X.X` when you run Pluto.
@@ -213,3 +218,4 @@
 | --output              | PLUTO_OUTPUT              |
 | --columns             | PLUTO_COLUMNS             |
 | --components          | PLUTO_COMPONENTS          |
+| --no-headers          | PLUTO_NO_HEADERS          |
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pluto-5.12.0/go.mod new/pluto-5.13.0/go.mod
--- old/pluto-5.12.0/go.mod     2023-01-04 21:59:36.000000000 +0100
+++ new/pluto-5.13.0/go.mod     2023-02-04 14:57:00.000000000 +0100
@@ -1,6 +1,6 @@
 module github.com/fairwindsops/pluto/v5
 
-go 1.18
+go 1.19
 
 require (
        github.com/mattn/go-runewidth v0.0.14 // indirect
@@ -15,7 +15,7 @@
        golang.org/x/sys v0.1.0 // indirect
        golang.org/x/text v0.4.0 // indirect
        gopkg.in/yaml.v3 v3.0.1
-       helm.sh/helm/v3 v3.10.1
+       helm.sh/helm/v3 v3.10.3
        k8s.io/api v0.25.4
        k8s.io/apimachinery v0.25.4
        k8s.io/client-go v0.25.3
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pluto-5.12.0/go.sum new/pluto-5.13.0/go.sum
--- old/pluto-5.12.0/go.sum     2023-01-04 21:59:36.000000000 +0100
+++ new/pluto-5.13.0/go.sum     2023-02-04 14:57:00.000000000 +0100
@@ -831,8 +831,8 @@
 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=
-helm.sh/helm/v3 v3.10.1 h1:uTnNlYx8QcTSNA4ZJ50Llwife4CSohUY4ehumyVf2QE=
-helm.sh/helm/v3 v3.10.1/go.mod h1:CXOcs02AYvrlPMWARNYNRgf2rNP7gLJQsi/Ubd4EDrI=
+helm.sh/helm/v3 v3.10.3 h1:wL7IUZ7Zyukm5Kz0OUmIFZgKHuAgByCrUcJBtY0kDyw=
+helm.sh/helm/v3 v3.10.3/go.mod h1:CXOcs02AYvrlPMWARNYNRgf2rNP7gLJQsi/Ubd4EDrI=
 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=
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pluto-5.12.0/pkg/api/output.go 
new/pluto-5.13.0/pkg/api/output.go
--- old/pluto-5.12.0/pkg/api/output.go  2023-01-04 21:59:36.000000000 +0100
+++ new/pluto-5.13.0/pkg/api/output.go  2023-02-04 14:57:00.000000000 +0100
@@ -55,6 +55,7 @@
        IgnoreDeprecations bool              `json:"-" yaml:"-"`
        IgnoreRemovals     bool              `json:"-" yaml:"-"`
        OnlyShowRemoved    bool              `json:"-" yaml:"-"`
+       NoHeaders          bool              `json:"-" yaml:"-"`
        OutputFormat       string            `json:"-" yaml:"-"`
        TargetVersions     map[string]string `json:"target-versions,omitempty" 
yaml:"target-versions,omitempty"`
        DeprecatedVersions []Version         `json:"-" yaml:"-"`
@@ -188,15 +189,17 @@
        }
        sort.Ints(columnIndexes)
 
-       var headers string
-       for _, k := range columnIndexes {
-               if k == 0 {
-                       headers = fmt.Sprintf("%s\t", columns[k].header())
-               } else {
-                       headers = fmt.Sprintf("%s %s\t", headers, 
columns[k].header())
+       if !instance.NoHeaders {
+               var headers string
+               for _, k := range columnIndexes {
+                       if k == 0 {
+                               headers = fmt.Sprintf("%s\t", 
columns[k].header())
+                       } else {
+                               headers = fmt.Sprintf("%s %s\t", headers, 
columns[k].header())
+                       }
                }
+               _, _ = fmt.Fprintln(w, headers)
        }
-       _, _ = fmt.Fprintln(w, headers)
 
        var rows string
        for _, o := range instance.Outputs {
@@ -230,12 +233,14 @@
        }
        sort.Ints(columnIndexes)
 
-       var headers []string
-       for _, k := range columnIndexes {
-               headers = append(headers, columns[k].header())
-       }
+       if !instance.NoHeaders {
+               var headers []string
+               for _, k := range columnIndexes {
+                       headers = append(headers, columns[k].header())
+               }
 
-       table.SetHeader(headers)
+               table.SetHeader(headers)
+       }
 
        for _, o := range instance.Outputs {
                var row []string
@@ -263,12 +268,14 @@
 
        var csvData [][]string
 
-       var headers []string
-       for _, k := range columnIndexes {
-               headers = append(headers, columns[k].header())
-       }
+       if !instance.NoHeaders {
+               var headers []string
+               for _, k := range columnIndexes {
+                       headers = append(headers, columns[k].header())
+               }
 
-       csvData = append(csvData, headers)
+               csvData = append(csvData, headers)
+       }
 
        for _, o := range instance.Outputs {
                var row []string
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pluto-5.12.0/pkg/api/output_test.go 
new/pluto-5.13.0/pkg/api/output_test.go
--- old/pluto-5.12.0/pkg/api/output_test.go     2023-01-04 21:59:36.000000000 
+0100
+++ new/pluto-5.13.0/pkg/api/output_test.go     2023-02-04 14:57:00.000000000 
+0100
@@ -316,6 +316,26 @@
        // <UNKNOWN>,some name 
two,v1.9.0,true,apps/v1,extensions/v1beta1,Deployment,foo,<UNKNOWN>
 }
 
+func ExampleInstance_DisplayOutput_csv_noHeaders() {
+       instance := &Instance{
+               TargetVersions: map[string]string{
+                       "foo": "v1.16.0",
+               },
+               Outputs: []*Output{
+                       testOutput1,
+                       testOutput2,
+               },
+               Components:   []string{"foo"},
+               OutputFormat: "csv",
+               NoHeaders:    true,
+       }
+       _ = instance.DisplayOutput()
+
+       // Output:
+       // some name 
one,pluto-namespace,Deployment,extensions/v1beta1,apps/v1,true,v1.9.0,true,v1.16.0
+       // some name 
two,<UNKNOWN>,Deployment,extensions/v1beta1,apps/v1,true,v1.9.0,true,v1.16.0
+}
+
 func ExampleInstance_DisplayOutput_noOutput() {
        instance := &Instance{
                TargetVersions: map[string]string{
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pluto-5.12.0/pkg/api/versions.go 
new/pluto-5.13.0/pkg/api/versions.go
--- old/pluto-5.12.0/pkg/api/versions.go        2023-01-04 21:59:36.000000000 
+0100
+++ new/pluto-5.13.0/pkg/api/versions.go        2023-02-04 14:57:00.000000000 
+0100
@@ -244,12 +244,7 @@
 // in a specific format
 func (instance *Instance) PrintVersionList(outputFormat string) error {
        switch outputFormat {
-       case "normal":
-               err := instance.printVersionsTabular()
-               if err != nil {
-                       return err
-               }
-       case "wide":
+       case "normal", "wide":
                err := instance.printVersionsTabular()
                if err != nil {
                        return err
@@ -275,7 +270,7 @@
                }
                fmt.Println(string(data))
        default:
-               errText := "The output format must one of (normal|json|yaml)"
+               errText := "The output format must one of 
(normal|wide|json|yaml)"
                fmt.Println(errText)
                return fmt.Errorf(errText)
        }
@@ -286,7 +281,9 @@
        w := new(tabwriter.Writer)
        w.Init(os.Stdout, 0, 15, 2, padChar, 0)
 
-       _, _ = fmt.Fprintln(w, "KIND\t NAME\t DEPRECATED IN\t REMOVED IN\t 
REPLACEMENT\t COMPONENT\t")
+       if !instance.NoHeaders {
+               fmt.Fprintln(w, "KIND\t NAME\t DEPRECATED IN\t REMOVED IN\t 
REPLACEMENT\t COMPONENT\t")
+       }
 
        for _, version := range instance.DeprecatedVersions {
                deprecatedIn := version.DeprecatedIn
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pluto-5.12.0/pkg/api/versions_test.go 
new/pluto-5.13.0/pkg/api/versions_test.go
--- old/pluto-5.12.0/pkg/api/versions_test.go   2023-01-04 21:59:36.000000000 
+0100
+++ new/pluto-5.13.0/pkg/api/versions_test.go   2023-02-04 14:57:00.000000000 
+0100
@@ -440,6 +440,21 @@
        // testkind---- testname------------ n/a------------ n/a--------- 
n/a---------- custom-----
 }
 
+func ExampleInstance_printVersionsTabular_noHeaders() {
+       instance := Instance{
+               DeprecatedVersions: []Version{
+                       testVersionDeployment,
+                       {Kind: "testkind", Name: "testname", DeprecatedIn: "", 
RemovedIn: "", Component: "custom"},
+               },
+               NoHeaders: true,
+       }
+       _ = instance.printVersionsTabular()
+
+       // Output:
+       // Deployment-- extensions/v1beta1-- v1.9.0-- v1.16.0-- apps/v1-- 
k8s-----
+       // testkind---- testname------------ n/a----- n/a------ n/a------ 
custom--
+}
+
 func ExampleInstance_PrintVersionList_json() {
        instance := Instance{
                DeprecatedVersions: []Version{testVersionDeployment},
@@ -495,7 +510,7 @@
        _ = instance.PrintVersionList("foo")
 
        // Output:
-       // The output format must one of (normal|json|yaml)
+       // The output format must one of (normal|wide|json|yaml)
 }
 
 func Test_isDuplicate(t *testing.T) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pluto-5.12.0/pkg/discovery-api/discovery_api.go 
new/pluto-5.13.0/pkg/discovery-api/discovery_api.go
--- old/pluto-5.12.0/pkg/discovery-api/discovery_api.go 2023-01-04 
21:59:36.000000000 +0100
+++ new/pluto-5.13.0/pkg/discovery-api/discovery_api.go 2023-02-04 
14:57:00.000000000 +0100
@@ -38,10 +38,10 @@
        "k8s.io/client-go/discovery"
        "k8s.io/client-go/dynamic"
        "k8s.io/client-go/rest"
-       "k8s.io/client-go/tools/clientcmd"
        "k8s.io/klog/v2"
 
        "github.com/fairwindsops/pluto/v5/pkg/api"
+       kube "github.com/fairwindsops/pluto/v5/pkg/kube"
 )
 
 // DiscoveryClient is the declaration to hold objects needed for 
client-go/discovery.
@@ -50,16 +50,17 @@
        restConfig      *rest.Config
        DiscoveryClient discovery.DiscoveryInterface
        Instance        *api.Instance
+       namespace       string
 }
 
 // NewDiscoveryClient returns a new struct with config portions complete.
-func NewDiscoveryClient(instance *api.Instance) (*DiscoveryClient, error) {
+func NewDiscoveryClient(namespace string, kubeContext string, instance 
*api.Instance) (*DiscoveryClient, error) {
        cl := &DiscoveryClient{
                Instance: instance,
        }
 
        var err error
-       cl.restConfig, err = NewRestClientConfig(rest.InClusterConfig)
+       cl.ClientSet, cl.restConfig, err = 
kube.GetKubeDynamicClient(kubeContext)
        if err != nil {
                return nil, err
        }
@@ -68,41 +69,13 @@
                return nil, err
        }
 
-       cl.ClientSet, err = dynamic.NewForConfig(cl.restConfig)
-       if err != nil {
-               return nil, err
-       }
-       return cl, nil
-}
-
-// NewRestClientConfig returns a new Rest Client config portions complete.
-func NewRestClientConfig(inClusterFn func() (*rest.Config, error)) 
(*rest.Config, error) {
+       cl.namespace = namespace
 
-       if restConfig, err := inClusterFn(); err == nil {
-               return restConfig, nil
-       }
-
-       pathOptions := clientcmd.NewDefaultPathOptions()
-
-       config, err := pathOptions.GetStartingConfig()
-       if err != nil {
-               return nil, err
-       }
-
-       configOverrides := clientcmd.ConfigOverrides{}
-
-       clientConfig := clientcmd.NewDefaultClientConfig(*config, 
&configOverrides)
-       restConfig, err := clientConfig.ClientConfig()
-       if err != nil {
-               return nil, err
-       }
-
-       return restConfig, nil
+       return cl, nil
 }
 
 // GetApiResources discovers the api-resources for a cluster
 func (cl *DiscoveryClient) GetApiResources() error {
-
        resourcelist, err := cl.DiscoveryClient.ServerPreferredResources()
        if err != nil {
                if apierrors.IsNotFound(err) {
@@ -117,6 +90,9 @@
        gvrs := []schema.GroupVersionResource{}
        for _, rl := range resourcelist {
                for i := range rl.APIResources {
+                       if cl.namespace != "" && !rl.APIResources[i].Namespaced 
{
+                               continue
+                       }
                        gv, _ := schema.ParseGroupVersion(rl.GroupVersion)
                        ResourceName := rl.APIResources[i].Name
                        g := schema.GroupVersionResource{Group: gv.Group, 
Version: gv.Version, Resource: ResourceName}
@@ -126,7 +102,11 @@
 
        var results []map[string]interface{}
        for _, g := range gvrs {
-               ri := cl.ClientSet.Resource(g)
+               nri := cl.ClientSet.Resource(g)
+               var ri dynamic.ResourceInterface = nri
+               if cl.namespace != "" {
+                       ri = nri.Namespace(cl.namespace)
+               }
                klog.V(2).Infof("Retrieving : %s.%s.%s", g.Resource, g.Version, 
g.Group)
                rs, err := ri.List(context.TODO(), metav1.ListOptions{})
                if err != nil {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pluto-5.12.0/pkg/finder/finder.go 
new/pluto-5.13.0/pkg/finder/finder.go
--- old/pluto-5.12.0/pkg/finder/finder.go       2023-01-04 21:59:36.000000000 
+0100
+++ new/pluto-5.13.0/pkg/finder/finder.go       2023-02-04 14:57:00.000000000 
+0100
@@ -30,7 +30,6 @@
 
 import (
        "fmt"
-       "io/ioutil"
        "os"
        "path/filepath"
 
@@ -122,7 +121,7 @@
 // it is an api-versioned Kubernetes object.
 // Returns the File object if it is.
 func (dir *Dir) CheckForAPIVersion(file string) ([]*api.Output, error) {
-       data, err := ioutil.ReadFile(file)
+       data, err := os.ReadFile(file)
        if err != nil {
                return nil, err
        }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pluto-5.12.0/pkg/helm/helm.go 
new/pluto-5.13.0/pkg/helm/helm.go
--- old/pluto-5.12.0/pkg/helm/helm.go   2023-01-04 21:59:36.000000000 +0100
+++ new/pluto-5.13.0/pkg/helm/helm.go   2023-02-04 14:57:00.000000000 +0100
@@ -43,12 +43,13 @@
        "k8s.io/klog/v2"
 
        "github.com/fairwindsops/pluto/v5/pkg/api"
+       kube "github.com/fairwindsops/pluto/v5/pkg/kube"
 )
 
 // Helm represents all current releases that we can find in the cluster
 type Helm struct {
        Releases  []*Release
-       Kube      *kube
+       Kube      *kube.Kube
        Namespace string
        Instance  *api.Instance
 }
@@ -73,8 +74,8 @@
 }
 
 // NewHelm returns a basic helm struct with the version of helm requested
-func NewHelm(namespace, kubeContext string, instance *api.Instance) (*Helm, 
error) {
-       config, err := getConfigInstance(kubeContext)
+func NewHelm(namespace string, kubeContext string, instance *api.Instance) 
(*Helm, error) {
+       config, err := kube.GetConfigInstance(kubeContext)
        if err != nil {
                return nil, err
        }
@@ -88,9 +89,9 @@
 
 // NewHelmWithKubeClient returns a helm struct with version of helm requested
 // and uses the passed in kube client as the cluster to operate on
-func NewHelmWithKubeClient(version, store, namespace string, instance 
*api.Instance, kubeClient kubernetes.Interface) *Helm {
+func NewHelmWithKubeClient(version string, store string, namespace string, 
instance *api.Instance, kubeClient kubernetes.Interface) *Helm {
        return &Helm{
-               Kube: &kube{
+               Kube: &kube.Kube{
                        Client: kubeClient,
                },
                Namespace: namespace,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pluto-5.12.0/pkg/helm/helm_test.go 
new/pluto-5.13.0/pkg/helm/helm_test.go
--- old/pluto-5.12.0/pkg/helm/helm_test.go      2023-01-04 21:59:36.000000000 
+0100
+++ new/pluto-5.13.0/pkg/helm/helm_test.go      2023-02-04 14:57:00.000000000 
+0100
@@ -33,10 +33,13 @@
        "testing"
 
        "github.com/fairwindsops/pluto/v5/pkg/api"
+       kube "github.com/fairwindsops/pluto/v5/pkg/kube"
        "github.com/stretchr/testify/assert"
        v1 "k8s.io/api/core/v1"
        metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
        "k8s.io/client-go/kubernetes"
+       testclient "k8s.io/client-go/kubernetes/fake"
+       _ "k8s.io/client-go/plugin/pkg/client/auth"
        "k8s.io/client-go/rest"
 )
 
@@ -150,6 +153,13 @@
        }
 )
 
+func getMockConfigInstance() *kube.Kube {
+       kubeClient := &kube.Kube{
+               Client: testclient.NewSimpleClientset(),
+       }
+       return kubeClient
+}
+
 func newMockHelm(namespace string) *Helm {
        return &Helm{
                Namespace: namespace,
@@ -185,10 +195,10 @@
        }
 }
 
-func newBadKubeClient() (k *kube) {
+func newBadKubeClient() (k *kube.Kube) {
        conf := new(rest.Config)
        conf.Host = "127.0.0.1:9999"
-       k = new(kube)
+       k = new(kube.Kube)
        k.Client, _ = kubernetes.NewForConfig(conf)
        return
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pluto-5.12.0/pkg/helm/kube.go 
new/pluto-5.13.0/pkg/helm/kube.go
--- old/pluto-5.12.0/pkg/helm/kube.go   2023-01-04 21:59:36.000000000 +0100
+++ new/pluto-5.13.0/pkg/helm/kube.go   1970-01-01 01:00:00.000000000 +0100
@@ -1,84 +0,0 @@
-// Copyright 2022 FairwindsOps Inc
-//
-// 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.
-
-// Copyright 2020 Fairwinds
-//
-// 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 helm
-
-import (
-       "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"
-)
-
-type kube struct {
-       Client kubernetes.Interface
-}
-
-var kubeClient *kube
-var once sync.Once
-
-// GetConfigInstance returns a Kubernetes interface based on the current 
configuration
-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: client,
-                       }
-               }
-       })
-       if err != nil {
-               return nil, err
-       }
-       return kubeClient, nil
-}
-
-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 {
-               return nil, err
-       }
-       clientset, err := kubernetes.NewForConfig(kubeConfig)
-       if err != nil {
-               return nil, err
-       }
-       return clientset, nil
-}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pluto-5.12.0/pkg/helm/kube_test.go 
new/pluto-5.13.0/pkg/helm/kube_test.go
--- old/pluto-5.12.0/pkg/helm/kube_test.go      2023-01-04 21:59:36.000000000 
+0100
+++ new/pluto-5.13.0/pkg/helm/kube_test.go      1970-01-01 01:00:00.000000000 
+0100
@@ -1,70 +0,0 @@
-// Copyright 2022 FairwindsOps Inc
-//
-// 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 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 {
-       kubeClient = &kube{
-               Client: testclient.NewSimpleClientset(),
-       }
-       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.12.0/pkg/helm/testdata/kubeconfig 
new/pluto-5.13.0/pkg/helm/testdata/kubeconfig
--- old/pluto-5.12.0/pkg/helm/testdata/kubeconfig       2023-01-04 
21:59:36.000000000 +0100
+++ new/pluto-5.13.0/pkg/helm/testdata/kubeconfig       1970-01-01 
01:00:00.000000000 +0100
@@ -1,19 +0,0 @@
-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.12.0/pkg/helm/testdata/kubeconfig_invalid 
new/pluto-5.13.0/pkg/helm/testdata/kubeconfig_invalid
--- old/pluto-5.12.0/pkg/helm/testdata/kubeconfig_invalid       2023-01-04 
21:59:36.000000000 +0100
+++ new/pluto-5.13.0/pkg/helm/testdata/kubeconfig_invalid       1970-01-01 
01:00:00.000000000 +0100
@@ -1,19 +0,0 @@
-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
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pluto-5.12.0/pkg/kube/kube.go 
new/pluto-5.13.0/pkg/kube/kube.go
--- old/pluto-5.12.0/pkg/kube/kube.go   1970-01-01 01:00:00.000000000 +0100
+++ new/pluto-5.13.0/pkg/kube/kube.go   2023-02-04 14:57:00.000000000 +0100
@@ -0,0 +1,105 @@
+// Copyright 2022 FairwindsOps Inc
+//
+// 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.
+
+// Copyright 2020 Fairwinds
+//
+// 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 helm
+
+import (
+       "sync"
+
+       "k8s.io/client-go/dynamic"
+       "k8s.io/client-go/kubernetes"
+       "k8s.io/client-go/rest"
+       "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"
+)
+
+type Kube struct {
+       Client kubernetes.Interface
+}
+
+var kubeClient *Kube
+var once sync.Once
+
+// GetConfigInstance returns a Pluto Kubernetes interface based on the current 
configuration
+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: client,
+                       }
+               }
+       })
+       if err != nil {
+               return nil, err
+       }
+       return kubeClient, nil
+}
+
+// GetKubeClient returns a Kubernetes.Interface based on the current 
configuration
+func GetKubeClient(kubeContext string) (kubernetes.Interface, error) {
+       if kubeContext != "" {
+               klog.V(3).Infof("using kube context: %s", kubeContext)
+       }
+
+       config, err := config.GetConfigWithContext(kubeContext)
+       if err != nil {
+               return nil, err
+       }
+
+       clientset, err := kubernetes.NewForConfig(config)
+       if err != nil {
+               return nil, err
+       }
+       return clientset, nil
+}
+
+// GetKubeDynamicClient returns a dynamic.Interface, rest.Config based on the 
current configuration
+func GetKubeDynamicClient(kubeContext string) (dynamic.Interface, 
*rest.Config, error) {
+       if kubeContext != "" {
+               klog.V(3).Infof("using kube context: %s", kubeContext)
+       }
+
+       config, err := config.GetConfigWithContext(kubeContext)
+       if err != nil {
+               return nil, nil, err
+       }
+
+       clientset, err := dynamic.NewForConfig(config)
+       if err != nil {
+               return nil, nil, err
+       }
+       return clientset, config, nil
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pluto-5.12.0/pkg/kube/kube_test.go 
new/pluto-5.13.0/pkg/kube/kube_test.go
--- old/pluto-5.12.0/pkg/kube/kube_test.go      1970-01-01 01:00:00.000000000 
+0100
+++ new/pluto-5.13.0/pkg/kube/kube_test.go      2023-02-04 14:57:00.000000000 
+0100
@@ -0,0 +1,61 @@
+// Copyright 2022 FairwindsOps Inc
+//
+// 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 helm
+
+import (
+       "os"
+       "testing"
+
+       "github.com/stretchr/testify/assert"
+)
+
+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.12.0/pkg/kube/testdata/kubeconfig 
new/pluto-5.13.0/pkg/kube/testdata/kubeconfig
--- old/pluto-5.12.0/pkg/kube/testdata/kubeconfig       1970-01-01 
01:00:00.000000000 +0100
+++ new/pluto-5.13.0/pkg/kube/testdata/kubeconfig       2023-02-04 
14:57:00.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.12.0/pkg/kube/testdata/kubeconfig_invalid 
new/pluto-5.13.0/pkg/kube/testdata/kubeconfig_invalid
--- old/pluto-5.12.0/pkg/kube/testdata/kubeconfig_invalid       1970-01-01 
01:00:00.000000000 +0100
+++ new/pluto-5.13.0/pkg/kube/testdata/kubeconfig_invalid       2023-02-04 
14:57:00.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
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/pluto-5.12.0/versions.yaml 
new/pluto-5.13.0/versions.yaml
--- old/pluto-5.12.0/versions.yaml      2023-01-04 21:59:36.000000000 +0100
+++ new/pluto-5.13.0/versions.yaml      2023-02-04 14:57:00.000000000 +0100
@@ -284,6 +284,7 @@
   - version: storage.k8s.io/v1beta1
     kind: CSIStorageCapacity
     deprecated-in: v1.24.0
+    removed-in: v1.27.0
     replacement-api: storage.k8s.io/v1
     component: k8s
   - version: storage.k8s.io/v1beta1

++++++ vendor.tar.gz ++++++
/work/SRC/openSUSE:Factory/pluto/vendor.tar.gz 
/work/SRC/openSUSE:Factory/.pluto.new.4462/vendor.tar.gz differ: char 5, line 1

Reply via email to