From 0c29696eef094d87c2526201125a3043f927e545 Mon Sep 17 00:00:00 2001 From: Brad Davidson Date: Tue, 12 Nov 2024 21:11:08 +0000 Subject: [PATCH] Fix handling of wrapped subcommands when run with a path Signed-off-by: Brad Davidson --- pkg/configfilearg/defaultparser.go | 5 +++-- pkg/configfilearg/defaultparser_test.go | 22 +++++++++++++++++++++- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/pkg/configfilearg/defaultparser.go b/pkg/configfilearg/defaultparser.go index 85d553bc08e8..608857c408ce 100644 --- a/pkg/configfilearg/defaultparser.go +++ b/pkg/configfilearg/defaultparser.go @@ -1,6 +1,7 @@ package configfilearg import ( + "path/filepath" "slices" "github.com/k3s-io/k3s/pkg/cli/cmds" @@ -31,10 +32,10 @@ func MustFindString(args []string, target string, commandsWithoutOverride ...str // Some subcommands such as `k3s ctr` or just `ctr` need to be extracted out even to // provide version or help text, and we cannot short-circuit loading the config file. For // these commands, treat failure to load the config file as a warning instead of a fatal. - if len(args) > 0 && args[0] == version.Program { + if len(args) > 0 && filepath.Base(args[0]) == version.Program { args = args[1:] } - if len(args) > 0 && slices.Contains(commandsWithoutOverride, args[0]) { + if len(args) > 0 && slices.Contains(commandsWithoutOverride, filepath.Base(args[0])) { overrideFlags = nil } diff --git a/pkg/configfilearg/defaultparser_test.go b/pkg/configfilearg/defaultparser_test.go index 92002a8cb04a..1fbf64949bfb 100644 --- a/pkg/configfilearg/defaultparser_test.go +++ b/pkg/configfilearg/defaultparser_test.go @@ -124,12 +124,32 @@ func Test_UnitMustFindString(t *testing.T) { teardown: func() error { return os.Unsetenv("K3S_CONFIG_FILE") }, }, { - name: "Override flag is not returned for specific subcommands", + name: "Override flag is not returned for specific subcommands with full path", + args: []string{"/usr/local/bin/k3s", "ctr", "--foo", "bar", "--version"}, + target: "token", + + want: "12345", + + setup: func() error { return os.Setenv("K3S_CONFIG_FILE", "./testdata/defaultdata.yaml") }, + teardown: func() error { return os.Unsetenv("K3S_CONFIG_FILE") }, + }, + { + name: "Override flag is not returned for wrapped commands", args: []string{"kubectl", "--foo", "bar", "--help"}, target: "token", want: "12345", + setup: func() error { return os.Setenv("K3S_CONFIG_FILE", "./testdata/defaultdata.yaml") }, + teardown: func() error { return os.Unsetenv("K3S_CONFIG_FILE") }, + }, + { + name: "Override flag is not returned for wrapped commands with full path", + args: []string{"/usr/local/bin/kubectl", "--foo", "bar", "--help"}, + target: "token", + + want: "12345", + setup: func() error { return os.Setenv("K3S_CONFIG_FILE", "./testdata/defaultdata.yaml") }, teardown: func() error { return os.Unsetenv("K3S_CONFIG_FILE") }, },