From 382e1992df31211176de71f38aafe3f0f0950357 Mon Sep 17 00:00:00 2001 From: ulofiai Date: Sat, 8 Aug 2026 23:41:31 +0800 Subject: [PATCH] fix: preserve plugin args after kube TLS boolean flag Signed-off-by: ulofiai --- pkg/cmd/load_plugins.go | 10 ++++++++++ pkg/cmd/plugin_test.go | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+) diff --git a/pkg/cmd/load_plugins.go b/pkg/cmd/load_plugins.go index 0c74ba51d..a0b05e227 100644 --- a/pkg/cmd/load_plugins.go +++ b/pkg/cmd/load_plugins.go @@ -191,6 +191,16 @@ func manuallyProcessArgs(args []string) ([]string, []string) { switch a := args[i]; a { case "--debug": known = append(known, a) + case "--kube-insecure-skip-tls-verify": + known = append(known, a) + // Boolean flags do not require a value. Only consume the next + // argument when it is an explicit boolean value. + if i+1 < len(args) { + if _, err := strconv.ParseBool(args[i+1]); err == nil { + known[len(known)-1] += "=" + args[i+1] + i++ + } + } case isKnown(a): known = append(known, a) i++ diff --git a/pkg/cmd/plugin_test.go b/pkg/cmd/plugin_test.go index 6a7980119..f1ff2cae5 100644 --- a/pkg/cmd/plugin_test.go +++ b/pkg/cmd/plugin_test.go @@ -79,6 +79,43 @@ func TestManuallyProcessArgs(t *testing.T) { } } +func TestManuallyProcessArgsBooleanFlag(t *testing.T) { + tests := []struct { + name string + input []string + expectKnown []string + expectUnknown []string + }{ + { + name: "bare boolean flag", + input: []string{"--kube-insecure-skip-tls-verify", "--version", "1.0.3"}, + expectKnown: []string{"--kube-insecure-skip-tls-verify"}, + expectUnknown: []string{"--version", "1.0.3"}, + }, + { + name: "separate boolean value", + input: []string{"--kube-insecure-skip-tls-verify", "false", "--version", "1.0.3"}, + expectKnown: []string{"--kube-insecure-skip-tls-verify=false"}, + expectUnknown: []string{"--version", "1.0.3"}, + }, + { + name: "inline boolean value", + input: []string{"--kube-insecure-skip-tls-verify=true", "--version", "1.0.3"}, + expectKnown: []string{"--kube-insecure-skip-tls-verify=true"}, + expectUnknown: []string{"--version", "1.0.3"}, + }, + } + + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + known, unknown := manuallyProcessArgs(tt.input) + + assert.Equal(t, tt.expectKnown, known) + assert.Equal(t, tt.expectUnknown, unknown) + }) + } +} + func TestLoadCLIPlugins(t *testing.T) { settings.PluginsDirectory = "testdata/helmhome/helm/plugins" settings.RepositoryConfig = "testdata/helmhome/helm/repositories.yaml"